emacs / elisp: Для чего используется символ хеш (фунт, знак числа, октоторп)? - PullRequest
85 голосов
/ 24 апреля 2010

Что это делает?

(add-hook 'compilation-mode-hook #'my-setup-compile-mode)

... и отличается ли он от

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)

Ответы [ 3 ]

84 голосов
/ 24 апреля 2010

Разницы нет:

(eq 'my-add #'my-add)

урожайность t

# может использоваться перед выражением lambda, указывающим байтовому компилятору, что следующее выражение может быть скомпилировано в байтах, см. Документы для Анонимные функции . Но в случае символа нечего компилировать.

Как правило, он используется в печатном представлении вместе с левой угловой скобкой (<), чтобы указать, что напечатанный объект является описанием (но не может быть прочитан). Например: </p>

#<buffer foo.txt>

Он также используется читателем в конструкциях для представления круговых структур. См. Документы для Синтаксис чтения для круговых объектов .

И затем вы можете использовать для обозначения для целых чисел , например, #x2c -> 44.

Я уверен, что еще больше.

23 голосов
/ 20 февраля 2011

Я нашел этот вопрос, когда искал, что означал хеш в чем-то, что я нашел во время взлома mode-line-format:

#("-%-" 0 3
  (help-echo "Display as tooltip when mouse hovers or with display-local-help."))

формат, используемый для свойств текста в строках , где:

  • "-%-", текст, подлежащий настройке: одна черта и % - конструкция , которая приводит к «черточкам, достаточным для заполнения оставшейся части строки режима», что приводит к знаменитый Emacs ------.
  • 0, первый символ, к которому применяются свойства текста.
  • 3, последний символ, к которому применяются свойства текста, , т.е. всего "-%-".
  • (help-echo "..."), свойство и строка в качестве аргумента.

Это можно создать с помощью функции propertize :

(propertize "Hover over me!" 'help-echo '"congratulations!")

(insert (propertize

будет таким же, как #("Hover over me!" 0 14 (help-echo "Congratulations!")):

Small example.

Если вы используете режим блокировки шрифта, команда buffer-substring может выдать что-то вроде этого:

(buffer-substring 1 28) ; First 27 characters in the current buffer
 ⇒ #(";; This buffer is for notes"
     0 3
     (fontified t face font-lock-comment-delimiter-face)
     3 27
     (fontified t face font-lock-comment-face))

Чтобы вы могли создать что-то вроде:

Showing the corresponding propertize function for multiple properties.

20 голосов
/ 24 апреля 2010

Список, который должен быть исчерпывающим, можно найти в верхней части индекса Eiscs lisp .

Редактировать : Или, что еще удобнее, из самого Emacs:

  • М-х info RET (открыть информационный браузер)

  • d m elisp RET (открыть руководство по elisp)

  • I # RET (перечислить записи для # в индексе)

...