2

シンボルの意味がシンボルの列番号によって定義されるpdbのような、いわゆる厳密な形式があります。たとえば、上記の pdb 形式の仕様を次に示します。

列の範囲に基づいて顔の色を適用する方法はありますか?

通常、強調表示する正規表現を追加できます。たとえば、現在のセッションでは次のようにします。

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

では、7-11 列の面を指定する方法はありますか?たとえば、赤にすべきでしょうか?

編集

したがって、答えは次のとおりです。

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

2 に答える 2

2

適切な列を選択する正規表現を定義します。たとえば、3番目の列を選択するには(例をわかりやすくするために列に文字のみが含まれていると仮定)、次のような操作"\(?:[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
    "^\\([^\t\n]\\{%s\\}\\|[^\t\n]\\{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)
于 2012-07-25T13:49:45.567 に答える
0

以下は、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)
)))
于 2012-07-25T15:07:10.347 に答える