public
Last active

Automatic asynchronous org-mobile-push in idle time.

  • Download Gist
gistfile1.el
Emacs Lisp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
;; Show a notification when a push has been completed
(require 'notifications)
(defun notify-push (result)
(notifications-notify
:title "Push complete"
:body (format "Org-mobile-push: %s" result)
)
)
 
;; Fork the work of pushing to mobile
(require 'async)
(defun fork-org-push-mobile ()
(async-start
;; What to do in the child process
`(lambda ()
,(async-inject-variables "org-\\(mobile-\\|directory\\)")
(org-mobile-push))
; What to do when it finishes
(lambda (result)
(notify-push result))))
 
;; Define a timer variable
(defvar org-mobile-push-timer nil
"Timer that `org-mobile-push-timer' used to reschedule itself, or nil.")
 
;; Push to mobile when the idle timer runs out
(defun org-mobile-push-with-delay (secs)
(when org-mobile-push-timer
(cancel-timer org-mobile-push-timer))
(setq org-mobile-push-timer
(run-with-idle-timer
(* 1 secs) nil 'fork-org-push-mobile)))
 
;; After saving files, start a 30 seconds idle timer after which we
;; are going to push
(add-hook 'after-save-hook
(lambda ()
(when (eq major-mode 'org-mode)
(dolist (file (org-mobile-files-alist))
(if (string= (expand-file-name (car file)) (buffer-file-name))
(org-mobile-push-with-delay 30)))
)))
 
;; At least run it once a day, but no need for a delay this time
(run-at-time "00:05" 86400 '(lambda () (org-mobile-push-with-delay 1)))

This is great! Thanks for sharing. I'm running into an issue with the after save hook, I'm getting the error "Symbol's function definition is void: org-mobile-files-alist". Do you have any suggestions?

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.