Garis pembagi dalam agenda org?


12

T : dapatkah saya menempatkan garis pembagi dalam orgtampilan agenda saya ?

Buffer agenda saya bisa menjadi sedikit sibuk ketika saya memiliki banyak hal. Kesibukan ini memiliki efek kontraproduktif membuat saya menghindari melihat agenda saya karena itu membuat saya takut. Saya mencari cara untuk membuatnya tidak terlalu menakutkan secara visual.

Satu hal yang saya suka adalah dapat menempatkan garis pembagi (misalnya, hanya garis garis) di antara item agenda yang:

  • punya tenggat waktu hari ini,
  • melewati batas waktu mereka (lewat X hari), dan
  • memiliki tenggat waktu yang akan datang (jatuh tempo dalam X hari).

Apakah mungkin untuk meletakkan garis pembagi dalam tampilan agenda? Jika ya, bagaimana saya melakukannya?


Dalam pertanyaan semi-terkait berjudul Bagaimana mendapatkan data mentah untuk agenda mode-org tanpa tampilan agenda? , Saya memposting jawaban yang menunjukkan bagaimana cara mendapatkan data mentah: emacs.stackexchange.com/a/12563/2287 Anda dapat memodifikasi data itu sesuai dengan kebutuhan Anda, termasuk, tetapi tidak terbatas pada: replace-regexp-in-string(tambahkan garis pembagi dan / atau baris baru sebagai Anda menginginkan); Anda dapat memiliki string-equalsatau mencocokkan kriteria tertentu atau kriteria lain yang Anda cari. Periksa properti teks yang ada dengan nilai untuk membiasakan diri dengan apa yang disertakan di luar kotak, dan kemudian gunakan.
lawlist

Dengan secangkir kopi segar di tangan, saya memikirkan metode yang lebih mudah menggunakan org-modedata mentah yang bahkan tidak melibatkan memanipulasi data dengan mengganti bagian mana pun dari string. Yaitu, cukup periksa properti teks dan jika mereka cocok dengan kriteria Anda, masukkan sesuatu seperti garis sebelum atau sesudah sebagai buffer sedang diisi oleh mapcardalam contoh tautan di atas. Proyek ini dapat dibayangkan memerlukan waktu untuk diimplementasikan untuk membuat org-agendabuffer kustom , dan contohnya tidak mempertimbangkan org-search-viewatau org-tags-view- yaitu, hanya org-agenda-list.
lawlist

Jawaban:


2

org-agenda-block-separator

Pemisah antar blok dalam agenda. Jika ini adalah string, itu akan digunakan sebagai pemisah, dengan baris baru ditambahkan. Jika itu karakter, itu akan diulang untuk mengisi lebar jendela. Jika nil pemisah dinonaktifkan. Dalam org-agenda-custom-commandshal ini alamat pemisah antara blok saat ini dan sebelumnya.


org-agenda-compact-blocks

Non-nil berarti membuat agenda blok lebih kompak. Ini dilakukan secara global dengan meninggalkan garis seperti nama rentang agenda dan nomor minggu atau garis pemisah.


1
Terima kasih, tetapi bisakah Anda memberikan contoh bagaimana seseorang akan menggunakan ini dalam tampilan agenda?
Dan

1

Anda dapat memiliki beberapa blok dalam tampilan agenda, masing-masing dengan pencarian sendiri dengan hanya menggabungkan beberapa perintah khusus:

(setq org-agenda-custom-commands
      '(("D" "Deadlines"
         ((tags-todo "DEADLINE=\"<today>\""
                     ((org-agenda-overriding-header "Due Today"))
                     )
          (tags-todo "DEADLINE<\"<today>\""
                     ((org-agenda-overriding-header "You're Late")))
          (tags-todo "+DEADLINE<\"<+5d>\"+DEADLINE>\"<today>\""
                     ((org-agenda-overriding-header "Better get on it")))
         ))))

Anda juga dapat menempatkan daftar opsi di bagian akhir yang akan berlaku untuk semua blok.

Kerugian ini adalah bahwa setiap blok dihitung secara terpisah sehingga ini membutuhkan waktu 3 kali lebih lama untuk dihasilkan sebagai satu agenda tunggal


1

Berikut ini adalah contoh cara memeriksa properti teks dari item yang dihasilkan oleh org-agenda-list, dan memodifikasi string berdasarkan kriteria tertentu. Dalam contoh ini, nilai properti teks ts-datediperoleh dan dibandingkan dengan tanggal saat ini - jika sudah lewat waktu, kami menambahkan OLD:; jika saat ini, kami menambahkan CURRENT:, jika masa depan, kami menambahkan FUTURE:. Poster asli dapat mengkustomisasi contoh ini menambahkan baris baru dan / atau garis pembagi di lokasi tertentu. Kustomisasi dapat bervariasi tergantung pada kriteria penyortiran yang dipilih oleh poster asli di org-agenda-sorting-strategy, dll.

Dalam contoh ini, fungsi org-agenda-finalize-entriestelah dimodifikasi di dekat bagian bawah antara bagian yang berlabel ;; BEGIN modificationdan ;; END modification.

(require 'org-agenda)

(defun org-agenda-finalize-entries (list &optional type)
  "Sort, limit and concatenate the LIST of agenda items.
The optional argument TYPE tells the agenda type."
  (let ((max-effort (cond ((listp org-agenda-max-effort)
         (cdr (assoc type org-agenda-max-effort)))
        (t org-agenda-max-effort)))
  (max-todo (cond ((listp org-agenda-max-todos)
       (cdr (assoc type org-agenda-max-todos)))
      (t org-agenda-max-todos)))
  (max-tags (cond ((listp org-agenda-max-tags)
       (cdr (assoc type org-agenda-max-tags)))
      (t org-agenda-max-tags)))
  (max-entries (cond ((listp org-agenda-max-entries)
          (cdr (assoc type org-agenda-max-entries)))
         (t org-agenda-max-entries))) l)
    (when org-agenda-before-sorting-filter-function
      (setq list
      (delq nil
      (mapcar
       org-agenda-before-sorting-filter-function list))))
    (setq list (mapcar 'org-agenda-highlight-todo list)
    list (mapcar 'identity (sort list 'org-entries-lessp)))
    (when max-effort
      (setq list (org-agenda-limit-entries
      list 'effort-minutes max-effort 'identity)))
    (when max-todo
      (setq list (org-agenda-limit-entries list 'todo-state max-todo)))
    (when max-tags
      (setq list (org-agenda-limit-entries list 'tags max-tags)))
    (when max-entries
      (setq list (org-agenda-limit-entries list 'org-hd-marker max-entries)))
    ;; BEGIN modification
    (setq list
      (mapcar
        (lambda (string)
          (let* (
              (current-date (time-to-days (current-time)))
              (ts-date (get-text-property 0 'ts-date string)) )
            (if ts-date
              (cond
                ((< ts-date current-date)
                  (message "The task dated %s is overdue." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "OLD:  " string))
                ((= ts-date current-date)
                  (message "The task dated %s is due today." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "CURRENT:  " string))
                ((> ts-date current-date)
                  (message "The task dated %s is not due yet." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "FUTURE:  " string)))
              string)))
        list))
    ;; END modification
    (mapconcat 'identity list "\n")))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.