ediffによって開かれた組織ファイルの折りたたみを防止


7

ediffを使用して2つの組織ファイルをマージすると、折りたたみが邪魔になるため、ediffによって作成された組織モードバッファーですべての折りたたみを無効にしようとしています。diff以外の折りたたみ動作は影響を受けません。

単純に私は次のようなものがうまくいくはずだと思います:

  (add-hook 'ediff-mode-hook
        (lambda ()
          (set (make-local-variable 'org-inhibit-startup-visibility-stuff) t)))

これが(org-startup-foldedまたはではなくorg-agenda-inhibit-startup)変更する組織変数であると私はかなり確信しています。

私は無駄に様々なフックを試してみた(主にediff-mode-hookediff-before-setup-hookediff-meta-mode-hook、およびediff-prepare-buffer-hook-遅すぎおそらくある)インターン変数が継承されることを期待して。

make-local-variableを誤って使用している可能性は十分にあります。パターンは、私が広く見たものから借りたものです。

値をグローバルに設定することのみが効果的でした(しかし、それは私が狙っているものではありません)。アドバイスメカニズムを(ab)使用する必要がありますか?


使用するフックがわかりませんが、show-all代わりに単に関数を呼び出すのではないのですか?(org-modeに基づいて構築されておりoutline-mode、常にすべてを表示したいように思われます。)
Dan

(add-hook 'ediff-prepare-buffer-hook 'show-all)トリックを行います!それを回答として追加してください、@ Dan?私はまだediffのローカル変数に興味がありますshow-allが、私の問題に対する最善の解決策だと思います。
ebpa 2016

回答:


9

あなたの目標は、org-modeファイルを常にに表示することですediff。最も簡単な解決策は、おそらくローカル変数のアプローチを避けて、バッファーA、B、Cがセットアップされた後に実行show-allされる関連するフックに入れるediff-prepare-buffer-hookことです:

 (with-eval-after-load 'outline
   (add-hook 'ediff-prepare-buffer-hook #'org-show-all))

名前にもかかわらず、org-show-allまたして動作しoutline-modeているorg-modeの上に構築されています。とは異なりoutline-show-all、プロパティドロワーとのようなブロックが表示され#+begin_src ... #+end_srcます。

org-show-allOrg 9.1.6で追加されました。以前のバージョンでは、outline-show-allまたはを使用できますshow-all

(コメントによると、これshow-allはEmacs 25.1では廃止されたため、の代わりに使用されていoutline-show-allます。後者の記号は24.5ではバインドされていません。)


見た目show-allは正しく定義されているように見えるため、フックで防御条件を必要とせず、非組織/非アウトラインモード内で安全に呼び出すことができます。
ebpa 2016

3
すばらしい答えです。しかしshow-all、25.1以降は廃止とマークされています。使う方outline-show-allがいいと思います。(前者は後者の単なる別名です。)
Harald Hanche-Olsen

@ HaraldHanche-Olsen:メモをありがとう!回答を反映するように編集しました。
ダン

3

別のオプションがworgページにあります。基本的な考え方は、ediff-select-hook特定の領域がediffで選択されている場合は常にを使用して要素を展開し、でそれらを折り返すことediff-unselect-hookです。私は完全性のためにここにコードを投稿しています

;; Check for org mode and existence of buffer
(defun f-ediff-org-showhide (buf command &rest cmdargs)
  "If buffer exists and is orgmode then execute command"
  (when buf
    (when (eq (buffer-local-value 'major-mode (get-buffer buf)) 'org-mode)
      (save-excursion (set-buffer buf) (apply command cmdargs)))))

(defun f-ediff-org-unfold-tree-element ()
  "Unfold tree at diff location"
  (f-ediff-org-showhide ediff-buffer-A 'org-reveal)  
  (f-ediff-org-showhide ediff-buffer-B 'org-reveal)  
  (f-ediff-org-showhide ediff-buffer-C 'org-reveal))

(defun f-ediff-org-fold-tree ()
  "Fold tree back to top level"
  (f-ediff-org-showhide ediff-buffer-A 'hide-sublevels 1)  
  (f-ediff-org-showhide ediff-buffer-B 'hide-sublevels 1)  
  (f-ediff-org-showhide ediff-buffer-C 'hide-sublevels 1))

(add-hook 'ediff-select-hook 'f-ediff-org-unfold-tree-element)
(add-hook 'ediff-unselect-hook 'f-ediff-org-fold-tree)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.