Соблюдение этих соглашений поможет вашей программе лучше вписаться в Emacs при запуске.
next-line или previous-line в программах; почти всегда forward-line более удобен, а также более предсказуем и надежен. См. Перемещение по строкам текста.
В частности, не используйте ни одну из этих функций:
beginning-of-buffer, end-of-buffer
replace-string, replace-regexp
insert-file, insert-buffer
Если вы просто хотите переместить курсор, заменить определенную строку или вставить содержимое файла или буфера, не используя другие функции, предназначенные для интерактивных пользователей, вы можете заменить эти функции одной или двумя строками простого кода Lisp.
Векторы полезны для таблиц значительного размера, которые обращаются в произвольном порядке (а не ищутся от начала до конца), при условии, что нет необходимости в вставке или удалении элементов (только списки это позволяют).
message, а не princ. См. Область эхо.
error (или signal). Функция error не возвращает значение. См. Как сигнализировать об ошибке.
Не используйте message, throw, sleep-for или beep для сообщения об ошибках.
Иногда полезно сообщить пользователю, откуда возникла ошибка, даже если debug-on-error равен nil. В таких случаях к сообщению об ошибке можно добавить строчную символьную константу Lisp. Например, сообщение об ошибке «Invalid input» можно расширить до «some-function: Invalid input».
yes-or-no-p или y-or-n-p, должен начинаться с заглавной буквы и заканчиваться знаком «?».
Enter the answer (default 42):
interactive, если вы используете выражение Lisp для создания списка аргументов, не пытайтесь предоставить правильные значения по умолчанию для аргументов области или позиции. Вместо этого предоставьте nil для этих аргументов, если они не были указаны, и пусть тело функции вычислит значение по умолчанию, когда аргумент равен nil. Например, напишите это:
(defun foo (pos) (interactive (list (if specified specified-pos))) (unless pos (setq pos default-pos)) ...)
(defun foo (pos)
(interactive
(list (if specified specified-pos
default-pos)))
...)
Это нужно для того, чтобы повторное выполнение команды пересчитывало эти значения по умолчанию на основе текущих обстоятельств.
Вам не нужно принимать такие меры предосторожности, когда вы используете интерактивные спецификации «d», «m» и «r», потому что они делают специальные приготовления для пересчета значений аргументов при повторном выполнении команды.