Emacs Mac port についてはこちら Emacs Mac port を使う 。
Emacs Mac port に追加されている機能ですが、パッチに含まれる README-mac に詳細が書いてあります。
ここではその一部をまとめてみました。
パッチのバージョン emacs-23.3-mac-1.9992 を元に書いています。
-
変数 window-system の値は
mac
- Command-Control-D でカーソル位置の単語の意味を辞書で表示
-
AppleEvent に対応
Emacs に設定してあるメーラーが開く。 QuickCursor も使えるらしいosascript -e 'tell application "Emacs" to open location "mailto:foo@example.com"'
- Emacs がビジーな時は、タイトルバー右側のインジケータがグルグル回る
-
fullscreen フレイムパラメータが認識される
(set-frame-parameter nil 'fullscreen 'fullboth)
でメニューバーと Dock が消えてフルスクリーンに!
こんなコマンドを作って手軽に切り替えられるようにしてます(defun my-toggle-fullscreen () "Toggle fullscreen." (interactive) (if (eq (frame-parameter nil 'fullscreen) 'fullboth) (progn (set-frame-parameter nil 'fullscreen nil) (display-time-mode 0)) (set-frame-parameter nil 'fullscreen 'fullboth) (display-time-mode 1))) (global-set-key "\C-cf" 'my-toggle-fullscreen)
-
sticky フレイムパラメータが認識される
(set-frame-parameter nil 'sticky t)
で Spaces で全てのスクリーンに表示されるようになる -
関数 system-move-file-to-trash が定義されている
変数 delete-by-moving-to-trash に設定することで、 Emacs からファイルを消去する際にゴミ箱に移動するようになる
(setq delete-by-moving-to-trash 'system-move-file-to-trash)
としてしまうと一時ファイル等でゴミ箱が溢れるので、 Dired 等特定のコマンドでのみ有効にするのが良いかもしれない;; Dired の x や D でゴミ箱に捨てる。Finder での「取り消し」「戻す」は不可。 (when (fboundp 'system-move-file-to-trash) (defadvice dired-do-flagged-delete (around move-to-trash activate) "Use `system-move-file-to-trash'." (let ((delete-by-moving-to-trash 'system-move-file-to-trash)) ad-do-it)) (defadvice dired-do-delete (around move-to-trash activate) "Use `system-move-file-to-trash'." (let ((delete-by-moving-to-trash 'system-move-file-to-trash)) ad-do-it)))
-
M-x menu-bar-open
でメニューバーが開く (menu-bar-mode が non-nil の場合)(global-set-key "\M-`" 'menu-bar-open) ; tmm-menubar
- mac-mouse-wheel-mode. 行単位のカクついたスクロールではなく、ピクセル単位の滑らかなスクロール
-
トラックパッドのジェスチャーを認識する。 magnify-up, magnify-down, rotate-left, rotate-right
デフォルトではテキストスケールの変更と、フルスクリーンの切り替えに割り当てられている - システム環境設定 → アピアランス の「クリックされた場所にジャンプ」が Emacs でも有効
-
システム環境設定 → キーボード の「キーボードショートカット (キーボードと文字入力)」が Emacs でも有効。
例えば ^F2 でメニューバーが開く。 ^F4 でウィンドウ切り替え等 - 他のアプリで画像をコピーした場合、 yank-pop でその画像を挿入できる。(変数 yank-excluded-properties で display を除外してない場合に限る)
- Mac OS X 10.6 以上で、メニューバーのヘルプの検索語入力欄から info ノードを検索可能
- Mac OS X 10.6 以上で、他のアプリにて選択したテキストがファイルのパスならば、 Emacs で開くためのコンテキストメニューとサービスが追加される
- ことえりで、かなキー2回連打でカーソル位置の単語を再変換する機能が Emacs でも有効
-
関数 mac-convert-property-list の追加
Mac OS X の plist を lisp 等に変換できる。 plutil や xml.el とかでも似たようなものは実装できそうですが
使用例としてはこんな感じで(mac-convert-property-list (let ((coding-system-for-read 'no-conversion)) (with-temp-buffer (insert-file-contents "~/Library/Preferences/.GlobalPreferences.plist") (buffer-string))))
他に、 SVG やマルチページ TIFF の表示、 関数 mac-file-alias-p の追加、 Option-Command-T で「文字ビューアを表示」、 Resolution independence, 等々。
あと、私の環境では lookup.el で辞書を引くスピードが Cocoa Emacs では異様に遅かったのですが、 Emacs Mac port では軽快に動きました。
その他の注意点
-
mac-allow-anti-aliasing は削除された
システム環境設定 -> アピアランス で設定するか、Terminal から以下を実行
defaults write "org.gnu.Emacs" AppleAntiAliasingThreshold 12
- ことえりの半角英字モードで C-S-a (Shift を押しながらの C-a) が効かなくなることがある。再現性はいまいち
do-applescript 関数について
-
Emacs Mac port の do-applescript は Carbon Emacs のそれと挙動は同じで、数点注意が必要です
- do-applescript へ渡す文字列、返す文字列は変数 mac-system-coding-system でエンコード、デコードする必要がある
- 変数 mac-system-coding-system は端末から Emacs を -nw 起動した時には初期化されていない
- バックスラッシュは全て \200 (0x80) に置き換えられるので変換が必要
- do-applescript が返す文字列はダブルクオートで囲まれているので、除去する必要がある
- Cocoa Emacs の do-applescript (ns-do-applescript) は上記の面倒は無いのですが、端末で起動した時には do-applescript 関数は使えません
- X11 用にビルドした Emacs では do-applescript は恐らく使えません
-
外部コマンドの osascript を使う場合次の利点があります
- Emacs Mac port, Carbon Emacs に特有の面倒が無い
- 端末からの -nw 起動でも X11 版でも AppleScript を使える
-
on run argv
で引数渡しができる - スクリプトの実行が失敗したかどうかが call-process の返り値でわかる
上記の理由から当ブログで紹介している Dired 関連の tips では do-applescript は使わず osascript を使っています