emacs/elisp: What is the hash (pound, number sign, octothorp) symbol used for?

不问归期 提交于 2019-11-27 00:09:23

问题


What does this do?

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

...and is it different than

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

回答1:


There is no difference:

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

yields t

The # can be used in front of a lambda expression indicating to the byte-compiler that the following expression can be byte compiled, see the docs for Anonymous Functions. But there's nothing to compile in the case of a symbol.

In general, it is used in the printed representation along with the left angle bracket (<) to indicate that the object printed is a description (but cannot be read). For example:

#<buffer foo.txt>

It is also used in constructs by the reader to represent circular structures. See the docs for Read Syntax for Circular Objects.

And then you have its use for denoting the base for integers, e.g. #x2c -> 44.

Plus more I'm sure.




回答2:


I found this question while searching for what the hash meant in something I found while hacking mode-line-format:

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

which is a format used for text properties in strings where:

  • "-%-", text to be propertized: one dash and a %-construct that results in "dashes sufficient to fill the remainder of the mode line", resulting in the famous Emacs ------.
  • 0, the first character upon which the text properties apply.
  • 3, the last character upon which the text properties apply, i.e. the entire "-%-".
  • (help-echo "..."), a property and a string as its argument.

This can be created with the propertize function:

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

would be the same as #("Hover over me!" 0 14 (help-echo "Congratulations!")):

If you're using font lock mode, using the buffer-substring command might produce something like this:

(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))

So you could create something like:




回答3:


The should-be-comprehensive list can be found at the top of the Emacs lisp reference index.

Edit: Or even more conveniently, from within Emacs itself:

  • M-x info RET (open the info browser)

  • d m elisp RET (open the elisp manual)

  • I # RET (list the entries for # in the index)



来源:https://stackoverflow.com/questions/2701698/emacs-elisp-what-is-the-hash-pound-number-sign-octothorp-symbol-used-for

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!