Buoni metodi per impostare allarmi (audio + visivo) attivati ​​da eventi in modalità org?


35

Vorrei che gli allarmi fossero attivati ​​in base a eventi in modalità organizzazione associati a orari specifici (o orari di inizio). Idealmente, questi sarebbero audio e visivi e in grado di essere personalizzati in una certa misura. Ho usato per usare Sauron, ma non riesco a farlo funzionare con gli eventi org-mode (o email) notificiations più. Quali sono altri buoni metodi?

(Sono particolarmente interessato a visualizzare la notifica non solo sullo schermo tramite il daemon di notifica, ma anche in modalità vocale (sintesi vocale). Sono su Linux.)



@Constantine - questo mi sembra piuttosto diverso. Non sto chiedendo strumenti per farlo, ma piuttosto soluzioni già pronte che già esistono. Inoltre, in realtà non sono interessato agli allarmi per le SCADENZE, ma piuttosto agli eventi associati ai tempi (di inizio).
emacsomancer

OK; Ho modificato il mio commento. (Penso che entrambi siamo d'accordo sul fatto che la tua domanda è correlata a quella a cui mi sono legata.)
Costantino,


2
Se hai utilizzato il sistema integrato appt per importare appuntamenti dai tuoi file di agenda-agenda usando la funzione org-agenda-to-appt. Quindi è possibile personalizzare appt-disp-window-functionper avvisare nel modo desiderato (che può includere la chiamata a programmi esterni).
Iqbal Ansari,

Risposte:


15

Sono abbastanza contento del sistema che uso, che fa (penso) esattamente quello che vuoi. Ha due parti: una parte Emacs che utilizza appt.el per programmare i promemoria e un piccolo programma shell (sto usando Linux) che crea la notifica popup + suono. Qui condivido il codice per entrambe le parti.

A) Codice 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) Codice 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"

Per ricevere notifiche vocali è possibile sostituire l'ultima riga (riproduzione) con la seguente:

espeak "Appointment in $TIME minutes: $MSG"

Ho aggiunto una richiesta di aggiornamento automatico delle app quando si esce dall'agenda dell'agenda: ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
holocronweaver,

Nota: l'aggiornamento verso mezzanotte è importante per i nottambuli poiché org-agenda-to-apptcrea solo app per il giorno corrente.
holocronweaver,

+1 Questo è fantastico. Grazie per aver condiviso. L'ho modificato un po 'per usare invece alert.el . Una domanda, però: hai mai avuto fortuna a farlo funzionare con la proprietà "APPT_WARNTIME" dell'organizzazione per impostare un orario di avviso personalizzato per ogni evento? Non riesco a farlo funzionare.
Joseph R.

11

Puoi usare le notifiche in 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
Questo sembra molto utile. Sai come integrarlo con org-mode?
erikstokes

2

Questo è quello che ho scoperto:

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

Non è dissimile dalla configurazione di scaramouche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.