วิธีการที่ดีสำหรับการตั้งค่าการเตือน (เสียง + ภาพ) ที่เกิดขึ้นจากเหตุการณ์ในโหมดองค์กรหรือไม่


35

ฉันต้องการตั้งค่าการเตือนตามเหตุการณ์ในโหมดองค์กรที่เกี่ยวข้องกับเวลาที่ระบุ (หรือเวลาเริ่มต้น) ในอุดมคติแล้วสิ่งเหล่านี้จะเป็นภาพและเสียงและสามารถปรับแต่งได้บ้าง ฉันเคยใช้Sauronแต่ฉันไม่สามารถทำงานกับกิจกรรมโหมด org (หรือการแจ้งเตือนทางอีเมล) ได้อีกต่อไป อะไรคือวิธีการที่ดีอื่น ๆ ?

(ฉันสนใจเป็นพิเศษในการแสดงการแจ้งเตือนไม่เพียง แต่บนหน้าจอผ่าน daemon แจ้งเตือน แต่ยังพูด (ข้อความเป็นคำพูด) ฉันใช้ Linux)



@ คอนสแตนติน - นี่ดูเหมือนจะแตกต่างกับฉัน ฉันไม่ได้ขอเครื่องมือในการทำสิ่งนี้ แต่เป็นการแก้ปัญหาแบบสำเร็จรูปที่มีอยู่แล้ว นอกจากนี้ฉันสนใจที่จะไม่แจ้งเตือนสำหรับ DEADLINE แต่สำหรับเหตุการณ์ที่เกี่ยวข้องกับ (เริ่มต้น) ครั้ง
emacsomancer

ตกลง; ฉันแก้ไขความคิดเห็นของฉัน (ฉันคิดว่าเราทั้งคู่เห็นพ้องกันว่าคำถามของคุณเกี่ยวข้องกับคำถามที่ฉันเชื่อมโยง)
Constantine

1
ที่เกี่ยวข้อง: emacs-fu.blogspot.nl/2009/11/showing-pop-ups.html
abo-abo

2
หากคุณมีใช้ระบบ builtin appt นัดหมายนำเข้าจากไฟล์ org-agenda-to-apptorg-วาระการประชุมของคุณโดยใช้ฟังก์ชั่น จากนั้นคุณสามารถปรับแต่งappt-disp-window-functionเพื่อแจ้งให้คุณทราบถึงวิธีที่คุณต้องการ (ซึ่งอาจรวมถึงการเรียกโปรแกรมภายนอก)
อิกบาลอันซารี

คำตอบ:


15

ฉันมีความสุขมากกับระบบที่ฉันใช้ซึ่งทำ (ฉันคิดว่า) สิ่งที่คุณต้องการ มันมีสองส่วน: ส่วน Emacs ที่ใช้ appt.el เพื่อกำหนดตารางการแจ้งเตือนและโปรแกรมเชลล์ขนาดเล็ก (ฉันใช้ Linux) ที่สร้างป๊อปอัป + การแจ้งเตือนเสียง ที่นี่ฉันแบ่งปันรหัสสำหรับทั้งสองส่วน

A) รหัสใน ~ / .emacs.d / init.el

