端末でEmacsがShift + Upを認識しない


15

Emacsでリージョンを選択するには、Shift+ を使用することが非常に多いUp/Downです。GUIモードでは正常に動作しますが、オプションemacsで呼び出された場合-nwShift+でのみ行を選択できますDownShift+は、Up仕事は、私はミニバッファでこのエラーメッセージを取得できません。

<select> is undefined

この問題を解決するにはどうすればよいですか?

回答:


13

テキスト端末は、キーではなく文字(より正確にはバイト)のみを送信します。キーとキーコード(修飾子付きのキー)は、文字シーケンスとしてエンコードされます。印刷可能な文字を挿入するキーは、それ自体として送信されます。ファンクションキーはエスケープシーケンスとして送信されます。ほとんどのエスケープシーケンスは、文字Escape(?\eEmacs構文)とそれに続く2つ以上の印刷可能文字で構成されます。emacsで使用するためのターミナルのコントロールキーとアップ/ダウンキーおよびキーボード入力とテキスト出力の仕組みをご覧ください詳細については。

Emacsには、エスケープシーケンスを独自のキーの概念に変換するメカニズムがあります。変換テーブルinput-decode-mapは、Emacsの起動時に初期化されます(より正確には、新しいフレームが開いたとき:この変数は各端末で異なる値を持ちます)。時々、Emacsは端末から送信されたすべてのエスケープシーケンスを知らないことがあります。

あなたの場合、EmacsにはShift+ によって送信されたエスケープシーケンスの解釈が間違っているようUpです。あなたはとしてそれを解釈することを指示する必要がありますS-upのではなくselect。最初に、エスケープシーケンスが何であるかを把握します。で*scratch*バッファを押しCtrl+ Qその後、Shift+ Up。このコマンドC-qにより、次の文字(エスケープ文字)がそのまま挿入され、その後にエスケープシーケンスの残りが続きます。レッツはそれを言うShift+をUp送信し\e[1;2A、その後、あなたがで対応するエントリを再定義する必要があるでしょう、私たちのシステムにinput-mode-map

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

原則として、input-decode-map端末ごとに設定する必要があります。実際には、同じエスケープシーケンスが異なるキーをエンコードする2つのターミナルを持つことは非常にまれであるため、グローバル設定で問題なく動作します。


-あなたの答えはここに私の質問に答えているようだemacs.stackexchange.com/questions/33988をAre the (define-key ...)init.elに入るコマンド 私が見ることができるどこかに詳細な例はありますか?
vfclists

@vfclists define-keyコマンドは、initファイルに追加されます。それは、~/.emacs.d/init.elまたは他のいくつかの場所です。あなたはの使用例をたくさん見つけるdefine-keyために検索することでdefine-keyはなく、バインドにマッピング発見は別の問題です。いくつかのマップが関与しています:global-mapinput-decode-mapfunction-key-mapkeyboard-translate-map。Spacemacsを知らないので、あなたの質問に答える方法がわかりません。標準インターフェイスを乱雑に再定義するSpacemacsなどのパッケージの使用はお勧めしません。
ジル「SO-悪であるのをやめる」

org-modeを学ぶために通常のemacsに切り替えてinput-decode-map、いくつかの例を見つけて作業することができました。私はそれを取ることができinput-decode-map、ユーザは、バッファにテキストを入力している場合に適用さ?
vfclists

@vfclists input-decode-mapは、適用されるキーマップの1つです。詳細については、マニュアルを参照してください。
ジル 'SO-悪であるのをやめる'

5

emacsでは、領域はポイント(カーソル)とマーク(「マーク」されたカーソルの以前の位置)で区切られます。

したがって、「領域を選択」するには、そのマークを配置してから、ポイントを移動する必要があります。

マークを配置する最も簡単な方法は、を押すことC-SPCです。次に、カーソルを移動するだけで、「リージョン」が表示されます。

「地域を選択解除」するには、C-SPCもう一度押すことができます。

「shift + movement」は他のソフトウェアの一般的なキーバインドであるため、デフォルトでは、この「select region」動作をエミュレートします。ただし、シフトは修飾キーとしてemacsに送信できないため、ターミナルでは機能しません。

一般に、このC-SPC方法は他の地域を選択する方法よりもはるかに強力であることに注意してください。移動には上/下/左/右に限定されず(たとえば、検索を使用できます)、必要ありません不快なキーの組み合わせを長期間維持すること。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.