Ключевые аккорды в isearch
Я действительно люблю key-chord.el
, Это стало неотъемлемой частью моего рабочего процесса, но иногда мне хотелось бы, чтобы они были в минибуфере (для таких вещей, как поиск зла). В частности, я бы хотел jj
выйти из evil-search
и двигаться вниз по линии. Это возможно?
Я знаю, что могу взломать команду, которая действует как префикс и команда (см. Этот вопрос SO), так что я мог связать j
для самостоятельной вставки команды, и jj
к моей специальной команде. Как бы я мог разорвать цикл событий после указанного времени простоя? Я делаю тип jj
однажды в голубой луне, и я все еще хотел бы гибкость перерыва.
Есть ли другой способ, которого я не знаю, чтобы достичь того, чего я хочу?
РЕДАКТИРОВАТЬ:
Вначале этот вопрос был о минибуфере в целом. key-chord.el
кажется, хорошо работает с minibuffer-local-map
, Однако он не работает с isearch-mode-map
, Привязка команды к одному обычному ключу, например j
работает в isearch. Это то, что я пытаюсь решить.
2 ответа
Я нашел решение, которое вручную воспроизводит поведение key-chord.el.
(defun isearch-exit-chord-worker (&optional arg)
(interactive "p")
(execute-kbd-macro (kbd "<backspace> <return>")))
(defun isearch-exit-chord (arg)
(interactive "p")
(isearch-printing-char)
(unless (fboundp 'smartrep-read-event-loop)
(require 'smartrep))
(run-at-time 0.3 nil 'keyboard-quit)
(condition-case e
(smartrep-read-event-loop
'(("j" . isearch-exit-chord-worker)
("k" . isearch-exit-chord-worker)))
(quit nil)))
;; example bindings
(define-key isearch-mode-map "j" 'isearch-exit-chord)
(define-key isearch-mode-map "k" 'isearch-exit-chord)
Этот подход на самом деле имеет несколько преимуществ перед key-chord.el
,
- Он не использует метод ввода, поэтому вы можете использовать другой метод ввода в сочетании с этим.
- Первый символ отображается сразу и убирается, если он неверен, а
key-chord.el
показывает только после задержки.
Я нашел это полезным:
(defun isearch-enable-key-chord ()
(key-chord-mode 1)
(key-chord-define isearch-mode-map "jj" 'isearch-cancel))
(add-hook 'isearch-mode-hook 'isearch-enable-key-chord)