rcmdnk's blog

20180304_shortcut_200_200

EmacserにとってEmacs以外の環境で普通にできストをかかされるのは 非常に辛いことですが、 それを解決する色々な方法が考えられています。

emacs-anywhereはテキスト入力時にEmacsを立ち上げて文字を入力しクリップボードに保存、 テキスト入力エリアに貼り付けてくれます。

Sponsored Links

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という項目が追加されているので これにショートカットを割り当てます。

shortcut

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を立ち上げて編集するメリットってどれ位あるのでしょうか。。。?

Sponsored Links
Sponsored Links

« Homebrewの'python'でインストールされるものがpython3になった Homebrewでインストールされる/usr/local/bin/pythonが再びPython2に変更 »