org-mobile.el: More flexibility to add files
The new variable org-mobile-files can now be configured to include non-agenda files into the staging area for MobileOrg. Furthermore, files that are located in a subdirectory of `org-directory' will also end up in a sub-directory in the staging area.
This commit is contained in:
parent
7baa702f65
commit
d90df8b147
|
@ -1,3 +1,7 @@
|
||||||
|
2009-09-28 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
|
* org.texi (Pushing to MobileOrg): Document `org-mobile-files'.
|
||||||
|
|
||||||
2009-09-26 Carsten Dominik <carsten.dominik@gmail.com>
|
2009-09-26 Carsten Dominik <carsten.dominik@gmail.com>
|
||||||
|
|
||||||
* org.texi (Processing LaTeX fragments): Document that the size of
|
* org.texi (Processing LaTeX fragments): Document that the size of
|
||||||
|
|
36
doc/org.texi
36
doc/org.texi
|
@ -11680,10 +11680,10 @@ operation of @i{MobileOrg} itself (see @uref{http://ncogni.to/mobileorg/}).
|
||||||
@node Setting up the staging area, Pushing to MobileOrg, MobileOrg, MobileOrg
|
@node Setting up the staging area, Pushing to MobileOrg, MobileOrg, MobileOrg
|
||||||
@section Setting up the staging area
|
@section Setting up the staging area
|
||||||
|
|
||||||
Org-mode has commands to prepare a directory with files for @i{MobileOrg}, and to
|
Org-mode has commands to prepare a directory with files for @i{MobileOrg},
|
||||||
read captured notes from there. If Emacs can directly write to the WebDAV
|
and to read captured notes from there. If Emacs can directly write to the
|
||||||
directory accessed by @i{MobileOrg}, all you need to do is to point to this
|
WebDAV directory accessed by @i{MobileOrg}, all you need to do is to point to
|
||||||
directory using the variable @code{org-mobile-directory}.
|
this directory using the variable @code{org-mobile-directory}.
|
||||||
|
|
||||||
If Emacs cannot access the WebDAV directory directly, you can use a local
|
If Emacs cannot access the WebDAV directory directly, you can use a local
|
||||||
directory for staging. Other means must then be used to keep this directory
|
directory for staging. Other means must then be used to keep this directory
|
||||||
|
@ -11707,18 +11707,22 @@ from the WebDAV directory using @file{scp}.
|
||||||
@node Pushing to MobileOrg, Pulling from MobileOrg, Setting up the staging area, MobileOrg
|
@node Pushing to MobileOrg, Pulling from MobileOrg, Setting up the staging area, MobileOrg
|
||||||
@section Pushing to MobileOrg
|
@section Pushing to MobileOrg
|
||||||
|
|
||||||
|
This operation copies all files currently listed in @code{org-mobile-files}
|
||||||
This operation copies all files currently listed in @code{org-agenda-files}
|
to the directory @code{org-mobile-directory}. By default this list contains
|
||||||
to the directory @code{org-mobile-directory}. It also creates (in the same
|
all agenda files (as listed in @code{org-agenda-files}), but additional files
|
||||||
directory) a special Org file @file{agendas.org}. This file is an Org-mode
|
can be included by customizing @code{org-mobiles-files}. The push operation
|
||||||
style outline, containing every custom agenda view defined by the user.
|
also creates (in the same directory) a special Org file @file{agendas.org}.
|
||||||
While creating the agendas, Org-mode will force@footnote{See the variable
|
This file is an Org-mode style outline, containing every custom agenda view
|
||||||
@code{org-mobile-force-id-on-agenda-items}.} an ID property on all entries
|
defined by the user. While creating the agendas, Org-mode will
|
||||||
referenced by the agendas, so that these entries can be uniquely identified
|
force@footnote{See the variable @code{org-mobile-force-id-on-agenda-items}.}
|
||||||
if @i{MobileOrg} flags them for further action. Finally, Org writes the file
|
an ID property on all entries referenced by the agendas, so that these
|
||||||
@file{index.org}, containing links to all other files. If @i{MobileOrg} is
|
entries can be uniquely identified if @i{MobileOrg} flags them for further
|
||||||
configured to request this file from the WebDAV server, all agendas and Org
|
action. Finally, Org writes the file @file{index.org}, containing links to
|
||||||
files will be downloaded to the iPhone.
|
all other files. If @i{MobileOrg} is configured to request this file from
|
||||||
|
the WebDAV server, all agendas and Org files will be downloaded to the
|
||||||
|
iPhone. To speed up the download, MobileOrg will only read files whose
|
||||||
|
checksums@footnote{stored automatically in the file @file{checksums.dat}}
|
||||||
|
have changed.
|
||||||
|
|
||||||
@node Pulling from MobileOrg, , Pushing to MobileOrg, MobileOrg
|
@node Pulling from MobileOrg, , Pushing to MobileOrg, MobileOrg
|
||||||
@section Pulling from MobileOrg
|
@section Pulling from MobileOrg
|
||||||
|
|
|
@ -2,6 +2,15 @@
|
||||||
|
|
||||||
* org-mobile.el (org-mobile-files-alist): Add the list of tags to
|
* org-mobile.el (org-mobile-files-alist): Add the list of tags to
|
||||||
the index file.
|
the index file.
|
||||||
|
(org-mobile-files): New option.
|
||||||
|
(org-mobile-files-alist, org-mobile-checksum-files): New variable.
|
||||||
|
(org-mobile-prepare-file-lists, org-mobile-files-alist): New
|
||||||
|
functions.
|
||||||
|
(org-mobile-push): Start by creating the files lists.
|
||||||
|
(org-mobile-copy-agenda-files): Move killing the buffer to after
|
||||||
|
the save-excursion has exited.
|
||||||
|
(org-mobile-write-checksums): Write checksums also for files in
|
||||||
|
sub-directories.
|
||||||
|
|
||||||
* org.el (org-ctrl-c-ctrl-c): Pass prefix arg to
|
* org.el (org-ctrl-c-ctrl-c): Pass prefix arg to
|
||||||
org-table-recalculate when cursor is in TBLFM line.
|
org-table-recalculate when cursor is in TBLFM line.
|
||||||
|
|
|
@ -27,7 +27,9 @@
|
||||||
;;
|
;;
|
||||||
;; This file contains the code to interact with Richard Moreland's iPhone
|
;; This file contains the code to interact with Richard Moreland's iPhone
|
||||||
;; application MobileOrg. This code is documented in Appendix B of the
|
;; application MobileOrg. This code is documented in Appendix B of the
|
||||||
;; Org-mode manual.
|
;; Org-mode manual. The code is not specific for the iPhone, however.
|
||||||
|
;; Any external viewer and flagging application that uses the same
|
||||||
|
;; conventions could be used.
|
||||||
|
|
||||||
(require 'org)
|
(require 'org)
|
||||||
(require 'org-agenda)
|
(require 'org-agenda)
|
||||||
|
@ -37,6 +39,26 @@
|
||||||
:tag "Org Mobile"
|
:tag "Org Mobile"
|
||||||
:group 'org)
|
:group 'org)
|
||||||
|
|
||||||
|
(defcustom org-mobile-files '(org-agenda-files)
|
||||||
|
"Files to be staged for MobileOrg.
|
||||||
|
This is basically a list of filesand directories. Files will be staged
|
||||||
|
directly. Directories will be search for files with the extension `.org'.
|
||||||
|
In addition to this, the list may also contain the following symbols:
|
||||||
|
|
||||||
|
org-agenda-files
|
||||||
|
This means, include the complete, unrestricted list of files given in
|
||||||
|
the variable `org-agenda-files'.
|
||||||
|
org-agenda-text-search-extra-files
|
||||||
|
Include the files given in the variable
|
||||||
|
`org-agenda-text-search-extra-files'"
|
||||||
|
:group 'org-mobile
|
||||||
|
:type '(list :greedy t
|
||||||
|
(option (const :tag "org-agenda-files" org-agenda-files))
|
||||||
|
(option (const :tag "org-agenda-text-search-extra-files"
|
||||||
|
org-agenda-text-search-extra-files))
|
||||||
|
(repeat :inline t :tag "Additional files"
|
||||||
|
(file))))
|
||||||
|
|
||||||
(defcustom org-mobile-directory ""
|
(defcustom org-mobile-directory ""
|
||||||
"The WebDAV directory where the interaction with the mobile takes place."
|
"The WebDAV directory where the interaction with the mobile takes place."
|
||||||
:group 'org-mobile
|
:group 'org-mobile
|
||||||
|
@ -115,6 +137,43 @@ using `rsync' or `scp'.")
|
||||||
(defvar org-mobile-last-flagged-files nil
|
(defvar org-mobile-last-flagged-files nil
|
||||||
"List of files containing entreis flagged in the latest pull.")
|
"List of files containing entreis flagged in the latest pull.")
|
||||||
|
|
||||||
|
(defvar org-mobile-files-alist nil)
|
||||||
|
(defvar org-mobile-checksum-files nil)
|
||||||
|
|
||||||
|
(defun org-mobile-prepare-file-lists ()
|
||||||
|
(setq org-mobile-files-alist (org-mobile-files-alist))
|
||||||
|
(setq org-mobile-checksum-files (mapcar 'cdr org-mobile-files-alist)))
|
||||||
|
|
||||||
|
(defun org-mobile-files-alist ()
|
||||||
|
"Expand the list in `org-mobile-files' to a list of existing files."
|
||||||
|
(let* ((files
|
||||||
|
(apply 'append (mapcar
|
||||||
|
(lambda (f)
|
||||||
|
(cond
|
||||||
|
((eq f 'org-agenda-files) (org-agenda-files t))
|
||||||
|
((eq f 'org-agenda-text-search-extra-files)
|
||||||
|
org-agenda-text-search-extra-files)
|
||||||
|
((and (stringp f) (file-directory-p f))
|
||||||
|
(directory-files f 'full "\\.org\\'"))
|
||||||
|
((and (stringp f) (file-exists-p f))
|
||||||
|
(list f))
|
||||||
|
(t nil)))
|
||||||
|
org-mobile-files)))
|
||||||
|
(orgdir-uname (file-name-as-directory (file-truename org-directory)))
|
||||||
|
(orgdir-re (concat "\\`" (regexp-quote orgdir-uname)))
|
||||||
|
uname seen rtn)
|
||||||
|
;; Make the files unique, and determine the name under which they will
|
||||||
|
;; be listed.
|
||||||
|
(while (setq file (pop files))
|
||||||
|
(setq uname (file-truename file))
|
||||||
|
(unless (member uname seen)
|
||||||
|
(push uname seen)
|
||||||
|
(if (string-match orgdir-re uname)
|
||||||
|
(setq link-name (substring uname (match-end 0)))
|
||||||
|
(setq link-name (file-name-nondirectory uname)))
|
||||||
|
(push (cons file link-name) rtn)))
|
||||||
|
(nreverse rtn)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun org-mobile-push ()
|
(defun org-mobile-push ()
|
||||||
"Push the current state of Org affairs to the WebDAV directory.
|
"Push the current state of Org affairs to the WebDAV directory.
|
||||||
|
@ -122,6 +181,7 @@ This will create the index file, copy all agenda files there, and also
|
||||||
create all custom agenda views, for upload to the mobile phone."
|
create all custom agenda views, for upload to the mobile phone."
|
||||||
(interactive)
|
(interactive)
|
||||||
(org-mobile-check-setup)
|
(org-mobile-check-setup)
|
||||||
|
(org-mobile-prepare-file-lists)
|
||||||
(run-hooks 'org-mobile-pre-push-hook)
|
(run-hooks 'org-mobile-pre-push-hook)
|
||||||
(org-mobile-create-sumo-agenda)
|
(org-mobile-create-sumo-agenda)
|
||||||
(org-save-all-org-buffers) ; to save any IDs created by this process
|
(org-save-all-org-buffers) ; to save any IDs created by this process
|
||||||
|
@ -222,8 +282,8 @@ agenda view showing the flagged items."
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(setq buf (find-file file))
|
(setq buf (find-file file))
|
||||||
(insert "\n")
|
(insert "\n")
|
||||||
(save-buffer)
|
(save-buffer))
|
||||||
(kill-buffer buf)))))
|
(kill-buffer buf))))
|
||||||
|
|
||||||
(defun org-mobile-write-checksums ()
|
(defun org-mobile-write-checksums ()
|
||||||
"Create checksums for all files in `org-mobile-directory'.
|
"Create checksums for all files in `org-mobile-directory'.
|
||||||
|
@ -231,12 +291,19 @@ The table of checksums is written to the file mobile-checksums."
|
||||||
(let ((cmd (cond ((executable-find "shasum"))
|
(let ((cmd (cond ((executable-find "shasum"))
|
||||||
((executable-find "sha1sum"))
|
((executable-find "sha1sum"))
|
||||||
((executable-find "md5sum"))
|
((executable-find "md5sum"))
|
||||||
((executable-find "md5")))))
|
((executable-find "md5"))))
|
||||||
|
(files org-mobile-checksum-files))
|
||||||
(if (not cmd)
|
(if (not cmd)
|
||||||
(message "Checksums could not be generated: no executable")
|
(message "Checksums could not be generated: no executable")
|
||||||
(with-temp-buffer
|
(with-temp-buffer
|
||||||
(cd org-mobile-directory)
|
(cd org-mobile-directory)
|
||||||
(if (equal 0 (shell-command (concat cmd " *.org > checksums.dat")))
|
(if (file-exists-p "agendas.org")
|
||||||
|
(push "agendas.org" files))
|
||||||
|
(if (file-exists-p "mobileorg.org")
|
||||||
|
(push "mobileorg.org" files))
|
||||||
|
(setq cmd (concat cmd " " (mapconcat 'shell-quote-argument files " ")
|
||||||
|
" > checksums.dat"))
|
||||||
|
(if (equal 0 (shell-command cmd))
|
||||||
(message "Checksums written")
|
(message "Checksums written")
|
||||||
(message "Checksums could not be generated"))))))
|
(message "Checksums could not be generated"))))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue