แสดงช่วงเวลาว่างในวาระการประชุมของโหมดองค์กร


12

ฉันต้องการทำให้ง่ายต่อการค้นหาว่ามีช่วงเวลาใดบ้างที่อยู่ในวาระการประชุมโหมดองค์กรของฉันฟรี

ตัวอย่างเช่นหากฉันมีการนัดหมายสองครั้งช่วงเวลา 9:30 น. - 10:30 น. และอีก 11:15 น. - 12.30 น. ฉันต้องการดูโดยเร็วว่าช่วงเวลา 10:30 น. - 11:30 น. บล็อกฟรี

กล่าวอีกนัยหนึ่งฉันต้องการแยกความแตกต่างของเวลาว่างได้อย่างง่ายดายเหมือนในวาระกราฟิกเช่น Google ปฏิทิน

มีวิธีทำให้ช่วงเวลาว่างเปล่ามองเห็นได้ง่ายหรือไม่? บางทีสีที่ว่างเปล่าบล็อกที่มีความยาวเกินจำนวนนาทีที่กำหนด?


2
คือorg-agenda-time-gridไม่เพียงพอสำหรับความต้องการของคุณ gnu.org/software/emacs/manual/html_node/org/…
กฎหมาย

2
ตารางไม่เพียงพอเนื่องจากจะปรากฏขึ้นแม้ว่าเวลาจะยุ่ง (เช่นถ้ามีการประชุม 9:30 - 10:30 น. จะมีเส้นตารางเวลา 10.00 น.) ฉันต้องการเวลาที่ยุ่งและไม่ยุ่งให้แยกแยะได้ง่าย
scaramouche

1
ฉันคิดอีกเล็กน้อยเกี่ยวกับฟังก์ชั่นนี้ ฉันเชื่อว่าสิ่งที่มีประโยชน์และง่ายที่สุดในการใช้งานคือการเปลี่ยนสีของช่วงเวลา (เฉพาะชื่อของช่วงเวลาเช่น 8: 00-9: 00) สำหรับช่วงเวลาเหล่านั้นที่มีจำนวนมากกว่า เวลาว่าง (เช่นมากกว่า 15 นาที) ทั้งสีและเวลาว่างขั้นต่ำควรกำหนดโดยผู้ใช้
scaramouche

3
@scaramouche ผู้ใช้รายชื่อผู้รับจดหมายในโหมด org ( orgmode.org/worg/org-mailing-list.html ) ถามว่าคุณได้ลองแล้วหรือยังcalfw( emacswiki.org/emacs/Calfw )
daveloyall

