我希望有一个漂亮的 *scratch*
message, 所以有如下 .emacs
:
(setq initial-scratch-message #(";; *
;; May the Code be with You!
;; . .
;; *
;; /\\/|_ __/\\\\
;; / -\\ /- ~\\ . \\='
;; \\ = Y =T_ = /
;; )==*(\\=` \\=`) ~ \\
;; / \\ / \\
;; | | ) ~ (
;; / \\ / ~ \\
;; \\ / \\~ ~/
;; _/\\_/\\_/\\__ _/_/\\_/\\__~__/_/\\_/\\_/\\_/\\_/\\_
;; | | | | ) ) | | | (( | | | | | |
;; | | | |( ( | | | \\\\ | | | | | |
;; | | | | )_) | | | |))| | | | | |
;; | | | | | | | | (/ | | | | | |
;; | | | | | | | | | | | | | | |
\n"
0 671 (face (:foreground "green"))))
但是我发现我设置的 (:foreground "green")
好像没有效果 (即使有效果, 好像也会被 face for comments 给覆盖掉)…
请问这个问题有什么解决方案吗?
SPQR
2
用propertize
试试。例如 (propertize "foobar" 'face 'error)
,另外elisp里面没有#(...)
这种写法吧,只有#'function-name
这种而且和'function-name
没实际区别。
还有一个可能的原因是major-mode的font-lock把你设置的face覆盖了,试试(setq initial-major-mode 'fundamental-mode)
有的, 看 manual.
试过 #("..." (font-lock-face (:foreground "green")))
了, 没啥用.
直接把 major mode 改了有点激进啊 …
SPQR
4
我这里没问题
(setq initial-scratch-message
(propertize
";; *
;; May the Code be with You!
;; . .
;; *
;; /\\/|_ __/\\\\
;; / -\\ /- ~\\ . \\='
;; \\ = Y =T_ = /
;; )==*(\\=` \\=`) ~ \\
;; / \\ / \\
;; | | ) ~ (
;; / \\ / ~ \\
;; \\ / \\~ ~/
;; _/\\_/\\_/\\__ _/_/\\_/\\__~__/_/\\_/\\_/\\_/\\_/\\_
;; | | | | ) ) | | | (( | | | | | |
;; | | | |( ( | | | \\\\ | | | | | |
;; | | | | )_) | | | |))| | | | | |
;; | | | | | | | | (/ | | | | | |
;; | | | | | | | | | | | | | | |
\n" 'face '(:foreground "green")))
学到了
改成fundermental-mode还能启动快点,不改的话,只能用put-text-property
在打开scratch buffer之后处理了,scratch buffer没有专门的hook,只能找个合适的函数advice一下,更麻烦。。。
fundamental-mode
肯定没问题啊. 问题是之后还要不要用 lisp-interaction-mode
提供的各种语法高亮及其它功能了? 当然这不是重点, 重点是这么做只是把问题扔在一边, 并没有实际解决它.
谢谢, 我试一下.
试了, 没成功.
你把函数加到 *scratch*
的模式的 hook 里就行了, 检查 buffer 名就行. 只要 buffer 名是 "*scratch*"
, 就是所谓的那个 *scratch*
buffer.
如果只是给scratch buffer加高亮的话;使用fontlock-add-keyword函数,然后把它加到 emacs-startup-hook这个钩子里,这样emacs打开scratch buffer以后,就会给scratch buffer做高亮了
你这个要用 font-lock+.el
, 文件里写最多支持到 v26. 我有空再去问下 Drew 他还打不打算维护这个库了…
谢谢, 我对 font-lock
不咋了解, 第一次知道这个函数. 我看了下这玩意好像是靠 regexp 过滤要高亮的部分的, 那我得把我的 initial-scratch-message
里的特殊字符全转义了, 我明天试一下.
另外好像在 buffer 中编辑那段 initial-scratch-message
之后, 就匹配不了 regexp, 高亮就没了. 或许我应该重新定义一个简洁一点的高亮规则, 这样即使编辑 initial-scratch-message
的部分内容也不会失去高亮, 但过于简洁又会对日常使用产生微妙的影响…