10

私は最近、M-leftここで修正などを手伝ってくれました: emacs in terminal meta arrow keybindingsShift-up 、しかし同様の解決策を使用して修正することはできません。試してみるshift-upと、エラーが発生します<select> is undefined。私はそれを使用して再マッピングしようとしました:

(add-hook 'term-setup-hook                                                                                                                                                                         
'(lambda ()                                                                                                                                                                                      
 (define-key function-key-map "\e[1;9A" [M-up])                                                                                                                                                
 (define-key function-key-map "\e[1;9B" [M-down])                                                                                                                                              
 (define-key function-key-map "\e[1;9C" [M-right])                                                                                                                                             
 (define-key function-key-map "\e[1;2A" [S-up])                                                                                                                                                
 (define-key function-key-map "\e[1;9D" [M-left])))  

しかし、シフトは未定義のままです。catまた、 which isから返されたエスケープ シーケンスを使用してキーを設定し、キーを再バインドしようとしました^[[1;2A。奇妙なことに、シフトダウンは機能します。shift-select-modeもマークされtています。

4

2 に答える 2

13

これは、ENDによってEmacs 23.3.1が言うときに、Puttyを介してUbuntu12.04マシンにアクセスする際に発生した問題のように聞こえます<select> is undefined。これは、プログラムがデバイスに依存しない方法で端末を使用できるようにするterminfoの問題であることが判明しました。

この2008年のバグレポートの議論に基づいて、〜/ .bashrcの先頭に以下を追加することで、問題を解決しました。

#so the END key will work correctly in Emacs over PuTTY
TERM=xterm-vt220

NBは、xterm-vt220またはデフォルトのxtermのいずれかを使用して、 END、 Up、およびShift-Upを押すemacs -Q -nwと取得されます。(Emacsが取得しているキーコードを確認するには、いくつかのボタンを押してから押します。)同じ順序の同じキーの場合、、、、および...なので、UpとShift-Upは奇妙に逆になります。ESC [ 4 ~ESC O AESC [ AC-h,lcat[4~[A[OA


terminfoを変更したくない場合は、回避策についてこのディスカッションを参照してください http://lists.gnu.org/archive/html/help-gnu-emacs/2011-05/msg00211.html

次のような問題を回避できるはずです。

(define-key input-decode-map "\e[1;2A" [S-up])

そして、これを適切なタイミングで有効にするには、.emacsで次のようなものを使用する必要があります。

(if (equal "xterm" (tty-type)) (define-key input-decode-map "\e[1;2A" [S-up]))

于 2012-08-12T17:40:31.490 に答える