5

すべてのソース コード ファイルの先頭に、15 行の著作権メッセージがあります。

それらをemacsで開くと、多くの貴重なスペースが無駄になります。
emacs で特定のメッセージを常に非表示にしながら、ファイルに残す方法はありますか?

4

3 に答える 3

9

hideshow マイナー モードを使用できます。これは標準の組み込みパッケージでありhs-hide-initial-comment-block、上部のコメント セクションの長さを知らなくても、必要な処理を実行する一般化されたコマンドが呼び出されます。任意の言語のモードフックに追加できますが、C を使用した例を次に示します。

(add-hook 'c-mode-common-hook 'hs-minor-mode t)
(add-hook 'c-mode-common-hook 'hs-hide-initial-comment-block t)

著作権だけを具体的に隠すわけではありませんが、有用なドキュメントも隠している可能性がある完全な最初のコメント ブロックに注意してください。

于 2012-12-24T04:40:44.097 に答える
3

バッファを最初の 15 行以外のすべてに絞り込む関数を作成できます。

(defun hide-copyright-note ()
  "Narrows the current buffer so that the first 15 lines are
hidden."
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (forward-line 15)
    (narrow-to-region (point) (point-max))))

あとは、著作権情報を含むすべてのファイルに対してこの関数が呼び出されるようにするだけです。これは、できればファイルのメジャーモードにフックを追加することで実行できます。たとえば、上記の関数定義と次の行を .emacs ファイルに追加できます。

(add-hook 'c-mode-hook 'hide-copyright-note)

これにより、C ファイルを開くたびに関数 'hide-copyright-note が呼び出されます。

実際には、非表示にする著作権情報が実際に存在するかどうかを確認するか、ファイルが特定のディレクトリにある場合にのみ hide-copyright-note を実行するなどして、フック関数をより賢くしたいと思うでしょう。

たとえば、C の例に固執するために、次のテストを上記の関数に挿入できます。

(defun hide-copyright-note ()
  "Narrows the current buffer so that the first 15 lines are
hidden."
  (interactive)
  (when (copyright-message-p)
    (save-excursion
      (goto-char (point-min))
      (forward-line 15)
      (narrow-to-region (point) (point-max)))))

(defun copyright-message-p ()
  "Returns t when the current buffer starts with a Copyright
note inside a C-style comment"
  (save-excursion
    (goto-char (point-min))
    (looking-at "\\s */\\*\\(:?\\s \\|\\*\\)*Copyright\\b")))

あなたの他の懸念について:

それらをemacsで開くと、多くの貴重なスペースが無駄になります。

...または、下にスクロールすることもできます。これを自動的に実現するには、代わりに次の関数を使用できますhide-copyright-note

(defun scroll-on-copyright ()
  "Scrolls down to the 16th line when the current buffer starts
with a copyright note."
  (interactive)
  (when (copyright-message-p)
    (goto-char (point-min))
    (beginning-of-line 16)
    (recenter 0)))

ただし、最初のバリエーションをお勧めした理由は、単に自動的に下にスクロールすると、バッファの先頭 ( ) にジャンプするたびにM-<手動で下にスクロールする必要があるからです。この問題は、ナローイング ソリューションでは発生しません。

于 2011-02-07T17:41:22.077 に答える
2

fold -modeを見てください。基本的に必要なのは、折り畳む部分を特定し、 と を使用folding-top-markfolding-bottom-markてそれらをマークする方法だけです。ところで、EMACS elisp コードでそれを行うためのハックがあるので、適応できるコードを簡単に見つけることができるはずです。

于 2011-02-07T16:08:54.283 に答える