Các phương pháp tốt để thiết lập báo thức (âm thanh + hình ảnh) được kích hoạt bởi các sự kiện ở chế độ tổ chức?


35

Tôi muốn đặt báo thức dựa trên các sự kiện ở chế độ tổ chức liên quan đến thời gian cụ thể (hoặc thời gian bắt đầu). Lý tưởng nhất là âm thanh và hình ảnh, và có thể được tùy chỉnh ở một mức độ nào đó. Tôi đã từng sử dụng Sauron, nhưng tôi không thể làm cho nó hoạt động với các sự kiện ở chế độ tổ chức (hoặc thông báo qua email) nữa. Các phương pháp tốt khác là gì?

(Tôi đặc biệt quan tâm đến việc thông báo không chỉ được hiển thị trên màn hình thông qua trình nền thông báo mà còn được nói (chuyển văn bản thành giọng nói). Tôi đang ở trên Linux.)



@Constantine - điều này có vẻ khá khác với tôi. Tôi không yêu cầu các công cụ để thực hiện điều này, mà là các giải pháp đã sẵn sàng đã tồn tại. Hơn nữa, tôi thực sự quan tâm không phải là báo động cho DEADLINE, mà là các sự kiện liên quan đến thời gian (bắt đầu).
emacsomancer

ĐƯỢC; Tôi chỉnh sửa bình luận của tôi. (Tôi nghĩ cả hai chúng tôi đều đồng ý rằng câu hỏi của bạn có liên quan đến câu hỏi tôi liên kết.)
Constantine


2
Nếu bạn đã sử dụng hệ thống appt dựng sẵn để nhập các cuộc hẹn từ các tệp org-agenda bằng chức năng này org-agenda-to-appt. Sau đó, bạn có thể tùy chỉnh appt-disp-window-functionđể thông báo cho bạn theo cách bạn muốn (có thể bao gồm gọi các chương trình bên ngoài).
Iqbal Ansari

Câu trả lời:


15

Tôi khá hài lòng với hệ thống tôi sử dụng, nó (tôi nghĩ) chính xác những gì bạn muốn. Nó có hai phần: phần Emacs sử dụng appt.el để lên lịch nhắc nhở và chương trình shell nhỏ (tôi đang sử dụng Linux) tạo ra thông báo bật lên + âm thanh. Ở đây tôi chia sẻ mã cho cả hai phần.

A) Mã trong ~ / .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) Mã trong ~ / bin / appt-notify

#!/bin/sh

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

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

Để nhận thông báo bằng giọng nói, bạn có thể thay thế dòng cuối cùng (phát) bằng dòng sau:

espeak "Appointment in $TIME minutes: $MSG"

Tôi đã thêm một trường hợp cho các ứng dụng cập nhật tự động khi thoát org-agenda: ; (4) ... Quitting org-agenda. (advice-add 'org-agenda-quit :after #'hw-org-agenda-to-appt)
holocronweaver

Lưu ý: cập nhật vào khoảng nửa đêm rất quan trọng đối với cú đêm vì org-agenda-to-apptchỉ tạo các ứng dụng cho ngày hiện tại.
holocronweaver

+1 Điều này thật tuyệt. Cảm ơn bạn đã chia sẻ. Tôi đã sửa đổi điều này một chút để sử dụng alert.el thay thế. Tuy nhiên, có một câu hỏi: bạn đã bao giờ gặp may mắn khi làm việc với thuộc tính org "APPT_WARNTIME" để đặt thời gian cảnh báo tùy chỉnh cho mỗi sự kiện chưa? Tôi dường như không thể làm cho nó hoạt động.
Joseph R.

11

Bạn có thể sử dụng thông báo trong 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
Điều này có vẻ rất hữu ích. Bạn có biết làm thế nào để tích hợp nó với org-mode?
erikstokes

2

Đây là những gì tôi đã kết thúc với:

;;; 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ó không giống với thiết lập của Scaramouche.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.