2012-07-25 3 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

적절한 열을 선택하는 정규 표현식을 정의합니다. 예를 들어 세 번째 열을 선택하려면 (예를 명확하게하기 위해 열에는 문자 만 포함되어 있음) "\(?:[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

+0

첫 번째 그룹을 선택하면 세 번째 열이 생깁니다. 처음 2 개의 열은 수줍음이 많으며 계산되지 않습니다. –

+0

(font-lock-add-keywords nil '((": [az] + \\) \\ {2 \\} \\ ([az] + \\)"1 font-lock-warning - 페이스)))) 예 : –

0

다음은 7에서 텍스트에 처음 착색을 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) 
)))