Я не думаю, что вы можете настроить Emacs так, чтобы он делал это для всех команд.Однако вы можете реализовать эту функцию в самих командах.Это то, что сделано для Cx e . Вот макрос, который я только что написал (руководствуясь стандартным определением kmacro-call-macro
в GNU Emacs 23.1.1) , который упрощает добавление этой функциональности к вашим собственным командам:
(defmacro with-easy-repeat (&rest body)
"Execute BODY and repeat while the user presses the last key."
(declare (indent 0))
`(let* ((repeat-key (and (> (length (this-single-command-keys)) 1)
last-input-event))
(repeat-key-str (format-kbd-macro (vector repeat-key) nil)))
,@body
(while repeat-key
(message "(Type %s to repeat)" repeat-key-str)
(let ((event (read-event)))
(clear-this-command-keys t)
(if (equal event repeat-key)
(progn ,@body
(setq last-input-event nil))
(setq repeat-key nil)
(push last-input-event unread-command-events))))))
Вот как вы его используете:
(defun hello-world ()
(interactive)
(with-easy-repeat
(insert "Hello, World!\n")))
(global-set-key (kbd "C-c x y z") 'hello-world)
Теперь вы можете ввести Cc xyzzz , чтобы вставить Hello, World!
три раза.