mykie 20150808.1505(in MELPA)
Command multiplexer: Register multiple functions to a keybind

概要

このパッケージは僕がずっと愛用していてお気に入りです。

当サイトの設定にもしばしば登場させたいので、ここで紹介しておきます。

Emacsには無数のコマンドがキーに割り当てられています。

しかし、自分の好きなコマンドをすべてキーに割り当てるには、
あまりにもキーの数が不足しています。

おまけに使用頻度の低いコマンドは忘れ去られてしまいます。

そこで、複数の機能を持つコマンドを定義して
キーに割り当てるのが現実的な答えとなります。

それを行うのが mykie.el です。

mykie.elは状況によって挙動を変化させるコマンドを定義します。

状況とは、

  • C-uを押したとき
  • 繰り返し起動したとき
  • regionが設定されているとき
  • 行頭
  • 行末
  • メジャーモード特定のとき
  • カーソル位置がURLのとき
  • ミニバッファのとき
  • コメントカーソル位置のとき

などなどです。

様々な関数やマクロが用意されていますが
mykie:global-set-key を知っていればそれで十分です。

(mykie:global-set-key kbdによるキー表記
  キーワード 値
  キーワード 値
  ...)

mykie:global-set-keyは1つのキーを登録するマクロですが、
mykie:set-keys で、ひとまとめにキーを登録することもできます。

僕はmykie:global-set-keyを使っていますが、好みに応じて。

作者による日本語の解説があります。

http://sleepboy-zzz.blogspot.com/2013/12/emacsmykieel.html
http://sleepboy-zzz.blogspot.com/2014/02/mykieel-v021.html

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてmykieを使う方は
以下のコマンドを実行します。

M-x package-install mykie

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name mykie

僕が使っている主な設定

僕はウィンドウ構成を戻す winner.el を愛用していますが、
M-x winner-undoM-x winner-redo は対になっているので、
C-qにまとめています。

また、org-modeで時間計測をしていますが、
M-x org-clock-outM-x org-clock-goto
いつでも使えるようにしたいので、まとめています。

mykieでC-uに対応するコマンドを実行するとき、
current-prefix-arg (C-uの情報)もそのまま渡ってしまいます。

これをリセットするには:C-u!を指定します。

org-clock-outはC-uを読んでしまうので、そうする必要があります。

作者さんのコメントを反映しました。
ありがとうございます。

(require 'mykie)
(mykie:global-set-key "C-q"
  :default winner-undo
  :C-u     winner-redo)
(global-unset-key (kbd "C-l"))
(mykie:global-set-key "C-l C-o"
  :default org-clock-goto
  :C-u! org-clock-out)

使えるキーワード

:default or t Call this if conditions aren't matched all conditions
:C-u Call this if you pushed C-u key before pushing the key
:C-u*N Call this if you pushed N times of C-u
:M-N Call this if you pushed such as M-1
:region Call this if you are selecting region
:region&C-u Call this if you satisfied :region & :C-u condition
:repeat Call this if you repeat same command at same point
:bolp Call this if current point is beginning of line
:eolp Call this if current point is end of line
:bobp Call this if current point is beginning of buffer
:eobp Call this if current point is end of buffer
:C-u&bolp Call this if you satisfied :C-u & :bolp
:C-u&eolp Call this if you satisfied :C-u & :eolp
:C-u&bobp Call this if you satisfied :C-u & :bobp
:C-u&eobp Call this if you satisfied :C-u & :eobp
:email Call this if current point matched (thing-at-point 'email)
:C-u&email Call this if you satisfied :C-u & :email
:url Call this if current point matched (thing-at-point 'url)
:C-u&url Call this if you satisfied :C-u & :url
:MAJOR-MODE Call this if :MAJOR-MODE matched `major-mode'.
:C-u&MAJOR-MODE Call this if you satisfied :C-u & :MAJOR-MODE
:region&MAJOR-MODE Call this if you satisfied :region & :MAJOR-MODE
:prog Call this if current buffer is related `prog-mode'
:C-u&prog Call this if you satisfied :C-u & :prog
:region&prog Call this if you satisfied :region & :prog
:err Call this if error is exists of flymake or flycheck.
:C-u&err Call this if you satisfied :C-u & :err
:region&err Call this if you satisfied :region & :err
:minibuff Call this if current point is in minibuffer
:readonly Call this if current buffer is read-only
:comment Call this if current point is string or comment face

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。