2014-09-23 26 views
0

我正在使用f90代碼,但使用固定格式的文件。所以我爲這個代碼文件做了一個特定的主要模式(事實上只是使用fortran模式縮進函數的f90模式)。但是,我仍然無法處理這件事:第6列中的連續字符的着色。如何在我修改後的f90.el中使用該功能?如何在Emacs中突出顯示Fortran固定格式延續線符號,而不是Fortran模式?

非常感謝!

編輯:

這裏是衍生模式:

(require 'fortran) 

(define-derived-mode epx-mode f90-mode "EPX" 
    (set (make-local-variable 'indent-line-function) 'fortran-indent-line) 
    (set (make-local-variable 'indent-region-function) 
     (lambda (start end) 
     (let (fortran-blink-matching-if ; avoid blinking delay 
       indent-region-function) 
      (indent-region start end nil)))) 
    (set (make-local-variable 'font-lock-syntactic-keywords) 
    epx-font-lock-syntactic-keywords) 
) 

(defvar epx-font-lock-syntactic-keywords nil 
    "`font-lock-syntactic-keywords' for F90. 
These get fixed-format comments fontified.") 
(let ((comment-chars "cd\\*")  ; `d' for `debugging' comments 
    ) 
    (setq epx-font-lock-syntactic-keywords 
    ;; Fixed format comments. (!-style handled normally.) 
    (list 
    (list (concat "^[" comment-chars "]") 0 '(11)) 
    (list (concat "^[^" comment-chars "\t\n]" ".\\{71\\}" 
       "\\([^\n]+\\)") 
      1 '(11)))) 
) 

(provide 'epx) 

它改變indet-line-functionindent-region-function到FORTRAN版本,而不是F90。它還修改font-lock-syntactic-keywords以固定格式註釋的顏色。

而且個例代碼:

 module foo 

* This is a fixed format comment                                    

     call bar(a, ! this is a f90 comment and a fortran splitted line                           
    &  b) 
42 ! this is a label for a ugly goto                                  
     end module foo 

我也只是注意到,標籤不高亮太...

編輯:好的;我添加了以下內容使其工作:

(font-lock-add-keywords 'epx-mode 
    '(("^ *\\([0-9]+\\)" . font-lock-constant-face) 
    ("^ \\{5\\}\\([^ 0\n]\\)" 1 font-lock-string-face) 
    ("^\t\\([1-9]\\)"   1 font-lock-string-face))) 

非常感謝!

+0

您可以發佈代碼示例嗎? – Lindydancer 2014-09-23 13:29:51

+0

和修改後的el.f90的例子。並描述它現在的功能。 – 2014-09-23 16:10:08

+0

相關? http://stackoverflow.com/questions/14319854/can-i-use-emacs-f90-mode-with-fixed-format?rq=1 – 2014-09-23 16:11:57

回答

0

這是因爲你繼承f90-mode而不是fortran-mode。這兩種模式提供了非常不同的字體鎖定關鍵字集,並且僅在fortran-mode中突出顯示&字符和標籤。

編輯:如果你想F90的編輯功能,但仍使用的FORTRAN模式的亮點,我想你可以將下面的代碼(從fortran.el採取)添加到您的代碼:

(set (make-local-variable 'font-lock-defaults) 
    '((fortran-font-lock-keywords 
     fortran-font-lock-keywords-1 
     fortran-font-lock-keywords-2 
     fortran-font-lock-keywords-3 
     fortran-font-lock-keywords-4) 
     nil t ((?/ . "$/") ("_$" . "w")) 
     fortran-beginning-of-subprogram)) 

或者,您可以從fortran模式中挑選單個字體鎖定規則,並使用font-lock-add-keywords將它們添加到您的模式。 (您可以使用font-lock-studio按規則逐句通過字體鎖定規則以查看它們具有的效果。)

+0

是的,但這是我想要做的:從f90模式特性中獲益,並使用modofication來處理fortran固定格式。所以我修復縮進和固定格式的評論highligthing,但我無法設法處理'&'和標籤... – janou195 2014-09-25 07:08:16

+0

@ janou195,看我更新的答案。 – Lindydancer 2014-09-25 08:54:29