Emacsで知られている最長のキーシーケンスとは何ですか?


14

QtはEmacsスタイルのキーバインディングをサポートしていますが、最大4つのキーのみをサポートしています。なぜこの制限を増やす必要があるのか​​を明確にするために、それ以上のキーを持つEmacsスタイルのキーバインドの例を示すと便利です。これに関する既知の例や、Emacsキーマップで定義された長いキーシーケンスをプログラムで見つける方法はありますか?

編集:これは一般的な知識だと思いましたが、キーシーケンスはによって読み取られるキーのセットですread-key-sequenceF1 kあなたの候補を試して、それがあなたのコマンドを記述しているか、それより前の無関係なコマンドを記述しているかを確認してください。


私が頭の外から考えることができるのは、Qtには適用されない端末エスケープシーケンスからの変換だけです。3つの実際のキーを超えることは珍しいことです。
ジル「SO-停止が悪さ」

質問とリンクのコンテキスト/理由を提供していただきありがとうございます。一目で-それを読む前に、私は質問がトピックから外れていて誰にとっても役に立たないかもしれないと間違って推測していました。
ドリュー

この質問の問題は、誰も確実に答えることができないということです。誰もが自分のemacs構成についてのみ答えることができます。それは意見に基づくものではありませんが、一種の主観的なものです。
トバイアス

1
これには前置引数が含まれますか?1000行下に移動したい場合は、C-u 1 0 0 0 C-nどれが6つのキーかを判断できます。
スティグヘメル

1
@StigHemmerいいえ。それ自体がキーシーケンスであるかどうかF1 k C-u 1 0 0 0 C-nを確認してくださいC-u
wasamasa

回答:


23

次のスクリプトでテストしましたが、

(key-description
 (car
  (sort
   (let (keyseqs)
     (mapatoms
      (lambda (sym)
        (when (commandp sym)
          (let ((where (where-is-internal sym nil nil t)))
            (when where
              (setq keyseqs (append keyseqs where)))))))
     keyseqs)
   (lambda (a b) (< (length b) (length a))))))

そして、私は私で取得最長.emacs.dIS C-x c C-x r i一部ヘルムコマンドであり、そしてこれにemacs -q私が取得C-x a i lコマンドを実行しますinverse-add-mode-abbrev


12
ハ。私にC-x M-c M-b u t t e r f l yそれを与えます:)私はそれをやったことを忘れていました
...-フィルス

where-is-internalここではCPU時間を圧倒的に支配しますが、を介して短いリストを長いリストに破壊的に追加することにより、数サイクルを簡単に削ることができます(setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs))
バジル

1
@phils参照を認識していますが、そのコマンドを正確に何に設定しましたか?
ダンは

@DanNeely、私はあなたが見たことがないと思いますM-x butterflyか?信頼性を高めるためにそのコマンドにバインドしました:)
phils

6

最長がどこにあるのかについては答えられませんが、役立つ情報が少しあります。

  1. プレフィックスキーにバインドするキーマップのキーにバインドされた一連の関連コマンドを提供するライブラリがいくつかあります。

    私はユーザーキーなどを共同利用したくないので、通常、そのようなプレフィックスキーを、たとえばC-xother-windowコマンドの場合はC-x 4(keymap ctl-x-4-map)の下にバインドします。

  2. このようなキーマップ内のコマンドのグループにも同じ考慮事項が適用されます。独自のキーマップを取得することもあります。など、再帰的に。

  3. 少なくとも一部のユーザーは、このようなキーマップを(任意のレベルで)独自の短いプレフィックスキーに再バインドしたり、特定のコマンドを短いキーシーケンスにバインドしたりすることを期待しています。しかし、私は明らかに、ライブラリ自体でそれをしたくありません。

そのようなかなり長いキーの例は次のとおりです:C-x 4 j t . % *(7回のキーストローク)、Bookmark +のコマンドicicle-bookmark-file-this-dir-all-tags-regexp-other-windowにバインドされています。

解剖学:

  • 上のC-x 4プレフィックスキー(ctl-x-4-map)。

  • 上のjためのすべてのコマンドのためにあるプレフィックスキー、ブックマークにジャンプします

  • オンtされているブックマークへジャンプするためのすべてのコマンドにあるプレフィックスキー、タグ付けされたいくつかの方法で。

  • .のファイルのためのものであるブックマークにジャンプするために、すべてのコマンドにあるプレフィックスキー、現在のディレクトリされているタグ付けされたいくつかの方法で。

  • %にあるもののためにあるブックマークにジャンプするために、すべてのコマンドにあるプレフィックスキー、カレントディレクトリ持っているタグregexpにマッチあなたが要求されますが。

  • *にあるもののためにあるブックマークにジャンプするために、すべてのコマンドにあるキー、カレントディレクトリ持っているタグALLそのregexpにマッチあなたが要求されますが。(対照的に、C-x 4 j t . % +ブックマークのためのものであるSOMEそのタグ正規表現に合致します。)

すべてのことはあり、従来のブックマーク+で(とそれのいくつかはところで、diredの規則に対応):j用でジャンプコマンド、tのためにあるタグ付けされた.のためである現在のディレクトリ%用で正規表現、および*ためであるすべての+ためのものですいくつか)。


(ああ、@ mkcmsのsexpを使用C-x 4 j t f % *すると、同じ長fです。これはfileの略です。のようなものC-x 4 j t . % *ですが、補完候補のブックマークは、現在のディレクトリ(.)のファイルだけではなく、すべてのファイルブックマークです。)


0

Magitオプションを切り替えることができるため、長いシーケンスを追加します。たとえば、ログを要求するときに、リモートブランチが必要かどうか、ブランチのグラフィック表示などが必要な場合は、短いオプションまたは長いオプションを選択できます。ログに対する基本的な要求は、magit-statusバッファからのキーストロークの数回だけですが、さらに多くを追加できます。

同じことがコミットにも適用されます。基本的なコミットの場合は2回のキーストロークですが、オプションの追加が多数あります。

質問は指定されていないので、stock(それが何を意味するにせよ)emacs のみを検討していますか?


1
それとはほど遠い、私はどこからでも来る例を受け入れます。ただし、説明するのはキーシーケンスのセットであり、すべてのキーシーケンスが1つのコマンドを実行します。キーシーケンスが何であるかを理解するには、使用F1 kしてみて、コマンドを説明するまで入力できるキーの数を確認します。
wasamasa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.