Comment faire automatiquement org-mobile-push org-mobile tirez dans emacs
depuis que j'utilise org-mode pour suivre ma liste de todo dans emacs, j'aime l'application iPhone: MobileOrg, avec elle, je peux accéder à ma liste de todo toute la journée.
Mais voici le problème:
je dois manuellement org-mobile-pousser mes changements du fichier local au téléphone mobile par dropbox, et org-mobile-tirer les changements faits par téléphone en arrière.
comment faire cela automatiquement? Comme ajouter des recettes dans le fichier dotemacs.
7 réponses
Ajouter ces deux lignes au point emacs fichier:
(add-hook 'after-init-hook 'org-mobile-pull)
(add-hook 'kill-emacs-hook 'org-mobile-push)
avec eux, il tire automatiquement les changements au démarrage d'emacs, et pousse les changements avant qu'emacs ne sorte.
-- mise à Jour
Si vous quittez jamais votre Emacs, cette solution pourrait ne pas fonctionner pour vous. Donc, une autre solution utilisant idle timer
;; moble sync
(defvar org-mobile-sync-timer nil)
(defvar org-mobile-sync-idle-secs (* 60 10))
(defun org-mobile-sync ()
(interactive)
(org-mobile-pull)
(org-mobile-push))
(defun org-mobile-sync-enable ()
"enable mobile org idle sync"
(interactive)
(setq org-mobile-sync-timer
(run-with-idle-timer org-mobile-sync-idle-secs t
'org-mobile-sync)));
(defun org-mobile-sync-disable ()
"disable mobile org idle sync"
(interactive)
(cancel-timer org-mobile-sync-timer))
(org-mobile-sync-enable)
je viens de découvrir que c'est la même que ci-dessous réponse, donc, si vous préférez la solution de ralenti, s'il vous plaît upvote tkf de l' répondre à.
j'ai quelque chose comme ça dans mon réglage Emacs à faire pousser et tirer quand je suis loin de l'ordinateur.
(defvar my-org-mobile-sync-timer nil)
(defvar my-org-mobile-sync-secs (* 60 20))
(defun my-org-mobile-sync-pull-and-push ()
(org-mobile-pull)
(org-mobile-push)
(when (fboundp 'sauron-add-event)
(sauron-add-event 'my 3 "Called org-mobile-pull and org-mobile-push")))
(defun my-org-mobile-sync-start ()
"Start automated `org-mobile-push'"
(interactive)
(setq my-org-mobile-sync-timer
(run-with-idle-timer my-org-mobile-sync-secs t
'my-org-mobile-sync-pull-and-push)))
(defun my-org-mobile-sync-stop ()
"Stop automated `org-mobile-push'"
(interactive)
(cancel-timer my-org-mobile-sync-timer))
(my-org-mobile-sync-start)
https://github.com/matburt/mobileorg-android/wiki/Scripting/):
emacs --batch --load ~/.emacs --eval "(org-mobile-pull)" --eval "(org-mobile-push)"
comme une solution de côté, semblable à Sandeep C ' s
;; for Emacs 24.3.1 insert next line
(require 'cl)
;; automatically org-mobile-push on save of a file
(add-hook
'after-save-hook
(lambda ()
(let (
(org-filenames (mapcar 'file-name-nondirectory (directory-files org-directory))) ; list of org file names (not paths)
(filename (file-name-nondirectory buffer-file-name)) ; list of the buffers filename (not path)
)
(if (find filename org-filenames :test #'string=)
(org-mobile-push)
)
)
)
)
Ce code est tiré de http://kenmankoff.com/2012/08/17/emacs-org-mode-and-mobileorg-auto-sync/, avec quelques détails ont changé. Vous devez configurer les variables au début. Ce code sera
vérifiez tous les 30s si MobileOrg a synchronisé, et si oui
- tirer de MobileOrg.
Push To MobileOrg.
Ceci est nécessaire pour mettre à jour les vues de L'ordre du jour dans MobileOrg. Avec cette comportement, vous pouvez être loin de votre ordinateur, mettre à jour certaines choses dans MobileOrg, sync, attendre 30 secondes, sync à nouveau, et votre vue mobile agenda sera mis à jour.
- chaque fois qu'un fichier org est sauvegardé
- vérifiez si le fichier org sauvegardé est censé être synchronisé avec MobileOrg, et si oui
- Attendre que l'utilisateur en veille
- Push to MobileOrg
- vérifiez si le fichier org sauvegardé est censé être synchronisé avec MobileOrg, et si oui
Code pour votre .emacs fichier:
(require 'org-mobile)
;; Configure these two variables
(setq org-mobile-inbox-for-pull "~/Dropbox/org/mobile.org"
org-mobile-directory "~/Dropbox/MobileOrg")
(require 'gnus-async)
;; 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 'org-mobile-push)))
;; After saving files, start an idle timer after which we are going to push
(add-hook 'after-save-hook
(lambda ()
(if (or (eq major-mode 'org-mode) (eq major-mode 'org-agenda-mode))
(dolist (file (org-mobile-files-alist))
(if (string= (expand-file-name (car file)) (buffer-file-name))
(org-mobile-push-with-delay 10))))))
;; watch mobileorg.org for changes, and then call org-mobile-pull
(defun org-mobile-install-monitor (file secs)
(run-with-timer
0 secs
(lambda (f p)
(unless (< p (second (time-since (elt (file-attributes f) 5))))
(org-mobile-pull)
(org-mobile-push)))
file secs))
(defvar monitor-timer (org-mobile-install-monitor (concat org-mobile-directory "/mobileorg.org") 30)
"Check if file changed every 30 s.")
Vous pouvez aussi pousser juste après avoir enregistré une note, comme ceci:
(add-hook
'after-save-hook
(lambda ()
(if (string= buffer-file-name "<path to my notes.org>")
(org-mobile-push)
)
))
j'utilise ce code elisp de gist sur mon init.el et il fonctionne assez bien, sauf qu'il n'a pas org-mobile-pull intégré.
j'ai simplement choisi de pousser quand j'enregistrais, donc j'ai ajouté ceci à mon fichier emacs init:
(defun org-mobile-push-on-save ()
"Used in `after-save-hook'."
(when (memq this-command '(save-buffer save-some-buffers))
(org-mobile-push)))
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'after-save-hook 'org-mobile-push-on-save nil 'make-local)))
en bref, il ajoute un "after-save-hook" aux tampons org-mode.
Plus d'info sur le code:
Pour Auto-pull, une minuterie comme dans les autres réponses est probablement un bon moyen.