không giữ các tệp org-agenda mở sau khi tạo chương trình nghị sự


14

Tạo chương trình nghị sự hôm nay trong Org-Mode ( C-c a a) sẽ mở các tệp trong org-agenda-files. Tôi không muốn Emacs mở những bộ đệm thêm này.

Có một cách dễ dàng để nói với Emacs không mở các bộ đệm này? (hoặc giống nhau, để tự động đóng chúng nếu chúng không mở trước khi gọi chương trình nghị sự?).

CẬP NHẬT:

Đây là phiên bản nhỏ gọn hơn của giải pháp được cung cấp bởi @lawlist:

(require 'dash)

(defun my-org-keep-quiet (orig-fun &rest args)
  (let ((buffers-pre (-filter #'get-file-buffer (org-agenda-files))))
    (apply orig-fun args)
    (let* ((buffers-post (-filter #'get-file-buffer (org-agenda-files)))
           (buffers-new  (-difference buffers-post buffers-pre)))
      (mapcar (lambda (file) (kill-buffer (get-file-buffer file))) buffers-new))))

(advice-add 'org-agenda-list :around #'my-org-keep-quiet)
(advice-add 'org-search-view :around #'my-org-keep-quiet)
(advice-add 'org-tags-view   :around #'my-org-keep-quiet)

Đáng tiếc, điều này vẫn chưa hoàn hảo, vì bây giờ nhấp vào một sự kiện trong chương trình nghị sự không mở tệp org tương ứng.

Câu trả lời:


10

Bạn muốn org-agenda-exit, thuận tiện ràng buộc với x theo mặc định trong chế độ xem chương trình nghị sự

Giống như 'org-agenda-Quit', nhưng giết bất kỳ bộ đệm nào được tạo bởi chương trình nghị sự. Bộ đệm Org được truy cập trực tiếp bởi người dùng sẽ không được chạm vào.

Tôi tìm thấy điều này bằng cách sử dụng describe-mode.


Sane trả lời ở đây.
YoungFrog

1
Đánh giá cao con trỏ đến describe-mode.
Matt

4

Các org-agenda-filesbộ đệm (s) nên không bị giết cho đến sau khi các chức năng tìm kiếm đã kết thúc. Ba (3) chức năng tìm kiếm phổ biến nhất được sử dụng để tạo *Org Agenda*bộ đệm là : org-agenda-list; org-search-view; và org-tags-view. org-agenda-fileslà cả một biến và một chức năng - hai động vật khác nhau, nhưng có liên quan.

(defvar opened-org-agenda-files nil)

(defun opened-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (setq opened-org-agenda-files nil)
    (mapcar
      (lambda (x)
        (when (get-file-buffer x)
          (push x opened-org-agenda-files)))
      files)))

(defun kill-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (mapcar
      (lambda (x)
        (when
            (and
              (get-file-buffer x)
              (not (member x opened-org-agenda-files)))
          (kill-buffer (get-file-buffer x))))
      files)))

(defadvice org-agenda-list (around opened-org-agenda-list-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-search-view (around org-search-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-tags-view (around org-tags-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

Điều đó thật tốt. Vấn đề duy nhất là tôi không muốn giết một bộ đệm đã mở trước khi tạo chương trình nghị sự. Vì vậy, có vẻ như giải pháp phù hợp đòi hỏi phải tạo ra một lời khuyên "xung quanh".
Scaramouche

@scaramouche - Trong thử nghiệm ban đầu của tôi, bản dự thảo sửa đổi dường như thực hiện những gì bạn đang tìm kiếm - nó kết hợp aroundvới advice.
luật

Bây giờ có một vấn đề khác: nhấn enter trong một sự kiện trong chương trình nghị sự không mở tệp tương ứng. Có lẽ không có cách nào tốt để thực hiện điều này.
Scaramouche

Vâng, điều đó có ý nghĩa (bây giờ tôi nghĩ về nó) bởi vì *Org-Agenda*bộ đệm chỉ là một bản sao và dán từ org-agenda-files[loại, nó thực sự được đẩy vào một danh sách và sau đó được sắp xếp lại và chèn vào *Org-Agenda*bộ đệm]. Khi chỉnh sửa, người dùng sẽ quay lại bản gốc org-agenda-filesđể thực hiện chỉnh sửa, chức năng chỉnh sửa giả định đã mở. Nếu bạn thực sự phải org-agenda-filesđóng khi không sử dụng, thì bạn sẽ cần sửa lại các chức năng chỉnh sửa để mở tệp cần thiết và sau đó đóng lại khi hoàn tất. Cũng có thể có các vấn đề khác
luật

1

Sau khi bạn đã mở chương trình nghị sự, chỉ cần thoát nó bằng cách nhấn x trong bộ đệm của chương trình nghị sự bất cứ lúc nào. Nếu bạn sử dụng q để hoàn thành chương trình nghị sự, nó sẽ giữ cho tất cả các bộ đệm mở.


3
Câu trả lời của bạn thực sự là một bản sao của user2699nó đã được đăng vào ngày 19 tháng 2 năm 2016.
luật

-1

Tôi chuyển sang quy trình làm việc org-mode mới.

Trước đây tôi sử dụng:

  • NOTE.org là lưu trữ chính cho ghi chú biểu mẫu miễn phí được chỉnh sửa bằng tay với ràng buộc chính để truy cập nhanh vào tệp này
  • TODO.orgcho org-rememberhoặc(lambda () (interactive) (org-capture nil "t"))

TODO.orgTôi chỉ ghé thăm qua C-c a a. Nhưng NOTE.orgtrở nên không thể nhầm lẫn với kích thước lớn hơn 1 MiB của văn bản thuần túy.

Vì vậy, tôi chia tập tin này theo chủ đề phân biệt chính dễ dàng, giống như LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Thay vì duy trì danh sách các tên có thể, tôi có thư mục được chỉ định:

(setq org-agenda-file-regexp "\\`[^.#].*[^_]\\.org\\'"
      org-agenda-files (list org-directory))

Tôi hài lòng với thiết lập này vì tôi có thể nhanh chóng tìm thấy chủ đề cần thiết thông qua việc chuyển sang bộ đệm (bằng IDO thông qua tên tệp có ý nghĩa) và tìm kiếm (theo C-s) trong không gian hạn chế.

Tất cả các lịch trình có sẵn thông C-c a aqua tất cả .orgcác tập tin.

Nhưng bây giờ tôi có rất nhiều .orgtệp không sử dụng được mở sau C-c a ađó tôi sẽ giết khi chúng xuất hiện trong các công tắc đệm.

Tôi nghĩ rằng báo cáo lỗi nên được gửi:

http://debbugs.gnu.org/cgi/ormsreport.cgi?archive=yes&orms=22734

24.5; do not leave opened org-agenda-files on org-agenda-list, etc.
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.