2
@ daveloyall ขอบคุณมากสำหรับการชี้ไปที่การสนทนารายชื่อผู้รับจดหมาย ฉันเพิ่งลอง calfw (และมันก็สวยมาก!) แต่ดูเหมือนว่ามันจะไม่มีฟังก์ชั่นที่ฉันต้องการ สำหรับผู้ที่ต้องการที่จะลอง calfw + org (ขอแนะนำ): รับ calfw จาก Melpa ในinit.elรวมและจะเรียกทำปฏิทิน(require 'calfw-org) M-x cfw:open-org-calendar
# #

คำตอบ:


2

เพราะคำถามของฉันนี้ฉันจึงดูฟังก์ชั่นorg-agenda-add-time-grid-maybeที่สร้างตารางเวลา รหัสที่โพสต์นั้น (ซึ่งไม่ได้เขียนโดยฉัน) จะลบเส้นกริดหากเวลาไม่ว่างตามที่ร้องขอในความคิดเห็นของ OP

เช่นเดียวกับคุณฉันต้องการที่จะสร้างบล็อกภาพในบางวิธี โดยการผสมขึ้นรหัสต้นฉบับของorg-agenda-add-time-grid-maybeและ defadvice โดยไมเคิล Ekstrand ที่โพสต์ในหัวข้ออื่น ๆ org-agenda-add-time-grid-maybeที่ฉันมากับรหัสต่อไปนี้สำหรับ มันจะออกเส้นกริดในสีที่ต่างกัน (สำหรับช่วงเวลาที่ฉันใช้ใบหน้าorg-archived) และเวลาจะตามด้วยสตริงอื่น ทั้งสองสามารถเปลี่ยนแปลงได้ตามความต้องการของคุณ

(defun org-agenda-add-time-grid-maybe (list ndays todayp)
  "Add a time-grid for agenda items which need it.

LIST is the list of agenda items formatted by `org-agenda-list'.
NDAYS is the span of the current agenda view.
TODAYP is t when the current agenda view is on today."

  (catch 'exit
   (cond ((not org-agenda-use-time-grid) (throw 'exit list))
         ((and todayp (member 'today (car org-agenda-time-grid))))
         ((and (= ndays 1) (member 'daily (car org-agenda-time-grid))))
         ((member 'weekly (car org-agenda-time-grid)))
         (t (throw 'exit list)))
   (let* ((blocks (mapcar (lambda (x)
                            (let ((start (get-text-property 1 'time-of-day x))
                                  (dur (get-text-property 1 'duration x)))
                              (cond
                               ((and start dur) (cons start
                                                      (org-time-from-minutes
                                                       (truncate
                                                        (+ dur (org-time-to-minutes start))))))
                               (start start)
                               (t nil))))
                          list))
          (have (delq nil (mapcar
                           (lambda (x) (get-text-property 1 'time-of-day x))
                           list)))
          (string (nth 3 org-agenda-time-grid))
          (gridtimes (nth 1 org-agenda-time-grid))
          (req (car org-agenda-time-grid))
          (remove (member 'remove-match req))
          new time)
     (if (and (member 'require-timed req) (not have))
         ;; don't show empty grid
         (throw 'exit list))

     (while (setq time (pop gridtimes))
       (unless (and remove (member time have))
         (let* ((windows (delq nil blocks))
                (hit nil))
           (dolist (busy windows)
             (unless hit
               (when (and (>= time (car busy))
                          (< time (cdr busy)))
                 (setq hit t))))
           (setq time (replace-regexp-in-string " " "0" (format "%04s" time)))
           (if hit
               (progn
                 (push (org-agenda-format-item
                        (concat string " dito") string nil "" nil
                        (concat (substring time 0 -2) ":" (substring time -2)))
                       new)
                 (put-text-property 2 (length (car new)) 'face 'org-archived (car new)))
             (progn
               (push (org-agenda-format-item
                      nil string nil "" nil
                      (concat (substring time 0 -2) ":" (substring time -2)))
                     new)
               (put-text-property 2 (length (car new)) 'face 'org-time-grid (car new))))
           (setq hit nil))))

     (when (and todayp org-agenda-show-current-time-in-grid)
       (push (org-agenda-format-item
              nil org-agenda-current-time-string nil "" nil
              (format-time-string "%H:%M "))
             new)
       (put-text-property
        2 (length (car new)) 'face 'org-agenda-current-time (car new)))

     (if (member 'time-up org-agenda-sorting-strategy-selected)
         (append new list)
       (append list new)))))

(defun org-time-to-minutes (time)
  "Convert an HHMM TIME to minutes."
  (+ (* (/ time 100) 60) (% time 100)))

(defun org-time-from-minutes (minutes)
  "Convert a number of MINUTES to an HHMM time."
  (+ (* (/ minutes 60) 100) (% minutes 60)))

เห็นได้ชัดว่ามันจะดูสง่างามกว่าที่จะใช้ข้อเสีย แต่ฉันไม่สามารถคิดได้ว่าจะเข้าไปแทรกแซงที่ไหน ฟังก์ชั่นของตัวเองจะต้องผ่านทุกตารางเวลา (ตั้งค่าในorg-agenda-time-grid) และสร้างรายการใหม่ที่มีตารางสุดท้ายรวมถึงใบหน้า (ใหม่)


1
มีประโยชน์ แต่ฉันหวังว่าบางคนจะมีวิธีแก้ไขที่ไม่เกี่ยวข้องกับการแทนที่ฟังก์ชั่นorg-agendaโดยตรง
holocronweaver

ฉันเห็นด้วยอย่างแน่นอน! น่าเสียดายที่ความรู้ของฉันเกี่ยวกับ elisp และรหัสโหมดองค์กรไม่เพียงพอที่จะทำให้เกิดข้อเสีย บางทีคนอื่นสามารถช่วยได้ที่นี่อาจใช้รหัส "ของฉัน" บางอย่าง
เฟเบียน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.