Ключевые аккорды в 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)
Другие вопросы по тегам