13

次のように、キーを特定の関数にバインドするとします。

(global-set-key (kbd "C-c =") 'function-foo)

ここで、キー バインディングを次のように機能させたいと考えています。最初
に を押した後C-c =、function-foo を繰り返したい場合は、C-cもう一度押す必要はありません。単に を押すだけ=です。次に、function-foo を十分な回数呼び出した後、終了するために 以外のキーを押す=(または明示的に押すC-g) ことができます。

これを行う方法?

4

5 に答える 5

8

まさに必要なことを行うsmartrep.elパッケージがあります。ドキュメントは少し不足していますが、github にある多数の emacs 構成を調べることで、どのように使用されるべきかを把握できます。例(ここから取得):

(require 'smartrep)
(smartrep-define-key
    global-map "C-q" '(("n" . (scroll-other-window 1))
                       ("p" . (scroll-other-window -1))
                       ("N" . 'scroll-other-window)
                       ("P" . (scroll-other-window '-))
                       ("a" . (beginning-of-buffer-other-window 0))
                       ("e" . (end-of-buffer-other-window 0))))
于 2013-06-20T09:07:23.593 に答える
2

function-fooを使用してくださいset-temporary-overlay-map

于 2013-06-20T01:08:32.457 に答える
1

を使用する@juanleonが提案したものに加えて、これはset-temporary-overlay-map私がかなり使用する代替手段です。標準ライブラリを使用しますrepeat.el

;; This function builds a repeatable version of its argument COMMAND.
(defun repeat-command (command)
  "Repeat COMMAND."
 (interactive)
 (let ((repeat-previous-repeated-command  command)
       (last-repeatable-command           'repeat))
   (repeat nil)))

それを使用して、さまざまな繰り返し可能なコマンドを定義します。例えば、

(defun backward-char-repeat ()
  "Like `backward-char', but repeatable even on a prefix key."
  (interactive)
  (repeat-command 'backward-char))

C-c =次に、そのようなコマンドを、たとえば(for C-c = = = =...)のように、反復可能なサフィックスを持つキーにバインドします。

詳細については、この SO 投稿を参照してください。

于 2014-01-25T16:58:18.327 に答える