조직 모드 이벤트에 의해 트리거되는 알람 (오디오 + 비주얼)을 설정하는 좋은 방법은 무엇입니까?


35

특정 시간 (또는 시작 시간)과 관련된 조직 모드 이벤트를 기반으로 알람을 설정하고 싶습니다. 이상적으로는 오디오 및 시각적이며 어느 정도 사용자 정의 할 수 있습니다. 예전에는을 사용 Sauron했지만 조직 모드 이벤트 (또는 이메일 알림)와 더 이상 작동하지 않습니다. 다른 좋은 방법은 무엇입니까?

(특히 알림 데몬을 통해 화면에 알림을 표시하는 것뿐만 아니라 음성 (텍스트 음성 변환)을 사용하는 데 관심이 있습니다. 저는 Linux에 있습니다.)



@ 콘스탄틴-이것은 나에게 다소 다르게 보입니다. 나는 이것을 만들기위한 도구를 요구하지 않고 이미 존재하는 기성품 솔루션을 요구합니다. 또한 실제로 DEADLINE에 대한 경보가 아니라 (시작) 시간과 관련된 이벤트에 관심이 있습니다.
emacsomancer

승인; 내 의견을 편집했습니다. (귀하의 질문이 내가 연결 한 질문과 관련이 있음에 동의합니다.)
Constantine


2
내장 appt 시스템을 사용하여 기능을 사용하여 조직의 파일에서 약속을 가져 오는 경우 org-agenda-to-appt. 그런 다음 appt-disp-window-function원하는 방식으로 알리도록 사용자 정의 할 수 있습니다 (외부 프로그램 호출 포함).
Iqbal Ansari

답변:


15

나는 내가 사용하는 시스템에 매우 만족합니다. appt.el을 사용하여 알림을 예약하는 Emacs 부분과 팝업 + 소리 알림을 만드는 작은 쉘 프로그램 (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 / appt 알림 코드

#!/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"

: 조직-의제 종료 할 때 자동 업데이트 appts에 대한 사례를 추가 ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
holocronweaver

참고 : 자정을 업데이트하는 것은 org-agenda-to-appt현재 날짜에 대한 appts 만 작성하므로 밤 올빼미에게는 중요합니다 .
holocronweaver

+1 훌륭합니다. 공유해 주셔서 감사합니다. alert.el을 대신 사용하도록 약간 수정했습니다 . 그러나 한 가지 질문은 org "APPT_WARNTIME"속성과 함께 작동하여 각 이벤트에 대해 사용자 지정 경고 시간을 설정 한 적이 있습니까? 작동하지 않는 것 같습니다.
Joseph R.

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.