変数名とEmacs `f90-mode`の下線

変数名とEmacs `f90-mode`の下線

EmacsでFortran編集を使用して、「単語コマンド」などをアンダースコアで区切った「単語」に機能させるようにしたいとf90-mode思います。一方、構文強調などのコマンドでは、下線は明らかに識別子を区別できません。M-bM-fM-dM-DELC-M-f

subword-mode部分的にこれを行いました。私が望むように行動しましたが、M-fまだ扱われました。M-dM-bM-DELみんな単語としての識別子。たとえば、点が後ろにある場合()はsome_thing点を後ろに移動し、()は点をに移動します。M-bsubword-backwardsM-fsubword-forward_

には文法授業(単語)f90-mode_あります。 (記号)または(句読点)"w"に変更すると、目的の動作が得られますが、両方の単語のフォントのロックと完成も可能です。たとえば、完成だけでフォントが正しく指定されていません(キーワードで)。"_""."some_thingprogram my_prog; endend mywrite_mewrite

これら2つを同時に取得するにはどうすればよいですか?

PS:これはGNU Emacs 24です。


編集:以下はcadriansの答えに基づいて私が使った完全なコードです(ありがとう!)

(let ((adv (cons 'advice
                 (lambda ()
                   (let ((os (char-syntax ?_)))
                     (modify-syntax-entry ?_ "_")
                     ad-do-it
                     (modify-syntax-entry ?_ (string os))))))
      (fun '(subword-forward subword-kill subword-backward
             subword-backward-kill subword-downcase subword-upcase
             subword-transpose)))
  (dolist (f fun)
    (ad-add-advice f (list 'underscore-wrap nil t adv)
                   'around 'last)
    (ad-activate f)))

構文が永久に変更されないように一つ追加しましたが、以前はループに入れることがlet可能でした。ad-add-advice

答え1

1つの解決策はdefadviceを使用することです。

(defadvice forward-word (around eif-forward-word activate)
  "forward-word, with the underscore not being a letter"
  (interactive "p")
  (modify-syntax-entry ?_  "_")
  ad-do-it
  (modify-syntax-entry ?_  "w"))

forward-word、、、backword-wordおよびleft-wordを修正しますright-word

関連情報