mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-31 09:20:54 -08:00
2010-07-19 Eric Schulte <schulte.eric@gmail.com> * ob-C.el: New file. * ob-R.el: New file. * ob-asymptote.el: New file. * ob-clojure.el: New file. * ob-comint.el: New file. * ob-css.el: New file. * ob-ditaa.el: New file. * ob-dot.el: New file. * ob-emacs-lisp.el: New file. * ob-eval.el: New file. * ob-exp.el: New file. * ob-gnuplot.el: New file. * ob-haskell.el: New file. * ob-keys.el: New file. * ob-latex.el: New file. * ob-lob.el: New file. * ob-matlab.el: New file. * ob-mscgen.el: New file. * ob-ocaml.el: New file. * ob-octave.el: New file. * ob-perl.el: New file. * ob-python.el: New file. * ob-ref.el: New file. * ob-ruby.el: New file. * ob-sass.el: New file. * ob-screen.el: New file. * ob-sh.el: New file. * ob-sql.el: New file. * ob-sqlite.el: New file. * ob-table.el: New file. * ob-tangle.el: New file. * ob.el: New file. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-mks.el: New file. * org-capture.el: New file. 2010-07-19 Christian Egli <christian.egli@sbszh.ch> * org-taskjuggler.el: New file. 2010-07-19 Matt Lundin <mdl@imapmail.org> * org-agenda.el (org-search-view): Fixed inclusion of agenda-archives in org-agenda-text-search-extra-files. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-list.el (org-list-send-list): Locally bind variable `txt'. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org.el (org-reload): now also reloading babel files 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-set-plist): Make sure txt is a string before calling `string-match'. (org-capture-templates): Fix customization type. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-preprocess): Make a special case for \nbsp. (org-latex-entities): Remove the entry for \nbsp. (org-latex-entities-exceptions): Variable removed. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-refile): Do not try to manipulate bookmark list. * org.el (org-refile): Use the correct bookmark here. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-list-send-list): Parse list from its true beginning. * org.el (org-ctrl-c-ctrl-c): Maybe send the list when at a list item. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-insert-link): Correctly determine if we should use a relative path. 2010-07-19 Nicolas Goaziou <n.goaziou@gmail.com> * org-list.el (org-list-radio-list-templates): Fix templates. 2010-07-19 Nicolas Goaziou <n.goaziou@gmail.com> * org-list.el (org-list-send-list): regexp defining the start of a radio list is now on par with the one used for radio tables. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-entities.el (org-entities-help): Add a headline for the user-defined entities. 2010-07-19 Dirk-Jan C. Binnema <djcb.bulk@gmail.com> (tiny change) * org-agenda.el (org-agenda-action): Document capture key and add it to the prompt. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-latex.el (org-export-latex-listings-langs): added (sqlite "SQL") 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-first-lines): Do not mark meta lines for removal. Do not remove BABEL config lines during export 2010-07-19 David Maus <dmaus@ictsoc.de> * org-capture.el (org-capture): Check if `org-capture-link-is-already-stored' is bound before evaluating. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org.el: added autoload for org-babel-do-load-languages 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-src.el (org-src-lang-modes): added sqlite to sql-mode 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el: Change indentation to match coding style guideline. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (org-feed-unescape, org-feed-parse-atom-feed): Load XML library if necessary. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-amend-header): Standardize the header cookie for the beamer extra stuff. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-amend-header): Put extra header last in header. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-exp-blocks.el (org-export-blocks-format-ditaa) (org-export-blocks-format-dot): Remove text properties of body before calculating cache hash. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-tabular-environment): New option. (org-export-latex-tables): Use `org-export-latex-tabular-environment'. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-version-check): New function. * org-indent.el (org-indent-mode): Check for exact emacs version. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-templates): Allow the template to come from a file or function call. (org-capture-place-entry): Get the template from file or function. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-agenda.el (org-agenda-bulk-action): Don't create marker for position if target is entire file. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-autoload): Autoload a few more org-table functions. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org.el (org-babel-load-languages): adding ob-mscgen 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-latex.el (org-export-latex-tables): format string now matches options 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org.el (org-babel-load-languages): this variable controls which languages will be loaded by org-babel. It is customizable through the customize interface. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-latex.el (org-export-latex-format-image): updated number of arguments to allow for an optional short-name 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-indent.el (org-indent-mode): Refuse to turn on prior to Emacs 23.2 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-set-target-location): Store exact positions for file+regexp and file+function targets. (org-capture-place-entry, org-capture-place-item) (org-capture-place-table-line, org-capture-place-plain-text): Respect exact positions. (org-capture-finalize): Make sure we are at the beginning of a line when fixing the empty lines after the entry. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-entry-get-with-inheritance): New argument LITERAL-NIL. (org-entry-get): Pass `literal-nil' into `org-entry-get-with-inheritance'. (org-todo): React to nil values of the LOGGING property. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-default-notes-file): Update docstring 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-link-frame-setup): Use `org-gnus-no-new-news' as default. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp.el (org-export-attach-captions-and-attributes): adding a shortname attribute to caption strings under the symbol name org-caption-shortn. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-switchb): Renamed from `org-iswitchb'. Improve docstring. (org-iswitchb): New alias. (org-ido-switchb): Make alias point to `org-switchb'. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-fill-template): Respect time-of-day preference in template prompt. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (org-feed-unescape): Remove superfluous lambda. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-wl.el (org-wl-disable-folder-check): New customization variable. (org-wl-open): Disable folder check depending on `org-wl-disable-folder-check'. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-set-target-location): Fix file+function interpretation. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (org-feed-parse-rss-entry): Unescape rss element content. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (xml-entity-alist): Declare variable `xml-entity-alist' for byte compiler. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (org-feed-unescape): New function. Unescape protected entities. (org-feed-parse-atom-entry): Use function for atom:content type text and html. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-feed.el (org-feed-parse-rss-feed): Ignore case of rss element names. 2010-07-19 Bernt Hansen <bernt@norang.ca> * org.el (org-time-string-to-absolute): Ignore cyclic repeater when displaying items on todays agenda date. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-get-progress): Avoid reusing previous value of EXTRA. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-initialize-cache): Make timestamp directory, the entire path to it. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-handle-comments): Make sure to check for protection in the comment line, and not in the line after it. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-export-html-preprocess): Call org-format-latex, possibly with a protect-only argument. * org.el (org-format-latex): New argument PROTECT-ONLY. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp.el (org-export-handle-table-metalines): this function removes table specific meta-lines, now that we aren't wiping everything that looks remotely like a comment at the end of the export process we have to be sure to catch all of the specific lines in org-exp.el 2010-07-19 Nicolas Goaziou <n.goaziou@gmail.com> * org-exp.el: (org-export-select-backend-specific-text) Properly get rid of #+Backend and #+ATTR_Backend specifics to backends not matching the one we're exporting to. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * Makefile (lisp/org-install.el): replacing babel files in construction of org-install.el 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-table.el (orgtbl-to-generic): added the :remove-newlines option which will strip newline characters from the text of table cells and replace then with "\n" 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-confirm-shell-link-function): (org-confirm-elisp-link-function): Limit the values that can be set by file variables. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-compute-latex-and-specials-regexp): Deal with string elements by discarding them. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-iswitchb): Make sure to use at least iswitchb. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-capture.el (org-capture-position-for-last-stored): org-capture-bookmark-last-stored-position): New functions. (org-capture-place-table-line): Better error catching. (org-capture-place-item): (org-capture-place-entry): (org-capture-place-plain-text): Call `org-capture-position-for-last-stored'. (org-capture-finalize): Just call `org-capture-bookmark-last-stored-position'. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp.el (org-export-mark-blockquote-verse-center): fixed small bug, now grabbing match data before overwritten by looking-at this fixes a problem with remainders of #+end_quote lines appearing in exported output 2010-07-19 David Maus <dmaus@ictsoc.de> * org.el (org-link-frame-setup): Add customization option for Wanderlust. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-latex.el (org-export-latex-fixed-width): now checking org-example rather than org-protected on verbatim export, because by default all ": " prefixed lines are marked protected 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-latex.el (org-export-latex-fixed-width): check for protection before wrapping ": " lines as verbatim 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp.el (org-export-handle-comments): check for protection before removing comments 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-entities.el (org-entities): Restructure the list. (org-entities-help): Turn the help output into a buffer in Org-mode, so that it becomes easier to find a symbol in the structure. (org-entities-create-table): Deal with new structure. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-agenda.el (org-write-agenda): Use backquotes to expand `flet' at compile time. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-entry-properties): Make sure that standard property names are used even if the user has customized time keywords. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-macs.el (org-not-nil): Return the value if not interpreted as nil. * org.el (org-entry-get): (org-entry-get-with-inheritance): Interpret the value "nil" as nil for properties. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-switch-to-buffer-other-window): Return the buffer. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-macs.el (org-not-nil): New function. * org.el (org-block-todo-from-children-or-siblings-or-parent): Use `org-not-nil' to interpret a property value of nil. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-truely-invisible-p): New function. (org-beginning-of-line): Use `org-truely-invisible-p'. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-get-timestamps): No errors while getting TODO state. (org-agenda-highlight-todo): No error when no keyword has been matched. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-timestamp-change): New optional argument UPDOWN. Use this to identify calls from org-timestamp-up/down, so that we can skip by rounding minutes in this case. (org-timestamp-up): (org-timestamp-down): (org-timestamp-up-day): (org-timestamp-down-day): Call org-timestamp-change with the updown argument. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-action): Make `c' key call org-capture. * org-capture.el: New file. * org-compat.el (org-get-x-clipboard): Function moved here from remember.el. * org-mks.el: New file * org.el (org-set-regexps-and-options): Allow statistic cookies as part of complex headlines. (org-find-olp): New argument THIS-BUFFER. When set, assume that the OLP does not contain a file name. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-mode): Set `comment-start' instead of changing the syntax of the `#' character. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Mark examples by a property. o * org-html.el (org-export-html-close-lists-maybe): Check if raw HTML stuff was actually made from an example 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * Makefile (LISPF): let's not compile files that won't often be used. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-latex.el: items are no longer skipped when their first line ends on a protected element. * org-list.el: protected environments looking like lists are not exported anymore. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp-blocks.el (org-export-blocks-preprocess): cleanup trailing newline after block 2010-07-19 Bastien Guerry <bzg@altern.org> * org-exp.el: comment regexp now matches documentation. No more protection check when deleting comments before export. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-exp.el (org-export-preprocess-string): now using `org-export-handle-include-files-recurse' to resolve included files 2010-07-19 Bastien Guerry <bzg@altern.org> * org-agenda.el (org-agenda-get-deadlines): (org-agenda-get-scheduled): * org.el (org-time-string-to-seconds): For deadline and scheduled agenda display ignore the cyclic repeater when calculating how many days late the task is. If you have a weekly task and miss the date the agenda view will show more than a week late now instead of resetting on the cyclic repeating date. This makes it much more obvious when you missed a repeating task after the repeater. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-exp.el (org-export-mark-blockquote-verse-center): Consider environments that end at eob. 2010-07-19 Mikael Fornius <mfo@abc.se> * org.el (org-raise-scripts): Do not fontify sub/superscripts of text with face `org-special-keyword'. Makes property keys as :LAST_REPEAT: display correctly. 2010-07-19 Mikael Fornius <mfo@abc.se> * org.el (org-at-property-p): Use save-match-data macro instead of let. 2010-07-19 Mikael Fornius <mfo@abc.se> * org.el (test): Removed unused test function. 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp-blocks.el (org-export-blocks-preprocess): fixed typo 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp-blocks.el (org-export-blocks-postblock-hook): adding documentation to and turning into a defcustom 2010-07-19 Eric Schulte <schulte.eric@gmail.com> * org-exp.el (org-get-file-contents): by un-setting prefix1 to "" instead of to nil we avoid errors when :prefix1 is defined, but prefix is not. 2010-07-19 Nicolas Goaziou <n.goaziou@gmail.com> * org-latex.el (org-export-latex-preprocess): Environments coming from latex backend specific instructions (#+LaTeX) are already protected and won't be treated as normal environments. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-timer.el (org-timer-set-timer): Fix typo in the docstring. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-timer.el (org-timer-set-timer): Use a prefix argument. See the docstring of the function. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-timer.el (org-timer-set-timer): Fix bug about cancelling timers. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-w3m.el (org-w3m-copy-for-org-mode) (org-w3m-get-next-link-start, org-w3m-get-prev-link-start): Get text property directly, not using macro `w3m-anchor'. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-emph-re): Document the match groups. 2010-07-19 Bernt Hansen <bernt@norang.ca> * org-clock.el (org-clock-in): Set `org-clock-clocking-in' to t before calling `org-clock-out', so that that function can know its call context. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-timer.el (org-timer-default-timer): New variable. (org-timer-set-timer): Use the new variable. Also offer the possibility to replace the current timer by a new one. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-kill-note-or-show-branches): Hide subtree before exposing the headings. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-add-planning-info): Remove the empty line also if there is no whitespace at all in there. * org-table.el (org-table-align): Fix alignment of strings with invisible characters. 2010-07-19 David Maus <dmaus@ictsoc.de> * org.el (org-refile-cache-get): Return empty list of targets when cache was cleared. (org-clone-subtree-with-time-shift): Maybe create ID property in cloned subtrees. (org-clone-delete-id): New customization variable. (org-clone-subtree-with-time-shift): Use customization variable `org-clone-delete-id'. (org-clone-subtree-with-time-shift): Remove empty property drawer in cloned subtrees. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-refile-use-cache): New option. (org-refile-cache, org-refile-markers): New variable. (org-refile-marker, org-refile-cache-clear) (org-refile-cache-check-set, org-refile-cache-put) (org-refile-cache-get): New function. (org-get-refile-targets): Use the refile cache. * org-clock.el (org-clock-sum): Don't include running clock if the time block is wrong. 2010-07-19 John Wiegley <jwiegley@gmail.com> * org-clock.el (org-clock-clock-in, org-clock-in): Added parameter `start-time'. (org-clock-resolve-clock): Added parameter `clock-out-time'. If set, and resolve-to is a past time, then the clock out event occurs at `clock-out-time' rather than at `resolve-to'. In this case, `resolve-to' becomes the clock in time. (org-clock-jump-to-current-clock): Created new global command to reveal the current clock. (org-clock-resolve): Added new commands g/G and j/J, and a help window describing all commands and their meaning. (org-clock-resolve-expert): New customization variable. (org-find-open-clocks): Fixed a bug that caused discovered clocks not to match up with the currently active clock. (org-resolve-clocks): Changed the argument `also-non-dangling-p' to `only-dangling-p', since due to a bug this was the default behavior all along. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-id.el (org-id-uuid): New function. Return string with random (version 4) UUID. (org-id-method): Make 'uuid the new default value. (org-id-new): Use `org-id-uuid' if call to uuidgen program does not return a UUID. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-format-image): Add support for multicolumn figures in LaTeX. 2010-07-19 David Maus <dmaus@ictsoc.de> * org.el (org-clone-subtree-with-time-shift): Remove ID property of original subtree in cloned subtrees. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): XEmacs compatibility. * org-latex.el (org-export-latex-tables): Accept comma in align string. * org-docbook.el (org-export-docbook-xslt-stylesheet): New option. (org-export-docbook-xslt-proc-command): Fix docstring. (org-export-docbook-xsl-fo-proc-command): Fix docstring. (org-export-as-docbook-pdf): Improve formatting of the xslt command. * org-exp.el (org-infile-export-plist): Check for XSLT setting. * org.el (org-file-contents): Improve error message. (org-set-regexps-and-options): Remove spaces at both ends. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-docbook.el (org-export-as-docbook-pdf): Improve formatting of the xslt command. 2010-07-19 Sebastian Rose <sebastian_rose@gmx.de> * org-publish.el (org-publish-cache): Use one big hashmap for each project defined in `org-publish-project-alist'. (initialize-files-alist): Function removed. (org-publish-validate-link): Function removed. (org-publish-get-base-files): Add variable `sitemap-requested' to avoid sorting where possible. (org-publish-get-files): Function removed. (org-publish-get-project-from-filename): Make independent of file list. (org-publish-file): New argument NO-CACHE. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-beginning-of-defun, org-end-of-defun): New functions. (org-mode): Install the `org-beginning-of-defun' and `org-end-of-defun' functions. (org-pretty-entities): New option. (org-toggle-pretty-entities): New command. (org-fontify-entities): New function. (org-startup-options): New keywords for pretty entities. (org-set-font-lock-defaults): Call the pretty entities function. * org-latex.el (org-export-latex-keywords-maybe): Protect the TODO markup. 2010-07-19 Mikael Fornius <mfo@abc.se> * org-habit.el (org-habit-build-graph): Help-echo date when mouse is over stars. 2010-07-19 Jan Böker <jan.boecker@jboecker.de> * org.el (org-file-apps): Improve docstring to reflect grouping matches 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-startup-visibility): Fix empty line display. * org-latex.el (org-export-latex-links): Use the formatting function of the link type, if it is available. * org-table.el (org-table-get-remote-range): Return to original buffer when retrieving remote reference. * org.el (org-display-inline-images): Do the entire buffer, not just the narrowed region. Clear the cache. (org-display-inline-images): Match mode file paths. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-wl.el (org-wl-store-link-folder): Don't throw error when called on WL folder group. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-replace-escapes): Make sure the cdr is not nil. (org-read-date): Make `M-v' and `C-v' scroll the popup calendar. (org-mode): Revert comment syntax changes. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-sparse-tree): Make `C-c / t' search for all TODO keywords, and `C-c / T' for a specific one. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-mode): Fix comment syntax settings. * org-src.el (org-edit-src-allow-write-back-p): Define variable. * org.el (org-inline-image-overlays): New variable. (org-toggle-inline-images, org-display-inline-images) (org-remove-inline-images): New commands. (org-mode-map): Define a key for `org-toggle-inline-images'. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-wl.el (org-wl-message-field): New function. Return content of header field in message entity. (org-wl-store-link): Call `org-wl-store-link-folder' or `org-wl-store-link-message' depending on major-mode. (org-wl-store-link-folder): New function. Store link to Wanderlust folder. (org-wl-store-link-message): New function. Store link to Wanderlust message. (org-wl-store-link-message): Store link to message while visiting message. (org-wl-open): Don't try to jump to message when opening a folder link. 2010-07-19 David Maus <dmaus@ictsoc.de> * org.el (org-replace-escapes): Avoid infinite loop when replace string contains escape sequence it replaces. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-crypt.el (org-crypt-key-for-heading): Use symmetric encryption when now key is set. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-recalculate-buffer-tables) (org-table-iterate-buffer-tables): New commands. * org.el (org-check-for-hidden): When there is a region, skip the check. 2010-07-19 Dan Davison <davison@stats.ox.ac.uk> * org-src.el (org-edit-src-code): allow-write-back-p had erroneously been omitted from let binding 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-sorting-choice): New sorting type alpha. (org-cmp-alpha): New defsubst. (org-em): New defsubst. (org-entries-lessp): Only compute needed comparisons. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-format-org-table-html): Test all columns for number content. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-treat-sub-super-char): Make sure parenthesis matching is consistent. * org-table.el (org-table-colgroup-line-p) (org-table-cookie-line-p): New functions. * org-exp.el (org-table-clean-before-export): Better tests for colgroup and cookie lines. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-goto): Push a mark before changing the position. * org-footnote.el (org-footnote): New group. (org-footnote-section) (org-footnote-tag-for-non-org-mode-files): Fix typos. * org-list.el (org-end-of-item-text-before-children): Also do the right thing at the end of a file. * org.el (org-set-packages-alist, org-get-packages-alist): New function. (org-export-latex-default-packages-alist) (org-export-latex-packages-alist): Add extra flag to each package, indicating if it should be used for snippets. (org-create-formula-image): Add the snippet argument. (org-splice-latex-header): New argument SNIPPET-P, pass it through to `org-latex-packages-to-string'. (org-latex-packages-to-string): New argument SNIPPET-P. * org-latex.el (org-export-latex-make-header): Add the snippet argument. * org-docbook.el (org-export-as-docbook): Implement ordered lists starting at some offset. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-link-types, org-open-at-point): Add doi links. * org-ascii.el (org-export-ascii-preprocess): Remove list startcounter cookies. * org-list.el (org-renumber-ordered-list): Respect counter start values. * org-latex.el (org-export-latex-lists): Accept ordered list item offset cookie. * org-html.el (org-export-as-html): Accept ordered list item offset cookie. * org-indent.el (org-indent-mode): Turn off `indent-tabs-mode' which messes up alignment of tags. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-cancel, org-clock-out): Make sure the modeline display is removed. * org-exp.el (org-export-format-drawer-function): Fix docstring. * org-agenda.el (org-agenda-refile): New optional argument NO-UPDATE. (org-agenda-refile): Call `org-agenda-redo' unless NO-UPDATE is set. (org-agenda-bulk-action): Call the refile command with updates suppressed - but arrange for `org-agenda-redo' to be called at the end. * org.el (org-mode): Make table mapping quiet. (org-table-map-tables): New optional argument QUIETLY. * org-ascii.el (org-export-ascii-preprocess): Make table mapping quiet. * org-html.el (org-export-as-html, org-html-level-start): Change XHTML IDs to not use dots. * org-exp.el (org-export-define-heading-targets): Change XHTML IDs to not use dots. * org-docbook.el (org-export-docbook-level-start): Change XHTML IDs to not use dots. * org-latex.el (org-export-as-latex): Make sure that the result buffer is in latex-mode. * org.el (org-shiftup-final-hook, org-shiftdown-final-hook) (org-shiftleft-final-hook, org-shiftright-final-hook): New hooks. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-justify-field-maybe): Make sure that inserting a value does not turn a line into a hline. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-sum): New argument HEADLINE-FILTER. (org-clock-sum): Add property to selected headlines. (org-dblock-write:clocktable): Make tags matcher. * org.el (org-set-autofill-regexps): XEmacs compatibility. * org-latex.el (org-export-latex-set-initial-vars): Allow "-" in latex class definitions * org.el (org-shiftup-hook, org-shiftdown-hook) (org-shiftleft-hook, org-shiftright-hook): New hooks. * org-entities.el (org-entities): Use \land and \lor for logical operators. * org.el (org-shiftmetaleft, org-shiftmetaright): Call the subtree indentation commands. (org-hidden-tree-error): New defsubst. (org-metaleft, org-metaright): Check for hidden stuff and throw an error. (org-check-for-hidden): New function. * org-list.el (org-item-re): New function. (org-at-item-p): Use `org-item-re'. (org-end-of-item-text-before-children): New function. (org-outdent-item, org-indent-item): Arrange for leaving the subtree alone. (org-outdent-item-tree, org-indent-item-tree): New argument NO-SUBTREE. (org-indent-item-tree): Use `org-end-of-item-text-before-children' to find the end for processing while ignoring the subtree. * org-publish.el (org-publish-sitemap-sort-alphabetically) (org-publish-sitemap-sort-folders) (org-publish-sitemap-sort-ignore-case): New options. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-compare-directory-files): Fix sorting. * org-compat.el (org-get-x-clipboard-compat): Use (featurep 'xemacs). * org-publish.el (org-publish-project-alist): Update docstring. (org-publish-file-title-cache): New variable. (org-publish-initialize-files-alist): Initialize `org-publish-initialize-files-alist' to nil. (org-publish-sort-directory-files): New function. (org-publish-projects): Access the new properties. (org-publish-find-title): Use the file title cache. (org-publish-find-title): Build the file title cache. (org-publish-get-base-files-1): Sort files. (org-publish-aux-preprocess): Do not throw an error when before the first headline. Allow an empty target, meaning to link just to the file. (org-publish-index-generate-theindex.inc): Check if there is actually a target and only then add it to the link. (org-publish-projects): Fix a remaining issue with the last commit * org-html.el (org-export-as-html): Treat verse as open/close paragraph. (org-export-html-close-lists-maybe): Allow to splice raw HTML into and out of lists. 2010-07-19 Dan Davison <davison@stats.ox.ac.uk> * org-src.el (org-edit-src-code): Allow the org-src edit buffer to be used in a read-only mode. (org-edit-src-code): Different message in read-only mode 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-src.el (org-edit-src-find-region-and-lang): Test for table.el as late as possible. * org-colview-xemacs.el: Make sure this file is never loaded into Emacs. Remove all tests for XEmacs. * org-colview.el: Make sure this file is never loaded into XEmacs. * org-agenda.el (org-highlight, org-unhighlight): Use direct overlay calls. * org.el (org-key): Apply the translations defined in `org-xemacs-key-equivalents'. * org-mouse.el (org-mode-hook): Use `org-defkey'. * org-compat.el (org-xemacs-key-equivalents): New constant. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-inlinetask.el (org-inlinetask-defaut-state): New option. (org-inlinetask-insert-task): Use `org-inlinetask-defaut-state'. Obey `org-odd-levels-only'. * org-compat.el (org-find-overlays): Use overlays-in/at. * org.el (org-remove-empty-overlays-at) (org-outline-overlay-data, org-hide-block-toggle) (org-format-latex, org-context): Use overlays-in/at. * org-src.el (org-edit-src-exit): Use overlays-in/at. * org-agenda.el (org-agenda-mark-clocking-task) (org-agenda-fontify-priorities, org-agenda-dim-blocked-tasks) (org-agenda-entry-text-hide) (org-agenda-fix-tags-filter-overlays-at) (org-agenda-bulk-remove-overlays): Use overlays-in/at. * org-compat.el (org-overlays-at): Function removed. (org-overlays-in): Function removed. 2010-07-19 Bastien Guerry <bzg@altern.org> * org-clock.el (org-clock-set-current): Just return the headline itself, strip the TODO keyword, the priority cookie and the tags. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-xemacs-without-invisibility): New macro. (org-xemacs-without-invisibility): New macro. (org-indent-to-column, org-indent-line-to, org-move-to-column): Redefine using the macro `org-xemacs-without-invisibility'. * org.el (org-mode, org-org-menu): Use `add-to-invisibility-spec'. * org-table.el (orgtbl-mode): Use `add-to-invisibility-spec'. * org-compat.el (org-make-overlay, org-delete-overlay) (org-overlay-start, org-overlay-end, org-overlay-put) (org-overlay-get, org-overlay-move, org-overlay-buffer): Functions removed. (org-add-to-invisibility-spec): Function removed. * org-html.el (org-export-as-html-and-open): Add argument to kill-buffer. * org-habit.el (require): `calendar' is now required already by org.el on top level. * org-clock.el (require): `calendar' is now required already by org.el on top level. * org-agenda.el (require, org-timeline, org-agenda-list) (org-todo-list, org-agenda-to-appt): `calendar' is now required already by org.el on top level. * org.el (org-export-latex-fix-inputenc): Declare function. * org-agenda.el (org-agenda-goto-calendar): Do not bind obsolete variables. * org.el (calendar): Require calendar now on top level in org.el and define aliases to new variables when needed. (org-read-date, org-goto-calendar): Do not bind obsolete variables. * org-clock.el (org-clock-out, org-clock-cancel): Get rid of compilation warning, add comment that this cannot be done with `with-current-buffer'. * org-wl.el (org-wl-open): Use `with-current-buffer'. * org.el (overlay, org-remove-empty-overlays-at) (org-outline-overlay-data, org-set-outline-overlay-data) (org-show-block-all, org-hide-block-toggle) (org-highlight-new-match, org-remove-occur-highlights) (org-tags-overlay, org-fast-tag-selection, org-date-ovl) (org-read-date, org-read-date-display, org-eval-in-calendar) (org-format-latex, org-context) (org-speedbar-restriction-lock-overlay) (org-speedbar-set-agenda-restriction): Use the normal overlay API. * org-table.el (org-table-add-rectangle-overlay) (org-table-remove-rectangle-highlight) (org-table-overlay-coordinates) (org-table-toggle-coordinate-overlays): Use the normal overlay API. * org-src.el (org-edit-src-code, org-edit-fixed-width-region) (org-edit-src-exit, org-src-mode-configure-edit-buffer): Use the normal overlay API. * org-colview.el (org-columns-new-overlay) (org-columns-display-here, org-columns-remove-overlays) (org-columns-edit-value, org-columns-next-allowed-value) (org-columns-update): Use the normal overlay API. * org-clock.el (org-clock-out, org-clock-cancel) (org-clock-put-overlay, org-clock-remove-overlays): Use the normal overlay API. * org-agenda.el (org-agenda-mark-filtered-text) (org-agenda-mark-clocking-task, org-agenda-fontify-priorities) (org-agenda-dim-blocked-tasks, org-agenda-entry-text-show-here) (org-agenda-entry-text-hide) (org-agenda-restriction-lock-overlay) (org-agenda-set-restriction-lock) (org-agenda-filter-by-tag-hide-line) (org-agenda-fix-tags-filter-overlays-at) (org-agenda-filter-by-tag-show-all, org-hl) (org-agenda-goto-calendar, org-agenda-bulk-mark) (org-agenda-bulk-remove-overlays): Use the normal overlay API. * org-freemind.el (org-freemind-from-org-mode-node) (org-freemind-from-org-mode, ) (org-freemind-from-org-sparse-tree, org-freemind-to-org-mode): Use interactive-p instead of called-interactively, because this is backward compatible with older Emacsen I still support.. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-define-heading-targets): Fix bug in regexp finding ID and CUSTOM_ID properties. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-footnote.el (org-footnote-goto-previous-reference): Renamed from `org-footnote-goto-next-reference'. * org.el (org-auto-repeat-maybe): Only record LAST_REPEAT if org-log-repeat is non-nil, or if there is clocking data in the entry. * org-crypt.el (org-encrypt-entry): Improve mapping behavior. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-align-all-tags): New command. 2010-07-19 David Maus <dmaus@ictsoc.de> * org-wl.el (org-wl-link-remove-filter): New customizable variable. If non-nil, filter conditions are stripped when storing link to message in filter folder. (org-wl-shimbun-prefer-web-links): New customizable variable. If non-nil, links to shimbun messages are created as web links to message source. (org-wl-nntp-prefer-web-links): New customizable variable. If non-nil, links to nntp message are created as web links to gmane or googlegroups. (org-wl-namazu-default-index): New customizable variable. Directory of namazu search index that should be used as default when opening a link in a search folder. (org-wl-folder-types): New constant. Wanderlust folder type indicators. (org-wl-folder-type): New function. Return type of Wanderlust folder. (org-wl-store-link): Create web links for shimbun or nntp messages and strip filter conditions depending on customizable variables. (org-wl-open): Open namazu search folder for message when called with prefix. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-remove-if, org-remove-if-not): New functions. (org-open-file): Use internal remove-if functions. 2010-07-19 Jan Böcker <jan.boecker@jboecker.de> * org.el (org-file-apps-entry-match-against-dlink-p): new function. (org-file-apps-ex): remove variable. (org-open-file): Integrate org-file-apps-ex functionality back into org-file-apps, and decide whether to match a regexp against the link or the filename using org-file-apps-entry-uses-grouping-p. 2010-07-19 Jan Böcker <jan.boecker@jboecker.de> * org.el (org-file-apps-ex): new variable. (org-open-file): Before considering org-file-apps, first match the regexps from org-file-apps-ex against the whole link. See docstring of org-file-apps-ex. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-export-latex-default-packages-alist): Remove microtype package. (org-todo-repeat-to-state): New variable. (org-auto-repeat-maybe): Allow user-selected target states. (org-default-properties): Add the new property REPEAT_TO_STATE. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org-mobile.el (org-mobile-check-setup): Make sure that there is a binary to compute checksums. 2010-07-19 Carsten Dominik <carsten.dominik@gmail.com> * org.texi: Add macros to get plain quotes in PDF output. List additional contributors. (Capture): New section, replaces the section about remember. (Working With Source Code): New chapter, focused on documenting Org Babel. (Code evaluation security): New section. (MobileOrg): Document DropBox support. (TaskJuggler export): Document taskjuggler and Gantt chart support. (Special symbols): Show how to display UTF8 characters for entities. (Global TODO list): Clarify the use of the "M" key and the differences to the "m" key. (RSS Feeds): Mention Atom feeds as well. (Setting tags): Remove paragraph about `org-complete-tags-always-offer-all-agenda-tags'.
708 lines
27 KiB
EmacsLisp
708 lines
27 KiB
EmacsLisp
;;; org-protocol.el --- Intercept calls from emacsclient to trigger custom actions.
|
|
;;
|
|
;; Copyright (C) 2008, 2009, 2010
|
|
;; Free Software Foundation, Inc.
|
|
;;
|
|
;; Author: Bastien Guerry <bzg AT altern DOT org>
|
|
;; Author: Daniel M German <dmg AT uvic DOT org>
|
|
;; Author: Sebastian Rose <sebastian_rose AT gmx DOT de>
|
|
;; Author: Ross Patterson <me AT rpatterson DOT net>
|
|
;; Maintainer: Sebastian Rose <sebastian_rose AT gmx DOT de>
|
|
;; Keywords: org, emacsclient, wp
|
|
;; Version: 7.01
|
|
|
|
;; This file is part of GNU Emacs.
|
|
;;
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;; Commentary:
|
|
;;
|
|
;; Intercept calls from emacsclient to trigger custom actions.
|
|
;;
|
|
;; This is done by advising `server-visit-files' to scan the list of filenames
|
|
;; for `org-protocol-the-protocol' and sub-protocols defined in
|
|
;; `org-protocol-protocol-alist' and `org-protocol-protocol-alist-default'.
|
|
;;
|
|
;; Any application that supports calling external programs with an URL
|
|
;; as argument may be used with this functionality.
|
|
;;
|
|
;;
|
|
;; Usage:
|
|
;; ------
|
|
;;
|
|
;; 1.) Add this to your init file (.emacs probably):
|
|
;;
|
|
;; (add-to-list 'load-path "/path/to/org-protocol/")
|
|
;; (require 'org-protocol)
|
|
;;
|
|
;; 3.) Ensure emacs-server is up and running.
|
|
;; 4.) Try this from the command line (adjust the URL as needed):
|
|
;;
|
|
;; $ emacsclient \
|
|
;; org-protocol://store-link://http:%2F%2Flocalhost%2Findex.html/The%20title
|
|
;;
|
|
;; 5.) Optionally add custom sub-protocols and handlers:
|
|
;;
|
|
;; (setq org-protocol-protocol-alist
|
|
;; '(("my-protocol"
|
|
;; :protocol "my-protocol"
|
|
;; :function my-protocol-handler-function)))
|
|
;;
|
|
;; A "sub-protocol" will be found in URLs like this:
|
|
;;
|
|
;; org-protocol://sub-protocol://data
|
|
;;
|
|
;; If it works, you can now setup other applications for using this feature.
|
|
;;
|
|
;;
|
|
;; As of March 2009 Firefox users follow the steps documented on
|
|
;; http://kb.mozillazine.org/Register_protocol, Opera setup is described here:
|
|
;; http://www.opera.com/support/kb/view/535/
|
|
;;
|
|
;;
|
|
;; Documentation
|
|
;; -------------
|
|
;;
|
|
;; org-protocol.el comes with and installs handlers to open sources of published
|
|
;; online content, store and insert the browser's URLs and cite online content
|
|
;; by clicking on a bookmark in Firefox, Opera and probably other browsers and
|
|
;; applications:
|
|
;;
|
|
;; * `org-protocol-open-source' uses the sub-protocol \"open-source\" and maps
|
|
;; URLs to local filenames defined in `org-protocol-project-alist'.
|
|
;;
|
|
;; * `org-protocol-store-link' stores an Org-link (if Org-mode is present) and
|
|
;; pushes the browsers URL to the `kill-ring' for yanking. This handler is
|
|
;; triggered through the sub-protocol \"store-link\".
|
|
;;
|
|
;; * Call `org-protocol-capture' by using the sub-protocol \"capture\". If
|
|
;; Org-mode is loaded, Emacs will pop-up a capture buffer and fill the
|
|
;; template with the data provided. I.e. the browser's URL is inserted as an
|
|
;; Org-link of which the page title will be the description part. If text
|
|
;; was select in the browser, that text will be the body of the entry.
|
|
;;
|
|
;; * Call `org-protocol-remember' by using the sub-protocol \"remember\".
|
|
;; This is provided for backward compatibility.
|
|
;; You may read `org-capture' as `org-remember' throughout this file if
|
|
;; you still use `org-remember'.
|
|
;;
|
|
;; You may use the same bookmark URL for all those standard handlers and just
|
|
;; adjust the sub-protocol used:
|
|
;;
|
|
;; location.href='org-protocol://sub-protocol://'+
|
|
;; encodeURIComponent(location.href)+'/'+
|
|
;; encodeURIComponent(document.title)+'/'+
|
|
;; encodeURIComponent(window.getSelection())
|
|
;;
|
|
;; The handler for the sub-protocol \"capture\" detects an optional template
|
|
;; char that, if present, triggers the use of a special template.
|
|
;; Example:
|
|
;;
|
|
;; location.href='org-protocol://sub-protocol://x/'+ ...
|
|
;;
|
|
;; use template ?x.
|
|
;;
|
|
;; Note, that using double slashes is optional from org-protocol.el's point of
|
|
;; view because emacsclient squashes the slashes to one.
|
|
;;
|
|
;;
|
|
;; provides: 'org-protocol
|
|
;;
|
|
;;; Code:
|
|
|
|
(require 'org)
|
|
(eval-when-compile
|
|
(require 'cl))
|
|
|
|
(declare-function org-publish-get-project-from-filename "org-publish"
|
|
(filename &optional up))
|
|
(declare-function server-edit "server" (&optional arg))
|
|
|
|
|
|
(defgroup org-protocol nil
|
|
"Intercept calls from emacsclient to trigger custom actions.
|
|
|
|
This is done by advising `server-visit-files' to scann the list of filenames
|
|
for `org-protocol-the-protocol' and sub-procols defined in
|
|
`org-protocol-protocol-alist' and `org-protocol-protocol-alist-default'."
|
|
:version "22.1"
|
|
:group 'convenience
|
|
:group 'org)
|
|
|
|
|
|
;;; Variables:
|
|
|
|
(defconst org-protocol-protocol-alist-default
|
|
'(("org-remember" :protocol "remember" :function org-protocol-remember :kill-client t)
|
|
("org-capture" :protocol "capture" :function org-protocol-capture :kill-client t)
|
|
("org-store-link" :protocol "store-link" :function org-protocol-store-link)
|
|
("org-open-source" :protocol "open-source" :function org-protocol-open-source))
|
|
"Default protocols to use.
|
|
See `org-protocol-protocol-alist' for a description of this variable.")
|
|
|
|
|
|
(defconst org-protocol-the-protocol "org-protocol"
|
|
"This is the protocol to detect if org-protocol.el is loaded.
|
|
`org-protocol-protocol-alist-default' and `org-protocol-protocol-alist' hold
|
|
the sub-protocols that trigger the required action. You will have to define
|
|
just one protocol handler OS-wide (MS-Windows) or per application (Linux).
|
|
That protocol handler should call emacsclient.")
|
|
|
|
|
|
;;; User variables:
|
|
|
|
(defcustom org-protocol-reverse-list-of-files t
|
|
"* Non-nil means re-reverse the list of filenames passed on the command line.
|
|
The filenames passed on the command line are passed to the emacs-server in
|
|
reverse order. Set to t (default) to re-reverse the list, i.e. use the
|
|
sequence on the command line. If nil, the sequence of the filenames is
|
|
unchanged."
|
|
:group 'org-protocol
|
|
:type 'boolean)
|
|
|
|
|
|
(defcustom org-protocol-project-alist nil
|
|
"* Map URLs to local filenames for `org-protocol-open-source' (open-source).
|
|
|
|
Each element of this list must be of the form:
|
|
|
|
(module-name :property value property: value ...)
|
|
|
|
where module-name is an arbitrary name. All the values are strings.
|
|
|
|
Possible properties are:
|
|
|
|
:online-suffix - the suffix to strip from the published URLs
|
|
:working-suffix - the replacement for online-suffix
|
|
:base-url - the base URL, e.g. http://www.example.com/project/
|
|
Last slash required.
|
|
:working-directory - the local working directory. This is, what base-url will
|
|
be replaced with.
|
|
:redirects - A list of cons cells, each of which maps a regular
|
|
expression to match to a path relative to :working-directory.
|
|
|
|
Example:
|
|
|
|
(setq org-protocol-project-alist
|
|
'((\"http://orgmode.org/worg/\"
|
|
:online-suffix \".php\"
|
|
:working-suffix \".org\"
|
|
:base-url \"http://orgmode.org/worg/\"
|
|
:working-directory \"/home/user/org/Worg/\")
|
|
(\"http://localhost/org-notes/\"
|
|
:online-suffix \".html\"
|
|
:working-suffix \".org\"
|
|
:base-url \"http://localhost/org/\"
|
|
:working-directory \"/home/user/org/\"
|
|
:rewrites ((\"org/?$\" . \"index.php\")))))
|
|
|
|
The last line tells `org-protocol-open-source' to open
|
|
/home/user/org/index.php, if the URL cannot be mapped to an existing
|
|
file, and ends with either \"org\" or \"org/\".
|
|
|
|
Consider using the interactive functions `org-protocol-create' and
|
|
`org-protocol-create-for-org' to help you filling this variable with valid contents."
|
|
:group 'org-protocol
|
|
:type 'alist)
|
|
|
|
|
|
(defcustom org-protocol-protocol-alist nil
|
|
"* Register custom handlers for org-protocol.
|
|
|
|
Each element of this list must be of the form:
|
|
|
|
(module-name :protocol protocol :function func :kill-client nil)
|
|
|
|
protocol - protocol to detect in a filename without trailing colon and slashes.
|
|
See rfc1738 section 2.1 for more on this.
|
|
If you define a protocol \"my-protocol\", `org-protocol-check-filename-for-protocol'
|
|
will search filenames for \"org-protocol:/my-protocol:/\"
|
|
and trigger your action for every match. `org-protocol' is defined in
|
|
`org-protocol-the-protocol'. Double and triple slashes are compressed
|
|
to one by emacsclient.
|
|
|
|
function - function that handles requests with protocol and takes exactly one
|
|
argument: the filename with all protocols stripped. If the function
|
|
returns nil, emacsclient and -server do nothing. Any non-nil return
|
|
value is considered a valid filename and thus passed to the server.
|
|
|
|
`org-protocol.el provides some support for handling those filenames,
|
|
if you stay with the conventions used for the standard handlers in
|
|
`org-protocol-protocol-alist-default'. See `org-protocol-split-data'.
|
|
|
|
kill-client - If t, kill the client immediately, once the sub-protocol is
|
|
detected. This is necessary for actions that can be interrupted by
|
|
`C-g' to avoid dangling emacsclients. Note, that all other command
|
|
line arguments but the this one will be discarded, greedy handlers
|
|
still receive the whole list of arguments though.
|
|
|
|
Here is an example:
|
|
|
|
(setq org-protocol-protocol-alist
|
|
'((\"my-protocol\"
|
|
:protocol \"my-protocol\"
|
|
:function my-protocol-handler-function)
|
|
(\"your-protocol\"
|
|
:protocol \"your-protocol\"
|
|
:function your-protocol-handler-function)))"
|
|
:group 'org-protocol
|
|
:type '(alist))
|
|
|
|
(defcustom org-protocol-default-template-key "w"
|
|
"The default org-remember-templates key to use."
|
|
:group 'org-protocol
|
|
:type 'string)
|
|
|
|
;;; Helper functions:
|
|
|
|
(defun org-protocol-sanitize-uri (uri)
|
|
"emacsclient compresses double and triple slashes.
|
|
Slashes are sanitized to double slashes here."
|
|
(when (string-match "^\\([a-z]+\\):/" uri)
|
|
(let* ((splitparts (split-string uri "/+")))
|
|
(setq uri (concat (car splitparts) "//" (mapconcat 'identity (cdr splitparts) "/")))))
|
|
uri)
|
|
|
|
|
|
(defun org-protocol-split-data(data &optional unhexify separator)
|
|
"Split, what an org-protocol handler function gets as only argument.
|
|
DATA is that one argument. DATA is split at each occurrence of
|
|
SEPARATOR (regexp). If no SEPARATOR is specified or SEPARATOR is
|
|
nil, assume \"/+\". The results of that splitting are returned
|
|
as a list. If UNHEXIFY is non-nil, hex-decode each split part. If
|
|
UNHEXIFY is a function, use that function to decode each split
|
|
part."
|
|
(let* ((sep (or separator "/+"))
|
|
(split-parts (split-string data sep)))
|
|
(if unhexify
|
|
(if (fboundp unhexify)
|
|
(mapcar unhexify split-parts)
|
|
(mapcar 'org-protocol-unhex-string split-parts))
|
|
split-parts)))
|
|
|
|
;; This inline function is needed in org-protocol-unhex-compound to do
|
|
;; the right thing to decode UTF-8 char integer values.
|
|
(eval-when-compile
|
|
(if (>= emacs-major-version 23)
|
|
(defsubst org-protocol-char-to-string(c)
|
|
"Defsubst to decode UTF-8 character values in emacs 23 and beyond."
|
|
(char-to-string c))
|
|
(defsubst org-protocol-char-to-string (c)
|
|
"Defsubst to decode UTF-8 character values in emacs 22."
|
|
(string (decode-char 'ucs c)))))
|
|
|
|
(defun org-protocol-unhex-string(str)
|
|
"Unhex hexified unicode strings as returned from the JavaScript function
|
|
encodeURIComponent. E.g. `%C3%B6' is the german Umlaut `ü'."
|
|
(setq str (or str ""))
|
|
(let ((tmp "")
|
|
(case-fold-search t))
|
|
(while (string-match "\\(%[0-9a-f][0-9a-f]\\)+" str)
|
|
(let* ((start (match-beginning 0))
|
|
(end (match-end 0))
|
|
(hex (match-string 0 str))
|
|
(replacement (org-protocol-unhex-compound hex)))
|
|
(setq tmp (concat tmp (substring str 0 start) replacement))
|
|
(setq str (substring str end))))
|
|
(setq tmp (concat tmp str))
|
|
tmp))
|
|
|
|
|
|
(defun org-protocol-unhex-compound (hex)
|
|
"Unhexify unicode hex-chars. E.g. `%C3%B6' is the German Umlaut `ü'."
|
|
(let* ((bytes (remove "" (split-string hex "%")))
|
|
(ret "")
|
|
(eat 0)
|
|
(sum 0))
|
|
(while bytes
|
|
(let* ((b (pop bytes))
|
|
(a (elt b 0))
|
|
(b (elt b 1))
|
|
(c1 (if (> a ?9) (+ 10 (- a ?A)) (- a ?0)))
|
|
(c2 (if (> b ?9) (+ 10 (- b ?A)) (- b ?0)))
|
|
(val (+ (lsh c1 4) c2))
|
|
(shift
|
|
(if (= 0 eat) ;; new byte
|
|
(if (>= val 252) 6
|
|
(if (>= val 248) 5
|
|
(if (>= val 240) 4
|
|
(if (>= val 224) 3
|
|
(if (>= val 192) 2 0)))))
|
|
6))
|
|
(xor
|
|
(if (= 0 eat) ;; new byte
|
|
(if (>= val 252) 252
|
|
(if (>= val 248) 248
|
|
(if (>= val 240) 240
|
|
(if (>= val 224) 224
|
|
(if (>= val 192) 192 0)))))
|
|
128)))
|
|
(if (>= val 192) (setq eat shift))
|
|
(setq val (logxor val xor))
|
|
(setq sum (+ (lsh sum shift) val))
|
|
(if (> eat 0) (setq eat (- eat 1)))
|
|
(when (= 0 eat)
|
|
(setq ret (concat ret (org-protocol-char-to-string sum)))
|
|
(setq sum 0))
|
|
)) ;; end (while bytes
|
|
ret ))
|
|
|
|
(defun org-protocol-flatten-greedy (param-list &optional strip-path replacement)
|
|
"Greedy handlers might receive a list like this from emacsclient:
|
|
'( (\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\")
|
|
where \"/dir/\" is the absolute path to emacsclients working directory. This
|
|
function transforms it into a flat list utilizing `org-protocol-flatten' and
|
|
transforms the elements of that list as follows:
|
|
|
|
If strip-path is non-nil, remove the \"/dir/\" prefix from all members of
|
|
param-list.
|
|
|
|
If replacement is string, replace the \"/dir/\" prefix with it.
|
|
|
|
The first parameter, the one that contains the protocols, is always changed.
|
|
Everything up to the end of the protocols is stripped.
|
|
|
|
Note, that this function will always behave as if
|
|
`org-protocol-reverse-list-of-files' was set to t and the returned list will
|
|
reflect that. I.e. emacsclients first parameter will be the first one in the
|
|
returned list."
|
|
(let* ((l (org-protocol-flatten (if org-protocol-reverse-list-of-files
|
|
param-list
|
|
(reverse param-list))))
|
|
(trigger (car l))
|
|
(len 0)
|
|
dir
|
|
ret)
|
|
(when (string-match "^\\(.*\\)\\(org-protocol:/+[a-zA-z0-9][-_a-zA-z0-9]*:/+\\)\\(.*\\)" trigger)
|
|
(setq dir (match-string 1 trigger))
|
|
(setq len (length dir))
|
|
(setcar l (concat dir (match-string 3 trigger))))
|
|
(if strip-path
|
|
(progn
|
|
(dolist (e l ret)
|
|
(setq ret
|
|
(append ret
|
|
(list
|
|
(if (stringp e)
|
|
(if (stringp replacement)
|
|
(setq e (concat replacement (substring e len)))
|
|
(setq e (substring e len)))
|
|
e)))))
|
|
ret)
|
|
l)))
|
|
|
|
|
|
(defun org-protocol-flatten (l)
|
|
"Greedy handlers might receive a list like this from emacsclient:
|
|
'( (\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\")
|
|
where \"/dir/\" is the absolute path to emacsclients working directory.
|
|
This function transforms it into a flat list."
|
|
(if (null l) ()
|
|
(if (listp l)
|
|
(append (org-protocol-flatten (car l)) (org-protocol-flatten (cdr l)))
|
|
(list l))))
|
|
|
|
;;; Standard protocol handlers:
|
|
|
|
(defun org-protocol-store-link (fname)
|
|
"Process an org-protocol://store-link:// style url.
|
|
Additionally store a browser URL as an org link. Also pushes the
|
|
link's URL to the `kill-ring'.
|
|
|
|
The location for a browser's bookmark has to look like this:
|
|
|
|
javascript:location.href='org-protocol://store-link://'+ \\
|
|
encodeURIComponent(location.href)
|
|
encodeURIComponent(document.title)+'/'+ \\
|
|
|
|
Don't use `escape()'! Use `encodeURIComponent()' instead. The title of the page
|
|
could contain slashes and the location definitely will.
|
|
|
|
The sub-protocol used to reach this function is set in
|
|
`org-protocol-protocol-alist'."
|
|
(let* ((splitparts (org-protocol-split-data fname t))
|
|
(uri (org-protocol-sanitize-uri (car splitparts)))
|
|
(title (cadr splitparts))
|
|
orglink)
|
|
(if (boundp 'org-stored-links)
|
|
(setq org-stored-links (cons (list uri title) org-stored-links)))
|
|
(kill-new uri)
|
|
(message "`%s' to insert new org-link, `%s' to insert `%s'"
|
|
(substitute-command-keys"\\[org-insert-link]")
|
|
(substitute-command-keys"\\[yank]")
|
|
uri))
|
|
nil)
|
|
|
|
(defun org-protocol-remember (info)
|
|
"Process an org-protocol://remember:// style url.
|
|
|
|
The location for a browser's bookmark has to look like this:
|
|
|
|
javascript:location.href='org-protocol://remember://'+ \\
|
|
encodeURIComponent(location.href)+'/' \\
|
|
encodeURIComponent(document.title)+'/'+ \\
|
|
encodeURIComponent(window.getSelection())
|
|
|
|
See the docs for `org-protocol-capture' for more information."
|
|
|
|
(if (and (boundp 'org-stored-links)
|
|
(or (fboundp 'org-capture))
|
|
(org-protocol-do-capture info 'org-remember))
|
|
(message "Org-mode not loaded."))
|
|
nil)
|
|
|
|
(defun org-protocol-capture (info)
|
|
"Process an org-protocol://capture:// style url.
|
|
|
|
The sub-protocol used to reach this function is set in
|
|
`org-protocol-protocol-alist'.
|
|
|
|
This function detects an URL, title and optional text, separated by '/'
|
|
The location for a browser's bookmark has to look like this:
|
|
|
|
javascript:location.href='org-protocol://capture://'+ \\
|
|
encodeURIComponent(location.href)+'/' \\
|
|
encodeURIComponent(document.title)+'/'+ \\
|
|
encodeURIComponent(window.getSelection())
|
|
|
|
By default, it uses the character `org-protocol-default-template-key',
|
|
which should be associated with a template in `org-capture-templates'.
|
|
But you may prepend the encoded URL with a character and a slash like so:
|
|
|
|
javascript:location.href='org-protocol://capture://b/'+ ...
|
|
|
|
Now template ?b will be used."
|
|
(if (and (boundp 'org-stored-links)
|
|
(or (fboundp 'org-capture))
|
|
(org-protocol-do-capture info 'org-capture))
|
|
(message "Org-mode not loaded."))
|
|
nil)
|
|
|
|
(defun org-protocol-do-capture (info capture-func)
|
|
"Support `org-capture' and `org-remember' alike.
|
|
CAPTURE-FUNC is either the symbol `org-remember' or `org-capture'."
|
|
(let* ((parts (org-protocol-split-data info t))
|
|
(template (or (and (= 1 (length (car parts))) (pop parts))
|
|
org-protocol-default-template-key))
|
|
(url (org-protocol-sanitize-uri (car parts)))
|
|
(type (if (string-match "^\\([a-z]+\\):" url)
|
|
(match-string 1 url)))
|
|
(title(or (cadr parts) ""))
|
|
(region (or (caddr parts) ""))
|
|
(orglink (org-make-link-string
|
|
url (if (string-match "[^[:space:]]" title) title url)))
|
|
(org-capture-link-is-already-stored t) ;; avoid call to org-store-link
|
|
remember-annotation-functions)
|
|
(setq org-stored-links
|
|
(cons (list url title) org-stored-links))
|
|
(kill-new orglink)
|
|
(org-store-link-props :type type
|
|
:link url
|
|
:description title
|
|
:annotation orglink
|
|
:initial region)
|
|
(raise-frame)
|
|
(funcall capture-func nil template)))
|
|
|
|
|
|
(defun org-protocol-open-source (fname)
|
|
"Process an org-protocol://open-source:// style url.
|
|
|
|
Change a filename by mapping URLs to local filenames as set
|
|
in `org-protocol-project-alist'.
|
|
|
|
The location for a browser's bookmark should look like this:
|
|
|
|
javascript:location.href='org-protocol://open-source://'+ \\
|
|
encodeURIComponent(location.href)"
|
|
|
|
;; As we enter this function for a match on our protocol, the return value
|
|
;; defaults to nil.
|
|
(let ((result nil)
|
|
(f (org-protocol-unhex-string fname)))
|
|
(catch 'result
|
|
(dolist (prolist org-protocol-project-alist)
|
|
(let* ((base-url (plist-get (cdr prolist) :base-url))
|
|
(wsearch (regexp-quote base-url)))
|
|
|
|
(when (string-match wsearch f)
|
|
(let* ((wdir (plist-get (cdr prolist) :working-directory))
|
|
(strip-suffix (plist-get (cdr prolist) :online-suffix))
|
|
(add-suffix (plist-get (cdr prolist) :working-suffix))
|
|
;; Strip "[?#].*$" if `f' is a redirect with another
|
|
;; ending than strip-suffix here:
|
|
(f1 (substring f 0 (string-match "\\([\\?#].*\\)?$" f)))
|
|
(start-pos (+ (string-match wsearch f1) (length base-url)))
|
|
(end-pos (string-match
|
|
(regexp-quote strip-suffix) f1))
|
|
;; We have to compare redirects without suffix below:
|
|
(f2 (concat wdir (substring f1 start-pos end-pos)))
|
|
(the-file (concat f2 add-suffix)))
|
|
|
|
;; Note: the-file may still contain `%C3' et al here because browsers
|
|
;; tend to encode `ä' in URLs to `%25C3' - `%25' being `%'.
|
|
;; So the results may vary.
|
|
|
|
;; -- start redirects --
|
|
(unless (file-exists-p the-file)
|
|
(message "File %s does not exist.\nTesting for rewritten URLs." the-file)
|
|
(let ((rewrites (plist-get (cdr prolist) :rewrites)))
|
|
(when rewrites
|
|
(message "Rewrites found: %S" rewrites)
|
|
(mapc
|
|
(lambda (rewrite)
|
|
"Try to match a rewritten URL and map it to a real file."
|
|
;; Compare redirects without suffix:
|
|
(if (string-match (car rewrite) f2)
|
|
(throw 'result (concat wdir (cdr rewrite)))))
|
|
rewrites))))
|
|
;; -- end of redirects --
|
|
|
|
(if (file-readable-p the-file)
|
|
(throw 'result the-file))
|
|
(if (file-exists-p the-file)
|
|
(message "%s: permission denied!" the-file)
|
|
(message "%s: no such file or directory." the-file))))))
|
|
result)))
|
|
|
|
|
|
;;; Core functions:
|
|
|
|
(defun org-protocol-check-filename-for-protocol (fname restoffiles client)
|
|
"Detect if `org-protocol-the-protocol' and a known sub-protocol is used in fname.
|
|
Sub-protocols are registered in `org-protocol-protocol-alist' and
|
|
`org-protocol-protocol-alist-default'.
|
|
This is, how the matching is done:
|
|
|
|
(string-match \"protocol:/+sub-protocol:/+\" ...)
|
|
|
|
protocol and sub-protocol are regexp-quoted.
|
|
|
|
If a matching protocol is found, the protocol is stripped from fname and the
|
|
result is passed to the protocols function as the only parameter. If the
|
|
function returns nil, the filename is removed from the list of filenames
|
|
passed from emacsclient to the server.
|
|
If the function returns a non nil value, that value is passed to the server
|
|
as filename."
|
|
(let ((sub-protocols (append org-protocol-protocol-alist org-protocol-protocol-alist-default)))
|
|
(catch 'fname
|
|
(let ((the-protocol (concat (regexp-quote org-protocol-the-protocol) ":/+")))
|
|
(when (string-match the-protocol fname)
|
|
(dolist (prolist sub-protocols)
|
|
(let ((proto (concat the-protocol (regexp-quote (plist-get (cdr prolist) :protocol)) ":/+")))
|
|
(when (string-match proto fname)
|
|
(let* ((func (plist-get (cdr prolist) :function))
|
|
(greedy (plist-get (cdr prolist) :greedy))
|
|
(splitted (split-string fname proto))
|
|
(result (if greedy restoffiles (cadr splitted))))
|
|
(when (plist-get (cdr prolist) :kill-client)
|
|
(message "Greedy org-protocol handler. Killing client.")
|
|
(server-edit))
|
|
(when (fboundp func)
|
|
(unless greedy
|
|
(throw 'fname (funcall func result)))
|
|
(funcall func result)
|
|
(throw 'fname t))))))))
|
|
;; (message "fname: %s" fname)
|
|
fname)))
|
|
|
|
|
|
(defadvice server-visit-files (before org-protocol-detect-protocol-server activate)
|
|
"Advice server-visit-flist to call `org-protocol-modify-filename-for-protocol'."
|
|
(let ((flist (if org-protocol-reverse-list-of-files
|
|
(reverse (ad-get-arg 0))
|
|
(ad-get-arg 0)))
|
|
(client (ad-get-arg 1)))
|
|
(catch 'greedy
|
|
(dolist (var flist)
|
|
(let ((fname (expand-file-name (car var)))) ;; `\' to `/' on windows. FIXME: could this be done any better?
|
|
(setq fname (org-protocol-check-filename-for-protocol fname (member var flist) client))
|
|
(if (eq fname t) ;; greedy? We need the `t' return value.
|
|
(progn
|
|
(ad-set-arg 0 nil)
|
|
(throw 'greedy t))
|
|
(if (stringp fname) ;; probably filename
|
|
(setcar var fname)
|
|
(ad-set-arg 0 (delq var (ad-get-arg 0))))))
|
|
))))
|
|
|
|
;;; Org specific functions:
|
|
|
|
(defun org-protocol-create-for-org ()
|
|
"Create a org-protocol project for the current file's Org-mode project.
|
|
This works, if the file visited is part of a publishing project in
|
|
`org-publish-project-alist'. This function calls `org-protocol-create' to do
|
|
most of the work."
|
|
(interactive)
|
|
(require 'org-publish)
|
|
(let ((all (or (org-publish-get-project-from-filename buffer-file-name))))
|
|
(if all (org-protocol-create (cdr all))
|
|
(message "Not in an org-project. Did mean %s?"
|
|
(substitute-command-keys"\\[org-protocol-create]")))))
|
|
|
|
|
|
(defun org-protocol-create(&optional project-plist)
|
|
"Create a new org-protocol project interactively.
|
|
An org-protocol project is an entry in `org-protocol-project-alist'
|
|
which is used by `org-protocol-open-source'.
|
|
Optionally use project-plist to initialize the defaults for this project. If
|
|
project-plist is the CDR of an element in `org-publish-project-alist', reuse
|
|
:base-directory, :html-extension and :base-extension."
|
|
(interactive)
|
|
(let ((working-dir (expand-file-name(or (plist-get project-plist :base-directory) default-directory)))
|
|
(base-url "http://orgmode.org/worg/")
|
|
(strip-suffix (or (plist-get project-plist :html-extension) ".html"))
|
|
(working-suffix (if (plist-get project-plist :base-extension)
|
|
(concat "." (plist-get project-plist :base-extension))
|
|
".org"))
|
|
|
|
(worglet-buffer nil)
|
|
|
|
(insert-default-directory t)
|
|
(minibuffer-allow-text-properties nil))
|
|
|
|
(setq base-url (read-string "Base URL of published content: " base-url nil base-url t))
|
|
(if (not (string-match "\\/$" base-url))
|
|
(setq base-url (concat base-url "/")))
|
|
|
|
(setq working-dir
|
|
(expand-file-name
|
|
(read-directory-name "Local working directory: " working-dir working-dir t)))
|
|
(if (not (string-match "\\/$" working-dir))
|
|
(setq working-dir (concat working-dir "/")))
|
|
|
|
(setq strip-suffix
|
|
(read-string
|
|
(concat "Extension to strip from published URLs ("strip-suffix"): ")
|
|
strip-suffix nil strip-suffix t))
|
|
|
|
(setq working-suffix
|
|
(read-string
|
|
(concat "Extension of editable files ("working-suffix"): ")
|
|
working-suffix nil working-suffix t))
|
|
|
|
(when (yes-or-no-p "Save the new org-protocol-project to your init file? ")
|
|
(setq org-protocol-project-alist
|
|
(cons `(,base-url . (:base-url ,base-url
|
|
:working-directory ,working-dir
|
|
:online-suffix ,strip-suffix
|
|
:working-suffix ,working-suffix))
|
|
org-protocol-project-alist))
|
|
(customize-save-variable 'org-protocol-project-alist org-protocol-project-alist))))
|
|
|
|
(provide 'org-protocol)
|
|
|
|
;; arch-tag: b5c5c2ac-77cf-4a94-a649-2163dff95846
|
|
;;; org-protocol.el ends here
|