(require 'appt)
(appt-activate t)

(setq appt-message-warning-time 5) ; Show notification 5 minutes before event
(setq appt-display-interval appt-message-warning-time) ; Disable multiple reminders
(setq appt-display-mode-line nil)

; Use appointment data from org-mode
(defun my-org-agenda-to-appt ()
  (interactive)
  (setq appt-time-msg-list nil)
  (org-agenda-to-appt))

; Update alarms when...
; (1) ... Starting Emacs
(my-org-agenda-to-appt)

; (2) ... Everyday at 12:05am (useful in case you keep Emacs always on)
(run-at-time "12:05am" (* 24 3600) 'my-org-agenda-to-appt)

; (3) ... When TODO.txt is saved
(add-hook 'after-save-hook
          '(lambda ()
             (if (string= (buffer-file-name) (concat (getenv "HOME") "/ideas/TODO.txt"))
                 (my-org-agenda-to-appt))))

; Display appointments as a window manager notification
(setq appt-disp-window-function 'my-appt-display)
(setq appt-delete-window-function (lambda () t))

(setq my-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification"))

(defun my-appt-display (min-to-app new-time msg)
  (if (atom min-to-app)
    (start-process "my-appt-notification-app" nil my-appt-notification-app min-to-app msg)
  (dolist (i (number-sequence 0 (1- (length min-to-app))))
    (start-process "my-appt-notification-app" nil my-appt-notification-app (nth i min-to-app) (nth i msg)))))

B) รหัสใน ~ / bin / การแจ้งเตือนของแอป

#!/bin/sh

TIME="$1"
MSG="$2"

notify-send -t 0 "<br>Appointment in $TIME minutes:<br>$MSG<br>"
play "~/bin/alarm.wav"

หากต้องการรับการแจ้งเตือนด้วยเสียงคุณสามารถแทนที่บรรทัดสุดท้าย (เล่น) ด้วยรายการต่อไปนี้:

espeak "Appointment in $TIME minutes: $MSG"

ฉันได้เพิ่มเคสสำหรับแอปพลิเคชันที่อัปเดตอัตโนมัติเมื่อออกจากวาระการประชุม: ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
holocronweaver

หมายเหตุ: การอัปเดตประมาณเที่ยงคืนมีความสำคัญสำหรับนกฮูกกลางคืนเนื่องจากorg-agenda-to-apptสร้างแอปพลิเคชันสำหรับวันปัจจุบันเท่านั้น
holocronweaver

+1 นี่มันเยี่ยมมาก ขอบคุณสำหรับการแชร์. ฉันได้แก้ไขนี้เล็กน้อยเพื่อใช้alert.elแทน แม้ว่าคำถามหนึ่งข้อ: คุณเคยมีโชคไหมที่ได้รับมันมาทำงานร่วมกับคุณสมบัติ "APPT_WARNTIME" ขององค์กรเพื่อตั้งเวลาเตือนที่กำหนดเองสำหรับแต่ละเหตุการณ์ ฉันไม่สามารถทำงานได้
โจเซฟอาร์

11

คุณสามารถใช้การแจ้งเตือนใน Emacs> 24:

(require 'notifications)

(notifications-notify :title "Achtung!"
                      :body (format "You have an appointment in %d minutes" 10)
                      :app-name "Emacs: Org"
                      :sound-name "alarm-clock-elapsed")

13
ดูเหมือนว่ามีประโยชน์มาก คุณรู้วิธีการรวมเข้ากับorg-mode?
erikstokes

2

นี่คือสิ่งที่ฉันลงเอยด้วย:

;;; org-to-appt

;; based on http://emacs-fu.blogspot.nl/2009/11/showing-pop-ups.html
(defun talky-popup (title msg &optional icon sound)  
  "Show a popup if we're on X, or echo it otherwise; TITLE is the title
of the message, MSG is the context. Optionally, you can provide an ICON and
a sound to be played"

  (interactive)
  ;;verbal warning



  (shell-command
   ;;  (concat "espeak -v mb-en1 -k5 -s125 " "'" title " " msg "'" " --stdout | paplay") ;; use local espeak
   (concat "echo " "'" title "'" " " "'" msg "'" " |text-to-speech en-gb")  ;; use remote Google voices
    ;; text-to-speech is from https://github.com/taylorchu/speech-to-text-text-to-speech
   )
  (if (eq window-system 'x)
    (shell-command (concat "notify-send -u critical -t 1800000  " 

                     (if icon (concat "-i " icon) "")
                     " '" title "' '" msg "'"))
    ;; text only version

    (message (concat title ": " msg))))

;; the appointment notification facility
(setq
  appt-message-warning-time 15 ;; warn 15 min in advance

  appt-display-mode-line t     ;; show in the modeline
  appt-display-format 'window) ;; use our func
(appt-activate 1)              ;; active appt (appointment notification)
(display-time)                 ;; time display is required for this...

 ;; update appt each time agenda opened

(add-hook 'org-finalize-agenda-hook 'org-agenda-to-appt)

;; our little façade-function for talky-popup
 (defun talky-appt-display (min-to-app new-time msg)
    (talky-popup (format "In %s minute(s):" min-to-app) msg 
  ;;    "/usr/share/icons/gnome/32x32/status/appointment-soon.png"   ;; optional icon

  ;;    "/usr/share/sounds/ubuntu/stereo/phone-incoming-call.ogg"    ;; optional sound

        ))
  (setq appt-disp-window-function (function talky-appt-display))

มันไม่ต่างกับการตั้งค่าของ Scaramouche

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