Merge branch 'master' of git+ssh://repo.or.cz/srv/git/org-mode
This commit is contained in:
commit
302820bed1
34
ChangeLog
34
ChangeLog
|
@ -1,3 +1,36 @@
|
|||
2008-03-27 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org-agenda.el: New file, split out from org.el.
|
||||
|
||||
* org-wl.el (org-wl-open): Initialize `wl' when not running yet.
|
||||
|
||||
2008-03-25 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org-remember.el: New file, split out from org.el.
|
||||
(org-remember): Call `org-do-remember' as an intermediate to
|
||||
`remember'.
|
||||
(org-ignore-remember): New option.
|
||||
(org-remember): Fix bug with re-applying template.
|
||||
|
||||
* org.el (org-get-org-file): Check for availability of
|
||||
`remember-data-file'.
|
||||
|
||||
* org-exp.el: Add autoload to all entry points.
|
||||
(org-skip-comments): Function removed.
|
||||
|
||||
2008-03-24 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org-exp.el: New file, split out from org.el.
|
||||
|
||||
* org-table.el: New file, split out from org.el.
|
||||
(org-table-current-column): No longer interactive.
|
||||
|
||||
2008-03-22 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org-compat.el: New file, split out from org.el.
|
||||
|
||||
* org-macs.el: New file, split out from org.el.
|
||||
|
||||
2008-03-21 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org.el (org-cached-entry-get): Allow a regexp value for
|
||||
|
@ -99,7 +132,6 @@
|
|||
documentation of how it is to be used. Avoid double entries for
|
||||
the same link type.
|
||||
(org-add-link-props): New function.
|
||||
>>>>>>> split-out-linking-code:ChangeLog
|
||||
|
||||
2008-03-14 Glenn Morris <rmg@gnu.org>
|
||||
|
||||
|
|
99
Makefile
99
Makefile
|
@ -60,14 +60,19 @@ CP = cp -p
|
|||
##----------------------------------------------------------------------
|
||||
|
||||
# The following variables need to be defined by the maintainer
|
||||
LISPFILES0 = org.el org-publish.el org-mouse.el org-export-latex.el \
|
||||
LISPF = org.el \
|
||||
org-compat.el org-macs.el \
|
||||
org-table.el org-exp.el org-remember.el org-agenda.el\
|
||||
org-publish.el org-mouse.el org-export-latex.el \
|
||||
org-bbdb.el org-gnus.el org-info.el org-irc.el \
|
||||
org-mac-message.el org-mhe.el org-rmail.el org-vm.el org-wl.el
|
||||
LISPFILES = $(LISPFILES0) org-install.el
|
||||
LISPFILES0 = $(LISPF:%=lisp/%)
|
||||
LISPFILES = $(LISPFILES0) lisp/org-install.el
|
||||
ELCFILES0 = $(LISPFILES0:.el=.elc)
|
||||
ELCFILES = $(LISPFILES:.el=.elc)
|
||||
DOCFILES = org.texi org.pdf org
|
||||
CARDFILES = orgcard.tex orgcard.pdf orgcard_letter.pdf
|
||||
TEXIFILES = org.texi
|
||||
CARDFILES = doc/orgcard.tex doc/orgcard.pdf doc/orgcard_letter.pdf
|
||||
TEXIFILES = doc/org.texi
|
||||
INFOFILES = org
|
||||
HG_RELEASES = ../org-mode-all-releases-hg/
|
||||
|
||||
|
@ -81,16 +86,17 @@ DISTFILES= README ${LISPFILES} ${DOCFILES} ${CARDFILES} \
|
|||
DISTFILES_xemacs= xemacs/noutline.el xemacs/ps-print-invisible.el xemacs/README
|
||||
|
||||
all: $(ELCFILES)
|
||||
compile: $(ELCFILES0)
|
||||
|
||||
install: install-lisp
|
||||
|
||||
doc: org.html org.pdf orgcard.pdf orgcard_letter.pdf
|
||||
doc: doc/org.html doc/org.pdf doc/orgcard.pdf doc/orgcard_letter.pdf
|
||||
|
||||
p:
|
||||
make pdf && open org.pdf
|
||||
make pdf && open doc/org.pdf
|
||||
|
||||
c:
|
||||
make card && gv orgcard.ps
|
||||
make card && gv doc/orgcard.ps
|
||||
|
||||
install-lisp: $(LISPFILES) $(ELCFILES)
|
||||
if [ ! -d $(lispdir) ]; then $(MKDIR) $(lispdir); else true; fi ;
|
||||
|
@ -105,49 +111,46 @@ install-noutline: xemacs/noutline.elc
|
|||
if [ ! -d $(lispdir) ]; then $(MKDIR) $(lispdir); else true; fi ;
|
||||
$(CP) xemacs/noutline.el xemacs/noutline.elc $(lispdir)
|
||||
|
||||
org-install.el: $(LISPFILES0) Makefile
|
||||
autoloads: lisp/org-install.el
|
||||
|
||||
lisp/org-install.el: $(LISPFILES0) Makefile
|
||||
$(BATCH) --eval "(require 'autoload)" \
|
||||
--eval '(find-file "org-install.el")' \
|
||||
--eval '(erase-buffer)' \
|
||||
--eval '(mapc (lambda (x) (generate-file-autoloads (symbol-name x))) (quote ($(LISPFILES))))' \
|
||||
--eval '(mapc (lambda (x) (generate-file-autoloads (symbol-name x))) (quote ($(LISPFILES0))))' \
|
||||
--eval '(insert "\n(provide (quote org-install))\n")' \
|
||||
--eval '(save-buffer)'
|
||||
|
||||
org.elc: org.el
|
||||
|
||||
org-publish.elc: org-publish.el
|
||||
|
||||
org-install.elc: org-install.el
|
||||
mv org-install.el lisp
|
||||
|
||||
xemacs/noutline.elc: xemacs/noutline.el
|
||||
|
||||
org: org.texi
|
||||
$(MAKEINFO) --no-split org.texi -o org
|
||||
doc/org: doc/org.texi
|
||||
(cd doc; $(MAKEINFO) --no-split org.texi -o org)
|
||||
|
||||
org.pdf: org.texi
|
||||
$(TEXI2PDF) org.texi
|
||||
doc/org.pdf: doc/org.texi
|
||||
(cd doc; $(TEXI2PDF) org.texi)
|
||||
|
||||
org.html: org.texi
|
||||
$(TEXI2HTML) --no-split -o org.html org.texi
|
||||
doc/org.html: doc/org.texi
|
||||
(cd doc; $(TEXI2HTML) --no-split -o org.html org.texi)
|
||||
|
||||
orgcard.dvi: orgcard.tex
|
||||
tex orgcard.tex
|
||||
doc/orgcard.dvi: doc/orgcard.tex
|
||||
(cd doc; tex orgcard.tex)
|
||||
|
||||
orgcard.pdf: orgcard.dvi
|
||||
dvips -q -f -t landscape orgcard.dvi | gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=orgcard.pdf -c .setpdfwrite -
|
||||
doc/orgcard.pdf: doc/orgcard.dvi
|
||||
dvips -q -f -t landscape doc/orgcard.dvi | gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=doc/orgcard.pdf -c .setpdfwrite -
|
||||
|
||||
orgcard.ps: orgcard.dvi
|
||||
dvips -t landscape -o orgcard.ps orgcard.dvi
|
||||
doc/orgcard.ps: doc/orgcard.dvi
|
||||
dvips -t landscape -o doc/orgcard.ps doc/orgcard.dvi
|
||||
|
||||
orgcard_letter.dvi: orgcard.tex
|
||||
perl -pe 's/letterpaper=0/letterpaper=1/' orgcard.tex > orgcard_letter.tex
|
||||
tex orgcard_letter.tex
|
||||
doc/orgcard_letter.dvi: doc/orgcard.tex
|
||||
perl -pe 's/letterpaper=0/letterpaper=1/' doc/orgcard.tex > doc/orgcard_letter.tex
|
||||
(cd doc; tex orgcard_letter.tex)
|
||||
|
||||
orgcard_letter.pdf: orgcard_letter.dvi
|
||||
dvips -q -f -t landscape orgcard_letter.dvi | gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=orgcard_letter.pdf -c .setpdfwrite -
|
||||
doc/orgcard_letter.pdf: doc/orgcard_letter.dvi
|
||||
dvips -q -f -t landscape doc/orgcard_letter.dvi | gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=doc/orgcard_letter.pdf -c .setpdfwrite -
|
||||
|
||||
orgcard_letter.ps: orgcard_letter.dvi
|
||||
dvips -t landscape -o orgcard_letter.ps orgcard_letter.dvi
|
||||
doc/orgcard_letter.ps: doc/orgcard_letter.dvi
|
||||
dvips -t landscape -o doc/orgcard_letter.ps doc/orgcard_letter.dvi
|
||||
|
||||
# Below here are special targets for maintenance only
|
||||
|
||||
|
@ -158,19 +161,18 @@ web:
|
|||
make webfiles
|
||||
(cd ORGWEBPAGE/tmp; lftp -f ../../../org-mode-proprietary/ftp_upload_website)
|
||||
|
||||
html: org.html
|
||||
html: doc/org.html
|
||||
|
||||
html_split: org.texi
|
||||
rm -rf manual
|
||||
mkdir manual
|
||||
$(TEXI2HTML) -o manual org.texi
|
||||
html_split: doc/org.texi
|
||||
rm -rf doc/manual
|
||||
mkdir doc/manual
|
||||
$(TEXI2HTML) -o doc/manual doc/org.texi
|
||||
|
||||
info:
|
||||
$(MAKEINFO) --no-split org.texi -o org
|
||||
info: doc/org
|
||||
|
||||
pdf: org.pdf
|
||||
pdf: doc/org.pdf
|
||||
|
||||
card: orgcard.pdf orgcard.ps orgcard_letter.pdf orgcard_letter.ps
|
||||
card: doc/orgcard.pdf doc/orgcard.ps doc/orgcard_letter.pdf doc/orgcard_letter.ps
|
||||
|
||||
distfile:
|
||||
@if [ "X$(TAG)" = "X" ]; then echo "*** No tag ***"; exit 1; fi
|
||||
|
@ -224,12 +226,13 @@ relup:
|
|||
make upload_manual
|
||||
|
||||
clean:
|
||||
rm -f $(ELCFILES) org.pdf org org.html orgcard.pdf orgcard.ps
|
||||
rm -f $(ELCFILES)
|
||||
(cd doc; rm -f org.pdf org org.html orgcard.pdf orgcard.ps)
|
||||
rm -f *~ */*~ */*/*~
|
||||
rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.pg *.pgs
|
||||
rm -f *.toc *.tp *.tps *.vr *.vrs *.log *.html *.ps
|
||||
rm -f orgcard_letter.tex orgcard_letter.pdf
|
||||
rm -rf manual
|
||||
(cd doc; rm -f *.aux *.cp *.cps *.dvi *.fn *.fns *.ky *.kys *.pg *.pgs)
|
||||
(cd doc; rm -f *.toc *.tp *.tps *.vr *.vrs *.log *.html *.ps)
|
||||
(cd doc; rm -f orgcard_letter.tex orgcard_letter.pdf)
|
||||
rm -rf doc/manual
|
||||
rm -rf RELEASEDIR
|
||||
|
||||
.el.elc:
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/perl
|
||||
$version = $ARGV[0];
|
||||
$date = `date "+%B %Y"`; chomp $date;
|
||||
$year = `date "+%Y"` ; chomp $year;
|
||||
|
||||
print STDERR "Changing version to \"$version\" and date to \"$date\" in all relevant files\n" ;
|
||||
|
||||
print STDERR join("\n",glob("lisp/*.el")),"\n";
|
||||
$cmd = qq{s/^(;; Version:)\\s+(\\S+)[ \t]*\$/\$1 $version/;s/^(\\(defconst org-version )"(\\S+)"/\$1"$version"/};
|
||||
$c1 = "perl -pi -e '$cmd' lisp/*.el";
|
||||
system($c1);
|
||||
|
||||
print STDERR "doc/org.texi\n";
|
||||
$cmd = qq{s/^(\\\@set VERSION)\\s+(\\S+)[ \t]*\$/\$1 $version/;s/^(\\\@set DATE)\\s+(.*)\$/\$1 $date/;};
|
||||
$c1 = "perl -pi -e '$cmd' doc/org.texi";
|
||||
system($c1);
|
||||
|
||||
print STDERR "doc/orgcard.tex\n";
|
||||
$cmd = qq{s/^\\\\def\\\\orgversionnumber\\{\\S+\\}/\\\\def\\\\orgversionnumber{$version}/;s/\\\\def\\\\versionyear\\{\\S+\\}/\\\\def\\\\versionyear{$year}/;s/\\\\def\\\\year\\{\\S+\\}/\\\\def\\\\year{$year}/;};
|
||||
$c1 = "perl -pi -e '$cmd' doc/orgcard.tex";
|
||||
system($c1);
|
||||
|
||||
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
@setfilename ../../info/org
|
||||
@settitle Org Mode Manual
|
||||
|
||||
@set VERSION 5.23
|
||||
@set VERSION 6.00pre-1
|
||||
@set DATE March 2008
|
||||
|
||||
@dircategory Emacs
|
|
@ -1,5 +1,5 @@
|
|||
% Reference Card for Org Mode
|
||||
\def\orgversionnumber{5.23}
|
||||
\def\orgversionnumber{6.00pre-1}
|
||||
\def\versionyear{2008} % latest update
|
||||
\def\year{2008} % latest copyright year
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -0,0 +1,199 @@
|
|||
;;; org-compat.el --- Compatibility code for Org-mode
|
||||
|
||||
;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; 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, 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; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;;; Commentary:
|
||||
|
||||
;; This file contains code needed for compatibility with XEmacs and older
|
||||
;; versions of GNU Emacs.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(defconst org-xemacs-p (featurep 'xemacs)) ; not used by org.el itself
|
||||
(defconst org-format-transports-properties-p
|
||||
(let ((x "a"))
|
||||
(add-text-properties 0 1 '(test t) x)
|
||||
(get-text-property 0 'test (format "%s" x)))
|
||||
"Does format transport text properties?")
|
||||
|
||||
(defun org-compatible-face (inherits specs)
|
||||
"Make a compatible face specification.
|
||||
If INHERITS is an existing face and if the Emacs version supports it,
|
||||
just inherit the face. If not, use SPECS to define the face.
|
||||
XEmacs and Emacs 21 do not know about the `min-colors' attribute.
|
||||
For them we convert a (min-colors 8) entry to a `tty' entry and move it
|
||||
to the top of the list. The `min-colors' attribute will be removed from
|
||||
any other entries, and any resulting duplicates will be removed entirely."
|
||||
(cond
|
||||
((and inherits (facep inherits)
|
||||
(not (featurep 'xemacs)) (> emacs-major-version 22))
|
||||
;; In Emacs 23, we use inheritance where possible.
|
||||
;; We only do this in Emacs 23, because only there the outline
|
||||
;; faces have been changed to the original org-mode-level-faces.
|
||||
(list (list t :inherit inherits)))
|
||||
((or (featurep 'xemacs) (< emacs-major-version 22))
|
||||
;; These do not understand the `min-colors' attribute.
|
||||
(let (r e a)
|
||||
(while (setq e (pop specs))
|
||||
(cond
|
||||
((memq (car e) '(t default)) (push e r))
|
||||
((setq a (member '(min-colors 8) (car e)))
|
||||
(nconc r (list (cons (cons '(type tty) (delq (car a) (car e)))
|
||||
(cdr e)))))
|
||||
((setq a (assq 'min-colors (car e)))
|
||||
(setq e (cons (delq a (car e)) (cdr e)))
|
||||
(or (assoc (car e) r) (push e r)))
|
||||
(t (or (assoc (car e) r) (push e r)))))
|
||||
(nreverse r)))
|
||||
(t specs)))
|
||||
(put 'org-compatible-face 'lisp-indent-function 1)
|
||||
|
||||
;;;; Emacs/XEmacs compatibility
|
||||
|
||||
;; Overlay compatibility functions
|
||||
(defun org-make-overlay (beg end &optional buffer)
|
||||
(if (featurep 'xemacs)
|
||||
(make-extent beg end buffer)
|
||||
(make-overlay beg end buffer)))
|
||||
(defun org-delete-overlay (ovl)
|
||||
(if (featurep 'xemacs) (delete-extent ovl) (delete-overlay ovl)))
|
||||
(defun org-detach-overlay (ovl)
|
||||
(if (featurep 'xemacs) (detach-extent ovl) (delete-overlay ovl)))
|
||||
(defun org-move-overlay (ovl beg end &optional buffer)
|
||||
(if (featurep 'xemacs)
|
||||
(set-extent-endpoints ovl beg end (or buffer (current-buffer)))
|
||||
(move-overlay ovl beg end buffer)))
|
||||
(defun org-overlay-put (ovl prop value)
|
||||
(if (featurep 'xemacs)
|
||||
(set-extent-property ovl prop value)
|
||||
(overlay-put ovl prop value)))
|
||||
(defun org-overlay-display (ovl text &optional face evap)
|
||||
"Make overlay OVL display TEXT with face FACE."
|
||||
(if (featurep 'xemacs)
|
||||
(let ((gl (make-glyph text)))
|
||||
(and face (set-glyph-face gl face))
|
||||
(set-extent-property ovl 'invisible t)
|
||||
(set-extent-property ovl 'end-glyph gl))
|
||||
(overlay-put ovl 'display text)
|
||||
(if face (overlay-put ovl 'face face))
|
||||
(if evap (overlay-put ovl 'evaporate t))))
|
||||
(defun org-overlay-before-string (ovl text &optional face evap)
|
||||
"Make overlay OVL display TEXT with face FACE."
|
||||
(if (featurep 'xemacs)
|
||||
(let ((gl (make-glyph text)))
|
||||
(and face (set-glyph-face gl face))
|
||||
(set-extent-property ovl 'begin-glyph gl))
|
||||
(if face (org-add-props text nil 'face face))
|
||||
(overlay-put ovl 'before-string text)
|
||||
(if evap (overlay-put ovl 'evaporate t))))
|
||||
(defun org-overlay-get (ovl prop)
|
||||
(if (featurep 'xemacs)
|
||||
(extent-property ovl prop)
|
||||
(overlay-get ovl prop)))
|
||||
(defun org-overlays-at (pos)
|
||||
(if (featurep 'xemacs) (extents-at pos) (overlays-at pos)))
|
||||
(defun org-overlays-in (&optional start end)
|
||||
(if (featurep 'xemacs)
|
||||
(extent-list nil start end)
|
||||
(overlays-in start end)))
|
||||
(defun org-overlay-start (o)
|
||||
(if (featurep 'xemacs) (extent-start-position o) (overlay-start o)))
|
||||
(defun org-overlay-end (o)
|
||||
(if (featurep 'xemacs) (extent-end-position o) (overlay-end o)))
|
||||
(defun org-find-overlays (prop &optional pos delete)
|
||||
"Find all overlays specifying PROP at POS or point.
|
||||
If DELETE is non-nil, delete all those overlays."
|
||||
(let ((overlays (org-overlays-at (or pos (point))))
|
||||
ov found)
|
||||
(while (setq ov (pop overlays))
|
||||
(if (org-overlay-get ov prop)
|
||||
(if delete (org-delete-overlay ov) (push ov found))))
|
||||
found))
|
||||
|
||||
(defun org-add-hook (hook function &optional append local)
|
||||
"Add-hook, compatible with both Emacsen."
|
||||
(if (and local (featurep 'xemacs))
|
||||
(add-local-hook hook function append)
|
||||
(add-hook hook function append local)))
|
||||
|
||||
(defun org-add-props (string plist &rest props)
|
||||
"Add text properties to entire string, from beginning to end.
|
||||
PLIST may be a list of properties, PROPS are individual properties and values
|
||||
that will be added to PLIST. Returns the string that was modified."
|
||||
(add-text-properties
|
||||
0 (length string) (if props (append plist props) plist) string)
|
||||
string)
|
||||
(put 'org-add-props 'lisp-indent-function 2)
|
||||
|
||||
;; Region compatibility
|
||||
|
||||
(defvar org-ignore-region nil
|
||||
"To temporarily disable the active region.")
|
||||
|
||||
(defun org-region-active-p ()
|
||||
"Is `transient-mark-mode' on and the region active?
|
||||
Works on both Emacs and XEmacs."
|
||||
(if org-ignore-region
|
||||
nil
|
||||
(if (featurep 'xemacs)
|
||||
(and zmacs-regions (region-active-p))
|
||||
(if (fboundp 'use-region-p)
|
||||
(use-region-p)
|
||||
(and transient-mark-mode mark-active))))) ; Emacs 22 and before
|
||||
|
||||
;; Invisibility compatibility
|
||||
|
||||
(defun org-add-to-invisibility-spec (arg)
|
||||
"Add elements to `buffer-invisibility-spec'.
|
||||
See documentation for `buffer-invisibility-spec' for the kind of elements
|
||||
that can be added."
|
||||
(cond
|
||||
((fboundp 'add-to-invisibility-spec)
|
||||
(add-to-invisibility-spec arg))
|
||||
((or (null buffer-invisibility-spec) (eq buffer-invisibility-spec t))
|
||||
(setq buffer-invisibility-spec (list arg)))
|
||||
(t
|
||||
(setq buffer-invisibility-spec
|
||||
(cons arg buffer-invisibility-spec)))))
|
||||
|
||||
(defun org-remove-from-invisibility-spec (arg)
|
||||
"Remove elements from `buffer-invisibility-spec'."
|
||||
(if (fboundp 'remove-from-invisibility-spec)
|
||||
(remove-from-invisibility-spec arg)
|
||||
(if (consp buffer-invisibility-spec)
|
||||
(setq buffer-invisibility-spec
|
||||
(delete arg buffer-invisibility-spec)))))
|
||||
|
||||
(defun org-in-invisibility-spec-p (arg)
|
||||
"Is ARG a member of `buffer-invisibility-spec'?"
|
||||
(if (consp buffer-invisibility-spec)
|
||||
(member arg buffer-invisibility-spec)
|
||||
nil))
|
||||
|
||||
|
||||
(provide 'org-compat)
|
||||
|
||||
;;; org-compat.el ends here
|
File diff suppressed because it is too large
Load Diff
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Emacs Lisp Archive Entry
|
||||
;; Filename: org-export-latex.el
|
||||
;; Version: 5.23
|
||||
;; Version: 6.00pre-1
|
||||
;; Author: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: org, wp, tex
|
||||
|
@ -50,6 +50,7 @@
|
|||
|
||||
(require 'footnote)
|
||||
(require 'org)
|
||||
(require 'org-exp)
|
||||
|
||||
;;; Variables:
|
||||
(defvar org-export-latex-class nil)
|
||||
|
@ -944,6 +945,9 @@ Regexps are those from `org-export-latex-special-string-regexps'."
|
|||
(match-string 2)) t t)
|
||||
(forward-line))))))
|
||||
|
||||
|
||||
(defvar org-table-last-alignment) ; defined in org-table.el
|
||||
(declare-function orgtbl-to-latex "org-table" (table params) t)
|
||||
(defun org-export-latex-tables (insert)
|
||||
"Convert tables to LaTeX and INSERT it."
|
||||
(goto-char (point-min))
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Author: Philip Jackson <emacs@shellarchive.co.uk>
|
||||
;; Keywords: erc, irc, link, org
|
||||
;; Version: 1.4
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -3,7 +3,7 @@
|
|||
;; Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: John Wiegley <johnw@gnu.org>
|
||||
;; Version: 1.2
|
||||
;; Version: 6.00pre-1
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
|
||||
;; This file is part of GNU Emacs.
|
|
@ -0,0 +1,210 @@
|
|||
;;; org-macs.el --- Top-level definitions for Org-mode
|
||||
|
||||
;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; 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, 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; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;;; Commentary:
|
||||
|
||||
;; This file contains macro definitions, defsubst definitions, and
|
||||
;; oder stuff needed for compilation and top-level forms in Org-mode.
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
||||
(defmacro org-bound-and-true-p (var)
|
||||
"Return the value of symbol VAR if it is bound, else nil."
|
||||
`(and (boundp (quote ,var)) ,var))
|
||||
|
||||
(defmacro org-unmodified (&rest body)
|
||||
"Execute body without changing `buffer-modified-p'."
|
||||
`(set-buffer-modified-p
|
||||
(prog1 (buffer-modified-p) ,@body)))
|
||||
|
||||
(defmacro org-re (s)
|
||||
"Replace posix classes in regular expression."
|
||||
(if (featurep 'xemacs)
|
||||
(let ((ss s))
|
||||
(save-match-data
|
||||
(while (string-match "\\[:alnum:\\]" ss)
|
||||
(setq ss (replace-match "a-zA-Z0-9" t t ss)))
|
||||
(while (string-match "\\[:alpha:\\]" ss)
|
||||
(setq ss (replace-match "a-zA-Z" t t ss)))
|
||||
ss))
|
||||
s))
|
||||
|
||||
(defmacro org-preserve-lc (&rest body)
|
||||
`(let ((_line (org-current-line))
|
||||
(_col (current-column)))
|
||||
(unwind-protect
|
||||
(progn ,@body)
|
||||
(goto-line _line)
|
||||
(move-to-column _col))))
|
||||
|
||||
(defmacro org-without-partial-completion (&rest body)
|
||||
`(let ((pc-mode (and (boundp 'partial-completion-mode)
|
||||
partial-completion-mode)))
|
||||
(unwind-protect
|
||||
(progn
|
||||
(if pc-mode (partial-completion-mode -1))
|
||||
,@body)
|
||||
(if pc-mode (partial-completion-mode 1)))))
|
||||
|
||||
(eval-and-compile
|
||||
(unless (fboundp 'declare-function)
|
||||
(defmacro declare-function (fn file &optional arglist fileonly))))
|
||||
|
||||
(defmacro org-maybe-intangible (props)
|
||||
"Add '(intangigble t) to PROPS if Emacs version is earlier than Emacs 22.
|
||||
In emacs 21, invisible text is not avoided by the command loop, so the
|
||||
intangible property is needed to make sure point skips this text.
|
||||
In Emacs 22, this is not necessary. The intangible text property has
|
||||
led to problems with flyspell. These problems are fixed in flyspell.el,
|
||||
but we still avoid setting the property in Emacs 22 and later.
|
||||
We use a macro so that the test can happen at compilation time."
|
||||
(if (< emacs-major-version 22)
|
||||
`(append '(intangible t) ,props)
|
||||
props))
|
||||
|
||||
(defmacro org-with-point-at (pom &rest body)
|
||||
"Move to buffer and point of point-or-marker POM for the duration of BODY."
|
||||
(declare (indent 1) (debug t))
|
||||
`(save-excursion
|
||||
(if (markerp pom) (set-buffer (marker-buffer pom)))
|
||||
(save-excursion
|
||||
(goto-char (or pom (point)))
|
||||
,@body)))
|
||||
|
||||
(defmacro org-no-warnings (&rest body)
|
||||
(cons (if (fboundp 'with-no-warnings) 'with-no-warnings 'progn) body))
|
||||
|
||||
(defmacro org-if-unprotected (&rest body)
|
||||
"Execute BODY if there is no `org-protected' text property at point."
|
||||
(declare (debug t))
|
||||
`(unless (get-text-property (point) 'org-protected)
|
||||
,@body))
|
||||
|
||||
(defmacro org-with-remote-undo (_buffer &rest _body)
|
||||
"Execute BODY while recording undo information in two buffers."
|
||||
(declare (indent 1) (debug t))
|
||||
`(let ((_cline (org-current-line))
|
||||
(_cmd this-command)
|
||||
(_buf1 (current-buffer))
|
||||
(_buf2 ,_buffer)
|
||||
(_undo1 buffer-undo-list)
|
||||
(_undo2 (with-current-buffer ,_buffer buffer-undo-list))
|
||||
_c1 _c2)
|
||||
,@_body
|
||||
(when org-agenda-allow-remote-undo
|
||||
(setq _c1 (org-verify-change-for-undo
|
||||
_undo1 (with-current-buffer _buf1 buffer-undo-list))
|
||||
_c2 (org-verify-change-for-undo
|
||||
_undo2 (with-current-buffer _buf2 buffer-undo-list)))
|
||||
(when (or _c1 _c2)
|
||||
;; make sure there are undo boundaries
|
||||
(and _c1 (with-current-buffer _buf1 (undo-boundary)))
|
||||
(and _c2 (with-current-buffer _buf2 (undo-boundary)))
|
||||
;; remember which buffer to undo
|
||||
(push (list _cmd _cline _buf1 _c1 _buf2 _c2)
|
||||
org-agenda-undo-list)))))
|
||||
|
||||
(defmacro org-no-read-only (&rest body)
|
||||
"Inhibit read-only for BODY."
|
||||
`(let ((inhibit-read-only t)) ,@body))
|
||||
|
||||
(defconst org-rm-props '(invisible t face t keymap t intangible t mouse-face t
|
||||
rear-nonsticky t mouse-map t fontified t)
|
||||
"Properties to remove when a string without properties is wanted.")
|
||||
|
||||
(defsubst org-match-string-no-properties (num &optional string)
|
||||
(if (featurep 'xemacs)
|
||||
(let ((s (match-string num string)))
|
||||
(remove-text-properties 0 (length s) org-rm-props s)
|
||||
s)
|
||||
(match-string-no-properties num string)))
|
||||
|
||||
(defsubst org-no-properties (s)
|
||||
(if (fboundp 'set-text-properties)
|
||||
(set-text-properties 0 (length s) nil s)
|
||||
(remove-text-properties 0 (length s) org-rm-props s))
|
||||
s)
|
||||
|
||||
(defsubst org-get-alist-option (option key)
|
||||
(cond ((eq key t) t)
|
||||
((eq option t) t)
|
||||
((assoc key option) (cdr (assoc key option)))
|
||||
(t (cdr (assq 'default option)))))
|
||||
|
||||
(defsubst org-inhibit-invisibility ()
|
||||
"Modified `buffer-invisibility-spec' for Emacs 21.
|
||||
Some ops with invisible text do not work correctly on Emacs 21. For these
|
||||
we turn off invisibility temporarily. Use this in a `let' form."
|
||||
(if (< emacs-major-version 22) nil buffer-invisibility-spec))
|
||||
|
||||
(defsubst org-set-local (var value)
|
||||
"Make VAR local in current buffer and set it to VALUE."
|
||||
(set (make-variable-buffer-local var) value))
|
||||
|
||||
(defsubst org-mode-p ()
|
||||
"Check if the current buffer is in Org-mode."
|
||||
(eq major-mode 'org-mode))
|
||||
|
||||
(defsubst org-last (list)
|
||||
"Return the last element of LIST."
|
||||
(car (last list)))
|
||||
|
||||
(defun org-let (list &rest body)
|
||||
(eval (cons 'let (cons list body))))
|
||||
(put 'org-let 'lisp-indent-function 1)
|
||||
|
||||
(defun org-let2 (list1 list2 &rest body)
|
||||
(eval (cons 'let (cons list1 (list (cons 'let (cons list2 body)))))))
|
||||
(put 'org-let2 'lisp-indent-function 2)
|
||||
|
||||
(defsubst org-call-with-arg (command arg)
|
||||
"Call COMMAND interactively, but pretend prefix are was ARG."
|
||||
(let ((current-prefix-arg arg)) (call-interactively command)))
|
||||
|
||||
(defsubst org-current-line (&optional pos)
|
||||
(save-excursion
|
||||
(and pos (goto-char pos))
|
||||
;; works also in narrowed buffer, because we start at 1, not point-min
|
||||
(+ (if (bolp) 1 0) (count-lines 1 (point)))))
|
||||
|
||||
(defsubst org-pos-in-match-range (pos n)
|
||||
(and (match-beginning n)
|
||||
(<= (match-beginning n) pos)
|
||||
(>= (match-end n) pos)))
|
||||
|
||||
(defun org-autoload (file functions)
|
||||
"Establish autoload for all FUNCTIONS in FILE, if not boutd already."
|
||||
(let ((d (format "Documentation will be available after `%s.el' is loaded."
|
||||
file))
|
||||
f)
|
||||
(while (setq f (pop functions))
|
||||
(or (fboundp f) (autoload f file d t)))))
|
||||
|
||||
(provide 'org-macs)
|
||||
|
||||
;;; org-macs.el ends here
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
|
||||
;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Version: 5.23
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -142,6 +142,13 @@
|
|||
(eval-when-compile (require 'cl))
|
||||
(require 'org)
|
||||
|
||||
(defvar org-agenda-allow-remote-undo)
|
||||
(defvar org-agenda-undo-list)
|
||||
(defvar org-agenda-custom-commands)
|
||||
(declare-function org-agenda-change-all-lines "org-agenda"
|
||||
(newhead hdmarker &optional fixface))
|
||||
(declare-function org-verify-change-for-undo "org-agenda" (l1 l2))
|
||||
|
||||
(defvar org-mouse-plain-list-regexp "\\([ \t]*\\)\\([-+*]\\|[0-9]+[.)]\\) "
|
||||
"Regular expression that matches a plain list.")
|
||||
(defvar org-mouse-direct t
|
|
@ -4,7 +4,7 @@
|
|||
;; Author: David O'Toole <dto@gnu.org>
|
||||
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: hypermedia, outlines, wp
|
||||
;; Version: 5.23a
|
||||
;; Version: 6.00pre-1
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -0,0 +1,758 @@
|
|||
;;; org-remember.el --- Fast note taking in Org-mode
|
||||
|
||||
;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; 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, 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; see the file COPYING. If not, write to the
|
||||
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
;; Boston, MA 02110-1301, USA.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;;; Commentary:
|
||||
|
||||
;; This file contains the system to take fast notes with Org-mode.
|
||||
;; This system is used together with John Wiegleys `remember.el'.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile
|
||||
(require 'cl))
|
||||
(require 'org)
|
||||
|
||||
(declare-function remember "remember" (&optional initial))
|
||||
(declare-function remember-buffer-desc "remember" ())
|
||||
(declare-function remember-finalize "remember" ())
|
||||
(defvar remember-save-after-remembering)
|
||||
(defvar remember-data-file)
|
||||
(defvar remember-register)
|
||||
(defvar remember-buffer)
|
||||
(defvar remember-handler-functions)
|
||||
(defvar remember-annotation-functions)
|
||||
|
||||
(defgroup org-remember nil
|
||||
"Options concerning interaction with remember.el."
|
||||
:tag "Org Remember"
|
||||
:group 'org)
|
||||
|
||||
(defcustom org-remember-store-without-prompt t
|
||||
"Non-nil means, `C-c C-c' stores remember note without further promts.
|
||||
In this case, you need `C-u C-c C-c' to get the prompts for
|
||||
note file and headline.
|
||||
When this variable is nil, `C-c C-c' give you the prompts, and
|
||||
`C-u C-c C-c' trigger the fasttrack."
|
||||
:group 'org-remember
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom org-remember-interactive-interface 'refile
|
||||
"The interface to be used for interactive filing of remember notes.
|
||||
This is only used when the interactive mode for selecting a filing
|
||||
location is used (see the variable `org-remember-store-without-prompt').
|
||||
Allowed vaues are:
|
||||
outline The interface shows an outline of the relevant file
|
||||
and the correct heading is found by moving through
|
||||
the outline or by searching with incremental search.
|
||||
outline-path-completion Headlines in the current buffer are offered via
|
||||
completion.
|
||||
refile Use the refile interface, and offer headlines,
|
||||
possibly from different buffers."
|
||||
:group 'org-remember
|
||||
:type '(choice
|
||||
(const :tag "Refile" refile)
|
||||
(const :tag "Outline" outline)
|
||||
(const :tag "Outline-path-completion" outline-path-completion)))
|
||||
|
||||
(defcustom org-remember-default-headline ""
|
||||
"The headline that should be the default location in the notes file.
|
||||
When filing remember notes, the cursor will start at that position.
|
||||
You can set this on a per-template basis with the variable
|
||||
`org-remember-templates'."
|
||||
:group 'org-remember
|
||||
:type 'string)
|
||||
|
||||
(defcustom org-remember-templates nil
|
||||
"Templates for the creation of remember buffers.
|
||||
When nil, just let remember make the buffer.
|
||||
When not nil, this is a list of 5-element lists. In each entry, the first
|
||||
element is the name of the template, which should be a single short word.
|
||||
The second element is a character, a unique key to select this template.
|
||||
The third element is the template.
|
||||
|
||||
The fourth element is optional and can specify a destination file for
|
||||
remember items created with this template. The default file is given
|
||||
by `org-default-notes-file'. If the file name is not an absolute path,
|
||||
it will be interpreted relative to `org-directory'.
|
||||
|
||||
An optional fifth element can specify the headline in that file that should
|
||||
be offered first when the user is asked to file the entry. The default
|
||||
headline is given in the variable `org-remember-default-headline'.
|
||||
|
||||
An optional sixth element specifies the contexts in which the user can
|
||||
select the template. This element can be either a list of major modes
|
||||
or a function. `org-remember' will first check whether the function
|
||||
returns `t' or if we are in any of the listed major modes, and select
|
||||
the template accordingly.
|
||||
|
||||
The template specifies the structure of the remember buffer. It should have
|
||||
a first line starting with a star, to act as the org-mode headline.
|
||||
Furthermore, the following %-escapes will be replaced with content:
|
||||
|
||||
%^{prompt} Prompt the user for a string and replace this sequence with it.
|
||||
A default value and a completion table ca be specified like this:
|
||||
%^{prompt|default|completion2|completion3|...}
|
||||
%t time stamp, date only
|
||||
%T time stamp with date and time
|
||||
%u, %U like the above, but inactive time stamps
|
||||
%^t like %t, but prompt for date. Similarly %^T, %^u, %^U
|
||||
You may define a prompt like %^{Please specify birthday}t
|
||||
%n user name (taken from `user-full-name')
|
||||
%a annotation, normally the link created with org-store-link
|
||||
%i initial content, the region active. If %i is indented,
|
||||
the entire inserted text will be indented as well.
|
||||
%c content of the clipboard, or current kill ring head
|
||||
%^g prompt for tags, with completion on tags in target file
|
||||
%^G prompt for tags, with completion all tags in all agenda files
|
||||
%:keyword specific information for certain link types, see below
|
||||
%[pathname] insert the contents of the file given by `pathname'
|
||||
%(sexp) evaluate elisp `(sexp)' and replace with the result
|
||||
%! Store this note immediately after filling the template
|
||||
|
||||
%? After completing the template, position cursor here.
|
||||
|
||||
Apart from these general escapes, you can access information specific to the
|
||||
link type that is created. For example, calling `remember' in emails or gnus
|
||||
will record the author and the subject of the message, which you can access
|
||||
with %:author and %:subject, respectively. Here is a complete list of what
|
||||
is recorded for each link type.
|
||||
|
||||
Link type | Available information
|
||||
-------------------+------------------------------------------------------
|
||||
bbdb | %:type %:name %:company
|
||||
vm, wl, mh, rmail | %:type %:subject %:message-id
|
||||
| %:from %:fromname %:fromaddress
|
||||
| %:to %:toname %:toaddress
|
||||
| %:fromto (either \"to NAME\" or \"from NAME\")
|
||||
gnus | %:group, for messages also all email fields
|
||||
w3, w3m | %:type %:url
|
||||
info | %:type %:file %:node
|
||||
calendar | %:type %:date"
|
||||
:group 'org-remember
|
||||
:get (lambda (var) ; Make sure all entries have at least 5 elements
|
||||
(mapcar (lambda (x)
|
||||
(if (not (stringp (car x))) (setq x (cons "" x)))
|
||||
(cond ((= (length x) 4) (append x '("")))
|
||||
((= (length x) 3) (append x '("" "")))
|
||||
(t x)))
|
||||
(default-value var)))
|
||||
:type '(repeat
|
||||
:tag "enabled"
|
||||
(list :value ("" ?a "\n" nil nil nil)
|
||||
(string :tag "Name")
|
||||
(character :tag "Selection Key")
|
||||
(string :tag "Template")
|
||||
(choice
|
||||
(file :tag "Destination file")
|
||||
(const :tag "Prompt for file" nil))
|
||||
(choice
|
||||
(string :tag "Destination headline")
|
||||
(const :tag "Selection interface for heading"))
|
||||
(choice
|
||||
(const :tag "Use by default" nil)
|
||||
(const :tag "Use in all contexts" t)
|
||||
(repeat :tag "Use only if in major mode"
|
||||
(symbol :tag "Major mode"))
|
||||
(function :tag "Perform a check against function")))))
|
||||
|
||||
(defvar annotation) ; from remember.el, dynamically scoped in `remember-mode'
|
||||
(defvar initial) ; from remember.el, dynamically scoped in `remember-mode'
|
||||
|
||||
;;;###autoload
|
||||
(defun org-remember-insinuate ()
|
||||
"Setup remember.el for use wiht Org-mode."
|
||||
(require 'remember)
|
||||
(setq remember-annotation-functions '(org-remember-annotation))
|
||||
(setq remember-handler-functions '(org-remember-handler))
|
||||
(add-hook 'remember-mode-hook 'org-remember-apply-template))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-remember-annotation ()
|
||||
"Return a link to the current location as an annotation for remember.el.
|
||||
If you are using Org-mode files as target for data storage with
|
||||
remember.el, then the annotations should include a link compatible with the
|
||||
conventions in Org-mode. This function returns such a link."
|
||||
(org-store-link nil))
|
||||
|
||||
(defconst org-remember-help
|
||||
"Select a destination location for the note.
|
||||
UP/DOWN=headline TAB=cycle visibility [Q]uit RET/<left>/<right>=Store
|
||||
RET on headline -> Store as sublevel entry to current headline
|
||||
RET at beg-of-buf -> Append to file as level 2 headline
|
||||
<left>/<right> -> before/after current headline, same headings level")
|
||||
|
||||
(defvar org-remember-previous-location nil)
|
||||
(defvar org-force-remember-template-char) ;; dynamically scoped
|
||||
|
||||
;; Save the major mode of the buffer we called remember from
|
||||
(defvar org-select-template-temp-major-mode nil)
|
||||
|
||||
;; Temporary store the buffer where remember was called from
|
||||
(defvar org-select-template-original-buffer nil)
|
||||
|
||||
(defun org-select-remember-template (&optional use-char)
|
||||
(when org-remember-templates
|
||||
(let* ((pre-selected-templates
|
||||
(mapcar
|
||||
(lambda (tpl)
|
||||
(let ((ctxt (nth 5 tpl))
|
||||
(mode org-select-template-temp-major-mode)
|
||||
(buf org-select-template-original-buffer))
|
||||
(and (or (not ctxt) (eq ctxt t)
|
||||
(and (listp ctxt) (memq mode ctxt))
|
||||
(and (functionp ctxt)
|
||||
(with-current-buffer buf
|
||||
;; Protect the user-defined function from error
|
||||
(condition-case nil (funcall ctxt) (error nil)))))
|
||||
tpl)))
|
||||
org-remember-templates))
|
||||
;; If no template at this point, add the default templates:
|
||||
(pre-selected-templates1
|
||||
(if (not (delq nil pre-selected-templates))
|
||||
(mapcar (lambda(x) (if (not (nth 5 x)) x))
|
||||
org-remember-templates)
|
||||
pre-selected-templates))
|
||||
;; Then unconditionnally add template for any contexts
|
||||
(pre-selected-templates2
|
||||
(append (mapcar (lambda(x) (if (eq (nth 5 x) t) x))
|
||||
org-remember-templates)
|
||||
(delq nil pre-selected-templates1)))
|
||||
(templates (mapcar (lambda (x)
|
||||
(if (stringp (car x))
|
||||
(append (list (nth 1 x) (car x)) (cddr x))
|
||||
(append (list (car x) "") (cdr x))))
|
||||
(delq nil pre-selected-templates2)))
|
||||
(char (or use-char
|
||||
(cond
|
||||
((= (length templates) 1)
|
||||
(caar templates))
|
||||
((and (boundp 'org-force-remember-template-char)
|
||||
org-force-remember-template-char)
|
||||
(if (stringp org-force-remember-template-char)
|
||||
(string-to-char org-force-remember-template-char)
|
||||
org-force-remember-template-char))
|
||||
(t
|
||||
(message "Select template: %s"
|
||||
(mapconcat
|
||||
(lambda (x)
|
||||
(cond
|
||||
((not (string-match "\\S-" (nth 1 x)))
|
||||
(format "[%c]" (car x)))
|
||||
((equal (downcase (car x))
|
||||
(downcase (aref (nth 1 x) 0)))
|
||||
(format "[%c]%s" (car x)
|
||||
(substring (nth 1 x) 1)))
|
||||
(t (format "[%c]%s" (car x) (nth 1 x)))))
|
||||
templates " "))
|
||||
(let ((inhibit-quit t) (char0 (read-char-exclusive)))
|
||||
(when (equal char0 ?\C-g)
|
||||
(jump-to-register remember-register)
|
||||
(kill-buffer remember-buffer))
|
||||
char0))))))
|
||||
(cddr (assoc char templates)))))
|
||||
|
||||
(defvar x-last-selected-text)
|
||||
(defvar x-last-selected-text-primary)
|
||||
|
||||
;;;###autoload
|
||||
(defun org-remember-apply-template (&optional use-char skip-interactive)
|
||||
"Initialize *remember* buffer with template, invoke `org-mode'.
|
||||
This function should be placed into `remember-mode-hook' and in fact requires
|
||||
to be run from that hook to function properly."
|
||||
(if org-remember-templates
|
||||
(let* ((entry (org-select-remember-template use-char))
|
||||
(tpl (car entry))
|
||||
(plist-p (if org-store-link-plist t nil))
|
||||
(file (if (and (nth 1 entry) (stringp (nth 1 entry))
|
||||
(string-match "\\S-" (nth 1 entry)))
|
||||
(nth 1 entry)
|
||||
org-default-notes-file))
|
||||
(headline (nth 2 entry))
|
||||
(v-c (or (and (eq window-system 'x)
|
||||
(fboundp 'x-cut-buffer-or-selection-value)
|
||||
(x-cut-buffer-or-selection-value))
|
||||
(org-bound-and-true-p x-last-selected-text)
|
||||
(org-bound-and-true-p x-last-selected-text-primary)
|
||||
(and (> (length kill-ring) 0) (current-kill 0))))
|
||||
(v-t (format-time-string (car org-time-stamp-formats) (org-current-time)))
|
||||
(v-T (format-time-string (cdr org-time-stamp-formats) (org-current-time)))
|
||||
(v-u (concat "[" (substring v-t 1 -1) "]"))
|
||||
(v-U (concat "[" (substring v-T 1 -1) "]"))
|
||||
;; `initial' and `annotation' are bound in `remember'
|
||||
(v-i (if (boundp 'initial) initial))
|
||||
(v-a (if (and (boundp 'annotation) annotation)
|
||||
(if (equal annotation "[[]]") "" annotation)
|
||||
""))
|
||||
(v-A (if (and v-a
|
||||
(string-match "\\[\\(\\[.*?\\]\\)\\(\\[.*?\\]\\)?\\]" v-a))
|
||||
(replace-match "[\\1[%^{Link description}]]" nil nil v-a)
|
||||
v-a))
|
||||
(v-n user-full-name)
|
||||
(org-startup-folded nil)
|
||||
org-time-was-given org-end-time-was-given x
|
||||
prompt completions char time pos default histvar)
|
||||
(when (and file (not (file-name-absolute-p file)))
|
||||
(setq file (expand-file-name file org-directory)))
|
||||
(setq org-store-link-plist
|
||||
(append (list :annotation v-a :initial v-i)
|
||||
org-store-link-plist))
|
||||
(unless tpl (setq tpl "") (message "No template") (ding) (sit-for 1))
|
||||
(erase-buffer)
|
||||
(insert (substitute-command-keys
|
||||
(format
|
||||
"## Filing location: Select interactively, default, or last used:
|
||||
## %s to select file and header location interactively.
|
||||
## %s \"%s\" -> \"* %s\"
|
||||
## C-u C-u C-c C-c \"%s\" -> \"* %s\"
|
||||
## To switch templates, use `\\[org-remember]'. To abort use `C-c C-k'.\n\n"
|
||||
(if org-remember-store-without-prompt " C-u C-c C-c" " C-c C-c")
|
||||
(if org-remember-store-without-prompt " C-c C-c" " C-u C-c C-c")
|
||||
(abbreviate-file-name (or file org-default-notes-file))
|
||||
(or headline "")
|
||||
(or (car org-remember-previous-location) "???")
|
||||
(or (cdr org-remember-previous-location) "???"))))
|
||||
(insert tpl) (goto-char (point-min))
|
||||
;; Simple %-escapes
|
||||
(while (re-search-forward "%\\([tTuUaiAc]\\)" nil t)
|
||||
(when (and initial (equal (match-string 0) "%i"))
|
||||
(save-match-data
|
||||
(let* ((lead (buffer-substring
|
||||
(point-at-bol) (match-beginning 0))))
|
||||
(setq v-i (mapconcat 'identity
|
||||
(org-split-string initial "\n")
|
||||
(concat "\n" lead))))))
|
||||
(replace-match
|
||||
(or (eval (intern (concat "v-" (match-string 1)))) "")
|
||||
t t))
|
||||
|
||||
;; %[] Insert contents of a file.
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "%\\[\\(.+\\)\\]" nil t)
|
||||
(let ((start (match-beginning 0))
|
||||
(end (match-end 0))
|
||||
(filename (expand-file-name (match-string 1))))
|
||||
(goto-char start)
|
||||
(delete-region start end)
|
||||
(condition-case error
|
||||
(insert-file-contents filename)
|
||||
(error (insert (format "%%![Couldn't insert %s: %s]"
|
||||
filename error))))))
|
||||
;; %() embedded elisp
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "%\\((.+)\\)" nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(let ((template-start (point)))
|
||||
(forward-char 1)
|
||||
(let ((result
|
||||
(condition-case error
|
||||
(eval (read (current-buffer)))
|
||||
(error (format "%%![Error: %s]" error)))))
|
||||
(delete-region template-start (point))
|
||||
(insert result))))
|
||||
|
||||
;; From the property list
|
||||
(when plist-p
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "%\\(:[-a-zA-Z]+\\)" nil t)
|
||||
(and (setq x (or (plist-get org-store-link-plist
|
||||
(intern (match-string 1))) ""))
|
||||
(replace-match x t t))))
|
||||
|
||||
;; Turn on org-mode in the remember buffer, set local variables
|
||||
(org-mode)
|
||||
(org-set-local 'org-finish-function 'org-remember-finalize)
|
||||
(if (and file (string-match "\\S-" file) (not (file-directory-p file)))
|
||||
(org-set-local 'org-default-notes-file file))
|
||||
(if (and headline (stringp headline) (string-match "\\S-" headline))
|
||||
(org-set-local 'org-remember-default-headline headline))
|
||||
;; Interactive template entries
|
||||
(goto-char (point-min))
|
||||
(while (re-search-forward "%^\\({\\([^}]*\\)}\\)?\\([gGuUtT]\\)?" nil t)
|
||||
(setq char (if (match-end 3) (match-string 3))
|
||||
prompt (if (match-end 2) (match-string 2)))
|
||||
(goto-char (match-beginning 0))
|
||||
(replace-match "")
|
||||
(setq completions nil default nil)
|
||||
(when prompt
|
||||
(setq completions (org-split-string prompt "|")
|
||||
prompt (pop completions)
|
||||
default (car completions)
|
||||
histvar (intern (concat
|
||||
"org-remember-template-prompt-history::"
|
||||
(or prompt "")))
|
||||
completions (mapcar 'list completions)))
|
||||
(cond
|
||||
((member char '("G" "g"))
|
||||
(let* ((org-last-tags-completion-table
|
||||
(org-global-tags-completion-table
|
||||
(if (equal char "G") (org-agenda-files) (and file (list file)))))
|
||||
(org-add-colon-after-tag-completion t)
|
||||
(ins (completing-read
|
||||
(if prompt (concat prompt ": ") "Tags: ")
|
||||
'org-tags-completion-function nil nil nil
|
||||
'org-tags-history)))
|
||||
(setq ins (mapconcat 'identity
|
||||
(org-split-string ins (org-re "[^[:alnum:]_@]+"))
|
||||
":"))
|
||||
(when (string-match "\\S-" ins)
|
||||
(or (equal (char-before) ?:) (insert ":"))
|
||||
(insert ins)
|
||||
(or (equal (char-after) ?:) (insert ":")))))
|
||||
(char
|
||||
(setq org-time-was-given (equal (upcase char) char))
|
||||
(setq time (org-read-date (equal (upcase char) "U") t nil
|
||||
prompt))
|
||||
(org-insert-time-stamp time org-time-was-given
|
||||
(member char '("u" "U"))
|
||||
nil nil (list org-end-time-was-given)))
|
||||
(t
|
||||
(insert (org-completing-read
|
||||
(concat (if prompt prompt "Enter string")
|
||||
(if default (concat " [" default "]"))
|
||||
": ")
|
||||
completions nil nil nil histvar default)))))
|
||||
(goto-char (point-min))
|
||||
(if (re-search-forward "%\\?" nil t)
|
||||
(replace-match "")
|
||||
(and (re-search-forward "^[^#\n]" nil t) (backward-char 1))))
|
||||
(org-mode)
|
||||
(org-set-local 'org-finish-function 'org-remember-finalize))
|
||||
(when (save-excursion
|
||||
(goto-char (point-min))
|
||||
(re-search-forward "%!" nil t))
|
||||
(replace-match "")
|
||||
(add-hook 'post-command-hook 'org-remember-finish-immediately 'append)))
|
||||
|
||||
(defun org-remember-finish-immediately ()
|
||||
"File remember note immediately.
|
||||
This should be run in `post-command-hook' and will remove itself
|
||||
from that hook."
|
||||
(remove-hook 'post-command-hook 'org-remember-finish-immediately)
|
||||
(when org-finish-function
|
||||
(funcall org-finish-function)))
|
||||
|
||||
(defvar org-clock-marker) ; Defined below
|
||||
(defun org-remember-finalize ()
|
||||
"Finalize the remember process."
|
||||
(unless (fboundp 'remember-finalize)
|
||||
(defalias 'remember-finalize 'remember-buffer))
|
||||
(when (and org-clock-marker
|
||||
(equal (marker-buffer org-clock-marker) (current-buffer)))
|
||||
;; FIXME: test this, this is w/o notetaking!
|
||||
(let (org-log-note-clock-out) (org-clock-out)))
|
||||
(when buffer-file-name
|
||||
(save-buffer)
|
||||
(setq buffer-file-name nil))
|
||||
(remember-finalize))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-remember (&optional goto org-force-remember-template-char)
|
||||
"Call `remember'. If this is already a remember buffer, re-apply template.
|
||||
If there is an active region, make sure remember uses it as initial content
|
||||
of the remember buffer.
|
||||
|
||||
When called interactively with a `C-u' prefix argument GOTO, don't remember
|
||||
anything, just go to the file/headline where the selected template usually
|
||||
stores its notes. With a double prefix arg `C-u C-u', go to the last
|
||||
note stored by remember.
|
||||
|
||||
Lisp programs can set ORG-FORCE-REMEMBER-TEMPLATE-CHAR to a character
|
||||
associated with a template in `org-remember-templates'."
|
||||
(interactive "P")
|
||||
(cond
|
||||
((equal goto '(4)) (org-go-to-remember-target))
|
||||
((equal goto '(16)) (org-remember-goto-last-stored))
|
||||
(t
|
||||
;; set temporary variables that will be needed in
|
||||
;; `org-select-remember-template'
|
||||
(setq org-select-template-temp-major-mode major-mode)
|
||||
(setq org-select-template-original-buffer (current-buffer))
|
||||
(if (eq org-finish-function 'org-remember-finalize)
|
||||
(progn
|
||||
(when (< (length org-remember-templates) 2)
|
||||
(error "No other template available"))
|
||||
(erase-buffer)
|
||||
(let ((annotation (plist-get org-store-link-plist :annotation))
|
||||
(initial (plist-get org-store-link-plist :initial)))
|
||||
(org-remember-apply-template))
|
||||
(message "Press C-c C-c to remember data"))
|
||||
(if (org-region-active-p)
|
||||
(org-do-remember (buffer-substring (point) (mark)))
|
||||
(org-do-remember))))))
|
||||
|
||||
(defun org-remember-goto-last-stored ()
|
||||
"Go to the location where the last remember note was stored."
|
||||
(interactive)
|
||||
(bookmark-jump "org-remember-last-stored")
|
||||
(message "This is the last note stored by remember"))
|
||||
|
||||
(defun org-go-to-remember-target (&optional template-key)
|
||||
"Go to the target location of a remember template.
|
||||
The user is queried for the template."
|
||||
(interactive)
|
||||
(let* (org-select-template-temp-major-mode
|
||||
(entry (org-select-remember-template template-key))
|
||||
(file (nth 1 entry))
|
||||
(heading (nth 2 entry))
|
||||
visiting)
|
||||
(unless (and file (stringp file) (string-match "\\S-" file))
|
||||
(setq file org-default-notes-file))
|
||||
(when (and file (not (file-name-absolute-p file)))
|
||||
(setq file (expand-file-name file org-directory)))
|
||||
(unless (and heading (stringp heading) (string-match "\\S-" heading))
|
||||
(setq heading org-remember-default-headline))
|
||||
(setq visiting (org-find-base-buffer-visiting file))
|
||||
(if (not visiting) (find-file-noselect file))
|
||||
(switch-to-buffer (or visiting (get-file-buffer file)))
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
(if (re-search-forward
|
||||
(concat "^\\*+[ \t]+" (regexp-quote heading)
|
||||
(org-re "\\([ \t]+:[[:alnum:]@_:]*\\)?[ \t]*$"))
|
||||
nil t)
|
||||
(goto-char (match-beginning 0))
|
||||
(error "Target headline not found: %s" heading))))
|
||||
|
||||
;;;###autoload
|
||||
(defun org-remember-handler ()
|
||||
"Store stuff from remember.el into an org file.
|
||||
First prompts for an org file. If the user just presses return, the value
|
||||
of `org-default-notes-file' is used.
|
||||
Then the command offers the headings tree of the selected file in order to
|
||||
file the text at a specific location.
|
||||
You can either immediately press RET to get the note appended to the
|
||||
file, or you can use vertical cursor motion and visibility cycling (TAB) to
|
||||
find a better place. Then press RET or <left> or <right> in insert the note.
|
||||
|
||||
Key Cursor position Note gets inserted
|
||||
-----------------------------------------------------------------------------
|
||||
RET buffer-start as level 1 heading at end of file
|
||||
RET on headline as sublevel of the heading at cursor
|
||||
RET no heading at cursor position, level taken from context.
|
||||
Or use prefix arg to specify level manually.
|
||||
<left> on headline as same level, before current heading
|
||||
<right> on headline as same level, after current heading
|
||||
|
||||
So the fastest way to store the note is to press RET RET to append it to
|
||||
the default file. This way your current train of thought is not
|
||||
interrupted, in accordance with the principles of remember.el.
|
||||
You can also get the fast execution without prompting by using
|
||||
C-u C-c C-c to exit the remember buffer. See also the variable
|
||||
`org-remember-store-without-prompt'.
|
||||
|
||||
Before being stored away, the function ensures that the text has a
|
||||
headline, i.e. a first line that starts with a \"*\". If not, a headline
|
||||
is constructed from the current date and some additional data.
|
||||
|
||||
If the variable `org-adapt-indentation' is non-nil, the entire text is
|
||||
also indented so that it starts in the same column as the headline
|
||||
\(i.e. after the stars).
|
||||
|
||||
See also the variable `org-reverse-note-order'."
|
||||
(goto-char (point-min))
|
||||
(while (looking-at "^[ \t]*\n\\|^##.*\n")
|
||||
(replace-match ""))
|
||||
(goto-char (point-max))
|
||||
(beginning-of-line 1)
|
||||
(while (looking-at "[ \t]*$\\|##.*")
|
||||
(delete-region (1- (point)) (point-max))
|
||||
(beginning-of-line 1))
|
||||
(catch 'quit
|
||||
(if org-note-abort (throw 'quit nil))
|
||||
(let* ((txt (buffer-substring (point-min) (point-max)))
|
||||
(fastp (org-xor (equal current-prefix-arg '(4))
|
||||
org-remember-store-without-prompt))
|
||||
(file (cond
|
||||
(fastp org-default-notes-file)
|
||||
((and (eq org-remember-interactive-interface 'refile)
|
||||
org-refile-targets)
|
||||
org-default-notes-file)
|
||||
((not (and (equal current-prefix-arg '(16))
|
||||
org-remember-previous-location))
|
||||
(org-get-org-file))))
|
||||
(heading org-remember-default-headline)
|
||||
(visiting (and file (org-find-base-buffer-visiting file)))
|
||||
(org-startup-folded nil)
|
||||
(org-startup-align-all-tables nil)
|
||||
(org-goto-start-pos 1)
|
||||
spos exitcmd level indent reversed)
|
||||
(if (and (equal current-prefix-arg '(16)) org-remember-previous-location)
|
||||
(setq file (car org-remember-previous-location)
|
||||
heading (cdr org-remember-previous-location)
|
||||
fastp t))
|
||||
(setq current-prefix-arg nil)
|
||||
(if (string-match "[ \t\n]+\\'" txt)
|
||||
(setq txt (replace-match "" t t txt)))
|
||||
;; Modify text so that it becomes a nice subtree which can be inserted
|
||||
;; into an org tree.
|
||||
(let* ((lines (split-string txt "\n"))
|
||||
first)
|
||||
(setq first (car lines) lines (cdr lines))
|
||||
(if (string-match "^\\*+ " first)
|
||||
;; Is already a headline
|
||||
(setq indent nil)
|
||||
;; We need to add a headline: Use time and first buffer line
|
||||
(setq lines (cons first lines)
|
||||
first (concat "* " (current-time-string)
|
||||
" (" (remember-buffer-desc) ")")
|
||||
indent " "))
|
||||
(if (and org-adapt-indentation indent)
|
||||
(setq lines (mapcar
|
||||
(lambda (x)
|
||||
(if (string-match "\\S-" x)
|
||||
(concat indent x) x))
|
||||
lines)))
|
||||
(setq txt (concat first "\n"
|
||||
(mapconcat 'identity lines "\n"))))
|
||||
(if (string-match "\n[ \t]*\n[ \t\n]*\\'" txt)
|
||||
(setq txt (replace-match "\n\n" t t txt))
|
||||
(if (string-match "[ \t\n]*\\'" txt)
|
||||
(setq txt (replace-match "\n" t t txt))))
|
||||
;; Put the modified text back into the remember buffer, for refile.
|
||||
(erase-buffer)
|
||||
(insert txt)
|
||||
(goto-char (point-min))
|
||||
(when (and (eq org-remember-interactive-interface 'refile)
|
||||
(not fastp))
|
||||
(org-refile nil (or visiting (find-file-noselect file)))
|
||||
(throw 'quit t))
|
||||
;; Find the file
|
||||
(if (not visiting) (find-file-noselect file))
|
||||
(with-current-buffer (or visiting (get-file-buffer file))
|
||||
(unless (org-mode-p)
|
||||
(error "Target files for remember notes must be in Org-mode"))
|
||||
(save-excursion
|
||||
(save-restriction
|
||||
(widen)
|
||||
(and (goto-char (point-min))
|
||||
(not (re-search-forward "^\\* " nil t))
|
||||
(insert "\n* " (or heading "Notes") "\n"))
|
||||
(setq reversed (org-notes-order-reversed-p))
|
||||
|
||||
;; Find the default location
|
||||
(when (and heading (stringp heading) (string-match "\\S-" heading))
|
||||
(goto-char (point-min))
|
||||
(if (re-search-forward
|
||||
(concat "^\\*+[ \t]+" (regexp-quote heading)
|
||||
(org-re "\\([ \t]+:[[:alnum:]@_:]*\\)?[ \t]*$"))
|
||||
nil t)
|
||||
(setq org-goto-start-pos (match-beginning 0))
|
||||
(when fastp
|
||||
(goto-char (point-max))
|
||||
(unless (bolp) (newline))
|
||||
(insert "* " heading "\n")
|
||||
(setq org-goto-start-pos (point-at-bol 0)))))
|
||||
|
||||
;; Ask the User for a location, using the appropriate interface
|
||||
(cond
|
||||
(fastp (setq spos org-goto-start-pos
|
||||
exitcmd 'return))
|
||||
((eq org-remember-interactive-interface 'outline)
|
||||
(setq spos (org-get-location (current-buffer)
|
||||
org-remember-help)
|
||||
exitcmd (cdr spos)
|
||||
spos (car spos)))
|
||||
((eq org-remember-interactive-interface 'outline-path-completion)
|
||||
(let ((org-refile-targets '((nil . (:maxlevel . 10))))
|
||||
(org-refile-use-outline-path t))
|
||||
(setq spos (org-refile-get-location "Heading: ")
|
||||
exitcmd 'return
|
||||
spos (nth 3 spos))))
|
||||
(t (error "this should not hapen")))
|
||||
(if (not spos) (throw 'quit nil)) ; return nil to show we did
|
||||
; not handle this note
|
||||
(goto-char spos)
|
||||
(cond ((org-on-heading-p t)
|
||||
(org-back-to-heading t)
|
||||
(setq level (funcall outline-level))
|
||||
(cond
|
||||
((eq exitcmd 'return)
|
||||
;; sublevel of current
|
||||
(setq org-remember-previous-location
|
||||
(cons (abbreviate-file-name file)
|
||||
(org-get-heading 'notags)))
|
||||
(if reversed
|
||||
(outline-next-heading)
|
||||
(org-end-of-subtree t)
|
||||
(if (not (bolp))
|
||||
(if (looking-at "[ \t]*\n")
|
||||
(beginning-of-line 2)
|
||||
(end-of-line 1)
|
||||
(insert "\n"))))
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree (org-get-valid-level level 1) txt))
|
||||
((eq exitcmd 'left)
|
||||
;; before current
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree level txt))
|
||||
((eq exitcmd 'right)
|
||||
;; after current
|
||||
(org-end-of-subtree t)
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree level txt))
|
||||
(t (error "This should not happen"))))
|
||||
|
||||
((and (bobp) (not reversed))
|
||||
;; Put it at the end, one level below level 1
|
||||
(save-restriction
|
||||
(widen)
|
||||
(goto-char (point-max))
|
||||
(if (not (bolp)) (newline))
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree (org-get-valid-level 1 1) txt)))
|
||||
|
||||
((and (bobp) reversed)
|
||||
;; Put it at the start, as level 1
|
||||
(save-restriction
|
||||
(widen)
|
||||
(goto-char (point-min))
|
||||
(re-search-forward "^\\*+ " nil t)
|
||||
(beginning-of-line 1)
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree 1 txt)))
|
||||
(t
|
||||
;; Put it right there, with automatic level determined by
|
||||
;; org-paste-subtree or from prefix arg
|
||||
(bookmark-set "org-remember-last-stored")
|
||||
(org-paste-subtree
|
||||
(if (numberp current-prefix-arg) current-prefix-arg)
|
||||
txt)))
|
||||
(when remember-save-after-remembering
|
||||
(save-buffer)
|
||||
(if (not visiting) (kill-buffer (current-buffer)))))))))
|
||||
|
||||
t) ;; return t to indicate that we took care of this note.
|
||||
|
||||
|
||||
(defun org-do-remember (&optional initial)
|
||||
"Call remember."
|
||||
(remember initial))
|
||||
|
||||
(provide 'org-remember)
|
||||
|
||||
;;; org-remember.el ends here
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
File diff suppressed because it is too large
Load Diff
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 1.0
|
||||
;; Version: 6.00pre-1
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -53,6 +53,7 @@
|
|||
(folder number field &optional type) t)
|
||||
(declare-function elmo-msgdb-overview-get-entity "ext:elmo" (&rest unknown) t)
|
||||
;; Backward compatibility to old version of wl
|
||||
(declare-function wl "ext:wl" () t)
|
||||
(declare-function wl-summary-buffer-msgdb "ext:wl-folder" (&rest unknown) t)
|
||||
(declare-function wl-folder-get-elmo-folder "ext:wl-folder"
|
||||
(entity &optional no-cache))
|
||||
|
@ -66,6 +67,10 @@
|
|||
(declare-function wl-summary-message-number "ext:wl-summary" ())
|
||||
(declare-function wl-summary-redisplay "ext:wl-summary" (&optional arg))
|
||||
(declare-function wl-summary-registered-temp-mark "ext:wl-action" (number))
|
||||
(declare-function wl-folder-goto-folder-subr "ext:wl-folder"
|
||||
(&optional folder sticky))
|
||||
(declare-function wl-thread-open-all "ext:wl-thread" ())
|
||||
(defvar wl-init)
|
||||
(defvar wl-summary-buffer-elmo-folder)
|
||||
(defvar wl-summary-buffer-folder-name)
|
||||
|
||||
|
@ -113,6 +118,8 @@
|
|||
|
||||
(defun org-wl-open (path)
|
||||
"Follow the WL message link specified by PATH."
|
||||
(require 'wl)
|
||||
(unless wl-init (wl))
|
||||
;; XXX: The imap-uw's MH folder names start with "%#".
|
||||
(if (not (string-match "\\`\\(\\(?:%#\\)?[^#]+\\)\\(#\\(.*\\)\\)?" path))
|
||||
(error "Error in Wanderlust link"))
|
14065
org.el → lisp/org.el
14065
org.el → lisp/org.el
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue