Applicare il colore del viso in base al numero di colonna
-
11-12-2019 - |
Domanda
Ci sono i cosiddetti formati rigorosi, come PDB - Dove il significatodel simbolo è definito dal numero di Colomn del simbolo.Ad esempio qui è una specifica del formato PDB sopra menzionato.
.C'è un modo in cui posso applicare il colore del colore basandosi sull'intervallo di colonna?
Si può normalmente aggiungere un regexp da evidenziare, ad esempio per la sessione corrente nel modo seguente:
(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
.
Quindi c'è un modo per specificare quella faccia alle colonne, dire 7-11 - dovrebbe essere, dire - rosso?
Modifica :
Quindi la risposta è:
.(font-lock-add-keywords nil '(("^.\\{2\\}\\(.\\{2\\}\\)" 1 font-lock-warning-face)))
Soluzione
Definisci un regexp che selezionerà la colonna appropriata.
Ad esempio per selezionare la terza colonna (supponendo che le colonne contenga solo la lettera per la chiarezza dell'esempio) è possibile eseguire qualcosa come "\(?:[a-z]+ \)\{2\}\([a-z]+\)"
e quindi corrispondere al primo gruppo.
Ovviamente è possibile creare una tale stringa utilizzando format
e passandolo alcuni argomenti per maggiore flessibilità.
(font-lock-add-keywords nil '(("\\(?:[a-z]+ \\)\\{2\\}\\([a-z]+\\)" 1 font-lock-warning-face)))
Come un'altra direzione, il seguente codice è stato trovato in modalità whitespace che evidenzia i caratteri su un determinato numero:
;; 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)
. Altri suggerimenti
Le seguenti applicano la colorazione inizialmente al testo dalla 7a a 11 ° colonna:
(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)
)))
.