我正在研究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 "\t\n]" ".\\{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\\}\\([^ 0\n]\\)" 1 font-lock-string-face)
("^\t\\([1-9]\\)" 1 font-lock-string-face)))
非常感谢!
答案 0 :(得分: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按规则逐步执行字体锁定规则,以查看它们具有的效果。)