4

私は最近Emacsのセットアップをかなり変更していますが、問題が発生し、イライラし始めています。キーのような追加の修飾子を導入できるようにしたいと思います。私がやろうとしていることは、物事を明確にするために、私がdiredモード(テキスト入力を受け入れないため、通常の文字をリバウンドできる)にいるときsですjlカーソルはそれぞれ次のディレクトリ行と前のディレクトリ行に移動します。sキーをモディファイアのように効果的に機能させます。

またはsなどの修飾子を適用することを検討しましたが、これらはすべてグローバルなものに使用されます。これは可能ですか?そうでなければ、それは残念です。superhyper

編集:

私が求めているものとは少し混乱しているようです。次のような通常のキーシーケンスを定義する場合

(define-key map (kbd "s j") 'dired-next-dirline)

次に、押す前に毎回sキーを押し続けて、次のディレクトリ行に移動する必要があります。これは私が探しているものではありません(怒って聞こえないように:P)キーを押しまま、タップし続けて行を下に移動できる修飾子のように動作したいと思います。jssj

これをもっと明確にしたいと思います。ありがとう。

4

4 に答える 4

3

私はコードを掘り下げて、これを思いついた。にバインドs jされmy-dired-next-dirlineますが、それを実行した直後に、jもう一度実行するだけで十分です。その他のキーは一時的なバインディングをリセットします。

この関数set-temporary-overlay-mapはEmacs24.2で追加されましたが、この記事の執筆時点ではまだリリースされていないため、gitからEmacsをビルドする必要があります。

(defun my-dired-next-dirline ()
  (interactive)
  (dired-next-dirline 1)
  (set-temporary-overlay-map
   (let ((map (make-sparse-keymap)))
     (define-key map [?j] 'my-dired-next-dirline)
     map)
   nil))

(eval-after-load "dired"
  '(progn
     (let ((prefix-map (make-sparse-keymap)))
       (define-key prefix-map "j" 'my-dired-next-dirline)  
       (define-key dired-mode-map "s" prefix-map))))
于 2012-08-17T17:32:21.807 に答える
2

キーコードはあなたが探しているものかもしれません。

于 2012-08-13T17:30:54.970 に答える
2

この質問はそれ以前のものですが、Hydraパッケージを使用するとこれ以上のことができます。

https://github.com/abo-abo/hydra

こちらの例をご覧ください:https ://github.com/abo-abo/hydra/blob/master/hydra-examples.elおよびこちらhttps://github.com/abo-abo/hydra/blob/master/hydra-test .el

Wikiにはさらに便利な例がありますhttps://github.com/abo-abo/hydra/wiki/Hydras-by-Topic

Hydraは元々、かなり不透明な比喩的な構文しか持っていなかったため、始めるのが非常に困難でした。色から神話の物語、そして多くの頭が「打ち負かされた」モンスターまでのメタファーのそのような奇妙な二重層が、本質的に次のような特徴を説明するために使用された理由はわかりません。

  • アクションを実行し、キーモード(事実上あなたが求めているもの)に留まります(いわゆるblueハイドラ)
  • アクションを実行し、キーモード(redヒドラ)を終了します

等々。

ありがたいことに、2015年2月にさらにリテラル構文が追加されました。テストを調べて、色とリテラル構文を並べて確認してください。(また、このコミットhttps://github.com/abo-abo/hydra/commit/0a3cc60f5856eb4a38204b9075d67d058ba56bef

著者によるこの記事も参照してください。http://oremacs.com/2015/02/02/colorful-hydrae/

于 2016-08-13T11:27:57.330 に答える
1

キーコードが探しているものではない場合(トムの回答define-keyへのコメントで提案したように)、キーシーケンスを使用するシンプルなものが必要なようです。すなわち

(define-key dired-mode-map (kbd "s j") 'dired-previous-line)

これには、キーの元の機能を無効にするという欠点がありsますが、それをシーケンスに再バインドすることができますs- s、私は推測します。

于 2012-08-14T18:51:05.227 に答える