Ngăn chặn các tập tin org được mở bởi ediff


7

Folding cản trở khi hợp nhất hai tệp org bằng cách sử dụng ediff, vì vậy tôi đang cố gắng vô hiệu hóa tất cả các lần gấp trong bộ đệm chế độ org được tạo bởi ediff. Hành vi gấp không phù hợp nên vẫn không bị ảnh hưởng.

Chắc chắn tôi nghĩ rằng một cái gì đó giống như sau đây nên hoạt động:

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

Tôi khá chắc chắn rằng đây là biến org cần sửa đổi (chứ không phải org-startup-foldedhoặc org-agenda-inhibit-startup).

Tôi đã cố gắng móc khác nhau không có kết quả (chủ yếu là ediff-mode-hook, ediff-before-setup-hook, ediff-meta-mode-hook, và ediff-prepare-buffer-hook- mà có lẽ là quá muộn) hy vọng rằng biến thực tập nội trú sẽ được thừa hưởng.

Hoàn toàn có thể là tôi đang sử dụng biến make-local không chính xác; mô hình chỉ được mượn từ những gì tôi đã thấy rộng rãi.

Chỉ thiết lập giá trị trên toàn cầu mới có hiệu quả (nhưng đó không phải là điều tôi đang chụp). Tôi có nên (ab) sử dụng cơ chế tư vấn?


Không chắc chắn nên sử dụng hook nào, nhưng tại sao không chỉ gọi hàm để show-allthay thế? ( org-modeđược xây dựng trên đỉnh outline-modevà có vẻ như bạn luôn muốn nó hiển thị mọi thứ.)
Dan

(add-hook 'ediff-prepare-buffer-hook 'show-all)lừa Thêm vào đó như một câu trả lời, @Dan? Tôi vẫn tò mò về các biến cục bộ cho ediff, nhưng tôi nghĩ show-alllà giải pháp tốt nhất cho vấn đề của tôi.
ebpa

Câu trả lời:


9

Có vẻ như mục tiêu của bạn là có org-modecác tệp luôn hiển thị mọi thứ khi vào ediff. Giải pháp đơn giản nhất có lẽ là tránh cách tiếp cận biến cục bộ và chỉ cần đưa show-allvào hook liên quan, ediff-prepare-buffer-hookđược chạy sau khi bộ đệm A, B, & C được thiết lập:

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

Mặc dù tên, org-show-allcũng hoạt động trong outline-modeđó org-modeđược xây dựng trên đầu trang. Không giống như outline-show-all, nó cho thấy ngăn kéo tài sản và khối như thế nào #+begin_src ... #+end_src.

org-show-allđã được thêm vào trong Org 9.1.6. Trong các phiên bản trước, bạn có thể sử dụng outline-show-allhoặc show-all.

(Lưu ý, theo một nhận xét, show-allđược đánh dấu là lỗi thời trong Emacs 25.1 có lợi cho outline-show-all. Biểu tượng sau không bị ràng buộc trong 24.5.)


Dường như show-allđược xác định rõ ràng, do đó nó không cần bất kỳ điều kiện phòng thủ nào trong móc và có thể được gọi một cách an toàn trong các chế độ không cực đại / không phác thảo.
ebpa

3
Câu trả lời chính xác. Nhưng show-allđược đánh dấu lỗi thời kể từ ngày 25.1. Tốt hơn để sử dụng outline-show-all, tôi nghĩ. (Cái trước chỉ là bí danh cho cái sau.)
Harald Hanche-Olsen

@ HaraldHanche-Olsen: cảm ơn bạn đã lưu ý! Tôi đã chỉnh sửa câu trả lời để phản ánh nó.
Dan

3

Một tùy chọn khác có thể được tìm thấy trên trang worg . Ý tưởng cơ bản là sử dụng ediff-select-hookđể mở ra một yếu tố bất cứ khi nào khu vực nhất định được chọn trong ediff và gấp chúng lại trong ediff-unselect-hook. Tôi đang đăng mã ở đây cho đầy đủ

;; 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.