LINUX.ORG.RU

Как в Emacs повторять вызов функции по последней клавише?

 


0

2

Есть простенькая функция:

(defun my-transpose-lines ()
  (interactive)
  (transpose-lines 1)
  (previous-line 2)
  (end-of-line))

Она забиндена на:

(global-set-key (kbd "C-x t") 'my-transpose-lines)

Хочется: после нажатия C-x t вызывать функцию снова и снова, жмакая одну лишь клавишу t.

P.S. По такому принципу работает встроенная команда C-x e, где достаточно один раз исполнить макрос и размножать его повторными нажатиями e.

Ответ на: комментарий от evbogdanov

Ну так в чем проблема-то? Не можете же вы быть не в курсе, что ГНУ Емакс — это свободная программа, и вы в полном праве взять из него кусочек, и адаптировать под свои нужды? :-)

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Проблема в том, что с данной задачей я раньше не сталкивался и, прежде чем копаться в исходниках самому, решил запросить помощь зала.

evbogdanov
() автор топика
Ответ на: комментарий от evbogdanov

Проблема в том, что с данной задачей я раньше не сталкивался

Я тоже.

и, прежде чем копаться в исходниках самому, решил запросить помощь зала

Ну ок... В двадцать секунд я, правда, не уложусь, тут минут пять, наверное.

(defvar transpose-lines-map
  (let ((map (make-sparse-keymap)))
    (define-key map "t" #'transpose-lines)
    map))

(defun transpose-lines-dwim (arg)
  (interactive "*p")
  (transpose-lines arg)
  (set-transient-map transpose-lines-map t))

(define-key ctl-x-map "t" #'transpose-lines-dwim)
Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Премного благодарен!

Вы открыли для меня set-transient-map. С её помощью задача действительно решается тривиально.

С праздником ваших близких женщин :-)

evbogdanov
() автор топика
Ответ на: комментарий от evbogdanov

Да всегда пожалуйста.

Вы открыли для меня set-transient-map

Ну, а вы для меня. :-) Как-то не доводилось смотреть ранее, как это С-x z z ... или C-x e e ... там сделано.

Но ничего, оно полезно было здесь это зафиксировать. Нагуглится кому надо будет.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.