Как мне сделать связывание ключей Emacs для установки переменной? - PullRequest
1 голос
/ 18 декабря 2008

У меня в Emacs есть переменная my-var, которую я хотел бы установить всякий раз, когда нажимаю C-v. Как я могу это сделать? Я попробовал это:

(defun set-my-var (value)
  "set my var"
  (interactive)
  (defvar my-var value
    "a variable of mine")
)

(global-set-key "\C-v" 'set-my-var)

Но это не удалось:

call-interactively: Wrong number of arguments: (lambda (value) "set my var"
(interactive) (defvar my-var value "a variable of mine")), 0

Ответы [ 3 ]

4 голосов
/ 18 декабря 2008

На самом деле, defvar не делает то, что вы думаете, он делает тоже: он только изменяет значение, если раньше значения не было. Вот фрагмент, который делает то, что вы ищете, используя аргумент CTRL-u:

(defun set-my-var (value)
  "Revised version by Charlie Martin"
  (interactive "p")
  (setq my-var value))

и вот пример, код из буфера *scratch*

(defun set-my-var (value)
  "Revised version by Charlie Martin"
  (interactive "p")
  (setq my-var value)) ; do ^J to evaluate the defun form, showing return in the buffer.
set-my-var

(global-set-key "\C-v" 'set-my-var)
set-my-var
 ;Another ^J

;;; Now, what's the value after ^U^V?
my-var
4
;;; Now ^U 8 ^V
my-var
8
;;; now ^U^U^V
my-var
16
3 голосов
/ 18 декабря 2008

Это в аргументе. Посмотрите на текст, который я только что опубликовал о (interactive). Когда вы связываете set-my-var с ключом, он ищет аргумент, но, поскольку вы использовали (interactive), аргумента не будет. То, что вы хотели - это что-то вроде (interactive "p") для получения аргумента CTRL-u или (interactive "M") для получения строки.

Прочтите руководство EMACS Lisp по «Использование интерактива».

2 голосов
/ 18 декабря 2008

Пара других подсказок:

  • CTRL-v - это стандартное связывание и довольно интенсивно используется (scroll-up). Тебе лучше найти то, что не используется иначе. Канонически, они будут добавлены к CTRL-c раскладка клавиатуры.
  • Не привыкать лечить Паренс, как будто они были С скобками. Это лучше (более привычный) LISP стиль для остальных из нас, кто может прочитайте свой код, чтобы просто закрыть все Паренс в конце.
...