2

次の形式のツリーがあるとします。

* Top
** Item A
*** Lower
** Item B
** Item C

私がやりたいことは、アイテム A とアイテム B を含むリージョンを作成し、コマンドを実行してそれを次のように変更できるようにすることです。

* Top
** 
*** Item A
**** Lower
*** Item B
** Item C

空白の項目にカーソルを置きます。同様のものが既にorg-modeに書かれているのではないかと思っています。そうでない場合は、自分で書くことができますが、その場合、最初のアイテムよりも低いレベルにあるアイテムを避けて、自分の地域の行をループしてシフトする方法を考えています。

4

2 に答える 2

1

Chris の回答に基づいて、次のコードを思いつきました。

(defun org-file-region (start end)
  "Moves the lines in region to be underneath a new header"
  (interactive "r")
  (extend-region-to-lines start end)
  (narrow-to-region (save-excursion (goto-char start)
                                    (line-beginning-position))
                    (save-excursion (goto-char end)
                                    (line-end-position)))
  (org-do-demote)
  (org-insert-heading)
  (setq mark-active nil)
  (org-do-promote)
  (setq mark-active t)
  (widen))

org-do-demoteリージョンでのみ動作することに注意してください。他の降格関数はそうではありません。

于 2013-06-08T17:11:50.650 に答える
1

素朴な最初の試み

アウトラインから始める

* Top
** Item A
*** Lower
** Item B
** Item C

後にカーソルを置き、+ ( ) に続いて+ + ( ) をTop押すと、構造が得られますAltReturnorg-insert-headingAltShiftrightorg-demote-subtree

* Top
** 
*** Item A
**** Lower
*** Item B
*** Item C

残念ながら、これは降格Item Cしますが、これは望ましくないようです。ただし、この項目に移動してAlt+ Shift+を押すだけleftです。ただし、これは単純化された例であり、ファイルをあまり移動しない、より強力な方法が必要だと思います。もっとうまくやれるでしょうか?

トランジェントマークモード

Orgモードのマニュアルで構造編集を読んでいると、メモを見つけました

アクティブな領域 (一時マーク モード) がある場合、昇格と降格は領域内のすべての見出しで機能します。見出しの領域を選択するには、ポイントとマークの両方を行の先頭に置き、最初の見出しの先頭にマークを置き、変更する最後の見出しの直後の行にポイントするのが最善です。

したがって、おそらくこれは私たちに前進への道を与えてくれます。しかし、私はこの情報を使って賢明なことを行うことができませんでした。うまくいけば、他の誰かが足を踏み入れて、それがどのように行われたかを示してくれます.

地域の絞り込み

さらに移動できるもう 1 つの方法は、作業したい領域だけにバッファを「狭める」ことです。

全体* Topとその間のすべてを選択します (マウスを使用するか、たとえば+と+ + + ( ) を数回使用して)。バッファー内の他のすべてのテキストを除外して、この領域のみにバッファーを「狭める」ことにより、この強調表示された (またはマークされた) 領域のみに注意を向けることができます (テキストは削除されません。+ + + ( )を使用して領域を絞り込みます (この機能を明示的に有効にしていない場合は、役立つメッセージが表示されることに注意してください)。+ + + (を使用してフル バッファ** Item B CtrlSpaceCtrlcCtrlnoutline-next-visible-headingCtrlxnnnarrow-to-regionCtrlxnwwiden)。

狭められたバッファでは、次のものしか表示されません。

* Top
** Item A
*** Lower
** Item B

ここで単純な試行 (上記を参照) からのステップを繰り返してから、完全な (拡張された) バッファーに戻ると、アウトラインがあることがわかります。

* Top
** 
*** Item A
**** Lower
*** Item B
** Item C

これが私たちが求めていた最終結果です!これが不必要に長い回答である場合は、お詫び申し上げます。私はそれを研究して多くのことを学び、ここにすべてを文書化したいと思いました.

于 2013-06-07T21:23:50.763 に答える