2013-05-31 2 views
1

У меня есть следующие глобальные сочетания клавиш в Emacs:Emacs: как получить глобальное значение ярлыка

(global-set-key (kbd "C-<right>") 'forward-word) 

Для орг-режиме, я решил пересмотреть этот ярлык. Если курсор стоит на ссылке, перейдите в ссылку. В противном случае - используйте функцию forward-word.

(defun is-link-p() 
     (if (org-in-regexp org-bracket-link-regexp) 
      t)) 

(defun follow-link-or-next-word() 
     (interactive) 
     (if (is-link-p) 
      (org-open-at-point) 
      (forward-word))) 

(add-hook 'org-mode-hook (lambda() 
     (define-key org-mode-map (kbd "C-<right>") 'follow-link-or-next-word))) 

Можно ли изменить орг-режим ярлык следующим образом: вместо вызова (вперед-слово), найти то, что функция глобально связана с "C-<right>" и называть его вместо этого.

Таким образом, мне не нужно будет менять (форвард-слово) дважды, если я решит изменить глобальный ярлык.

+1

Если вы явно хотите глобальное связывание в качестве запасного варианта, то это не дубликат; однако, определенно связаны следующие: [Elisp: условно изменить ключевое слово] (http://stackoverflow.com/questions/16090517/elisp-condition-change-keybinding) и [Emacs key binding fallback] (http://stackoverflow.com/вопросы/2494096/Emacs-ключ-связывающего резервный). – phils

ответ

4

Я думаю, что вы ищете функции (lookup-key keymap key &optional accept-defaults)

Эта функция возвращает определение ключа в таблице ключей. Все остальные функции , описанные в этой главе, которые ищут ключи, используют ключ поиска. Вот примеры:

 (lookup-key (current-global-map) "\C-x\C-f") 
      ⇒ find-file 
     (lookup-key (current-global-map) (kbd "C-x C-f")) 
      ⇒ find-file 

Вы можете расширить свои функции:

(defun is-link-p() 
    (if (org-in-regexp org-bracket-link-regexp) 
     t)) 

(defun follow-link-or-default-action() 
    (interactive) 
     (let ((global-default (lookup-key (current-global-map) (kbd "C-<right>")))) 
      (if (is-link-p) 
       (org-open-at-point) 
       (funcall global-default)))) 

(add-hook 'org-mode-hook (lambda() 
     (define-key org-mode-map (kbd "C-<right>") 'follow-link-or-default-action))) 
+1

Но вы можете переименовать 'follow-link-or- ** next-word **' :) –

+0

@MiserableVariable Хорошая точка - я изменил ее – djf

Смежные вопросы