Почему функция elisp не работает (как я ожидаю)? - PullRequest
1 голос
/ 16 марта 2011

Я хотел написать что-то, что переместилось бы на одно окно назад в emacs и связалось бы с C-x S-o

(global-set-key [C-x S-o] '(other-window -1))

Когда я загружаю .emacs, связывающийся с ним, что-то ломается, все мои полосы прокрутки вновь появляются (ранее были отключены), и C-x S-O работает точно так же, как C-x o.

Исправление было бы неплохо, но я также был бы благодарен за объяснение того, почему оно не работает.

Ответы [ 3 ]

6 голосов
/ 16 марта 2011

Вы не можете вызывать функции с такими параметрами, как в global-set-key.Должно быть так:

(global-set-key [C-x S-o] (lambda() (interactive) (other-window -1)))

, который оборачивает нужную вам функцию в анонимную интерактивную форму.

2 голосов
/ 16 марта 2011

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

(global-set-key "\C-xO" 'my-other-window)

(defun my-other-window ()
  (interactive)
  (other-window -1)
  )

См. Руководство для получения более подробной информации:

(info "(emacs)Init Rebinding")
1 голос
/ 07 апреля 2011

Были две проблемы с вашим кодом:

  1. Вам нужно интерактивный в форме, к которой вы привязываете ключ (также стоит прочитать вики ))
  2. Рекомендуется использовать kbd для считывания требуемой привязки клавиш,
    например, (global-set-key (kbd "C-x O") '...)
...