Подтвердить что ты не робот

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

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

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

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

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

Ответ 1

Нет разницы:

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

дает t

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

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

#<buffer foo.txt>

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

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

Плюс больше я уверен.

Ответ 2

Подробный список можно найти в верхней части справочного индекса Emacs lisp.

Изменить: или еще более удобно, изнутри Emacs:

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

  • d m elisp RET (откройте руководство elisp)

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

Ответ 3

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

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

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

  • "-%-", текст для определения: один тире и % - construct, что приводит к тире достаточно для заполнения оставшейся части линии режима ", в результате чего появился знаменитый 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.