Foldoutパッケージは、折りたたみコマンドによってOutlineモードとOutlineマイナーモードを拡張します。折りたたみのコンセプトは、アウトラインの入れ子構造部分をズームインしつつ、より上位レベルにある関連部分を非表示にすることです。
すべてのテキストと小見出しがレベル1見出しの下に非表示になっているアウトラインモードのバッファを想定してください。これらの見出しのいずれかの下に何が非表示になっているかを確認するには、C-c C-e (M-x outline-show-entry-and-parents) を使用して本文とその親階層を表示させるか、あるいは C-c C-i を使用して子(レベル2)見出しを表示させることができます。
Foldoutでは、C-c C-z (M-x foldout-zoom-subtree) を使用します。これにより本文と子見出しが表示され、バッファが絞り込まれるため、レベル1の見出し、本文、およびレベル2の見出しのみが見えるようになります。次に、レベル2の見出しのいずれかの下を確認するには、そこにカーソルを置き、再度 C-c C-z を使用します。これにより、レベル2の本文とそのレベル3の子見出しが表示され、バッファが再び絞り込まれます。連続する子見出しを順次ズームインしていくことは、何度でも可能です。モードラインの文字列で、どこまで深く進んだかが分かります。
見出しをズームインした際に、子サブ見出しのみを表示するには、数値引数 C-u C-c C-z を指定します。子要素の階層数を指定することも可能で(M-x outline-show-children を参照)、例えば M-2 C-c C-z では2階層分の子サブ見出しが表示されます。あるいは、負の引数 M-- C-c C-z を指定して本文を表示することもできます。また、0の引数 M-0 C-c C-z を指定することで、C-c C-s (M-x outline-show-subtree) と同様にサブツリー全体を展開できます。
ズーム状態でも、Foldoutに影響を与えることなく、アウトラインモードの露出・非表示機能を利用できます。また、バッファが狭くなるため、グローバルな編集操作はズーム中の見出し配下のテキストにのみ影響します。これは、ドキュメントの特定の章やセクションへの変更範囲を限定する際に便利です。
折りたたみを解除(終了)するには、C-c C-x (M-x foldout-exit-fold) を使用します。これにより、最上位見出し配下のすべてのテキストと小見出しが非表示になり、バッファの直前の表示状態に戻ります。数値引数を指定すると、その階層分だけ折りたたみを解除します。引数に 0 を指定すると、すべての折りたたみを解除します。負の引数を指定すると(解除後の折りたたみが表示されたままになります)、ポイントとウィンドウビューの位置が保持されます。
テキストや小見出しを非表示にせずに折り目の狭めを解除するには、負の引数を指定します。例えば、M--2 C-c C-x は2つの折り目を解除し、テキストと小見出しを表示したままにします。
フォールド内で作業している際、C-x n n (narrow-to-region) や C-x n d
(narrow-to-defun) といった Emacs
標準の狭めコマンドを使用したいことがあるでしょう。これらのコマンドを使用した後、foldout-widen-to-current-fold)
を使うと、バッファ全体ではなく、現在のフォールドレベルまで再び広げることができます。現在フォールド内にいない場合は、widen と同様に動作します。
折りたたみモードでは、折りたたまれた状態への出入りや、テキストの表示・非表示を行うためのマウスコマンドも利用可能です:
foldout-mouse-modifiers を設定することで、(Ctrl-Meta-
の代わりに)異なる修飾キーを指定できます。ただし、すでに foldout.el
ライブラリをロードしている場合は、この設定を反映させるために再ロードする必要があります。
Foldoutパッケージを使用するには、M-x load-library RET foldout RETと入力するか、あるいはinitファイルに以下を記述して自動的に実行されるように設定できます:
(with-eval-after-load "outline" (require 'foldout))