EmacserにとってEmacs以外の環境で普通にできストをかかされるのは 非常に辛いことですが、 それを解決する色々な方法が考えられています。
emacs-anywhereはテキスト入力時にEmacsを立ち上げて文字を入力しクリップボードに保存、 テキスト入力エリアに貼り付けてくれます。
- emacs-anywhere
- emacs-anywhereのための準備
- emacs-anywhereのインストール/アンインストール
- emacs-anywhereを呼び出すショートカット設定
- emacs-anywhereを使ってみる
- まとめ
emacs-anywhere
テキスト入力時にどこからでもEmacsを立ち上げてEmacsを使って文字入力をしよう、というソフトウェア。 対象OSはmacOSとLinuxでWindowsでは今のところ使えないようです。
emacs-anywhereのための準備
macOSではデフォルトのEmacsだとGUIが立ち上がらないので GUIが立ち上がるEmacsを入れる必要があります。
Homebrewで
$ brew install emacs --with-cocoa
または
$ brew cask install emacs
brew install emacs
だけだとGUIが入らないので--with-cocoa
で。
どちらでインストールしても/usr/local/bin/emacs及び/usr/local/bin/emacsclientがインストールされます。
(emacs-anywhereではemacsclient
を呼びます。)
後者だと/Applications/Emacs.app/Contents/MacOS/Emacs等へのリンクです。
どちらをインストールしても今だとversion 25.3.1なのでほとんど違いはありませんが、
細かいオプションを指定したいならbrew
版の方で。
/Applications/Emacs.appを直接使いたいなら後者で。
両方入れようとすると/usr/local/bin/emacsなどのリンクが衝突するのでどちらかを。
Linux環境においてはxdotoolが必要になるので適時インストールします。
$ sudo apt-get xdotool
または
$ sudo yum install xdotool
などで。
Emacsが入ってなかったら適時sudo apt-get emacs
などでEmacsもインストール。
emacs-anywhereのインストール/アンインストール
emacs-anywhereはレポジトリをクローン(もしくはダウンロード)して中にあるinstall
スクリプトを実行します。
$ git clone https://github.com/zachcurry/emacs-anywhere.git
$ cd emacs-anywhere
$ ./install
インストールすると~/.emacs-anywhereというディレクトリができてその中に必要なスクリプトとかが入っています。
アンインストールスクリプトはこの中には無くて、
取ってきたレポジトリにあるuninstall
を実行する必要があります。
uninstall
もコピーするようにしてもらえると嬉しいかも。
また、このuninstall
スクリプト自体にちょっとバグがあります。
if [[ $OSTYPE == "darwin"*]]
となってるとこ、最後のカッコの前に空白がないので
if [[ $OSTYPE == "darwin"* ]]
としてやる必要があります。 (Pull Requestは既にある。)
emacs-anywhereを呼び出すショートカット設定
インストール後、 Macなら設定のキーボードショートカットへ行くと Emacs Anywhereという項目が追加されているので これにショートカットを割り当てます。
Linuxでは
$ $HOME/.emacs_anywhere/bin/run
を実行してショートカットを作成します。
emacs-anywhereを使ってみる
準備が出来たら適当な入力欄に行って⌃-⌘-Eなどを押してみます。
押すとファイルを指定してないEmacsが立ち上がり、 何か書いてCtrl-X Ctrl-Cなどで終了すると もとのアプリケーションに戻って書いた内容を貼り付けてくれます。
Emacsを開く際にemacs_anywhere.el というEmacs Lispファイルを読み込む様になっていますが この中で内容を終了時にコピーする様になっています。
macOSではその後
osascript -e "tell application \"$frontmost_app_name\" to activate"
osascript -e 'tell application "System Events" to keystroke "v" using command down'
というコマンドが実行されます。frontmost_app_nameは前に使ってたアプリで そこにCmd-Vをしているだけです。
Macで試した所、Ctrl-X Ctrl-Cでも Cmd-Qでも左上のボタンを押して終了してもいずれの場合でも 内容がコピーされて貼り付けられました。
vim-anywhereとの違いは、Emacs終了後に自動的に内容が貼り付けられる、ということと 一度書いたら必ず貼り付けまで行われるので何も書き込みたくない場合は 全て消してEmacsを終了する必要がある、という点です。
後は大体似たような感じのことが出来ます。
まとめ
emacs-anywhereの初コミットが2週間前なのでvim-anywhereがちょっと話題になった時に さくっと作り始めた感じです。 (vim-anywhereはGitHubの初コミットが4年以上前。)
なのでまだuninstall
スクリプトに簡単なバグが有ったりしますが
その辺はすぐにfixされるでしょう。
vim-anywhere同様、入力欄をEmacsで編集するというよりは、 新たに入力する文字列をEmacsで準備すると言った感じです。
vim-anywhereとの違いは終了後に直接貼り付けが行われる所。 vim-anywhereもシェルスクリプトなので同様の事は簡単に加えられますが。
ということでemacs-anywhereを使うことでどこでもEmacsで編集できる、という話でした。
が、実際の所、Vimとは違って、 特にmacOSだと通常のテキスト操作は基本Emacs操作に準じてるので 敢えてEmacsを立ち上げて編集するメリットってどれ位あるのでしょうか。。。?