これは .emacs の中で 端末/ウィンドウ・システムのセットアップ・コードがロードされるまで 有効にならないコードを書いたからです. これは Emacs が起動するときに何をするかの順番に起因しています (詳細は質問 60 参照).
端末/ウィンドウ・システムのセットアップ・コードがロードされるまで 実行を遅らせるには, 変数 term-setup-hook まはた window-setup-hook に あなたのやりたい関数を設定します.
etc/OPTIONS に Emacs が起動するまでにどんなことをするかが書かれています.
(setq term-setup-hook (function (lambda () (cond ((string-match "\\`vt220" (or (getenv "TERM") "")) ;; Make vt220's "Do" key behave like M-x: (define-key CSI-map "29~" 'execute-extended-command)) ))))
これまでの失敗例をみると ESC 文字の指定が間違っていることが考えられます. Emacs Lisp の文字列では, ESC は "\e" と指定します. (ESC は ASCII 文字の 27 で直接そのものを書くこともできますが, 印刷や表示したりメールで送ったりするときに問題を引き起こす場合があるので お薦めできません.) 例えば, キー列 "ESC O D" にコマンド 'my-backward-char をバインドするときは 次のように指定します:
(global-set-key "\eOD" 'my-backward-char)
次のようにも指定できます (全く等価な表現です):
(define-key global-map "\eOD" 'my-backward-char) (define-key esc-map "OD" 'my-backward-char)
RET, LFD, DEL, ESC, SPC そして TAB はそれぞれ "\r", "\n", "\C-?", "\e", " " そして "\t" と書きます.