Gute Methoden zum Einrichten von Alarmen (audio + visuell), die durch Ereignisse im Organisationsmodus ausgelöst werden?

35

Ich möchte, dass Alarme aufgrund von Ereignissen im Organisationsmodus ausgelöst werden, die mit bestimmten Zeiten (oder Startzeiten) verknüpft sind. Im Idealfall handelt es sich dabei um Audio- und Videodateien, die bis zu einem gewissen Grad angepasst werden können. Früher habe ich verwendet Sauron, aber ich kann nicht mehr mit Ereignissen im Organisationsmodus (oder E-Mail-Benachrichtigungen) arbeiten. Was sind andere gute Methoden?

(Ich bin besonders daran interessiert, dass die Benachrichtigung nicht nur über den Benachrichtigungsdämon auf dem Bildschirm angezeigt wird, sondern auch gesprochen wird (Text-to-Speech). Ich arbeite unter Linux.)

Emacsomancer
quelle
@Constantine - das scheint mir etwas anders zu sein. Ich frage nicht nach Werkzeugen, um dies zu erreichen, sondern nach vorgefertigten Lösungen, die es bereits gibt. Außerdem bin ich eigentlich nicht an Alarmen für DEADLINEs interessiert, sondern an Ereignissen, die mit (Start-) Zeiten verbunden sind.
Emacsomancer
OKAY; Ich habe meinen Kommentar bearbeitet. (Ich denke, wir sind uns einig, dass Ihre Frage mit der Frage zusammenhängt, mit der ich verlinkt bin.)
Constantine
1
Siehe auch
abo-abo
2
Wenn Sie das eingebaute Appt-System verwendet haben, um mithilfe der Funktion Termine aus Ihren Organigrammdateien zu importieren org-agenda-to-appt. Anschließend können Sie festlegen appt-disp-window-function, wie Sie benachrichtigt werden möchten (einschließlich des Aufrufs externer Programme).
Iqbal Ansari

Antworten:

15

Ich bin ziemlich zufrieden mit dem System, das ich verwende und das genau das macht (glaube ich), was Sie wollen. Es besteht aus zwei Teilen: einem Emacs-Teil, der appt.el zum Planen der Erinnerungen verwendet, und einem kleinen Shell-Programm (ich verwende Linux), das die Popup- und Soundbenachrichtigung erstellt. Hier teile ich den Code für beide Teile.

A) Code in ~ / .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) Code in ~ / bin / appt-notification

#!/bin/sh

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

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

Um Sprachbenachrichtigungen zu erhalten, können Sie die letzte Zeile (Wiedergabe) durch Folgendes ersetzen:

espeak "Appointment in $TIME minutes: $MSG"
Scaramouche
quelle
Ich habe einen Fall für das automatische Aktualisieren von Anwendungen hinzugefügt, wenn ich org-agenda ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
beende
Hinweis: Die Aktualisierung um Mitternacht ist für Nachtschwärmer wichtig, da org-agenda-to-apptnur Appts für den aktuellen Tag erstellt werden.
Holocronweaver
+1 Das ist großartig. Ich danke Ihnen für das Teilen. Ich habe dies ein wenig geändert, um alert.el stattdessen zu verwenden. Eine Frage: Hatten Sie jemals Glück, dass es mit der org-Eigenschaft "APPT_WARNTIME" funktioniert, um eine benutzerdefinierte Warnzeit für jedes Ereignis festzulegen? Ich kann es scheinbar nicht zum Laufen bringen.
Joseph R.
11

Sie können Benachrichtigungen in Emacs> 24 verwenden:

(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")
ungawa
quelle
13
Dies scheint sehr nützlich zu sein. Wissen Sie, wie man es integriert org-mode?
Erikstokes
2

Das habe ich mir ausgedacht:

;;; 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))

Es ist nicht unähnlich zu Scaramouches Setup.

Emacsomancer
quelle