Impedir dobrar arquivos organizacionais abertos por ediff

7

A dobra atrapalha ao mesclar dois arquivos organizacionais usando o ediff, então estou tentando desativar todas as dobras nos buffers do modo organizacional criados pelo ediff. O comportamento de dobragem sem bordas não deve ser afetado.

Ingenuamente, acho que algo semelhante ao seguinte deve funcionar:

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

Estou bastante certo de que esta é a variável organizacional a ser modificada (em vez de org-startup-foldedou org-agenda-inhibit-startup).

Eu tentei vários ganchos sem sucesso (principalmente ediff-mode-hook, ediff-before-setup-hook, ediff-meta-mode-hook, e ediff-prepare-buffer-hook- o que provavelmente é tarde demais) na esperança de que a variável internado será herdado.

É bem possível que eu esteja usando make-local-variable incorretamente; o padrão é apenas emprestado do que tenho visto amplamente.

Somente definir o valor globalmente foi eficaz (mas não é para isso que estou procurando). Devo estar (ab) usando o mecanismo de aconselhamento?

ebpa
fonte
Não sabe ao certo qual gancho usar, mas por que não apenas uma chamada de função show-all? ( org-modeÉ construído em cima de outline-mode, e parece que você sempre quer mostrar tudo.)
Dan
(add-hook 'ediff-prepare-buffer-hook 'show-all)faz o truque! Adicione isso como resposta, @ Dan? Ainda estou curioso sobre as variáveis ​​locais do ediff, mas acho que show-allé a melhor solução para o meu problema.
Ebpa1

Respostas:

9

Parece que seu objetivo é que os org-modearquivos sempre mostrem tudo quando estão ediff. A solução mais simples é provavelmente evitar a abordagem de variáveis ​​locais e simplesmente colocar show-allo gancho relevante, ediff-prepare-buffer-hookque é executado após a instalação dos buffers A, B e C:

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

Apesar do nome, org-show-alltambém funciona em outline-modeque org-modeé construído em cima de. Ao contrário outline-show-all, mostra gavetas de propriedades e blocos como #+begin_src ... #+end_src.

org-show-allfoi adicionado na Org 9.1.6. Nas versões anteriores, você pode usar outline-show-allou show-all.

(Observe, de acordo com um comentário, que show-allestá marcado como obsoleto no Emacs 25.1 a favor de outline-show-all. O último símbolo não está vinculado em 24.5.)

Dan
fonte
Parece que show-allestá definido de maneira saudável, para que não precise de condições defensivas no gancho e possa ser chamado com segurança dentro dos modos não-org / não-estrutura de tópicos.
Ebpa1
3
Ótima resposta. Mas show-allestá marcado como obsoleto desde 25.1. Melhor usar outline-show-all, eu acho. (O anterior é apenas um nome alternativo para o último.)
Harald Hanche-Olsen
@ HaraldHanche-Olsen: obrigado pela nota! Eu editei a resposta para refleti-la.
Dan
3

Outra opção pode ser encontrada na página worg . A idéia básica é usar ediff-select-hookpara desdobrar um elemento sempre que determinada região for selecionada em ediff e dobrá-los novamente no ediff-unselect-hook. Estou postando o código aqui por completo

;; 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)
Iqbal Ansari
fonte