Il codice seguente evidenzia i nomi delle funzioni note di Emacs-Lisp.
Tenere presente che lo fa anche se alcune occorrenze di un determinato nome di funzione non rappresentano la funzione. Ad esempio, il nome potrebbe essere usato come nome di variabile. Non è un grosso problema in pratica, ma buono a sapersi.
;; `setq' is a variable here, but it is highlighted anyway.
(let ((setq (foobar)))...)
Per accendere automaticamente la evidenziando in modalità Emacs Lisp, fare questo:
(font-lock-add-keywords 'emacs-lisp-mode
'((my-fl . 'font-lock-constant-face)) ; Or whatever face you want. 'APPEND)
(defun my-fl (_limit)
(let ((opoint (point))
(found nil))
(with-syntax-table emacs-lisp-mode-syntax-table
(while (not found)
(cond ((condition-case()
(save-excursion
(skip-chars-forward "'")
(setq opoint (point))
(let ((obj (read (current-buffer))))
(and (symbolp obj) (fboundp obj)
(progn (set-match-data (list opoint (point))) t))))
(error nil))
(forward-sexp 1)
(setq opoint (point)
found t))
(t
(if (looking-at "\\(\\sw\\|\\s_\\)")
(forward-sexp 1)
(forward-char 1)))))
found)))
Nota: Se si desidera vedere l'effetto di solo che questa evidenziazione, quindi prima fare questo in un Emacs buffer di modalità -Lisp, per sbarazzarsi di altri Emacs Lisp-font-lock evidenziando:
M-: (setq font-lock-keywords ()) RET
UPDATE ---
ho creato un comando minor-mode e biblioteca per questo:
Esso consente di evidenziare i simboli definiti Emacs Lisp: funzioni e variabili, solo funzioni, o solo variabili. In alternativa è possibile evidenziare solo i simboli non noti per essere definiti.
Grazie! Ora capisco che '\\ (... \\)' è il punto. Ma voglio sapere che cosa significa "1"? – kuanyui
1 significa "il primo gruppo catturato", 2 significa il secondo gruppo catturato, se ce n'era uno. 0 indica l'intera corrispondenza –
Migliore: rimuovi la variabile e lascia semplicemente il 'defface'. Le variabili del viso sono obsolete. Probabilmente potresti voler usare il built-in 'font-lock-function-name-face'. Il regexp non riesce a catturare alcuni nomi di funzioni abbastanza comuni (ad esempio 'string =', '<=', '+', o 'foo/bar'). '" (\\ s - * \\ (\\ _ <\\ (?: \\ sw \\ | \\ s _ \\) + \\) \\ _> "' fornisce una copertura più completa. – lunaryorn