在特定情况下禁用ido-use-filename-at-point

时间:2013-11-08 23:07:56

标签: emacs

我使用emacs在Verilog / SystemVerilog中编码,注释行以//开头。

我喜欢使用“ido find files at point”,所以'(ido-use-filename-at-point (quote guess))中有custom-set-variables

除非我在光标位于//Revision Control:等评论的第一个单词时尝试打开另一个文件,否则它的效果非常好。它试图在//路径中找到名为Revision的文件。

如何禁用根///路径的ido ffap功能?另一种提供功能的方法是,如果ido ffap在以//开头的行上自动禁用。

1 个答案:

答案 0 :(得分:0)

假设在verilog-modeffap-alist没有特殊的ffap处理程序,以下代码应该可以解决这个问题:

(defun ffap-verilog (name)
  (let ((inhibit-changing-match-data t) ;; string-match should not change match data
    (ppss (syntax-ppss)))
    (if (and (eq (syntax-ppss-context ppss) 'comment) ;; we are inside a comment
         (= (line-number-at-pos (nth 8 ppss)) (line-number-at-pos (point))) ;; limit the match to the line starting the comment
         (string-match "/[/*]\\([[:alnum:]_.]\\)+$"
               (buffer-substring-no-properties (nth 8 ppss) (point))))
    ""
      name)))


(add-to-list 'ffap-alist '(verilog-mode . ffap-verilog) 'append)

检查特殊情况,注释的前导///*后面紧跟一个字符串,该字符串可能被ffap错误解释为网址或路径通配符。但请注意,不会处理以\\开头的注释中的其他字符串,因为这些字符串可能真的是网址。