2013-07-31 7 views
0

일부 추가 된 단어를 기본 글꼴 글꼴 색과 다르게 사용자 정의하려고합니다.새 키워드를 추가 할 때 C 모드의 얼굴 글꼴

(defconst lconfig-font-lock-faces 
    (list 

    '(font-lock-function-name-face 
    ((((class color)) (:foreground "DarkBlue" :bold t)))) 

    '(font-lock-constant-face 
    ((((class color)) (:foreground "Black"  :bold t)))) 


    '(font-lock-builtin-face 
    ((((class color)) (:foreground nil)))) 

    '(font-lock-preprocessor-face 
    ((((class color)) (:foreground nil)))) 

    ) 
) 

(autoload 'custom-set-faces "font-lock" "Set the color scheme" t) 
(autoload 'font-lock-fontify-buffer "font-lock" "Fontify Buffer" t) 
(progn (apply 'custom-set-faces lconfig-font-lock-faces) 
     (add-hook 'c-mode-common-hook 'font-lock-fontify-buffer) 
     (add-hook 'emacs-lisp-mode-hook 'font-lock-fontify-buffer) 
     ) 
(global-font-lock-mode t) 

(font-lock-add-keywords 
'c-mode 
'(
    ("^#[ \t]*\\(ifdef\\|else\\|ifndef\\|if !?defined\\|if\\|elif\\|endif\\|ident\\).*$" 1 font-lock-constant-face)     ;#defines 
    ("\\(^#[ \t]*define\\|^#[ \t]*include\\|^#[ \t]*undef\\).*$" 1 font-lock-function-name-face)          ;other #s 
) 
) 

불행히도 내가 사용법 #include와 #DEFINE 검은 색 인 참조하십시오 C 파일을 열 때 :

이것은 내가 뭐하는 거지입니다. 그들은 정규 표현식과 일치해야하고 진한 파란색으로 변해야합니다. 또한 #ifdef 및 #endif는 옅은 색이며 굵게 표시되지 않습니다.

도움을 주시면 감사하겠습니다.

+0

. 나는 틀릴 수도 있지만, 그런 상황에서'defconst'가 받아 들일만한 대체물이 아니라고 생각합니다. 나는 어떤 방법을 알고 싶어합니다. 아래 답변에서 작동하는 몇 가지 샘플을 추가했습니다. – lawlist

답변

1

다음은 수정할 수있는 몇 가지 예입니다. 예 : 라텍스 모드 대신 c 모드로 변경하고 색상 및 정규식으로 수정합니다. 정의가 더욱 복잡해지면서 목록에 나타나는 순서는 이전 정의보다 우선 할 수 있습니다. 따라서 자신의 작업이 제대로 작동해야한다면 나타나는 순서를 확인하십시오.

(defvar lawlist-super-HotPink1 (make-face 'lawlist-super-HotPink1)) 
(set-face-attribute 'lawlist-super-HotPink1 nil :background "white" :foreground "HotPink1" :bold t :underline nil :font "Courier" :height 200) 

(defvar lawlist-super-SeaGreen (make-face 'lawlist-super-SeaGreen)) 
(set-face-attribute 'lawlist-super-SeaGreen nil :background "white" :foreground "SeaGreen" :bold t :underline nil :font "Courier" :height 200) 

(defvar lawlist-keywords-01 
    (concat "\\b\\(?:" 
     (regexp-opt (list "INSERT" "CLIENT" "RECIPIENT" "document-name")) 
    "\\)\\b")) 

(defvar lawlist-keywords-02 
    (list (concat "\\b\\(?:" 
     (regexp-opt (list "FIXME" "TO-DO" "BUGS")) 
    "\\)\\b") 0 'lawlist-red t)) 

(font-lock-add-keywords 'latex-mode (list 

    (list (concat "\\(\{\\)\\(\\\\bf\\)\\(\\\\uline\\)\\(\{\\)\\(\\(.\\|\n\\)+?\\)\\(\}\\)\\(\}\\)") 
     '(1 lawlist-regular t) 
     '(2 lawlist-red t) 
     '(3 lawlist-blue t) 
     '(4 lawlist-regular t) 
     '(5 lawlist-bold-underline t) 
     '(7 lawlist-regular t) 
     '(8 lawlist-regular t)) 

    (list (concat 
     "\\("lawlist-keywords-01"\\)") 1 'lawlist-bumble-bee t) 

    lawlist-keywords-02 

    (list (concat "\\(\\blawlist\\b\\)") 1 'lawlist-pink t) 

)) 


(font-lock-add-keywords 'latex-mode '(

("INCLUDE\\|REVISED" 0 lawlist-red t) 

("\\(foo\\)-\\(bar\\)" (1 lawlist-super-orange t) (2 lawlist-super-cyan t)) 

("\\(hello\\) \\(World\\)" (1 lawlist-super-orange t) (2 lawlist-super-blue t)) 

) 'prepend) 


편집하여 기존 변수를 변경하는 대신 setq` 또는`맞춤 설정 variables``의 defconst``사용하는 것 같습니다

(font-lock-add-keywords 'c-mode '(

("^#[ \t]*\\(ifdef\\|else\\|ifndef\\|if !?defined\\|if\\|elif\\|endif\\|ident\\).*$" (1 lawlist-super-HotPink1 t)) 

("\\(^#[ \t]*define\\|^#[ \t]*include\\|^#[ \t]*undef\\).*$" (1 lawlist-super-SeaGreen t)) 

) 'prepend) 
+0

이것은 법률리스트를 작동시키지 않았습니다. #define/#include 및 나머지 전처리 기용 정규식을 추가했지만 각 카테고리에는 고유 한 색상이있을 수 없습니다. 다른 제안 사항이 있으십니까? – SFbay007

+0

자신의 정의를 만들기 위해이 예제에서 4 번째 줄에서 5 번째 줄과 같이 자신 만의 글꼴을 사용해 보았습니까? 아니면 defconst 대신 setq를 사용하여 기존 정의를 수정 했습니까? 동일한 키워드가 다른 키워드로 정의되지 않은 경우에는 강조 표시 할 항목을 본질적으로 정의 할 수 있습니다. 트럼 핑되는 경우 소스 코드에서 동일한 키워드 정의가 이미있는 곳을 찾아야합니다. – lawlist

+0

실제로 위에 나열된 코드 만있는 새로운 dotemacs 파일을 만들었습니다. 전 프롭 프로세서 키워드를 주요 font-lock-preprocessor-face에서 풀 수없는 것처럼 보입니다. 홈 디렉토리에서 시도해보고 #define과 #if를 별도의 색상으로 사용할 수 있습니까? – SFbay007