Windows版EmacsでM-x diffとかM-x grepする
WindowsでもEmacsは動作するが、外部プログラムに依存したコマンドを利用するにはパスの設定をする必要がある。
MSYS2
cygwinのforkであるmsys-2.0.dllに依存したバイナリとmingw-w64によるコンパイラでビルドされたWindowsネイティブなバイナリを提供する
UNIXのコマンド(diff、grepなど)をインストールして利用できる
パッケージマネージャとしてpacmanを利用できて便利
64bitネイティブバイナリは C:\msys64\mingw64\bin 下にインストールされる
WIndows版EmacsもMSYS2上でビルドされる
M-x diffする
何も設定しないと...
code:emacs
'diff' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Diff finished. Sat Jan 2 20:11:27 2021
動作するための設定
MSYS2でdiffutilsをインストール
$ pacman -S mingw-w64-x86_64-diffutils
Emacs内で環境変数PATHにバイナリのパスを追加する
code:lisp
(setenv "PATH" (concat "C:\\msys64\\mingw64\\bin;" (getenv "PATH")))
M-x diffできるようになって嬉しい! :)
M-x ediffする
実はM-x diffとは必要な設定が異なる
動作するための設定
MSYS2でdiffutilsをインストール
Emacs内でexec-pathにパスを通す
code:lisp
(add-to-list 'exec-path "c:/msys64/mingw64/bin")
M-x ediffできるようになって嬉しい! :)
M-x grepする
動作するための設定
MSYS2でgrepをインストール
$ pacman -S mingw-w64-x86_64-grep
Emacs内で環境変数PATHにバイナリのパスを追加する
M-x grepできるようになって嬉しい! :)
M-x rgrepできない...
MSYS2のmingwリポジトリにはfindutilsがないのでM-x rgrepできない :(
一応(setenv "PATH" (concat "C:\\msys64\\usr\\bin;" (getenv "PATH")))でmsys-2.0.dllに依存したバイナリを使うという手段もある
(気になる人向け)M-x diffやM-x grepはPATH環境変数の設定が必要で、M-x ediffではexec-pathの設定が必要な理由
M-x diffやM-x grepでは「shell-file-name -c diff ...」で外部プログラムを実行する(start-process)
Windowsではshell-file-nameはEmacs付属のcmdproxy.exeバイナリが使われる
cmdproxy.exeがPATH環境変数から探すため、PATHを設定する必要がある
M-x ediffは「diff ...」で外部プログラムを実行する(start-process)
Emacsがexec-path変数のパスから探すため、exec-pathに追加する必要がある