小指がだめなら親指でどう?、Macで親指Emacs入門

小指がだめなら親指でどう?、Macで親指Emacs入門

福山です。小指が痛いときのための代用を考えてみました。

SandSも考えましたが自分には合いません。

そこで、MacでおなじみCommandキーに目をつけました。

と、まずはキーバインドの変更が簡単になるように作ったマクロを書いておきます。

Emacsのキーバインドをエイリアスするマクロつくったよ

『Emacs Lisp テクニックバイブル』を参考にして
キーバインドを他のキーバインドと同じ働きをもたせる(エイリアス)をコード書きましたー。

これを使えば、わざわざ「C-nがnext-lineである」などという事を調べなくとも、キーバインドに同じ役割を与えられます。

バッドテクですが非常時には検討してみてください。

;; キーバインドをエイリアスするマクロ
(defmacro kbd-macro-alias (akey bkey)
  (declare (indent 1))
  `(global-unset-key (kbd ,akey))
  `(global-set-key (kbd ,akey)
                   (lambda ()
                     (interactive)
                     (execute-kbd-macro (kbd ,bkey)))))

;; 使い方
;; (kbd-macro-alias "このキーを" "ここのキーと同じ効果に")


;; 実用例:移動だけでも親指にさせたい
;; 移動だけでも小指に結構負荷をかけていると思います。
;; command/ctrlのどちらでも移動できるようにしましょう。(慣れが必要ですが)

(kbd-macro-alias "s-f" "C-f")
(kbd-macro-alias "s-b" "C-b")
(kbd-macro-alias "s-p" "C-p")
(kbd-macro-alias "s-n" "C-n")
(kbd-macro-alias "s-a" "C-a")
(kbd-macro-alias "s-e" "C-e")

command以外も簡単にエイリアス設定可能

各種コマンド記法の例


;; C:control      例: "C-b" "C-n"
;; M:alt/option   例: "M-b" "M-n"
;; S:shift        例: "S-b" "B" "C-M-S-b"
;; s:command      例: "s-b" "C-M-S-s-b"
;; SPC:space      例: "C-SPC" "M-SPC"
;; tab            例: "<C-tab>" "<C-S-tab>" "C-i"
;; return         例: "<M-return>" "<C-M-return>" "C-m"

CocoaEmacsのデフォルトcommandキー設定一覧(ns-win.el)

どうやらこのelispがデフォルトのcommandキーにいろいろ割り当ててくれているようで、調べてみました。

ns-win.elはCocoaEmacsにデフォルトで入っています。(少なくとも23.4には)

コマンドキーに続けて次のキーを押したときの一覧です。
・赤が個人的に推奨
・紫がワンアクションで動作して欲しくない、unsetしたほうがいいかなぁ、というキーバインドです。

  • a : 全選択 (C-x h)
  • b : なし
  • c : 選択範囲コピー (クリップボードに保存)
  • C : カラーパネルを表示
  • d : 後方リピート検索
  • D : dired (C-x d)
  • e : 貼付けして検索
  • E : abbrevsを編集
  • f : 前方検索
  • g : 前方リピート検索
  • h : emacs非表示
  • H : emacs以外を非表示
  • i : なし
  • j : 選択範囲の末端/終端のカーソル移動
  • k : バッファ削除
  • l : 行番号ジャンプ
  • L : シェルコマンド (M-!)
  • m : アイコン化
  • M : manual-entry
  • n : 新しいフレーム作成
  • o : 開くパネルを表示
  • p : バッファをプリント
  • q : emacsを終了 (C-x C-c)
  • r : なし
  • s : バッファを保存
  • S : パネルを使って別保存
  • t : フォントパネル表示
  • u : バッファ更新
  • v : 貼付け (C-y)
  • w : フレーム削除
  • x : 選択範囲コピー&削除 (C-w)
  • y : 貼付け (クリップボードから)
  • z : 戻る (C-_)
  • | : shell-command-on-region
  • ' : 次のウィンドウ&フレームに移動
  • ` : 次のフレームに移動
  • - : 行の文字列をバッファの幅の中心に移動させる
  • ? : インフォメーションを表示
  • : : ispell
  • \ : ispell-next

キルリング、クリップボードの区別に注意。もっといい方法があると思うけど、Emacsからのコピーはこれでなんとかなります。

;; クリップボードにコピー
(setq x-select-enable-clipboard t)

詳細はご自身の、ns-win.el開けば見られます。

おわり

ちなみにCocoa Emacs内だけで、commandキーを完全にcontrolキーにする設定は以下の一行です。

;; commandをcontrolと同じにする
(setq ns-command-modifier 'ctrl)