ラベル emacs の投稿を表示しています。 すべての投稿を表示
ラベル emacs の投稿を表示しています。 すべての投稿を表示

2021年4月18日日曜日

[emacs][cygwin] Visual Studioのemacs / emacsclient 連携設定

Visual Studioの外部ツール機能を利用して、Visual Studioで開いているファイルをショートカットキー一発で(orメニューから)emacs/emacsclientで開くことができる設定を紹介します。カーソル位置がemacsに引き継がれるのが地味に便利です。職場の都合などでビルド環境がVisual Studioだが、ビルド以外の作業は使い慣れたemacsを利用したい、という方にお勧めです。

今の時代になぜWSLでなくcygwinなのか?という疑問をもたれる方がいると思いますが、このエントリはWSLがリリース前にメモを作って、ずっと公開しないまま眠っていたものです。せっかくの情報なので時代遅れを承知の上公開します。

 

前提:

"C:\cygwin64"以下にcygwinをインストールし、cygwin上でemacs/emacsclientを利用している、自分の環境を前提に設定を紹介します。cygwinのインストールディレクトリ、及び、NTEmacs、gnupackなど異なる環境のemacsを利用している方は適宜ディレクトリやexeのパス設定を変更して下さい。

設定:

メニューの「ツール」-「外部ツール」にemacs/emacsclientを登録する。
  • emacsを起動するための設定
    • Title: emacs
    • Command: C:\cygwin64\bin\run.exe
    • Arguments: /usr/bin/emacs +$(CurLine):$(CurCol) $(ItemFileName)$(ItemExt) \+$(CurLine):$(CurCol)
    • Initial directory: $(ItemDir)
  • emacsclientを起動するための設定
    • Title: emacsclient
    • Command: C:\cygwin64\bin\run.exe
    • Arguments: /usr/bin/emacsclient +$(CurLine):$(CurCol) $(ItemFileName)$(ItemExt) \+$(CurLine):$(CurCol)
    • Initial directory: $(ItemDir)

  • (2021.04.18追記)cygwinのアップデートにより(?)、Argumentのコマンドをemacsclientからemacsclient-X11に変更しない起動できない状態になった。
    • Arguments: /usr/bin/emacsclient-X11 +$(CurLine):$(CurCol) $(ItemFileName)$(ItemExt)


余談:

