Bons métodos para configurar alarmes (áudio + visuais) acionados por eventos no modo organizacional?

35

Eu gostaria que os alarmes disparassem com base nos eventos do modo organizacional associados a horários específicos (ou horários de início). Idealmente, estes seriam áudio e visuais e poderiam ser personalizados até certo ponto. Eu costumava usar Sauron, mas não consigo mais trabalhar com eventos no modo organizacional (ou notificações por email). Quais são outros bons métodos?

(Estou particularmente interessado em que a notificação seja exibida não apenas na tela pelo daemon de notificação, mas também em voz (conversão de texto em fala). Estou no Linux.)

emacsomancer
fonte
@ Constantine - isso parece bastante diferente para mim. Não estou pedindo ferramentas para fazer isso, mas sim soluções prontas que já existem. Além disso, na verdade, não estou interessado em alarmes para DEADLINEs, mas em eventos associados a horários (de início).
emacsomancer
ESTÁ BEM; Eu editei meu comentário. (Eu acho que nós dois concordamos que a sua pergunta está relacionada com o que eu ligado a.)
Constantine
2
Se você tem usar o sistema embutido agendamento de compromissos de importação de seus arquivos org-agenda utilizando a função org-agenda-to-appt. Em seguida, você pode personalizar appt-disp-window-functionpara notificá-lo da maneira que desejar (que pode incluir a chamada de programas externos).
Iqbal Ansari 30/11

Respostas:

15

Estou muito feliz com o sistema que uso, que faz (acho) exatamente o que você deseja. Ele tem duas partes: uma parte do Emacs que usa appt.el para agendar os lembretes e um pequeno programa de shell (estou usando o Linux) que cria a janela pop-up + notificação sonora. Aqui eu compartilho o código para ambas as partes.

A) Código em ~ / .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) Código em ~ / 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"

Para receber notificações por voz, você pode substituir a última linha (reprodução) pelo seguinte:

espeak "Appointment in $TIME minutes: $MSG"
scaramouche
fonte
Eu adicionei um caso para atualização automática de aplicativos ao sair da agenda organizacional: ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
holocronweaver 11/11
Nota: a atualização por volta da meia-noite é importante para os noturnos, pois org-agenda-to-apptapenas cria aplicativos para o dia atual.
Holocronweaver 11/11
+1 Isso é ótimo. Obrigado por compartilhar. Eu modifiquei isso um pouco para usar o alert.el . Porém, uma pergunta: você já teve sorte em trabalhar com a propriedade "APPT_WARNTIME" da organização para definir um tempo de aviso personalizado para cada evento? Parece que não consigo fazê-lo funcionar.
Joseph R.
11

Você pode usar as notificações no 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")
ungawa
fonte
13
Isso parece muito útil. Você sabe como integrá-lo org-mode?
precisa saber é o seguinte
2

Isto é o que acabei inventando:

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

Não é diferente da configuração do scaramouche.

emacsomancer
fonte