如何在Emacs中突出显示Fortran固定格式的连续行符号,而不是在Fortran模式中



我正在编写一个f90代码,但使用固定格式的文件。因此,我为这些代码文件创建了一个特定的主模式(实际上只是使用fortran模式缩进函数的f90模式)。但有一件事我没能处理:第6列中连续行字符的颜色。如何在我的改良f90.el中使用它?

非常感谢!

编辑:

这是派生模式:

(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 "tn]" ".\{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\}\([^ 0n]\)" 1 font-lock-string-face)
    ("^t\([1-9]\)"         1 font-lock-string-face)))

非常感谢!

这是因为您从f90-mode而不是fortran-mode继承。这两种模式提供了非常不同的字体锁定关键字集,并且只有在fortran-mode中才会突出显示&字符和标签。

EDIT:如果你想要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逐个规则地逐步执行字体锁定,看看它们有什么效果。)

最新更新