cperl 模式下的 Emacs Pretty Symbols::: 必须包围我的空间

Emacs Pretty Symbols in cperl mode: :: must be surrounded my spaces

我将 Emacs 与 PDE 和 cperl 模式结合使用。我真的很想使用 prettify-symbols-mode 来处理它。仅使用 perl-mode 时会发生这种情况:

Mod::thing->new( {c => 'sea'} );

变成

Mod∷thing→new( {c ⇒ 'sea'} );

然而当使用 cperl 时相同的表达式变成

Mod::thing→new( {c ⇒ 'sea'} );

在 cperl 模式下,:: 只有在两边用空格分隔时才会变成

我已经尝试添加到 cperl--pretty-symbols-alist 和 pretty-symbols-alist。仍然只有 ->=> 有效。

我认为这可能是 cperl 将字符定义为符号或单词的方式,但 ->=> 工作得很好,没有被空格包围。

我明白了。我去了 /usr/share/emacs/26.1/lisp/progmodes 并删除了一个名为 cperl-mode.elc 的文件。然后我进入了这里的存档/usr/share/emacs/26.1/lisp/progmodes/cperl-mode.el.gz。我将 cperl-mode.el 的第 1498 行编辑为 (modify-syntax-entry ?: "." cperl-mode-syntax-table) 而不是 (modify-syntax-entry ?: "_" cperl-mode-syntax-table)。然后我对文件进行了字节编译并将其放回/usr/share/emacs/26.1/lisp/progmodes

您也可以在 init 文件中执行此操作,这样您就不必编辑 Emacs 附带的任何文件。如果您编辑的文件是 Emacs 的一部分,则每次安装或升级时都需要更新它们。

(with-eval-after-load "cperl-mode"
  (modify-syntax-entry ?: "." cperl-mode-syntax-table))