根据柱号应用面部颜色



有一些所谓的严格格式,比如pdb,其中符号的含义由符号的冒号数定义。例如,这里是上面提到的pdb格式的规范。

有没有一种方法可以根据列范围应用面部颜色?

通常可以添加一个要突出显示的regexp,例如以以下方式显示当前会话:

(font-lock-add-keywords nil '(("\[\(.+?\)\]" . font-lock-keyword-face)))

那么,有没有一种方法可以指定列中的面,比如7-11-应该是红色的?

编辑

所以答案是:

(font-lock-add-keywords nil '(("^.\{2\}\(.\{2\}\)" 1 font-lock-warning-face)))

定义一个正则表达式,用于选择适当的列。例如,要选择第三列(为了示例的清晰性,假设这些列只包含字母),可以执行类似"(?:[a-z]+ ){2}([a-z]+)"的操作,然后在第一组上进行匹配。

当然,您可以使用format创建这样一个字符串,并为其传递一些参数以获得更大的灵活性。

(font-lock-add-keywords nil '(("\(?:[a-z]+ \)\{2\}\([a-z]+\)" 1 font-lock-warning-face)))

作为另一个方向,以下代码是在空白模式下发现的,它突出显示某个数字上的字符:

;; Show "long" lines
(list
(let ((line-column (or whitespace-line-column fill-column)))
   (format
    "^\([^tn]\{%s\}\|[^tn]\{0,%s\}t\)\{%d\}%s\(.+\)$"
    whitespace-tab-width
    (1- whitespace-tab-width)
    (/ line-column whitespace-tab-width)
    (let ((rem (% line-column whitespace-tab-width)))
      (if (zerop rem)
      ""
    (format ".\{%d\}" rem)))))
 (if (memq 'lines whitespace-active-style)
     0              ; whole line
   2)               ; line tail
 whitespace-line t)

以下应用程序最初对第7列至第11列的文本进行着色:

(defun bk-pdb-color-ATOM-initially()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (search-forward-regexp "^ATOM  \(.\{5\}\).\(.\{4\}\).\(.\{3\}\).\(.\{5\}\).\{4\}\(.\{24\}\)" nil t)
      (progn
        (overlay-put
         (make-overlay (match-beginning 1) (match-end 1))
         'face '(:foreground "blue"))
        (overlay-put
         (make-overlay (match-beginning 2) (match-end 2))
         'face '(:foreground "red"))
        (overlay-put
         (make-overlay (match-beginning 3) (match-end 3))
         'face '(:foreground "purple1"))
        (overlay-put
         (make-overlay (match-beginning 4) (match-end 4))
         'face '(:foreground "orange"))
        (overlay-put
         (make-overlay (match-beginning 5) (match-end 5))
         'face '(:foreground "green"))
        t nil)
)))

相关内容

  • 没有找到相关文章

最新更新