Пользовательские привязки клавиш Emacs не работают - PullRequest
0 голосов
/ 10 ноября 2009

Привязки клавиш, которые я определил в моем файле .emacs, не работают. Вот файл:

;init modes
(menu-bar-mode 0)
(tool-bar-mode 0)
(cua-mode)
(column-number-mode)
(fset 'perl-mode 'cperl-mode)
(cperl-set-style PerlStyle)

;keymappings
(global-set-key [f12] 'save-buffer)
(global-set-key [S-f12] 'write-file)
(global-set-key [f7] 'ispell)
(global-set-key [up] 'scroll-one-line-up)
(global-set-key [down] 'scroll-one-line-down)

;functions
(defun scroll-one-line-up (&optional arg)
  (interactive "p")
  (scroll-up (or arg 1)))
(defun scroll-one-line-down (&optional arg)
  (interactive "p")
  (scroll-down (or arg 1)))

Я знаю, что Emacs анализирует файл, так как все остальное работает. Просто ключи не связаны.

Как я могу заставить это работать?

Ответы [ 3 ]

6 голосов
/ 10 ноября 2009

У вас есть ошибка в вашем .emacs в строке:

(cperl-set-style PerlStyle)

Это должно быть записано как:

(cperl-set-style 'PerlStyle)

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

1 голос
/ 11 ноября 2009

Чтобы следовать моему предыдущему ответу, вам нужно изменить привязку в локальной таблице ключей, используя переменную ловушки. Вот пример, который я использую с java-mode:

(defun java-setup ()
   (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92)
         indent-tabs-mode nil
         tab-width 4
         fill-column 96
         c-comment-start-regexp "\\(@\\|/\\(/\\|[*][*]?\\)\\)"))

 (add-hook 'java-mode-hook 'java-setup)

В вашем случае вы бы использовали что-то вроде:

 (defun mysetup ()
    (define-key local-map [f12] 'func))

 (add-hook 'your-mode-hook 'mysetup)

Кроме того, fwiw, я делаю следующее, чтобы определить мои глобальные ключи:

(defun function-key-help ()
  (interactive)
  (switch-to-buffer "*Help*")
  (erase-buffer)
  (insert-file (expand-file-name "~/lib/fkeys.help"))
  (message "Type C-x b <nl> to remove help window."))

(define-key global-map [f12] 'function-key-help)

И это прекрасно работает в моей настройке Emacs 23.

0 голосов
/ 10 ноября 2009

Трудно сказать, что может быть вашей проблемой без дополнительной информации, например, это все ваши сочетания клавиш или только один или два, которые не работают. Я рискну предположить, что это последние два ([вверх] и [вниз]). В этих случаях приведенная ниже онлайновая документация, по-видимому, указывает на то, что вы можете скрывать глобальные определения от локальных определений режима.

global-set-key - это интерактивный скомпилированная функция Lisp в `subr.el '.

(global-set-key key command)

Дать ключу глобальную привязку в качестве команды. команда это определение команды использование; обычно это символ, называющий интерактивно вызываемая функция. ключ является ключевой последовательностью; неинтерактивном, это строка или вектор символов или типы событий, и не-ASCII символы с кодами выше 127 (такие как ISO Latin-1) может быть включен, если вы используйте вектор.

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

...