LINUX.ORG.RU

Выбор комбинации клавиш в Emacs

 


0

3

Здравствуйте!

Возникла идея, но не знаю как её реализовать. Смысл такой: для работы приходится запоминать большое количество разных комбинаций клавиш. Но есть случаи когда в разных режимах разные клавиши выполняют разные, но подобные по смыслу функции. Например, выполнение кода на питоне и выполнение кода в латехе. Может кто-нибудь написать код, который применял бы разные функции на одну и туже комбинацию клавиш в зависимости от текущего режима. Это вообще возможно?

Возникла идея, но не знаю как её реализовать.

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

Ты наверно используешь функцию global-set-key для регистрации хоткеев, которая по определению биндит _глобальные_ хоткеи. Есть разные варианты локальных хоткеев — для режимов, для буферов. Ответ на вопрос элементарно гуглится. См. local-set-key, define-key.

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

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

В вашем случае надо повернутся к двери лицом

Ты наверно используешь функцию global-set-key для регистрации хоткеев, которая по определению биндит _глобальные_ хоткеи.

Ну раз мы на ты, то я использую собственный minor-mode.

Есть разные варианты локальных хоткеев — для режимов, для буферов. Ответ на вопрос элементарно гуглится. См. local-set-key, define-key.

Совет: если тебе нечего предложить - просто не пиши. Это так легко. Когда мне нужно погуглить я гуглю, а когда вопрос требует человеческого уровня понимания - я спрашиваю на форумах.

Что я хочу:

Реализация алгоритма.

Если активен буфер с режимом mode1, то использовать для функции f-mode1 комбинацию "С-b"
Если активен буфер с режимом mode2, то использовать для функции f-mode2 комбинацию "С-b"

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

В вашем случае надо повернутся к двери лицом

Вот и я говорю — не нужно ничего реализовывать, нужно просто биндить хоткеи не глобально, всё уже реализовано.

Ну раз мы на ты

Вот бы ещё на лоре «выкать», а некоторые «выканье» воспринимают как оскорбление же.

если тебе нечего предложить - просто не пиши

Почему же, я проверил — это элементарно гуглится, зачем сюда примеры со stackoverflow или emacswiki копировать?

Что я хочу:

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

У меня сейчас нет инсталляции емакса, раньше использовал. Не могу проверить работоспособность своих советов. Поэтому вот статья по теме: https://www.masteringemacs.org/article/mastering-key-bindings-emacs#key-bind-...

А вот примеры:

;; Биндим при загрузке модуля хоткей в локальную карту, которая активна только когда активна LaTeX-mode-map
(eval-after-load 'latex 
                    '(define-key LaTeX-mode-map [(tab)] 'outline-cycle)))

;; Пример с local-set-key вместо define-key и с биндингом при вызове хука вместо eval-after-load:
(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "C-0") #'run-latexmk)))


Есть ещё удобные обёртки над стандартными функциями, например вот: https://melpa.org/#/bind-key

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

Естественно если это твой самописный minor-mode, то нужно в нём задефайнить keymap. В нём же сразу можно и хоткей задефайнить, а не переопределять:

(define-minor-mode my-mode
      :keymap
      '(([C-backspace] . something)))

vyazovoi ★★★ ()

После всех проделанных попыток. Не помогло ничего. хуки работают только в org-mode. Во всех остальных режимах назначить клавишу локально не получается.

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