3

私の.emacs構成では、次のものがあります:

(defun fold-long-comment-lines ()
"This functions allows us to fold long comment lines
 automatically in programming modes. Quite handy."
 (auto-fill-mode 1)
 (set (make-local-variable 'fill-no-break-predicate)
     (lambda ()
         (not (eq (get-text-property (point) 'face)
                'font-lock-comment-face)))))

上記は「c-mode-common-hook」の一部として呼び出され、長いコメント行の折りたたみを自動的に正しく提供します。

ただし、構造体フィールドを記述するなどの単一行コメントを使用しているか、複雑なコードを記述している複数行コメントを使用しているかにかかわらず、上記のことは無差別に機能します。

基本的な質問は、複数行のコメントの場合にのみ、長いコメント行を自動的に折りたたむにはどうすればよいですか?

ありがとうアヌパム

edit-1: 複数行コメントの説明 「複数行コメント」と言うと、基本的には次のようなコメントを意味します。

/*
 * this following piece of code does something totally funky with client
 * state, but it is ok.
*/
code follows

それに応じて、1行のコメントは次のようになります

struct foo {
   char buf_state : 3; // client protocol state 
   char buf_value : 5; // some value
}

上記の elisp コードは、これら両方のコメント行を忠実に折り畳んでいます。後者ではなく、前者のみを折りたいと思います。

4

1 に答える 1

1

auto-fill-mode一般的な塗りつぶしではなく、影響を与えるだけにしたい場合(たとえば、 を押したときに影響を与えたくない場合M-q)、コードを に置き換えることができますcomment-auto-fill-only-comments。「複数行コメント」にのみ適用することについては、最初に何が違うのかを説明する必要があると思います。コメントがすでに複数行にまたがっている場合にのみ自動入力したいということですか、それとも、現在 1 行しかないコメントが複数行にまたがっていることを Emacs が認識できるようにするコメントの他の特徴はありますか?複数行。

次のようなものを試すことができます:

(set (make-local-variable 'fill-no-break-predicate)
     (lambda ()
       (let ((ppss (syntax-ppss)))
         (or (null (nth 4 ppss)) ;; Not inside a comment.
             (save-excursion
               (goto-char (nth 8 ppss))
               (skip-chars-backward " \t")
               (not (bolp))))))) ;; Comment doesn't start at indentation.
于 2012-05-06T13:48:08.313 に答える