4

在 Emacs 中,有没有一种方法可以将带引号和反引号的 sexps 的括号与其他 sexps 的括号不同地突出显示,以便它们脱颖而出?例如,我希望这些括号的颜色与其他括号不同:

(foo `(bar (baz)) quux)
      ^         ^
4

2 回答 2

1

看看mic-paren,这是作为 Emacs 包 paren.el 和 stig-paren.el 的扩展而构建的次要模式。它的特点是识别“逃脱”的性别。

现在特别强调一下:如果你看一下代码,引用的 sexp 匹配的行为是由变量控制的paren-match-quoted-paren。当找到几个匹配的 sexps 时,字体更改是使用以下语句进行的:

(mic-overlay-put mic-paren-backw-overlay 'face paren-mismatch-face)

(对于匹配的,不匹配的类似替代方案)。定义替代字体应该不会太难(类似于使用 所做的),如果为真paren-mismatch-face,则用使用替代字体的函数替换那些字体更改语句。paren-match-quoted-paren

注意:更新链接以引用最新版本

于 2009-10-29T20:34:51.660 回答
1

您可以将以下补丁应用于mic-paren(点击链接获取最新版本,3.8)以获得您想要的。自定义新创建的面部paren-face-quoted-match,该面部明显设置为具有绿色前景和橙色背景以用于测试目的。

现在,当您在一组匹配的括号旁边时,前面有一个单引号`,您将获得带引号的面。此示例使用橙色背景和绿色前景 - 最有可能是您想要更改的颜色。

这是它的图片: alt text http://img262.imageshack.us/img262/8866/quoted.png

--- orig-mic-paren.el   2009-11-11 17:02:42.000000000 -0800
+++ mic-paren.el    2009-11-11 17:05:35.306263000 -0800
@@ -561,4 +561,16 @@
   :group 'mic-paren-matching)

+(defface paren-face-quoted-match
+  '((((class color)) (:foreground "green" :background "orange"))
+    (t (:reverse-video t)))
+  ""
+  :group 'faces
+  :group 'mic-paren-matching)
+
+(defcustom paren-quoted-match-face 'paren-face-quoted-match
+  "Mic-paren face used for a quoted paren"
+  :type 'face
+  :group 'mic-paren-matching)
+
 ;;; End of User Options
 ;;; ======================================================================
@@ -1052,5 +1064,9 @@
                   face (if mismatch
                            paren-mismatch-face
-                         paren-match-face)
+                         (save-excursion
+                          (if (progn (goto-char (- (min (point) opos) 1))
+                                     (looking-at "`"))
+                              paren-quoted-match-face
+                            paren-match-face)))
                   visible (when (pos-visible-in-window-p opos)
                             (save-excursion

要应用补丁,请将补丁块剪切/粘贴到名为 mic.patch 的文件中,然后运行以下命令:

patch mic-paren.el mic.patch
于 2009-11-12T01:15:25.247 回答