[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10. Key bindings

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Key%20bindings"
"emacs-faq/Keybindings"へのコメント(無し)
検索全文Elisp



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.1 キー(ファンクションキーを含む)にコマンドを割り当てる方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Binding%20keys%20to%20commands"
"emacs-faq/キー(ファンクションキーを含む)にコマンドを割り当てる方法は?"へのコメント(無し)
検索全文Elisp

キーは対話的に割り当てることもできるし、 `.emacs' ファイルであらかじめ割り当てることもできます。 対話的にすべてのモードでキー割り当てが使えるようにするには 次のように入力してください。

M-x global-set-key RET key cmd RET

現在のメジャーモードでのみ割り当てたいときは次のように入力してください。

M-x local-set-key RET key cmd RET

詳しくは See Info file `emacs', node `Key Bindings' を参照してください。

キーを割り当てるための lisp コードを `.emacs' に書きこむには 次の様にすると簡単にできます。 まず対話的にキーを割り当てます。 直後に C-x ESC ESC C-a C-k C-g と入力します。 これでキー割り当てのための Lisp コードがキルリングにセーブされるので `.emacs' にペーストすることができます。 グローバルに割り当てるときはそのままで構いません。 たとえば次のコードは直接 `.emacs' に書き込めます。

 
(global-set-key (quote [f1]) (quote help-for-help))

特定のモードでキーを割り当てるときは add-hook を使ってください。 たとえば tex-mode でローカルに割り当てるときは次のようにします。

 
(add-hook 'tex-mode-hook
  (lambda ()
   (local-set-key (quote [f1]) (quote help-for-help))))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.2 "Key sequence XXX uses invalid prefix characters" って何のことですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Invalid%20prefix%20characters"
"emacs-faq/"KeysequenceXXXusesinvalidprefixcharacters"って何のことですか?"へのコメント(無し)
検索全文Elisp

大抵は以下の二つの場合のいずれかでしょう。 一つ目の場合として、キー入力列中のの制御文字の記述が 間違っているということがあります。 (例えば Lisp 式の中で `\C-f' ではなく、 `C-f' が使われている場合) もう一つの場合として、割り当てようとしているキー入力列のプレフィクス キーがすでに完全なキー入力列として割り当てられているということがあります。 歴史的経緯で `ESC [' をプレフィクスキーにすると問題がありました。 このときはキー入力列を割り当てる前に次の式を評価してください。

 
(global-unset-key [?\e ?[])  ;;  または
(global-unset-key "\e[")



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.3 セットアップが `.emacs' の中でだとうまくいきません。なぜですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Terminal%20setup%20code%20works%20after%20Emacs%20has%20begun"
"emacs-faq/セットアップが`.emacs'の中でだとうまくいきません。なぜですか?"へのコメント(無し)
検索全文Elisp

起動時に Emacs は与えられたコードまたはファイルの順番に従って自分自身を 初期化しようとします。端末やウィンドウの設定の初期化が実行される まで有効にならないコードが書かれているとこの問題が発生します。 (この順番は起動後にはあまり問題になりません)

端末・ウィンドウシステムの設定の初期化が実行されてから Lisp コードを 実行させるには、あなたが実行したいと思っているコードを ラムダ式 にして 変数 term-setup-hook まはた window-setup-hook の値に 追加してください。たとえば次の様にします。

 
(add-hook 'term-setup-hook
          (lambda ()
           (when (string-match "\\`vt220" (or (getenv "TERM") ""))
             ;; vt220 の "Do" キーを M-x と同じにする
             (global-set-key [do] 'execute-extended-command))))

Emacs が起動時に何をするのかを知るためには `lisp/startup.el' を見てください。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.4 X 上でファンクションキーを使う方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Using%20function%20keys%20under%20X"
"emacs-faq/X上でファンクションキーを使う方法は?"へのコメント(無し)
検索全文Elisp

Emacs 19 以降ではファンクションキーは他のキーと同様に利用できます。 10.1 キー(ファンクションキーを含む)にコマンドを割り当てる方法は? 参照。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.5 ファンクションキーやカーソルキーが生成する文字列を知る方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Working%20with%20function%20and%20arrow%20keys"
"emacs-faq/ファンクションキーやカーソルキーが生成する文字列を知る方法は?"へのコメント(無し)
検索全文Elisp

C-h c と入力してからファンクションキーやカーソルキーを押してください。 ファンクションキーのシンボルか文字列を表示します。 (詳細はオンラインマニュアル参照) 他のキーに対しても使えます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.6 X 上で "キーの読み変え" をする方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=X%20key%20translations%20for%20Emacs"
"emacs-faq/X上で"キーの読み変え"をする方法は?"へのコメント(無し)
検索全文Elisp

Emacs は標準では Xt ライブラリを使って書かれてはいないので、 "キーの読み替え" はできません。 (Xt ライブラリを使ってコンパイルした Emacs での キーの読み替えについて知っていたら教えてください)

Emacs にそう言った挙動をさせるには (Emacs の外で) xmodmap を使うか、 (Emacs の中で) define-key を使ってください。 関数 define-key は変数 function-key-map と合わせて使ってください。 たとえば次の式は M-TAB というキー入力列を定義します。

 
(define-key function-key-map [M-TAB] [?\M-\t])



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.7 フロー制御に使われている C-sC-q を扱う方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Handling%20C-s%20and%20C-q%20with%20flow%20control"
"emacs-faq/フロー制御に使われているC-sC-qを扱う方法は?"へのコメント(無し)
検索全文Elisp

C-sC-q は XON/XOFF のフロー制御に使われているので Emacs は混乱します。それは Emacs が標準で C-sC-q に コマンドを割り当てているからです。 Emacs はこれらをフロー制御文字として認識せず、 出力のバッファを埋め尽くすかも知れません。 時に XON/XOFF フロー制御をするソフトは Emacs から C-sC-q を見えないようにしているかも知れません。

解決方法:

詳しくは `etc/PROBLEMS' ファイルを読んでください。 (このファイルは Emacs の配布ファイルに含まれています。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.8 C-sC-q がフロー制御に利用されている場合にコマンドを割り当てる方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Binding%20C-s%20and%20C-q"
"emacs-faq/C-sC-qがフロー制御に利用されている場合にコマンドを割り当てる方法は?"へのコメント(無し)
検索全文Elisp

C-sC-q にコマンドを割り当てるには関数 enable-flow-control か 関数 enable-flow-control-on を使ってください。 使い方については 10.7 フロー制御に使われている C-sC-q を扱う方法は? 参照。

他のキーに割り当てるには関数 keyboard-translate を使ってください。 使い方については 10.11 キーを交換する方法は? 参照。 サイトで対処する場合は `site-lisp/site-start.el' に記述してください。 `site-lisp/default.el' を使っていけない理由については 10.7 フロー制御に使われている C-sC-q を扱う方法は? 参照。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.9 何故 Backspace キーでヘルプが起動するのですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Backspace%20invokes%20help"
"emacs-faq/何故Backspaceキーでヘルプが起動するのですか?"へのコメント(無し)
検索全文Elisp

Backspace キーは(ほとんどのキーボードでは) ASCII コードの 8 を 生成します。C-h も同じコードを生成します。 Emacs は標準で C-h でヘルプを起動します。 `help' の先頭が `h' なので覚えやすいようにこう決められました。 もっとも簡単な解決法は C-h (と Backspace)でヘルプを起動し、 DEL(Delete)で直前の文字を削除する という標準のの設定のまま Emacs を使うことです。

この解決方法を好まない人もいます。

Emacs 21 以降ではウィンドウシステム上で起動された場合、 Delete でポイント位置の文字を削除するようになっています。 このためウィンドウシステム上ではあまりキー操作に悩むことはありません。

この問題についてオンラインマニュアルにも書かれています。 See Info file `emacs', node `DEL Does Not Delete'を参照して下さい。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.10 Emacs が BackspaceDelete に関する stty の設定を無視するのはなぜですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=stty%20and%20Backspace%20key"
"emacs-faq/EmacsがBackspaceDeleteに関するsttyの設定を無視するのはなぜですか?"へのコメント(無し)
検索全文Elisp

良い質問です。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.11 キーを交換する方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Swapping%20keys"
"emacs-faq/キーを交換する方法は?"へのコメント(無し)
検索全文Elisp

Emacs 19 では関数 keyboard-translate を使ってキー (またはキー入力列)を交換することができます。 例えば C-hDEL を交換したいときは次の式を評価してください。

 
(keyboard-translate ?\C-h ?\C-?)  ; translate `C-h' to DEL
(keyboard-translate ?\C-? ?\C-h)  ; translate DEL to `C-h'.

一番目の引数はキーボードから入力されるシーケンスです。 二番目の引数はキーマップに適用されるシーケンスです。

キーボードトランスレーションはキー割り当てとは異なります。 Emacs は色々な状況で適用される様々なキーマップを持ちますが、 キーボードトランスレーションはただ一つしか存在せず、 Emacs が端末から読み取る文字すべてに適用されます。 キーボードトランスレーションは入力プロセスの最下層で実現されます。 キーマップに適用されるキーはキーボードトランスレーションの結果の文字列です。

オンラインマニュアルの See Info file `emacs', node `Keyboard Translations' 参照。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.12 C-XXX を入力する方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Producing%20C-XXX%20with%20the%20keyboard"
"emacs-faq/C-XXXを入力する方法は?"へのコメント(無し)
検索全文Elisp

X 以外の端末では次の様な "エイリアス" が一般的です。

C-2 または C-SPC
C-@

C-6
C-^

C-7 または C-S--
C-_

C-4
C-\

C-5
C-]

C-/
C-?

他のエイリアスも存在します。 CTRL キーと数字キーでどんなキーが生成されるか C-h c を使って調べてみてください。 コマンド名がわかっているなら C-h w を使ってみてください。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.13 Meta キーがない場合はどうしたらいいのですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=No%20Meta%20key"
"emacs-faq/Metaキーがない場合はどうしたらいいのですか?"へのコメント(無し)
検索全文Elisp

多くのキーボードでは Alt キーが Meta キーとして使えるでしょう。

M-a と入力する代わりに、ESC a と入力することができます。 実際、Emacs は内部で M-aESC a に分解して処理しています。 (ただし変数 meta-prefix-char の値にもよります) Meta キーと a は同時に押しますが、 ESC を使うときは同時に押すのではなく、 ESC を離してから a を押すことに注意してください。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.14 Escape キーがない場合はどうしたらいいのですか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=No%20Escape%20key"
"emacs-faq/Escapeキーがない場合はどうしたらいいのですか?"へのコメント(無し)
検索全文Elisp

C-[ を代わりに使ってください。 これは ESC と同じく ASCII コードの 27 を送信します。 C-3 も端末によっては(X 上でないときは)うまくいくでしょう。 F11 は多くの端末(特に DEC の端末)で ESC を生成します。 そうでなければ次の式で利用できるようになります。

 
;;; F11 is the documented ESC replacement on DEC terminals.
(define-key function-key-map [f11] [?\e])



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.15 Compose Character キーを Meta キーの代わりに使う事はできますか?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Compose%20Character"
"emacs-faq/ComposeCharacterキーをMetaキーの代わりに使う事はできますか?"へのコメント(無し)
検索全文Elisp

VT220 のようなダム端末ではできません。 VT220 クローンでそのようなことができる物があるという噂はあります。 X を使っているなら xmodmap を使ってできるかも知れません。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.16 モディファイアキーとファンクションキーの組み合わせをコマンドに割り当てる方法は?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Binding%20combinations%20of%20modifiers%20and%20function%20keys"
"emacs-faq/モディファイアキーとファンクションキーの組み合わせをコマンドに割り当てる方法は?"へのコメント(無し)
検索全文Elisp

Emacs 19 以降ではベクトルを使ってモディファイアキーとファンクションキーを 組み合わせたキー入力列を表すことができます。 例: (オンラインマニュアルにあります)

 
(global-set-key [?\C-x right] 'forward-page)

`?\C-x' は C-x の Lisp 表現です。

ファンクションキーとモディファイアキー (CTRL, META, HYPER, SUPER, ALT, SHIFT)を 同時に使うにはファンクションキーを表すシンボル名の前に `C-', `M-', `H-', `s-', `A-', `S-' を 付けてください。 次の式は Hyper-Meta-RIGHTforward-word を割り当てます。

 
(global-set-key [H-M-right] 'forward-word)

一般的なキー割り当ての方法については 10.1 キー(ファンクションキーを含む)にコマンドを割り当てる方法は? 参照。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.17 xtermMeta キーが使えないのはなぜ?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=Meta%20key%20does%20not%20work%20in%20xterm"
"emacs-faq/xtermMetaキーが使えないのはなぜ?"へのコメント(無し)
検索全文Elisp

See Info file `emacs', node `Single-Byte Character Support' を参照してください。

それでうまく行かない場合は以下の点を確認してみてください。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

10.18 HP-UX 8.0 と 9.x で ExtendChar キーが Meta キーとして使えないのはなぜ?

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=emacs-faq&node=ExtendChar%20key%20does%20not%20work%20as%20Meta"
"emacs-faq/HP-UX8.0と9.xでExtendCharキーがMetaキーとして使えないのはなぜ?"へのコメント(無し)
検索全文Elisp

これは X11R4 で国際化拡張がなされ、現在 HP がこの拡張を使っているためです。 Emacs は `XLookupString' が Meta キーの状態によらずに 同じ結果を返すものと見なすためです。 Emacs 側で修正されるようになるまでは、 X サーバを起動する度に xterm を起動する前に次の様にしてください。

 
xmodmap -e 'remove mod1 = Mode_switch'

これによりシステム全体で新たなキーシムが使えなくなるので、 期待した解決法ではないかもしれません。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]