この設定はTortoiseSVNのVisualStudio連携設定ページの情報を参照したときに、emacsも同じように設定できるのでは、と思いついたものです。emacs, svnに限らずいろいろと使い道がありそうです。
話がそれますが、Windows上の全てのキー操作をemacsのキーバインドに変更する方法を、以下のエントリで紹介しています。emacs使いの方にとっては便利な設定なのでこちらも是非参照してみてください。
  • [windows][emacs] Windows 8.1上で(特定ユーザーログイン時に)任意のアプリの操作をemacsキーバインドにする方法


  • 参考:

    2016年11月30日水曜日

    [emacs] emacs上のgrep関連機能、複数ファイルの一括置換手順のまとめ

    emacs上でgrep関連の機能を利用する際のTIPSをまとめておきます(よく忘れて調べ直すので…)。

    grepコマンドのオプション

    • 指定ディレクトリ以下のファイルを再帰的に検索
      • -R DIR    シンボリックリンクを辿る
      • -r  DIR    シンボリックリンクは辿らない
    • 検索対象をファイル名でフィルタする
      • --include=GLOB    GLOBにファイル名を指定する。"*.cpp"のようにワイルドカード(*,?,[...])を指定可能
    • 検索対象から指定ファイル・ディレクトリを除外する
      • --exclude=GLOB   GLOBに除外するファイルのファイル名を指定する(ワイルドカード指定可能)。
      • --exclude-dir=DIR DIRに指定されたディレクトリをスキップ

    • 使用例:
      • docディレクトリ以下の.txtを拡張子に持つ全てのファイルを対象に"Test"という文字列を検索
      • % grep Test -R doc --include="*.txt"
      • includeディレクトリとsrcディレクトリ以下で拡張子が.hもしくは.cppのファイルを対象に"typedef"という文字列を検索(同じオプションを複数回指定することができる)
      • % grep typedef -R src -R include --include="*.h" --include="*.cpp"

    *grep*バッファのキーバインディング

    • M-n / TAB
      • (compilation-next-error)次のマッチ箇所へ移動する。
    • n
      • (next-error-no-select)次のマッチ箇所へ移動する。かつ、別バッファに該当ファイルのマッチ箇所が表示される
    • } / M-}
      • (compilation-next-file)同じファイルのマッチ箇所を飛ばして、次のファイルのマッチ箇所へ移動する。
    • M-p / S-TAB
      • (compilation-previous-error)手前のマッチ箇所へ移動する。
    • p
      • (previous-error-no-select)手前のマッチ箇所へ移動する。かつ、別バッファに該当ファイルのマッチ箇所が表示される
    • { / M-{
      • (compilation-previous-file)同じファイルのマッチ箇所を飛ばして、手前のファイルのマッチ箇所へ移動する。
    • g
      • (recompile)再検索
    • q
      • (quit-window)*grep*バッファを閉じる
    • <
      • (beginning-of-buffer)先頭へ移動
    • >
      • (end-of-buffer)末尾へ移動
    • h / ?
      • (describe-mode)ヘルプ。キーバインド一覧が表示される。

    wgrepによる一括置換の手順

    1. 置換元文字列を含むファイルをM-x grepで検索
    2. *grep*バッファでC-c C-p(wgrep-change-to-wgrep-mode)を実行
    3. *grep*バッファ内で必要な編集を加える(replace-stringを実行するなど)
    4. C-x C-s(wgrep-finish-edit)で編集を終了
      • この操作を行っても編集した内容はファイルには書き込まれていない(emacs上で開かれた各ファイルのバッファに未保存の状態で変更が反映されるだけ)。
      • ※編集をキャンセルする場合はC-c C-k (wgrep-abort-changes)
    5. M-x wgrep-save-all-buffersを実行し、更新したファイルバッファをディスク上に保存

    参考

    2015年8月17日月曜日

    [cygwin][emacs] cygwin版emacsでgtagsを使えるようにする方法

    これまでタグジャンプにはctagsを用いていたのですが、gtagsの「呼び出し元も一覧できる」という機能に惹かれてセットアップしてみました。いくつかはまりポイントがあったのでその対応方法も含め、手順を残しておきます。
    cgwin提供のパッケージにはgtagsは含まれていなかったため、自前でビルドすることにしました。

    目次:

    • gatgsの特徴
    • gtagsのインストール手順
    • emacsの設定
    • gtagsの使い方


    gtagsの特徴:

    • 良い点!
      • 関数の呼び出し元を一覧表示しジャンプできる(gtags-find-rtag)
      • 関数だけでなく、ローカル変数を含む任意のシンボルをタグジャンプできる(gtags-find-symbol)
        • 正規表現で一覧絞り込み可能(gtags-find-pattern)
        • 開いているファイルで絞り込み可能(gtags-parsefiile)
      • 特定文字列をファイル名に含むファイルを一覧できる(gtags-find-file)
      • ジャンプした場所をスタックで記憶しており、何個でも遡れることができる(gtags-pop-stack)
        • コールスタックを調査している場合、この機能が非常に役に立ちます。
    • 悪い点…orz
      • ctags(find-tag)ではclass宣言にジャンプできましたが、gtags-find-tagではタグジャンプできませんでした(typedef, struct, enum定義はOKなのですが)…。コンストラクタ・デストラクタしかタグづけされておらず、class宣言の場所はgtags-find-rtagで探し出さないといけない状態です。
        • できる!というかた是非手順をご教示くださいm(_ _)m


    gtagsインストール手順:

    1. ローカルで適当なディレクトリを作って、GNU GLOBAL source code tagging systemからソースコードのglobal-6.5.tar.gzアーカイブをダウンロードします。
      • (参考)DOS and Windows portsport版のglo65s.zipもありますが、cygwin環境でコンパイル&利用する上ではport版を利用する必要はないようです。port版をビルドする際には、以下の手順でconfigureにchmodで実行可能属性を付与する必要があります。
        • % chmod +x configure
          
        • zipを展開しただけだと実行権限がついておらず、configureスクリプトを実行しようとすると以下のようなエラーになります。
          % ./configure
          ./configure: Permission denied.
          
    2. zipアーカイブを展開し、生成されたglobal-6.5ディレクトリに移動
      • % tar xzf global-6.5.tar.gz
        % cd global-6.5
        
      • 全てのファイルがglobal-6.5ディレクトリ以下に展開されます。
    3. ./configureを実行
      • % ./configure
        
      • 足りないライブラリがあればcygwinパッケージでインストールする。自分の環境では以下のライブラリの追加インストールが必要でした。
        • libncurses-devel
      • このパッケージがない状態で./configureを実行すると以下のようなエラーになります。
      • % ./configure
         (...snip...)
        configure: checking "location of ncurses.h file"...
        configure: error: curses library is required but not found.
        If you are not going to use gtags-cscope, please try ./configure --disable-gtagscscope
        
    4. makeと、make installを実行
      • % make
        % make install
        
      • デフォルトでは/usr/local以下にファイルがコピーされます。
    5. 念のため確認
      • % rehash
        % which gtags
        /usr/local/bin/gtags
        % gtags --version
        gtags (GNU GLOBAL) 6.5
        Copyright (c) 2015 Tama Communications Corporation
        License GPLv3+: GNU GPL version 3 or later <http://www.gnu.org/licenses/gpl.html>
        This is free software; you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.
        
      • /usr/local/binにPATHが通っていないと以下のようなエラーになります。
        % which gtags
        gtags: Command not found.
        


    emacsの設定:

    1. gtags.elをload-pathに移動する
      • % cd /usr/share/emacs/site-lisp
        % ln -s /usr/local/share/gtags/gtags.el . 
        
      • load-pathに/usr/local/share/gtagsを追加する方法でも問題はありません。個人的な好みでsymbolic linkを利用しています。
    2. .emacsの編集
      • ;;; gtags ;;;
        (require 'gtags)
        (add-hook 'java-mode-hook (lambda () (gtags-mode 1)))
        (add-hook 'c-mode-hook (lambda () (gtags-mode 1)))
        (add-hook 'c++-mode-hook (lambda () (gtags-mode 1)))
        
    3. キーバインドのカスタマイズ
      • (setq gtags-mode-hook
              '(lambda ()
                 (local-set-key "\C-j\C-t" 'gtags-find-tag)
                 (local-set-key "\C-j\C-h" 'gtags-find-tag-from-here)
                 (local-set-key "\C-j\C-p" 'gtags-find-pattern)
                 (local-set-key "\C-j\C-r" 'gtags-find-rtag)
                 (local-set-key "\C-j\C-s" 'gtags-find-symbol)
                 (local-set-key "\C-j\C-f" 'gtags-find-file)
                 (local-set-key "\C-j\C-l" 'gtags-parse-file)
                 (local-set-key "\C-j\C-j" 'gtags-pop-stack)
                 ))
        (setq gtags-select-mode-hook
              '(lambda ()
                 (local-set-key "\C-j\C-j" 'gtags-pop-stack)
          (local-set-key [127] 'gtags-pop-stack)      ; [DEL]
                 ))
        
      • M-t, M-r, M-s, C-tにバインドする例が紹介されていましたが、個人的に利用するものとバッティングしていため、C-j C-???にマッピングしています。
      • C-tでは不要でしたが、C-j C-jをgtags-pop-stackにバインドするには、gtags-select-mode-hookでの定義も必要でした。


    gtagsの使い方:

    1. ソース群が格納されたディレクトリのルートへ移動してGTAGSファイルを生成する
    2. % cd src
      % gtags -v
      
    3. emacsを起動しgtags-find-tagで関数名を指定し[RET]
      • 初回はGTAGSファイルの場所を聞かれます。gtagsを実行したディレクトリに生成されているファイルを選択します。

    備考:

    cygwin以外の環境(mac, linux)でも同様の手順でセットアップができました。
    cygwin-mountを入れないと動かないかも、という記述を見かけましたが私の(以下の)環境では問題ありませんでした。
    % uname -a
    CYGWIN_NT-6.3 win8 2.2.0(0.289/5/3) 2015-08-03 12:51 x86_64 Cygwin
    


    参考:

    2015年7月19日日曜日

    [cygwin][haskell][emacs] MinGWでcygwinの"/cygdrive"パスにアクセスする裏技(cygwin環境のemacsでflycheckを動作させる方法)

    haskell関連のコマンドはMinGW上でビルドされているため、cygwin環境の"/cygdrive"から始まるパスには対応していません。haskell-hlintから呼び出されるhlintも当然この問題の影響を受けておりemacs関連の設定が適切にされていたとしても、以下のようなエラーが表示されてしまいます。

    ミニバッファに表示されるエラー詳細:

    Suspicious state from syntax checker haskell-hlint: Checker haskell-hlint returned non-zero exit code 1, but no errors from output: hlint.exe: Couldn't find file: /cygdrive/c/Users/Hiroyuki/tmp/flycheck_hello.hs
    

    MinGW関連コマンドで"/cygdrive"から始まるパスを解釈できない問題の回避方法:

    "/cygdrive"から始まるパスをMinGWによってビルドされたバイナリ(hlint)からも解釈できるようになれば、この問題は回避できるのでは?と考え、mklinkを用いて以下の手順でシンボリックリンクを作ってみました。
    C:\> cd \
    C:\> mkdir cygdrive
    C:\> cd cygdrive
    C:\cygdrive> mklink /d C C:\
    
    これが大成功!"C:\CYGDRIVE\C"に"C:\"へのシンボリックリンクを作っておくことでcygwin上の"/cygdrive/c/xxx/yyy"といったパスがMinGW上では"C:\xxx\yyy"として解釈される状態になります。
    この環境ではemacs上でflycheckが正しく動作するようになりました。

    この環境はMinGW関連コマンド全般に適用可能:

    この裏技はMinGW/MSYSでビルドされた任意のコマンドに適用可能なはずです。cygwin環境とMinGW環境が混在していて、MinGW/MSYS関連コマンドの実行に弊害が出ている方は是非お試しいただければ、と思います。

    余談:うまくいかなかった方法(cygwinのマウント機能の利用メモ):

    cygwin環境において"C:"ドライブのルートを"/C"としてマウントする方法もありますが、MinGWは"/C/xxx/yyy"というパスは解釈できずNGでした。
    % cd /
    % mkdir c
    % mount c: /c
    
    "C:"を/C:"としてマウントできれば、と思ったのですが残念ながら以下のようなエラーになりました…。
    % mkdir c:
    % mount c: c:
    mount: c:: Invalid argument
    

    参考:

    2014年10月6日月曜日

    [windows][emacs] Windows 8.1上で(特定ユーザーログイン時に)任意のアプリの操作をemacsキーバインドにする方法

    windows 8.1上のすべての操作をemacsキーバインドにできないか、と思ってネット上の情報を探したところ、keyhacというぴったりのツールが見つかりました。カスタマイズが自由&簡単、かつクリップボード履歴機能つき!

    自分としては以下の設定ができれば目的達成です。
    • CapsLockをCtrlキーに
    • IMEのon/offを変換キーで
    • カーソル移動・クリップボード関連操作などをemacsキーバインドに
    • 可能であれば特定ユーザー(自分のアカウント)ログイン時のみ限定したい・・・
    こちらのブログで紹介されているpythonスクリプトを、keyhac.exeと同じディレクトリにconfig.pyという名前で保存するだけでemacsキーバインドが実現できました。感謝。

    config.pyのカスタマイズ方法:

    せっかくなのでkeyhacのconfig.pyによるカスタマイズ方法を簡単に紹介しておきます。
    config.pyでは任意のアプリ上のオリジナルのキー操作をpythonスクリプトで記述することができ、それをkeyhac上のキー操作に割り当てることで、キーバインドを実現しています。
    たとえば「ペースト」はyank()という関数で以下のように定義されています。
      
              def yank():
                  keymap.command_InputKey("C-v")()
                  keymap_emacs.is_mark = False
      
      
    それをkeymap_emacsでCtrl-yにバインドしています。
      
              keymap_emacs["C-y"]             = reset(yank)
      
      
    上記のような感じで、簡単に設定が可能です。以下、自分の環境にあわせて追加した設定を紹介しておきます。
    • IMEのon/offを変換キーに割り当てる
    • 
          keymap.replaceKey( 28, 243 )
      
      
    • config.pyの編集には秀丸を利用(※"\"はエスケープが必要)
    • 
          keymap.editor = u"C:\\Program Files\\Hidemaru\\Hidemaru.exe"
      
      
    • キーバインドを変更しないアプリにexplorerとemacs-X11を追加
    • 
          def is_emacs_target(window):
              if window.getProcessName() in (# skip...
                                             "explorer.exe",       # explorer
                                             "emacs-X11.exe",      # Emacs-X11
      
      
      
    • ついでにforward/backward wordとdelete wordの定義を追加
    • 
          def forward_word():
              keymap.command_InputKey("C-Right")()
          def backward_word():
              keymap.command_InputKey("C-Left")()
          def delete_word():
              keymap.command_InputKey("C-S-Right")()
              kill_region()
              keymap_emacs.is_mark = False
          def delete_backward_word():
              keymap.command_InputKey("C-S-Left")()
              kill_region()
              keymap_emacs.is_mark = False
      
          keymap_emacs["A-b"]             = repeat(mark(backward_word))
          keymap_emacs["A-f"]             = repeat(mark(forward_word))
          keymap_emacs["A-d"]             = reset(delete_word)
          keymap_emacs["C-Back"]          = reset(delete_backward_word)
      
      

    keyhacで実現できないキーバインド:

    残念ながら、[Ctrl]と[Caps Lock]の入れ替えのみ、keyhacでは実現できませんでした。これは、ドライバのレイヤで、[Caps Lock]のUPイベントを抑制しているのが原因のようです。keymap.replaceKey( "LCtrl", 240 )という設定をしても意図した動作になりません。
    仕方がないのでここの情報に従いレジストリをいじって、[Caps Lock]をつぶして[Ctrl]にすることで対応しています。入れ替えではなく上書きなので、本来の[Ctrl]と[Caps Lock]の両方が[Ctrl]の役割を持っている状態です。このため[Caps Lock]に[Ctrl]に割り当てる設定だけは、特定ユーザー限定という設定ができませんでした。

    (2014/10/06追記)
    C-k, A-d, C-BSなど範囲選択後、切り取りをするスクリプトはタイミング依存の問題(?)があるようで、keyhacの「内部デバッグ」をOFFにしていると、期待通り動作しないようです。手元の環境ではONにしていると動作しています(が、動作がのろくなるのでOFFにしたい・・・)。

    (2016/01/11追記)
    Caps LockにCtrlキーを割り当てる手順

    • regeditで以下のキーにScancode Mapという名前でバイナリ値を設定
      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
    • 格納するバイナリ値のデータは以下の通り
      • 00 00 00 00 00 00 00 00
      • 03 00 00 00 1D 00 3A 00
      • 3A 00 3A 00 00 00 00 00

    keyhac.iniを修正しコンソールウィンドウを非表示に:

    デフォルトではkeyhac起動時、コンソールウィンドウが表示されます。このウィンドウを非表示にするには、keyhac.exeが存在しているディレクトリに生成されているkeyhac.iniの[console]セクションに記述されているvisible=1をvisible=0に設定すればOKです。ただし、この設定は公式ドキュメントには記載されていないようなので、自己責任でお願いします。

    参考:

    ちなみにmacではKarabiner(旧KeyRemap4MacBook)をインストールすれば、簡単にemacsキーバインドが実現できます。

    2014年8月23日土曜日

    [emacs][cygwin][mac] cygwin及びmac環境へのcmigemoのインストール

    cmigemoという便利なツールあることを知って、Windows(cygwin)とmacにインストールしました。cmigemoを利用することで、emacsのI-searchでひらがな・カタカナ・漢字を検索できるようになり非常に便利です!
    例えば、C-sもしくはC-rに続き"kara"を入力すると、メインバッファ中の「から」「」「(からす)」「カラオケ」「karaoke」「小」がインクリメンタルサーチにかかります。

    cygwinでのインストール手順

    • Cygwin SetupからC/Migemoのビルドに必要なパッケージをインストール
      • cygwinディレクトリのsetup_x64_64.exe(setup_x64.exe)を起動し、以下のパッケージを選択、インストールします。
        • Devel
          • gcc
          • make
        • Libs
          • libiconv
        • Web
          • wget
    • qkcのインストール
      • QKC Home Pageから"For UNIX"版のzipアーカイブをダウンロードしてインストールします。
      • 
        % unzip qkcc100.zip
        % make
        % cp qkc.exe /usr/local/bin
        
        
    • cmigemoのインストール
      • 以下のコマンドを実行することでインストールできます。オフィシャルな手順はcmigemo/doc/README_j.txtに記載されています。
      • 
        % git clone https://github.com/koron/cmigemo.git
        % cd cmigemo
        % ./configure
        % make cyg
        % make cyg-dict
        % make cyg-install
        
        
      • ./configureで"$'\r': コマンドが見つかりません"というエラーが出る場合はこちらを参考にしてエラーを回避してください。
      • 最後のmake cyg-installの実行で/usr/local以下に関連ファイルがコピーされます。アンインストールしたい場合にはmake cyg-uninstallを実行してください。
        • <要確認>インストールには管理者権限が必要(管理者権限を付与したターミナル上で実行)?
    • migemo.elのインストール
      • emacsを起動し以下のコマンドを実行
      • 
        M-x package-refresh-contents
        M-x package-install migemo
        
        
      • .emacsに以下のコードを追加
      • 
        (require 'migemo)
        (setq migemo-command "cmigemo")
        (setq migemo-options '("-q" "--emacs"))
        ;; Set your installed path
        (setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict")
        (setq migemo-user-dictionary nil)
        (setq migemo-regex-dictionary nil)
        (setq migemo-coding-system 'utf-8-unix)
        (load-library "migemo")
        (migemo-init)
        
        

    macでのインストール手順

    • cmigemoのインストール
      • 以下のコマンドを実行することでcmigemoをインストールできます。デフォルトでインストールされているnkf, iconvが利用されるため、cygwinで行ったセットアップは不要です。
      • 
        % git clone https://github.com/koron/cmigemo.git
        % cd cmigemo
        % ./configure
        % make osx
        % make osx-dict
        % sudo make osx-install
        
        
      • デフォルトのインストール先は/usr/localになります。/usr/local/bin, /usr/local/libがPATH, LD_LIBRARY_PATHに設定されていない場合にはこれらを追加する必要があります。
    • migemo.elのインストール
      • emacsを起動し以下のコマンドを実行
      • 
        M-x package-refresh-contents
        M-x package-install migemo
        
        
      • .emacsに以下のコードを追加。utf8を利用する設定が紹介されておりcygwin環境ではそれを用いましたが、自分のmac環境ではutf8では後述の問題が出たためeuc-jpを設定しています。
      • 
        (require 'migemo)
        (setq migemo-command "cmigemo")
        (setq migemo-options '("-q" "--emacs"))
        ;; Set your installed path
        (setq migemo-dictionary "/usr/local/share/migemo/euc-jp/migemo-dict") ; macではutf8はNG?
        (setq migemo-user-dictionary nil)
        (setq migemo-regex-dictionary nil)
        (setq migemo-coding-system 'euc-jp) ; macではutf8はNG?
        (load-library "migemo")
        (migemo-init)
        
        
    • (補足)macではutf8の設定では正しくI-searchできない?
      • cygwinと同じ手順で「mac環境でも幸せ〜」になる予定だったのですが、アルファベットのI-searchができず不幸せな状態になってしまいました。問題の状況は"compile"を検索しようとして"co"をI-searchで入力しても検索に失敗してしまう、という状態でした。ミニバッファには以下のような情報が出力されています。"compi"まで入力すれば検索できる状態になります。
        • [MIGEMO] I-search: co [incomplete input]
      • この情報を見つけて以下のコマンドを実行してみましたが状況は改善せず。
        • M-x migemo-pattern-alist-clear
      • 試行錯誤した結果、エンコードをutf8からeuc-jpに変更すると正しく動作するようになったため、現状はこの設定で利用しています。

    参考

    2014年7月23日水曜日

    [emacs][haskell] anything.elとauto-install.elのインストールとhaskell関連の設定

    emacsにanything.elをインストールしたので、その手順を残しておきます。package.elではanything.el本体とプラグインを一緒にインストールしてくれない、という情報があったので、auto-install.elを用いてインストールしました。

    ローカル環境にはauto-install.elが未インストールだったため、auto-install.elのセットアップから。

    auto-install.elのインストール

    1. emacs上でM-x package-list-packagesでパッケージ一覧を表示
    2. パッケージリスト中のauto-installの行で[i]でインストール対象に選択し、[x]でインストール実行
    3. .emacsに以下の記述を追加
    4. 
      (require 'auto-install)
      (auto-install-update-emacswiki-package-name t) ; EmacsWikiからパッケージ名を取得
      (add-to-list 'load-path "~/.emacs.d/auto-install")
      
      

    anything.elのインストール

    1. emacs上でM-x auto-install-batch anythingを実行
    2. 以下のファイルがDLされ、コンパイルするかどうかを効いてくるため全てに対してC-c C-c(コンパイル)を実行
      • anything-startup.el     
      • anything-ipa.el    
      • ipa.el    
      • anything-gtags.el    
      • anything-menu.el    
      • anything-grep.el    
      • descbinds-anything.el    
      • anything-auto-install.el   
      • anything-show-completion.el
      • anything-complete.el    
      • anything-obsolete.el    
      • anything-migemo.el    
      • anything-config.el    
      • anything-match-plugin.el   
      • anything.el
    3. .emacsに以下の記述を追加
    4. 
      (require 'anything-startup)
      
      

    haskell関連の設定

    1. haskell-modeのインストール
      1. M-x package-list-packagesでパッケージ一覧を表示しhaskell-modeを選択([i])し、インストール実行([x])。
      2. .emacsに以下の設定を追加
      3. 
        (require 'haskell-mode)
        (require 'haskell-cabal)
        (add-to-list 'auto-mode-alist '("\\.hs$" . haskell-mode))
        (add-to-list 'auto-mode-alist '("\\.lhs$" . literate-haskell-mode))
        (add-to-list 'auto-mode-alist '("\\.cabal\\'" . haskell-cabal-mode))
        (add-hook 'haskell-mode-hook (lambda () (turn-on-haskell-indent)))
        
        
        "turn-on-haskell-indentation"ではなく"trun-on-haskell-indent"を選択すること。"turn-on-haskell-indentation"だと[RET]にhaskell-newline-and-indentがバインドされ、リターンキー押下でデフォルトインデントしてしまう。newlineにマッピングしなおすと[TAB]によるインデントも効かなくなるため、インデントしない設定にできなかった…。
    2. ghc-modのインストール
      1. cabal install ghc-modでインストール
        1. ホームページからのインストール手順を参照
        2. M-x package-list-packagesでパッケージ一覧を表示しghc-modを選択([i])し、インストール実行([x])?
      2. .emacsに以下の設定を追加
      3. 
        (add-to-list 'load-path "~/Library/Haskell/ghc-7.6.3/lib/ghc-mod-3.1.7/share") 
        (autoload 'ghc-init "ghc" nil t)
        (autoload 'ghc-debug "ghc" nil t)
        (add-hook 'haskell-mode-hook (lambda () (ghc-init)))
        
        
    3. インストール済みパッケージの参照をanything.elで!
      1. こちらを参考に。
    4. auto-complete.elで補完!
      1. こちらを参考に。

    参考にしたサイト:

    2013年4月7日日曜日

    [emacs] csharp-modeでrevert-bufferが効かなくなる不具合

    emacsと、別ツールで同じファイルを開いていて相互で編集を行うような場合、emacsの外の変更を取り込むときに、'revert-buffer'を利用しているのですが、いつのタイミングからか、以下のメッセージが表示され正常に再読込ができない状態になっていました。
    'Symbol's value as variable is void: flymake-mode'
    数日間、ガマンして使っていたのですがやっぱり不便。 google先生に問い合わせたところ、以下のページがヒットし復旧することができました。
    https://code.google.com/p/csharpmode/issues/detail?id=8 
    バグ入りのcsharp-modeを入れてしまったのが原因で、上記のサイトに記載されている修正を反映したところ、revert-bufferが復活しました。
    (let ((is-flymake-enabled
         (and (fboundp 'flymake-mode)
            flymake-mode)))
    
    "fboudp"を"boudp"に修正する必要があるそうです。 emacs lispは知識不足で問題解析ができるレベルに達していないので精進が必要です。

    2010年12月4日土曜日

    [emacs] meadow で UTF8 が表示されない

    [emacs] meadow で UTF8 が表示されない

    と思いつつ放置していたのですが、google先生に聞いて出てきた
    以下のサイトを参照したところ mule-ucs なるものが必要とのこと。


    mule-ucs のアーカイブはここのリンクから。
    http://www.meadowy.org/~shirai/elips/mule-ucs.tar.gz

    インストール・セットアップの手順は以下の通りです。
    1. mule-ucs.tar.gz をダウンロードする
    2. c:/meadow/site-lisp 以下に mule-ucs.tar.gz を展開する
    3. .emacs に以下の記述を追加
    • (load-file "c:/meadow/site-list/mule-ucs-20061127-1/lisp/jisx0213/jisx0213.el")
    • ※パスが異なる場合は、jisx0213.elを見つけてそれをロードしてください
    • ※lisp compileコンパイルした方がよいと思います

    以上です。

    2010年8月29日日曜日

    [ruby][emacs] emacs の ruby-mode の設定例

    [ruby][emacs] emacs の ruby-mode の設定例

    (add-hook 'ruby-mode-hook
    '(lambda ()
    (setq tab-width 4) ; tab width
    (setq indent-tabs-mode 't) ; use tab for indent.
    (setq ruby-indent-level tab-width) ; indent size: tab ("2" or "4" can be set)
    (define-key ruby-mode-map "\C-j" 'goto-line))) ; shortcut setting
    備忘録。


    2009年8月21日金曜日

    iPhoneアプリ開発(その3:mac os環境整備)

    その1での疑問が少し解決したので、メモしておきます。

    Q: emacs がターミナルの中でしか起動しない。"-nw"オプションをつけている訳でもないのに。
    • A: プレインストールされているemacsはターミナルの中でしか起動しないものだそうです。独立したアプリケーションとして別ウィンドウで起動したい場合にはCarbon Emacsをインストールすればよいです(インストールは簡単!)

    Q: chshでshellをtcshに変えたがそれが反映されない。
    • ターミナルの設定で変更しないとダメみたいです。メニューからFile=>Preferencesで表示されるダイアログで、以下のように設定すればOKです。
    terminal-setting-window
    • ちなみに上記の画像はPreviewというアプリケーションでキャプチャしました。File=>Grab=>Windowでキャプチャ対象ウィンドウを選択できます。あとはFile=>SaveAs..で保存するだけ。


    Q: Xcodeのキーバインドは変更できるのかな(ググればすぐにでてきそうだけど)。
    • A: やはりできるみたい。
    • Xcodeではなくmacそのもののキーバインドですが、[ALT]をCommand Keyに割り当てておくとWindowsの操作感を引き継げて快適です。[ALT]+[TAB]でウィンドウ切り替えができたり、emacs上で[ALT]+[X]でm-xを入力できたり・・・。
    modifier-keys
    自分にとってはこれがベストです。macキーボードでない、普通のPCキーボードは、[ALT]がオプションキー、[Windows]がコマンドキーに割り当てられています。

    Q: [fn]キーのロックを解除する。
    • デフォルトでは、[fn]キーがロックされた状態でファンクションキーを入力しようとすると、ディスプレイの輝度が変更されたりします。
    • ロックを解除するには[システム環境設定]-[キーボード]で「F1,F2などのすべてのキーを標準のファンクションキーとして使用」にチェックを入れます。
    • ここの情報を参考にしました。

    Q: "¥"と"\"の入力方法

    • デフォルトでは"¥"が入力されます。
    • "\"を入力するには[Command]キーを押しながら[¥]キーを入力します。
    • デフォルトを変更するには「日本語の入力設定」で「"¥"キーで入力する文字」を変更します。こちらの情報を参考にさせていただきました。


    私と同じようなWindows/Linuxに慣れきった方がmac osに移行した場合のTIPSになれば幸いです。


    2009年2月19日木曜日

    emacs の gdb-mode でソース追従ができなくなっていた



    手元の環境は emacs 22.1.1 / gdb 6.4(改)なのですが、emacs で gdb-mode を起動してトレース実行すると今までできていたはずのソースコード上の実行位置追従が動作しないではありませんか。



    訳が分からぬまま google 検索すると、まさに欲しかった情報が出てきました。





    emacsかgdbがバージョンアップしたせいで、Emacsでgdbを使ったとき、うまく対応するソースコード行を追従しなくなった。この問題は検索の結果、gdbの--fullnameオプションを指定することが解決すると判る。しかし、これをコマンドファイルで指定するにはどうしたらよいだろうか?



    答えは、set annotate 1とコマンドファイルに書けばよい。





    http://www.gaku.net/uklog/a11513.html



    http://www.gaku.net/uklogtb?msgid=11513








    このオプションは gdb のマニュアルに以下のように説明されています。





    emacs がサブプロセスとして gdb を起動するときにこのオプションをセットします。



    これは、スタックフレームが表示されたときには常に(プログラムが停止した時を含む)、フルパスと行番号を標準の認識可能な書式で出力するよう、gdb に伝えるものです。



    この認識可能な書式は 2 つの 32 文字の文字列と、それに続くコロンの改行でセパレートされるファイル名、行番号、文字位置のような感じです。



    emacs - gdb インターフェースプログラムは、2 つの 32 文字の文字列を、ソースコードをフレームに表示するための信号として使用します。











    2009年2月3日火曜日

    emacs のバッファの文字コード変更



    自分への備忘録。

    emacs で読み込み済みバッファの文字コードを変更するには、以下のコマンドを実行すればよい。
    M-x revert-buffer-with-coding-system 指定の文字コードでファイルを再読み込み(C-x RET r)


    <<似たコマンドリスト>>
    M-x set-buffer-file-coding-system 書き込み時の文字コードを指定(C-x RET f)
    M-x set-buffer-process-coding-system 編集中バッファのプロセスの文字コードを指定(C-x RET p)
    M-x set-keyboard-coding-system キーボード入力の文字コードを指定(C-x RET k)
    M-x set-terminal-coding-system ターミナルの文字コードを指定(C-x RET t)

    などなど。