论坛里贴 Emacs Lisp 代码块高亮问题

Org-mode 记笔记截图工具 继续讨论:

目前 Lisp 代码块的效果有问题,大家需要贴 Lisp 代码块的时候,可以考虑暂时不要用 ``` … ```,而用行首四个缩进,暂时不用任何高亮。

这是用 ``` … ``` 出来的效果(错误的高亮):

(defun chunyang-emms-indicate-seek (_sec)
  (let* ((total-playing-time (emms-track-get
                              (emms-playlist-current-selected-track)
                              'info-playing-time))
         (elapsed/total (/ (* 100 emms-playing-time) total-playing-time)))
    (with-temp-message (format "[%-100s] %2d%%"
                               (make-string elapsed/total ?=)
                               elapsed/total)
      (sit-for 2))))

(add-hook 'emms-player-seeked-functions #'chunyang-emms-indicate-seek 'append)

这是用缩进出来的效果(不使用高亮):

(defun chunyang-emms-indicate-seek (_sec)
  (let* ((total-playing-time (emms-track-get
                              (emms-playlist-current-selected-track)
                              'info-playing-time))
         (elapsed/total (/ (* 100 emms-playing-time) total-playing-time)))
    (with-temp-message (format "[%-100s] %2d%%"
                               (make-string elapsed/total ?=)
                               elapsed/total)
      (sit-for 2))))

(add-hook 'emms-player-seeked-functions #'chunyang-emms-indicate-seek 'append)

P.S. 在 Emacs 里给每一行前添加四个空格的方法之一是用 C-x r t (string-rectangle),要注意先选好 region。

@guanghui.qu 这个问题现在什么状况了?

1 个赞

现在是有这个问题。原因是论坛默认使用的是 默认的 Getting highlight.js 版本,其中并没有包含 lisp 语言的高亮。我们要做的是替换 highligh 的源就可以了。

@xuchunyang 已经解决,所以还是继续使用 四个 ` (GitHub 口味 Markdown)不要使用空格的方式来写代码。

更多有关解决方法的信息可以在下面找到,

https://meta.discourse.org/t/adding-additional-languages-to-highlight-js-used-by-discourse/22925/2

如果后续有更多语言要的支持可以在此处进行添加。

2 个赞

现在好很多了。但是我还没指定语言 tag,怎么就高亮了呢?我觉得这可能是个 Bug,要是我不需要高亮怎么办?

另外,这里 Emacs Lisp 的语言 tag 是什么?在 Github 上可以用:lispemacs-lispelispel,等等。

没指定的话是自动检测语言。你可以试试nohighlight。考虑highlightjs的话,那边是没有emacs-lisp什么的,只有lisp clojure等。

人们简称 GFM (GitHub Flavoured Markdown)

1 个赞

我其实是不喜欢中英文一起说的,所以被动技能自动翻译(除去专有名词外)。

highlight.js 支持的 Lisp 有四种,我加了中间两种。Demo 你可以在下面找到,如果你需要更多语言支持私信@zilongshanren 或者 @ 他或我。

https://highlightjs.org/static/demo/

传图好爽呀,8G 要不够用啦!哇哈哈哈哈

我觉得没指定语言标签的话,不应该高亮。

另外,帖子中的高亮有点多了!括号之后的符号全都被高亮成同一个颜色了,然而实际上这些符号的语意并不同,比如:let 里的括号表示的临时变量,而不是函数。默认不高亮的一个理由是:高亮 Lisp 总会有问题,尤其在高亮的方法过于激进的时候,所以有时候完全不高亮反而更好些。

Emacs Lisp 代码高亮效果对比:

本论坛使用 lisp

(defun chunyang-emms-indicate-seek (_sec)
  (let* ((total-playing-time (emms-track-get
                              (emms-playlist-current-selected-track)
                              'info-playing-time))
         (elapsed/total (/ (* 100 emms-playing-time) total-playing-time)))
    (with-temp-message (format "[%-100s] %2d%%"
                               (make-string elapsed/total ?=)
                               elapsed/total)
      (sit-for 2))))

(add-hook 'emms-player-seeked-functions #'chunyang-emms-indicate-seek 'append)

StackExchange 上使用 lang-el

Github 上使用 elisp

考虑到三者各自有各自的问题,延续现状也可以理解。但是能不能不要去猜什么语言?完全由用户去控制用什么语言高亮,或者至少告诉我怎么才能不高亮(用 nohighlight 不行)。要是能解释下这里插代码的正确方法和注意事项就更好了,因为毕竟我们所熟悉的 Github 或 SO 都不完全一样。

看看能不能替换成别的引擎咯。GFM的话kramdown比较好。似乎google还有个pretty.js @XCREATES

我查了一下开源的版本,他们貌似不接受 Github 提 issue,可能有自己的 issue 系统。。

我觉得暂时还是使用不高亮的效果吧。

我对 ROR 也不熟,如果熟悉 ROR 的同学可以帮忙改进一下这个语法高亮的问题。

1 个赞

应该是markdown引擎的问题,主要是js和css控制的,找前端的就可以搞.

highlight.js 可以选择Styles,里面有github的style.

1 个赞

Discourse 名没有提供这个选项,只能选择需要高亮的语言。

配置里没选项,那可能要简单的改一下Discourse的代码了.

1 个赞

我想是要这样了,我已经将这个需求加入社区建设清单了,之后会实现。

代码块的高亮有一个很奇怪的bug啊

就像这个链接里面 : 在spacemacs生成micro-state的同时为每个命令生成对应的执行并进入micro-state的函数

前面两个代码块还是正常的,第三个代码块就变成这样了:

确实挺奇怪的。不过我还是觉得本来 Elisp 的代码高亮就很糟糕,根本就不怎么能看,我自己宁愿完全不用高亮。