我正在编写一个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-function
和indent-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逐个规则地逐步执行字体锁定,看看它们有什么效果。)