Colomn番号に基づいて顔の色を適用します
-
11-12-2019 - |
質問
以下のような、いわゆる厳密な形式があります pdb -シンボルの意味は、シンボルのcolomn番号によって定義されます。例えば ここに 上記のpdb形式の仕様です。
列の範囲に基づいて顔の色を適用する方法はありますか?
通常は、現在のセッションの場合など、強調表示する正規表現を次のように追加できます:
(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
それで、列でその顔を指定する方法はありますか、たとえば7-11-は、たとえば-赤ですか?
編集:
だから答えは:
(font-lock-add-keywords nil '(("^.\\{2\\}\\(.\\{2\\}\\)" 1 font-lock-warning-face)))
解決
適切な列を選択する正規表現を定義します。たとえば、3番目の列を選択するには(例を明確にするために列に文字のみが含まれていると仮定します)、次のようなことができます "\(?:[a-z]+ \)\{2\}\([a-z]+\)"
そして、最初のグループに一致します。
もちろん、このような文字列を作成するには、次のようにします format
そして、より柔軟性のためにいくつかの引数を渡します。
(font-lock-add-keywords nil '(("\\(?:[a-z]+ \\)\\{2\\}\\([a-z]+\\)" 1 font-lock-warning-face)))
別の方向として、特定の数の文字を強調表示するwhitespace-modeで次のコードが見つかりました:
;; 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)
他のヒント
次に、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)
)))
. 所属していません StackOverflow