emacs / elisp: для чего используется символ хэша (фунт, знак числа, октоторп)?


что это значит?

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

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

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

3 ответа:

нет никакой разницы:

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

доходность t

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

в общем, он используется в печатные представление вместе с левой угловой скобки (

#<buffer foo.txt>

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

и тогда у вас есть его использование для обозначения база для чисел, например,#x2c -> 44.

плюс еще, я уверен.

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

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

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

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

это может быть создано с помощью propertize функция:

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

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

было бы то же самое, что #("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.

должен быть полный список можно найти в верхней части Emacs lisp reference index.

Edit: или еще удобнее, изнутри самого Emacs:

  • M-xinfoRET (открытия браузера)

  • dmelispRET (откройте elisp руководство)

  • я#RET (список записи # в индексе)