2012-07-25 59 views
2

有所謂的嚴格格式,如pdb - 其中符號的含義由符號的色號定義。例如here是上述pdb格式的規範。根據色號應用臉部顏色

有沒有一種方法可以應用基於列範圍的面部顏色?

一個可以正常添加一個正則表達式加以強調,例如在下面的方式在當前會話:

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

那麼,有沒有指定的臉在列的方式,比方說7-11 - 應說,紅色?

編輯

所以答案是:

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

回答

2

定義一個正則表達式,將選擇合適的欄目。 例如,要選擇第3列(假設列中僅包含字母,以示例清晰),可以執行類似"\(?:[a-z]+ \)\{2\}\([a-z]+\)"的操作,然後匹配第一組。

當然,您可以使用format創建這樣一個字符串,並傳遞一些參數以獲得更大的靈活性。

;; 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) 
+0

看起來像'「\(?:[az] + \)\ {2 \} \([az] + \)」'與列號無關。它只是標記所有長於3'[a-z]個字符的單詞。 – Adobe 2012-07-25 14:35:52

+0

當您選擇第一組時,您將擁有第三列。前2列是害羞組,不會計算在內。 – 2012-07-25 15:54:45

+0

(font-lock-add-keywords nil'((「\\(?:[az] + \\)\\ {2 \\} \\([az] + \\)」1 font-lock-warning - )))例如 – 2012-07-25 15:59:57

0

以下最初applyies着色從第七文本:

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

作爲其他方向,以下代碼中的空白模式,其超過一定數量凸顯字符被發現到第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) 
)))