2010-12-28 4 views
22

私はemacsを使うたびに、カーソルを動かすために矢印キーを使います。しかし、私が画面内でemacsを実行しているときに、emacsをバックグラウンド(ctrl-Z)に押してからフォアグラウンドに戻すと、矢印キーは機能しません。「スクリーン」は、^ Zの後でemacsの矢印キーをどうにか解きます。

M-[ a is undefined 

この現象は、画面外でemacsを実行しているときには発生しません。

アイデア?これは画面の設定ですか?

答えて

23

スクリーン(と他のほとんどすべての端末エミュレータ)がエミュレートするvt100端末には、通常モードとアプリケーションモードという2つのモードがあります。通常モードは、行単位アプリケーションとフルスクリーンアプリケーションのアプリケーションモードで使用されます。モードの違いの中で、矢印キーがdifferent control sequences(私にはわからない)を送信するということです。全画面モードではESC O A、通常モードではESC [ Aです。 Ctrl + Zを押すと、Emacsは端末を通常モードに戻しますが、フォアグラウンドに戻すと、再びフルスクリーンモードに切り替わりません。あるいは、画面がEmacsに反応しないようですコマンドが正しく実行されます。

可能な回避策の1つは.screenrcの両方のモードでbind the same character sequencesです。

bindkey -k ku stuff ^[OA 
bindkey -k kd stuff ^[OB 
bindkey -k kr stuff ^[OC 
bindkey -k kl stuff ^[OD 

もう1つの考えられる回避策は、Emacsに、ターミナルの内容にかかわらず、両方のキーシーケンスを解釈するように指示することです。いくつかの端末がこれらのキーシーケンスを異なるキーに使用する可能性があるため、これは原則として悪い考えですが、私はこのような互換性のない端末に遭遇したことはありません。

(define-key function-key-map "\eOA" [up]) 
(define-key function-key-map "\e[A" [up]) 
(define-key function-key-map "\eOB" [down]) 
(define-key function-key-map "\e[B" [down]) 
(define-key function-key-map "\eOC" [right]) 
(define-key function-key-map "\e[C" [right]) 
(define-key function-key-map "\eOD" [left]) 
(define-key function-key-map "\e[D" [left]) 

真の解決策には、問題の原因を見つけることが含まれます。これはScreenのバグ、Emacsのバグ、Screenが実行されている端末(エミュレータ)のバグ、termcapやterminfoデータベースのバグや設定ミスかもしれません。これを調べるには、オペレーティングシステム、何の端末(エミュレータ)のスクリーンが実行されているのか、スクリーンを入手したのか(それをどうコンパイルしたのか、それが何であるのか)、そしてバージョンEmacsは、Screenの外で同じ問題が発生したかどうかに関係なく、Screen内にecho $TERMecho -E "$TERMCAP"の出力を出力します。何が価値があるために

+0

「[アップ]」ではなく「[Cアップ」]にマッピングするべきではありませんか? (そして他の指示と同じですか?) – robert

+0

@robertどうしてですか? '\ e [A]は多くの端末で' up'が送信するものです。 'C-up'が' \ e [A'を送るが、 'up''は何かを送る場所に遭遇しましたか?それは何ですか? – Gilles

+0

最初は私のために働いたが、私は他の問題があった。これにより、これらのすべてが修正されました:https://stackoverflow.com/questions/15445481/mapping-arrow-keys-when-running-tmux – robert

29

、これはちょうど私に起こった、と私は画面から切断してから再接続して、それを修正することができました:

はCtrl + A、D

画面-R

+3

それは魅力的です。私のために働いた。 –

+1

Worked for me too(Debian Wheezy + LXTerminal + emacs 23) –

+0

これは私がemacsを終了して画面から切り離し、画面に再接続してemacsを再起動した場合にのみ私にとってはうまくいきました。あなたがemacsにいる場合は、画面を終了するときに動作しません(私のためではなかった) – juacala

3

私は自分のxtermウィンドウをフルスクリーンで表示していましたが、これが起こりました。 私はxtermの枠をダブルクリックしてフルスクリーンから出ました。 Ctrlキーを押しながらzキーを押して背景をemacsにします。次にfgを押して戻してから、矢印キーが働きました。私は何の問題もなくフルスクリーンに入ることができました。私はprolyすべてのEmacsのナビゲーションコマンドが、矢印キーへの移行の私の古い習慣を学ぶべき

は、ハード死ぬ:/

+0

私のために働いた –

1

ない答えが、tmuxは上のGNU Emacsの実行時に説明した動作も発生していることは注目に値しますUbuntuのターミナルまたはxtermで

すぐに回避するには、tmuxでemacsを実行しないでください。

バージョン

のEmacs: GNU Emacsの24.3.1のDebianによって修飾ブラウニーに2014年6月6日の(x86_64の-PC-LinuxベースのGNU))

TMUX: 1.9

のUbuntu: 14.10

+1

私はそれが誰かを助けるかもしれないかわからないが、私は同じ問題がある(ubutu + tmux + emacs):ウィンドウの全画面の状態を循環させ、Ctrl-zを押して、すべてが完璧に機能しました... – Rick77

+0

@ Rick77あなたは人生の節約者です。 ubuntu 12.04で。 –

0

ここでは、一回(14.04 Ubuntuの、24をemacsの壊れ壊れないように私のために働いたソリューションです.1)。画面から切り離すことなく、次のように試してください:

1)Ctrl-zを押してemacsを終了します。

2)を起動し、別のEmacs:emacs -nw

3)第二のemacsにはCtrl-Z、出来上がり!最初のEmacsが再び動作します。 (次に、2番目のemacsを開き、Ctrl-x Ctrl-cを押して閉じます)。

1

我々は、見つかった(しかし、我々はまだ、問題の原因を見つける必要がある)回避策はemacsの中から手動で「アプリケーションのシーケンス」を設定することで、ここでは同じ問題を抱えている:

  • (send-string-to-terminal "\e[?1h")
  • M-x eval-buffer

出来上がり:あなたの*scratch*バッファ

  • 貼り付けに移動します。

    また、簡単なC-zfgは十分であり、þ

  • +0

    私はこれを私の.emacsに加えました: '(defun term-send-application-sequence()(対話型)(send-string-to-terminal)\ e [?1h") ' fg'私は 'Mx term-send-application-sequence'をフォローアップし、すべてがうまくいきます。 – mvanbem

    0

    ファーストを入力する高速ですが、背景にはemacsをプッシュすることができます。

    Ctrl+z 
    

    さらに先に進む。

    関連する問題