From cc04a16f0c94cc9b0d18d79ead290f12c3cc4f42 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 21 Sep 2012 11:55:23 +0800 Subject: [PATCH 001/128] Backport fix for Bug#12463 from trunk. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * image.c (define_image_type): Avoid adding duplicate types to image_types. Suggested by Jörg Walter. --- src/ChangeLog | 5 +++++ src/image.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index afaa7fd776e..15b47934424 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-21 Chong Yidong + + * image.c (define_image_type): Avoid adding duplicate types to + image_types (Bug#12463). Suggested by Jörg Walter. + 2012-09-20 YAMAMOTO Mitsuharu * unexmacosx.c: Define LC_DATA_IN_CODE if not defined. diff --git a/src/image.c b/src/image.c index 73490fe2865..fd99bdfc950 100644 --- a/src/image.c +++ b/src/image.c @@ -597,9 +597,15 @@ define_image_type (struct image_type *type, int loaded) success = Qnil; else { + struct image_type *p; + Lisp_Object target_type = *(type->type); + for (p = image_types; p; p = p->next) + if (EQ (*(p->type), target_type)) + return Qt; + /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. The initialized data segment is read-only. */ - struct image_type *p = (struct image_type *) xmalloc (sizeof *p); + p = (struct image_type *) xmalloc (sizeof *p); memcpy (p, type, sizeof *p); p->next = image_types; image_types = p; From d393cefbbf8f60bf62b94fa775daa8b69e108f49 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 24 Sep 2012 00:12:35 -0700 Subject: [PATCH 002/128] Doc fixes * src/eval.c (Frun_hook_with_args, Frun_hook_with_args_until_success) (Frun_hook_with_args_until_failure): Doc fixes. --- src/ChangeLog | 5 +++++ src/eval.c | 45 +++++++++++++++++++-------------------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 15b47934424..96546df6638 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-24 Glenn Morris + + * eval.c (Frun_hook_with_args, Frun_hook_with_args_until_success) + (Frun_hook_with_args_until_failure): Doc fixes. + 2012-09-21 Chong Yidong * image.c (define_image_type): Avoid adding duplicate types to diff --git a/src/eval.c b/src/eval.c index 332c3326fce..f6056e33c28 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2551,14 +2551,10 @@ usage: (run-hooks &rest HOOKS) */) DEFUN ("run-hook-with-args", Frun_hook_with_args, Srun_hook_with_args, 1, MANY, 0, doc: /* Run HOOK with the specified arguments ARGS. -HOOK should be a symbol, a hook variable. If HOOK has a non-nil -value, that value may be a function or a list of functions to be -called to run the hook. If the value is a function, it is called with -the given arguments and its return value is returned. If it is a list -of functions, those functions are called, in order, -with the given arguments ARGS. -It is best not to depend on the value returned by `run-hook-with-args', -as that may change. +HOOK should be a symbol, a hook variable. The value of HOOK +may be nil, a function, or a list of functions. Call each +function in order with arguments ARGS. The final return value +is unspecified. Do not use `make-local-variable' to make a hook variable buffer-local. Instead, use `add-hook' and specify t for the LOCAL argument. @@ -2568,18 +2564,18 @@ usage: (run-hook-with-args HOOK &rest ARGS) */) return run_hook_with_args (nargs, args, funcall_nil); } +/* NB this one still documents a specific non-nil return value. + (As did run-hook-with-args and run-hook-with-args-until-failure + until they were changed in 24.1.) */ DEFUN ("run-hook-with-args-until-success", Frun_hook_with_args_until_success, Srun_hook_with_args_until_success, 1, MANY, 0, doc: /* Run HOOK with the specified arguments ARGS. -HOOK should be a symbol, a hook variable. If HOOK has a non-nil -value, that value may be a function or a list of functions to be -called to run the hook. If the value is a function, it is called with -the given arguments and its return value is returned. -If it is a list of functions, those functions are called, in order, -with the given arguments ARGS, until one of them -returns a non-nil value. Then we return that value. -However, if they all return nil, we return nil. -If the value of HOOK is nil, this function returns nil. +HOOK should be a symbol, a hook variable. The value of HOOK +may be nil, a function, or a list of functions. Call each +function in order with arguments ARGS, stopping at the first +one that returns non-nil, and return that value. Otherwise (if +all functions return nil, or if there are no functions to call), +return nil. Do not use `make-local-variable' to make a hook variable buffer-local. Instead, use `add-hook' and specify t for the LOCAL argument. @@ -2598,15 +2594,12 @@ funcall_not (ptrdiff_t nargs, Lisp_Object *args) DEFUN ("run-hook-with-args-until-failure", Frun_hook_with_args_until_failure, Srun_hook_with_args_until_failure, 1, MANY, 0, doc: /* Run HOOK with the specified arguments ARGS. -HOOK should be a symbol, a hook variable. If HOOK has a non-nil -value, that value may be a function or a list of functions to be -called to run the hook. If the value is a function, it is called with -the given arguments. Then we return nil if the function returns nil, -and t if it returns non-nil. -If it is a list of functions, those functions are called, in order, -with the given arguments ARGS, until one of them returns nil. -Then we return nil. However, if they all return non-nil, we return t. -If the value of HOOK is nil, this function returns t. +HOOK should be a symbol, a hook variable. The value of HOOK +may be nil, a function, or a list of functions. Call each +function in order with arguments ARGS, stopping at the first +one that returns nil, and return nil. Otherwise (if all functions +return non-nil, or if there are no functions to call), return non-nil +\(do not rely on the precise return value in this case). Do not use `make-local-variable' to make a hook variable buffer-local. Instead, use `add-hook' and specify t for the LOCAL argument. From 03922966f3556f32db4786e1d7fdc3de1ef4d739 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Tue, 25 Sep 2012 22:40:20 +0800 Subject: [PATCH 003/128] Fix typo in files.texi --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/files.texi | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index e9764332bdb..3423432db54 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2012-09-25 Leo Liu + + * files.texi (Files): Fix typo. + 2012-09-12 Glenn Morris * debugging.texi (Using Debugger): Fix typo. diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index dd355061c14..96708d984e0 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -31,7 +31,7 @@ arguments, except where noted. @xref{Magic File Names}, for details. When file I/O functions signal Lisp errors, they usually use the condition @code{file-error} (@pxref{Handling Errors}). The error message is in most cases obtained from the operating system, according -to locale @code{system-message-locale}, and decoded using coding system +to locale @code{system-messages-locale}, and decoded using coding system @code{locale-coding-system} (@pxref{Locales}). @menu From 757140ff9aca7cce0096604c7e7b9cd5ffca914e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 00:40:42 -0700 Subject: [PATCH 004/128] * src/lread.c (lisp_file_lexically_bound_p): Handle #! lines. Fixes: debbugs:12528 --- src/ChangeLog | 4 ++++ src/lread.c | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b0899d67ca8..601c72a9fd3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-28 Glenn Morris + + * lread.c (lisp_file_lexically_bound_p): Handle #! lines. (Bug#12528) + 2012-09-27 Paul Eggert Check more robustly for timer_settime. diff --git a/src/lread.c b/src/lread.c index cb808b37677..0b7fd9067dc 100644 --- a/src/lread.c +++ b/src/lread.c @@ -764,13 +764,28 @@ DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0, /* Return true if the lisp code read using READCHARFUN defines a non-nil `lexical-binding' file variable. After returning, the stream is - positioned following the first line, if it is a comment, otherwise - nothing is read. */ + positioned following the first line, if it is a comment or #! line, + otherwise nothing is read. */ static int lisp_file_lexically_bound_p (Lisp_Object readcharfun) { int ch = READCHAR; + + if (ch == '#') + { + ch = READCHAR; + if (ch != '!') + { + UNREAD (ch); + UNREAD ('#'); + return 0; + } + while (ch != '\n' && ch != EOF) + ch = READCHAR; + if (ch == '\n') ch = READCHAR; + } + if (ch != ';') /* The first line isn't a comment, just give up. */ { From d2dd3694575406be063943bdf6e76ecbecebcc94 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 00:45:18 -0700 Subject: [PATCH 005/128] Comment --- src/lread.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lread.c b/src/lread.c index 0b7fd9067dc..d22011be7c8 100644 --- a/src/lread.c +++ b/src/lread.c @@ -784,6 +784,8 @@ lisp_file_lexically_bound_p (Lisp_Object readcharfun) while (ch != '\n' && ch != EOF) ch = READCHAR; if (ch == '\n') ch = READCHAR; + /* It is OK to leave the position after a #! line, since + that is what read1 does. */ } if (ch != ';') From 96fb71705b3d2aa1eaf2ecd0e447d23995b74b6e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 01:01:08 -0700 Subject: [PATCH 006/128] Don't autoload defcustoms in type-break.el * type-break.el (type-break-mode, type-break-interval) (type-break-good-rest-interval, type-break-keystroke-threshold): No need to autoload. (type-break-good-rest-interval, type-break-keystroke-threshold): Add :set-after. --- lisp/ChangeLog | 8 ++++++++ lisp/type-break.el | 7 ++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5fc758b8951..e13925e9b0f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-09-28 Glenn Morris + + * type-break.el (type-break-mode, type-break-interval) + (type-break-good-rest-interval, type-break-keystroke-threshold): + No need to autoload. + (type-break-good-rest-interval, type-break-keystroke-threshold): + Add :set-after. + 2012-09-28 Chong Yidong * progmodes/verilog-mode.el (verilog-auto-inst-interfaced-ports): diff --git a/lisp/type-break.el b/lisp/type-break.el index 8a95508d939..b3749853b77 100644 --- a/lisp/type-break.el +++ b/lisp/type-break.el @@ -69,7 +69,6 @@ :prefix "type-break" :group 'keyboard) -;;;###autoload (defcustom type-break-mode nil "Toggle typing break mode. See the docstring for the `type-break-mode' command for more information. @@ -82,13 +81,11 @@ use either \\[customize] or the function `type-break-mode'." :group 'type-break :require 'type-break) -;;;###autoload (defcustom type-break-interval (* 60 60) "Number of seconds between scheduled typing breaks." :type 'integer :group 'type-break) -;;;###autoload (defcustom type-break-good-rest-interval (/ type-break-interval 6) "Number of seconds of idle time considered to be an adequate typing rest. @@ -98,10 +95,10 @@ rest from typing, then the next typing break is simply rescheduled for later. If a break is interrupted before this much time elapses, the user will be asked whether or not really to interrupt the break." + :set-after '(type-break-interval) :type 'integer :group 'type-break) -;;;###autoload (defcustom type-break-good-break-interval nil "Number of seconds considered to be an adequate explicit typing rest. @@ -112,7 +109,6 @@ break interruptions when `type-break-good-rest-interval' is nil." :type 'integer :group 'type-break) -;;;###autoload (defcustom type-break-keystroke-threshold ;; Assuming typing speed is 35wpm (on the average, do you really ;; type more than that in a minute? I spend a lot of time reading mail @@ -147,6 +143,7 @@ keystroke even though they really require multiple keys to generate them. The command `type-break-guesstimate-keystroke-threshold' can be used to guess a reasonably good pair of values for this variable." + :set-after '(type-break-interval) :type 'sexp :group 'type-break) From 704d3f455f837fd8881c72f82788a282ff093c82 Mon Sep 17 00:00:00 2001 From: Tomohiro Matsuyama Date: Fri, 28 Sep 2012 18:34:20 +0900 Subject: [PATCH 007/128] * profiler.c (sigprof_handler): Fix race condition. --- src/ChangeLog | 4 ++++ src/profiler.c | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 601c72a9fd3..d6a6d91b75a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-28 Tomohiro Matsuyama + + * profiler.c (sigprof_handler): Fix race condition. + 2012-09-28 Glenn Morris * lread.c (lisp_file_lexically_bound_p): Handle #! lines. (Bug#12528) diff --git a/src/profiler.c b/src/profiler.c index 877a42cc98e..4d748b547f5 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -24,6 +24,7 @@ along with GNU Emacs. If not, see . */ #include #include #include "lisp.h" +#include "syssignal.h" /* Logs. */ @@ -214,7 +215,7 @@ static int current_sample_interval; /* Signal handler for sample profiler. */ static void -sigprof_handler (int signal) +sigprof_handler_1 (int signal) { eassert (HASH_TABLE_P (cpu_log)); if (backtrace_list && EQ (*backtrace_list->function, Qautomatic_gc)) @@ -229,6 +230,12 @@ sigprof_handler (int signal) record_backtrace (XHASH_TABLE (cpu_log), current_sample_interval); } +static void +sigprof_handler (int signal) +{ + deliver_process_signal (signal, sigprof_handler_1); +} + DEFUN ("profiler-cpu-start", Fprofiler_cpu_start, Sprofiler_cpu_start, 1, 1, 0, doc: /* Start or restart the cpu profiler. From c00ebc9835590d94d2b2f241ffcad872a2f2ffd3 Mon Sep 17 00:00:00 2001 From: Tassilo Horn Date: Fri, 28 Sep 2012 12:05:46 +0200 Subject: [PATCH 008/128] * doc-view.el (doc-view-current-cache-doc-pdf): New function. (doc-view-doc->txt, doc-view-convert-current-doc): Use it. (doc-view-get-bounding-box): Make bounding box slicing work for ODF and DVI documents. --- lisp/ChangeLog | 7 +++++++ lisp/doc-view.el | 27 +++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e13925e9b0f..cc884e9b1b5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2012-09-28 Tassilo Horn + + * doc-view.el (doc-view-current-cache-doc-pdf): New function. + (doc-view-doc->txt, doc-view-convert-current-doc): Use it. + (doc-view-get-bounding-box): Make bounding box slicing work for + ODF and DVI documents. + 2012-09-28 Glenn Morris * type-break.el (type-break-mode, type-break-interval) diff --git a/lisp/doc-view.el b/lisp/doc-view.el index 37f58331a5d..f8975a57b7b 100644 --- a/lisp/doc-view.el +++ b/lisp/doc-view.el @@ -904,6 +904,11 @@ Start by converting PAGES, and then the rest." (list "-raw" pdf txt) callback)) +(defun doc-view-current-cache-doc-pdf () + "Return the name of the doc.pdf in the current cache dir. + This file exists only if the current document isn't a PDF or PS file already." + (expand-file-name "doc.pdf" (doc-view-current-cache-dir))) + (defun doc-view-doc->txt (txt callback) "Convert the current document to text and call CALLBACK when done." (make-directory (doc-view-current-cache-dir) t) @@ -914,22 +919,17 @@ Start by converting PAGES, and then the rest." (`ps ;; Doc is a PS, so convert it to PDF (which will be converted to ;; TXT thereafter). - (let ((pdf (expand-file-name "doc.pdf" - (doc-view-current-cache-dir)))) + (let ((pdf (doc-view-current-cache-doc-pdf))) (doc-view-ps->pdf doc-view-buffer-file-name pdf (lambda () (doc-view-pdf->txt pdf txt callback))))) (`dvi ;; Doc is a DVI. This means that a doc.pdf already exists in its ;; cache subdirectory. - (doc-view-pdf->txt (expand-file-name "doc.pdf" - (doc-view-current-cache-dir)) - txt callback)) + (doc-view-pdf->txt (doc-view-current-cache-doc-pdf) txt callback)) (`odf ;; Doc is some ODF (or MS Office) doc. This means that a doc.pdf ;; already exists in its cache subdirectory. - (doc-view-pdf->txt (expand-file-name "doc.pdf" - (doc-view-current-cache-dir)) - txt callback)) + (doc-view-pdf->txt (doc-view-current-cache-doc-pdf) txt callback)) (_ (error "DocView doesn't know what to do")))) (defun doc-view-ps->pdf (ps pdf callback) @@ -969,13 +969,13 @@ Those files are saved in the directory given by the function (`dvi ;; DVI files have to be converted to PDF before Ghostscript can process ;; it. - (let ((pdf (expand-file-name "doc.pdf" doc-view-current-cache-dir))) + (let ((pdf (doc-view-current-cache-doc-pdf))) (doc-view-dvi->pdf doc-view-buffer-file-name pdf (lambda () (doc-view-pdf/ps->png pdf png-file))))) (`odf ;; ODF files have to be converted to PDF before Ghostscript can ;; process it. - (let ((pdf (expand-file-name "doc.pdf" doc-view-current-cache-dir)) + (let ((pdf (doc-view-current-cache-doc-pdf)) (opdf (expand-file-name (concat (file-name-base doc-view-buffer-file-name) ".pdf") doc-view-current-cache-dir)) @@ -1042,12 +1042,15 @@ dragging it to its bottom-right corner. See also (defun doc-view-get-bounding-box () "Get the BoundingBox information of the current page." (let* ((page (doc-view-current-page)) + (doc (let ((cache-doc (doc-view-current-cache-doc-pdf))) + (if (file-exists-p cache-doc) + cache-doc + doc-view-buffer-file-name))) (o (shell-command-to-string (concat doc-view-ghostscript-program " -dSAFER -dBATCH -dNOPAUSE -q -sDEVICE=bbox " (format "-dFirstPage=%s -dLastPage=%s %s" - page page - doc-view-buffer-file-name))))) + page page doc))))) (save-match-data (when (string-match (concat "%%BoundingBox: " "\\([[:digit:]]+\\) \\([[:digit:]]+\\) " From 7f457c067de84a0973883ef7889e648fbb17b055 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 28 Sep 2012 08:18:38 -0400 Subject: [PATCH 009/128] * lisp/emacs-lisp/pcase.el (pcase--mark-used): New. (pcase--u1): Use it. * lisp/custom.el (load-theme): Set buffer-file-name so the load is recorded in load-history with the right file name. Fixes: debbugs:12512 --- lisp/ChangeLog | 8 ++++++++ lisp/custom.el | 3 ++- lisp/emacs-lisp/pcase.el | 14 +++++++++----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index cc884e9b1b5..21a412f7424 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-09-28 Stefan Monnier + + * emacs-lisp/pcase.el (pcase--mark-used): New. + (pcase--u1): Use it (bug#12512). + + * custom.el (load-theme): Set buffer-file-name so the load is recorded + in load-history with the right file name. + 2012-09-28 Tassilo Horn * doc-view.el (doc-view-current-cache-doc-pdf): New function. diff --git a/lisp/custom.el b/lisp/custom.el index dfc8e631152..dc810e3c97d 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -1193,7 +1193,8 @@ Return t if THEME was successfully loaded, nil otherwise." (expand-file-name "themes/" data-directory))) (member hash custom-safe-themes) (custom-theme-load-confirm hash)) - (let ((custom--inhibit-theme-enable t)) + (let ((custom--inhibit-theme-enable t) + (buffer-file-name fn)) ;For load-history. (eval-buffer)) ;; Optimization: if the theme changes the `default' face, put that ;; entry first. This avoids some `frame-set-background-mode' rigmarole diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el index 09e47b69b91..1312fc3731d 100644 --- a/lisp/emacs-lisp/pcase.el +++ b/lisp/emacs-lisp/pcase.el @@ -517,6 +517,10 @@ MATCH is the pattern that needs to be matched, of the form: (defun pcase--self-quoting-p (upat) (or (keywordp upat) (numberp upat) (stringp upat))) +(defsubst pcase--mark-used (sym) + ;; Exceptionally, `sym' may be a constant expression rather than a symbol. + (if (symbolp sym) (put sym 'pcase-used t))) + ;; It's very tempting to use `pcase' below, tho obviously, it'd create ;; bootstrapping problems. (defun pcase--u1 (matches code vars rest) @@ -581,7 +585,7 @@ Otherwise, it defers to REST which is a list of branches of the form ((memq upat '(t _)) (pcase--u1 matches code vars rest)) ((eq upat 'pcase--dontcare) :pcase--dontcare) ((memq (car-safe upat) '(guard pred)) - (if (eq (car upat) 'pred) (put sym 'pcase-used t)) + (if (eq (car upat) 'pred) (pcase--mark-used sym)) (let* ((splitrest (pcase--split-rest sym (lambda (pat) (pcase--split-pred upat pat)) rest)) @@ -614,10 +618,10 @@ Otherwise, it defers to REST which is a list of branches of the form (pcase--u1 matches code vars then-rest) (pcase--u else-rest)))) ((pcase--self-quoting-p upat) - (put sym 'pcase-used t) + (pcase--mark-used sym) (pcase--q1 sym upat matches code vars rest)) ((symbolp upat) - (put sym 'pcase-used t) + (pcase--mark-used sym) (if (not (assq upat vars)) (pcase--u1 matches code (cons (cons upat sym) vars) rest) ;; Non-linear pattern. Turn it into an `eq' test. @@ -640,7 +644,7 @@ Otherwise, it defers to REST which is a list of branches of the form (pcase--u1 (cons `(match ,sym . ,(nth 1 upat)) matches) code vars rest))) ((eq (car-safe upat) '\`) - (put sym 'pcase-used t) + (pcase--mark-used sym) (pcase--q1 sym (cadr upat) matches code vars rest)) ((eq (car-safe upat) 'or) (let ((all (> (length (cdr upat)) 1)) @@ -662,7 +666,7 @@ Otherwise, it defers to REST which is a list of branches of the form sym (lambda (pat) (pcase--split-member elems pat)) rest)) (then-rest (car splitrest)) (else-rest (cdr splitrest))) - (put sym 'pcase-used t) + (pcase--mark-used sym) (pcase--if `(,(if memq-fine #'memq #'member) ,sym ',elems) (pcase--u1 matches code vars then-rest) (pcase--u else-rest))) From 9c1228c32346c2b4ccb3dbb5b3b6eb5673c8dd6a Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 28 Sep 2012 21:38:26 +0800 Subject: [PATCH 010/128] ido.el (ido-set-matches-1): Fix 2012-09-11 change --- lisp/ChangeLog | 4 ++++ lisp/ido.el | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0fae89f1e01..4878f5eb467 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-09-28 Leo Liu + + * ido.el (ido-set-matches-1): Fix 2012-09-11 change. + 2012-09-16 Leo Liu IDO: Disable match re-ordering for buffer switching. diff --git a/lisp/ido.el b/lisp/ido.el index a2712db804d..53533142e30 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -3701,14 +3701,14 @@ This is to make them appear as if they were \"virtual buffers\"." (rexq (concat rex0 (if slash ".*/" ""))) (re (if ido-enable-prefix (concat "\\`" rexq) rexq)) (full-re (and do-full - (and (eq ido-cur-item 'buffer) - (not ido-buffer-disable-smart-matches)) + (not (and (eq ido-cur-item 'buffer) + ido-buffer-disable-smart-matches)) (not ido-enable-regexp) (not (string-match "\$\\'" rex0)) (concat "\\`" rex0 (if slash "/" "") "\\'"))) (suffix-re (and do-full slash - (and (eq ido-cur-item 'buffer) - (not ido-buffer-disable-smart-matches)) + (not (and (eq ido-cur-item 'buffer) + ido-buffer-disable-smart-matches)) (not ido-enable-regexp) (not (string-match "\$\\'" rex0)) (concat rex0 "/\\'"))) From 147c0425024ce9c1dbb7301300867d8563a6730a Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 28 Sep 2012 21:42:19 +0800 Subject: [PATCH 011/128] Use minibuffer-message in pcomplete-show-completions --- lisp/ChangeLog | 3 +++ lisp/pcomplete.el | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4878f5eb467..6c19de9e43d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-28 Leo Liu + * pcomplete.el (pcomplete-show-completions): Use + minibuffer-message to make pcomplete usable in minibuffer. + * ido.el (ido-set-matches-1): Fix 2012-09-11 change. 2012-09-16 Leo Liu diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index cad2ffb2a2c..60247416bb1 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el @@ -1139,7 +1139,7 @@ Typing SPC flushes the help buffer." (setq pcomplete-last-window-config (current-window-configuration))) (with-output-to-temp-buffer "*Completions*" (display-completion-list completions)) - (message "Hit space to flush") + (minibuffer-message "Hit space to flush") (let (event) (prog1 (catch 'done From 404043ea8821e8902190e2e7d1140224c3ae33ea Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 28 Sep 2012 16:10:41 +0200 Subject: [PATCH 012/128] Rename "Automatic Redisplay" entry in Lisp backtrace. src/xdisp.c (syms_of_xdisp) : Rename from Qautomatic_redisplay and change the symbol name. All users changed. --- src/ChangeLog | 5 +++++ src/xdisp.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index d6a6d91b75a..92ab8080c9d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-28 Eli Zaretskii + + * xdisp.c (syms_of_xdisp) : Rename from + Qautomatic_redisplay and change the symbol name. All users changed. + 2012-09-28 Tomohiro Matsuyama * profiler.c (sigprof_handler): Fix race condition. diff --git a/src/xdisp.c b/src/xdisp.c index fa6460d7be2..701ae22cd06 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -347,7 +347,7 @@ static Lisp_Object Qfontification_functions; static Lisp_Object Qwrap_prefix; static Lisp_Object Qline_prefix; -static Lisp_Object Qautomatic_redisplay; +static Lisp_Object Qredisplay_internal; /* Non-nil means don't actually do any redisplay. */ @@ -12975,8 +12975,8 @@ redisplay_internal (void) /* Record this function, so it appears on the profiler's backtraces. */ backtrace.next = backtrace_list; - backtrace.function = &Qautomatic_redisplay; - backtrace.args = &Qautomatic_redisplay; + backtrace.function = &Qredisplay_internal; + backtrace.args = &Qredisplay_internal; backtrace.nargs = 0; backtrace.debug_on_exit = 0; backtrace_list = &backtrace; @@ -28694,7 +28694,7 @@ syms_of_xdisp (void) staticpro (&Vmessage_stack); DEFSYM (Qinhibit_redisplay, "inhibit-redisplay"); - DEFSYM (Qautomatic_redisplay, "Automatic Redisplay"); + DEFSYM (Qredisplay_internal, "redisplay_internal (C function)"); message_dolog_marker1 = Fmake_marker (); staticpro (&message_dolog_marker1); From 3df749b0f8a97c8b8f18a34bce494fd9d4fe987f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 28 Sep 2012 11:17:08 -0400 Subject: [PATCH 013/128] * lisp/type-break.el: Use lexical-binding. (type-break-mode): Use define-minor-mode. --- lisp/ChangeLog | 3 + lisp/type-break.el | 134 +++++++++++++++++++-------------------------- 2 files changed, 58 insertions(+), 79 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 21a412f7424..b25a921219e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-28 Stefan Monnier + * type-break.el: Use lexical-binding. + (type-break-mode): Use define-minor-mode. + * emacs-lisp/pcase.el (pcase--mark-used): New. (pcase--u1): Use it (bug#12512). diff --git a/lisp/type-break.el b/lisp/type-break.el index b3749853b77..949b3b720a0 100644 --- a/lisp/type-break.el +++ b/lisp/type-break.el @@ -1,4 +1,4 @@ -;;; type-break.el --- encourage rests from typing at appropriate intervals +;;; type-break.el --- encourage rests from typing at appropriate intervals -*- lexical-binding: t -*- ;; Copyright (C) 1994-1995, 1997, 2000-2012 Free Software Foundation, Inc. @@ -69,18 +69,6 @@ :prefix "type-break" :group 'keyboard) -(defcustom type-break-mode nil - "Toggle typing break mode. -See the docstring for the `type-break-mode' command for more information. -Setting this variable directly does not take effect; -use either \\[customize] or the function `type-break-mode'." - :set (lambda (_symbol value) - (type-break-mode (if value 1 -1))) - :initialize 'custom-initialize-default - :type 'boolean - :group 'type-break - :require 'type-break) - (defcustom type-break-interval (* 60 60) "Number of seconds between scheduled typing breaks." :type 'integer @@ -285,7 +273,7 @@ It will be either \"seconds\" or \"keystrokes\".") ;;;###autoload -(defun type-break-mode (&optional prefix) +(define-minor-mode type-break-mode "Enable or disable typing-break mode. This is a minor mode, but it is global to all buffers by default. @@ -358,74 +346,61 @@ Finally, a file (named `type-break-file-name') is used to store information across Emacs sessions. This provides recovery of the break status between sessions and after a crash. Manual changes to the file may result in problems." - (interactive "P") + :lighter type-break-mode-line-format + :global t + (type-break-check-post-command-hook) - (let ((already-enabled type-break-mode)) - (setq type-break-mode (>= (prefix-numeric-value prefix) 0)) + (cond + ;; ((and already-enabled type-break-mode) + ;; (and (called-interactively-p 'interactive) + ;; (message "Type Break mode is already enabled"))) + (type-break-mode + (when type-break-file-name + (with-current-buffer (find-file-noselect type-break-file-name 'nowarn) + (setq buffer-save-without-query t))) - (cond - ((and already-enabled type-break-mode) - (and (called-interactively-p 'interactive) - (message "Type Break mode is already enabled"))) - (type-break-mode - (when type-break-file-name - (with-current-buffer (find-file-noselect type-break-file-name 'nowarn) - (setq buffer-save-without-query t))) + (or global-mode-string (setq global-mode-string '(""))) ;FIXME: Why? + (type-break-keystroke-reset) + (type-break-mode-line-countdown-or-break nil) - (or global-mode-string - (setq global-mode-string '(""))) - (or (assq 'type-break-mode-line-message-mode - minor-mode-alist) - (setq minor-mode-alist - (cons type-break-mode-line-format - minor-mode-alist))) - (type-break-keystroke-reset) - (type-break-mode-line-countdown-or-break nil) + (setq type-break-time-last-break + (or (type-break-get-previous-time) + (current-time))) - (setq type-break-time-last-break - (or (type-break-get-previous-time) - (current-time))) - - ;; schedule according to break time from session file - (type-break-schedule - (let (diff) - (if (and type-break-time-last-break - (< (setq diff (type-break-time-difference - type-break-time-last-break - (current-time))) - type-break-interval)) - ;; use the file's value - (progn - (setq type-break-keystroke-count - (type-break-get-previous-count)) - ;; file the time, in case it was read from the auto-save file - (type-break-file-time type-break-interval-start) - (setq type-break-interval-start type-break-time-last-break) - (- type-break-interval diff)) - ;; schedule from now - (setq type-break-interval-start (current-time)) - (type-break-file-time type-break-interval-start) - type-break-interval)) - type-break-interval-start - type-break-interval) - - (and (called-interactively-p 'interactive) - (message "Type Break mode is enabled and set"))) - (t - (type-break-keystroke-reset) - (type-break-mode-line-countdown-or-break nil) - (type-break-cancel-schedule) - (do-auto-save) - (when type-break-file-name - (with-current-buffer (find-file-noselect type-break-file-name - 'nowarn) - (set-buffer-modified-p nil) - (unlock-buffer) - (kill-this-buffer))) - (and (called-interactively-p 'interactive) - (message "Type Break mode is disabled"))))) - type-break-mode) + ;; Schedule according to break time from session file. + (type-break-schedule + (let (diff) + (if (and type-break-time-last-break + (< (setq diff (type-break-time-difference + type-break-time-last-break + (current-time))) + type-break-interval)) + ;; Use the file's value. + (progn + (setq type-break-keystroke-count + (type-break-get-previous-count)) + ;; File the time, in case it was read from the auto-save file. + (type-break-file-time type-break-interval-start) + (setq type-break-interval-start type-break-time-last-break) + (- type-break-interval diff)) + ;; Schedule from now. + (setq type-break-interval-start (current-time)) + (type-break-file-time type-break-interval-start) + type-break-interval)) + type-break-interval-start + type-break-interval)) + (t + (type-break-keystroke-reset) + (type-break-mode-line-countdown-or-break nil) + (type-break-cancel-schedule) + (do-auto-save) + (when type-break-file-name + (with-current-buffer (find-file-noselect type-break-file-name + 'nowarn) + (set-buffer-modified-p nil) + (unlock-buffer) + (kill-this-buffer)))))) (define-minor-mode type-break-mode-line-message-mode "Toggle warnings about typing breaks in the mode line. @@ -994,10 +969,11 @@ FRAC should be the inverse of the fractional value; for example, a value of ;; "low" bits and format the time incorrectly. (defun type-break-time-sum (&rest tmlist) (let ((sum '(0 0 0))) - (dolist (tem tmlist sum) + (dolist (tem tmlist) (setq sum (time-add sum (if (integerp tem) (list (floor tem 65536) (mod tem 65536)) - tem)))))) + tem)))) + sum)) (defun type-break-time-stamp (&optional when) (if (fboundp 'format-time-string) From 53baf48a6e99b5ff434d5177b00beda3fc9a8f71 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Fri, 28 Sep 2012 19:38:07 +0300 Subject: [PATCH 014/128] Display archive errors in the echo area instead of inserting to the file buffer. * lisp/arc-mode.el (archive-extract-by-stdout): Change arg STDERR-FILE to STDERR-TEST that can be a regexp matching a successful output. Create a temporary file and redirect stderr to it. Search for STDERR-TEST in the stderr output and display it in the echo area if no match is found. (archive-extract-by-file): New function like `archive-extract-by-stdout' but extracting archives to files and looking for successful matches in stdout. Function body is mostly copied from `archive-rar-extract'. (archive-rar-extract): Use `archive-extract-by-file'. (archive-7z-extract): Use `archive-extract-by-stdout'. Fixes: debbugs:10347 --- lisp/ChangeLog | 17 ++++++++++ lisp/arc-mode.el | 83 +++++++++++++++++++++++++++++++----------------- 2 files changed, 71 insertions(+), 29 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4946fe5dd86..b923b6aac58 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,20 @@ +2012-09-28 Juri Linkov + + Display archive errors in the echo area instead of inserting + to the file buffer. + + * arc-mode.el (archive-extract-by-stdout): Change arg STDERR-FILE + to STDERR-TEST that can be a regexp matching a successful output. + Create a temporary file and redirect stderr to it. Search for + STDERR-TEST in the stderr output and display it in the echo area + if no match is found. + (archive-extract-by-file): New function like + `archive-extract-by-stdout' but extracting archives to files + and looking for successful matches in stdout. Function body is + mostly copied from `archive-rar-extract'. + (archive-rar-extract): Use `archive-extract-by-file'. + (archive-7z-extract): Use `archive-extract-by-stdout'. (Bug#10347) + 2012-09-28 Leo Liu * pcomplete.el (pcomplete-show-completions): Use diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index c776a3f8b5c..a97a052dc08 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -1117,13 +1117,54 @@ using `make-temp-file', and the generated name is returned." (archive-delete-local tmpfile) success)) -(defun archive-extract-by-stdout (archive name command &optional stderr-file) - (apply 'call-process - (car command) - nil - (if stderr-file (list t stderr-file) t) - nil - (append (cdr command) (list archive name)))) +(defun archive-extract-by-stdout (archive name command &optional stderr-test) + (let ((stderr-file (make-temp-file "arc-stderr"))) + (unwind-protect + (prog1 + (apply 'call-process + (car command) + nil + (if stderr-file (list t stderr-file) t) + nil + (append (cdr command) (list archive name))) + (with-temp-buffer + (insert-file-contents stderr-file) + (goto-char (point-min)) + (when (if (stringp stderr-test) + (not (re-search-forward stderr-test nil t)) + (> (buffer-size) 0)) + (message "%s" (buffer-string))))) + (if (file-exists-p stderr-file) + (delete-file stderr-file))))) + +(defun archive-extract-by-file (archive name command &optional stdout-test) + (let ((dest (make-temp-file "arc-dir" 'dir)) + (stdout-file (make-temp-file "arc-stdout"))) + (unwind-protect + (prog1 + (apply 'call-process + (car command) + nil + `(:file ,stdout-file) + nil + (append (cdr command) (list archive name dest))) + (with-temp-buffer + (insert-file-contents stdout-file) + (goto-char (point-min)) + (when (if (stringp stdout-test) + (not (re-search-forward stdout-test nil t)) + (> (buffer-size) 0)) + (message "%s" (buffer-string)))) + (if (file-exists-p (expand-file-name name dest)) + (insert-file-contents-literally (expand-file-name name dest)))) + (if (file-exists-p stdout-file) + (delete-file stdout-file)) + (if (file-exists-p (expand-file-name name dest)) + (delete-file (expand-file-name name dest))) + (while (file-name-directory name) + (setq name (directory-file-name (file-name-directory name))) + (delete-directory (expand-file-name name dest))) + (delete-directory dest)))) (defun archive-extract-other-window () "In archive mode, find this member in another window." @@ -2006,17 +2047,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." ;; The code below assumes the name is relative and may do undesirable ;; things otherwise. (error "Can't extract files with non-relative names") - (let ((dest (make-temp-file "arc-rar" 'dir))) - (unwind-protect - (progn - (call-process "unrar-free" nil nil nil - "--extract" archive name dest) - (insert-file-contents-literally (expand-file-name name dest))) - (delete-file (expand-file-name name dest)) - (while (file-name-directory name) - (setq name (directory-file-name (file-name-directory name))) - (delete-directory (expand-file-name name dest))) - (delete-directory dest))))) + (archive-extract-by-file archive name '("unrar-free" "--extract") "All OK"))) ;;; Section: Rar self-extracting .exe archives. @@ -2099,17 +2130,11 @@ This doesn't recover lost files, it just undoes changes in the buffer itself." (apply 'vector files)))) (defun archive-7z-extract (archive name) - (let ((tmpfile (make-temp-file "7z-stderr"))) - ;; 7z doesn't provide a `quiet' option to suppress non-essential - ;; stderr messages. So redirect stderr to a temp file and display it - ;; in the echo area when it contains error messages. - (prog1 (archive-extract-by-stdout - archive name archive-7z-extract tmpfile) - (with-temp-buffer - (insert-file-contents tmpfile) - (unless (search-forward "Everything is Ok" nil t) - (message "%s" (buffer-string))) - (delete-file tmpfile))))) + ;; 7z doesn't provide a `quiet' option to suppress non-essential + ;; stderr messages. So redirect stderr to a temp file and display it + ;; in the echo area when it contains no message indicating success. + (archive-extract-by-stdout + archive name archive-7z-extract "Everything is Ok")) (defun archive-7z-write-file-member (archive descr) (archive-*-write-file-member From e60b51abaa74fa15cc97de18f90b1ee967ae62ab Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 19:30:52 -0400 Subject: [PATCH 015/128] * bytecomp.el (byte-compile-cl-file-p): Only "cl.el" counts as cl these days. Remove no longer appropriate file-local suppression of CL warnings in lisp/emacs-lisp/cl-*.el files. --- lisp/ChangeLog | 5 +++++ lisp/emacs-lisp/bytecomp.el | 2 +- lisp/emacs-lisp/cl-extra.el | 1 - lisp/emacs-lisp/cl-lib.el | 1 - lisp/emacs-lisp/cl-macs.el | 1 - lisp/emacs-lisp/cl-seq.el | 1 - 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b923b6aac58..3ed9069acf2 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-09-28 Glenn Morris + + * emacs-lisp/bytecomp.el (byte-compile-cl-file-p): + Only "cl.el" counts as cl these days. + 2012-09-28 Juri Linkov Display archive errors in the echo area instead of inserting diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 7a229750178..d49e56bd2ba 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -846,7 +846,7 @@ CONST2 may be evaluated multiple times." (defun byte-compile-cl-file-p (file) "Return non-nil if FILE is one of the CL files." (and (stringp file) - (string-match "^cl\\>" (file-name-nondirectory file)))) + (string-match "^cl\\.el" (file-name-nondirectory file)))) (defun byte-compile-eval (form) "Eval FORM and mark the functions defined therein. diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el index ea5e1cf9beb..913ebf2015f 100644 --- a/lisp/emacs-lisp/cl-extra.el +++ b/lisp/emacs-lisp/cl-extra.el @@ -689,7 +689,6 @@ PROPLIST is a list of the sort returned by `symbol-plist'. ;; Local variables: ;; byte-compile-dynamic: t -;; byte-compile-warnings: (not cl-functions) ;; generated-autoload-file: "cl-loaddefs.el" ;; End: diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 5749ff91b40..2eda628e262 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -745,7 +745,6 @@ If ALIST is non-nil, the new pairs are prepended to it." ;; Local variables: ;; byte-compile-dynamic: t -;; byte-compile-warnings: (not cl-functions) ;; End: ;;; cl-lib.el ends here diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 16ac14f8fe9..56e698bec0a 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2686,7 +2686,6 @@ surrounded by (cl-block NAME ...). ;; Local variables: ;; byte-compile-dynamic: t -;; byte-compile-warnings: (not cl-functions) ;; generated-autoload-file: "cl-loaddefs.el" ;; End: diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el index b55f1df5ba5..1fa562e328a 100644 --- a/lisp/emacs-lisp/cl-seq.el +++ b/lisp/emacs-lisp/cl-seq.el @@ -1010,7 +1010,6 @@ Atoms are compared by `eql'; cons cells are compared recursively. ;; Local variables: ;; byte-compile-dynamic: t -;; byte-compile-warnings: (not cl-functions) ;; generated-autoload-file: "cl-loaddefs.el" ;; End: From 277f0cfa8b7dde109913f52c40eb8447b71eaffc Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 28 Sep 2012 19:51:20 -0400 Subject: [PATCH 016/128] * lisp/emacs-lisp/cl.el (flet): Fix case of obsolescence message. --- lisp/ChangeLog | 2 ++ lisp/emacs-lisp/cl.el | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3ed9069acf2..455cf684757 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-09-28 Glenn Morris + * emacs-lisp/cl.el (flet): Fix case of obsolescence message. + * emacs-lisp/bytecomp.el (byte-compile-cl-file-p): Only "cl.el" counts as cl these days. diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el index ae0852d6c87..34beed0d9ef 100644 --- a/lisp/emacs-lisp/cl.el +++ b/lisp/emacs-lisp/cl.el @@ -452,7 +452,7 @@ definitions, or lack thereof). \(fn ((FUNC ARGLIST BODY...) ...) FORM...)" (declare (indent 1) (debug cl-flet) - (obsolete "Use either `cl-flet' or `cl-letf'." "24.3")) + (obsolete "use either `cl-flet' or `cl-letf'." "24.3")) `(letf ,(mapcar (lambda (x) (if (or (and (fboundp (car x)) From e7c1b6ef850e7b4d021fabf4a922010781ed05bd Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Fri, 28 Sep 2012 22:02:34 -0400 Subject: [PATCH 017/128] * src/lisp.h (struct backtrace): Remove indirection for `function' field. * src/xdisp.c (redisplay_internal): * src/profiler.c (record_backtrace, sigprof_handler_1): * src/alloc.c (Fgarbage_collect): * src/eval.c (interactive_p, Fsignal, eval_sub, Ffuncall, Fbacktrace) (Fbacktrace_frame): Adjust accordingly. --- lisp/emacs-lisp/cl-loaddefs.el | 6 +++--- src/ChangeLog | 9 +++++++++ src/alloc.c | 4 ++-- src/eval.c | 28 ++++++++++++++-------------- src/lisp.h | 2 +- src/profiler.c | 4 ++-- src/xdisp.c | 4 ++-- 7 files changed, 33 insertions(+), 24 deletions(-) diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index c12e8ccacb1..922c9856208 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -11,7 +11,7 @@ ;;;;;; cl--map-overlays cl--map-intervals cl--map-keymap-recursively ;;;;;; cl-notevery cl-notany cl-every cl-some cl-mapcon cl-mapcan ;;;;;; cl-mapl cl-maplist cl-map cl--mapcar-many cl-equalp cl-coerce) -;;;;;; "cl-extra" "cl-extra.el" "535a24c1cff55a16e3d51219498a7858") +;;;;;; "cl-extra" "cl-extra.el" "1572ae52fa4fbd9c4bf89b49a068a865") ;;; Generated autoloads from cl-extra.el (autoload 'cl-coerce "cl-extra" "\ @@ -260,7 +260,7 @@ Remove from SYMBOL's plist the property PROPNAME and its value. ;;;;;; cl-typecase cl-ecase cl-case cl-load-time-value cl-eval-when ;;;;;; cl-destructuring-bind cl-function cl-defmacro cl-defun cl-gentemp ;;;;;; cl-gensym cl--compiler-macro-cXXr cl--compiler-macro-list*) -;;;;;; "cl-macs" "cl-macs.el" "6d0676869af66e5b5a671f95ee069461") +;;;;;; "cl-macs" "cl-macs.el" "da92f58f688ff6fb4d0098eb0f3acf0b") ;;; Generated autoloads from cl-macs.el (autoload 'cl--compiler-macro-list* "cl-macs" "\ @@ -748,7 +748,7 @@ surrounded by (cl-block NAME ...). ;;;;;; cl-nsubstitute-if cl-nsubstitute cl-substitute-if-not cl-substitute-if ;;;;;; cl-substitute cl-delete-duplicates cl-remove-duplicates cl-delete-if-not ;;;;;; cl-delete-if cl-delete cl-remove-if-not cl-remove-if cl-remove -;;;;;; cl-replace cl-fill cl-reduce) "cl-seq" "cl-seq.el" "b444601641dcbd14a23ca5182bc80ffa") +;;;;;; cl-replace cl-fill cl-reduce) "cl-seq" "cl-seq.el" "4c1e1191e82dc8d5449a5ec4d59efc10") ;;; Generated autoloads from cl-seq.el (autoload 'cl-reduce "cl-seq" "\ diff --git a/src/ChangeLog b/src/ChangeLog index c30c4ed955b..500522a2feb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2012-09-29 Stefan Monnier + + * lisp.h (struct backtrace): Remove indirection for `function' field. + * xdisp.c (redisplay_internal): + * profiler.c (record_backtrace, sigprof_handler_1): + * alloc.c (Fgarbage_collect): + * eval.c (interactive_p, Fsignal, eval_sub, Ffuncall, Fbacktrace) + (Fbacktrace_frame): Adjust accordingly. + 2012-09-28 Glenn Morris * eval.c (Frun_hook_with_args, Frun_hook_with_args_until_success) diff --git a/src/alloc.c b/src/alloc.c index 46c9a10c725..df166b4924a 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -5112,8 +5112,8 @@ See Info node `(elisp)Garbage Collection'. */) /* Record this function, so it appears on the profiler's backtraces. */ backtrace.next = backtrace_list; - backtrace.function = &Qautomatic_gc; - backtrace.args = &Qautomatic_gc; + backtrace.function = Qautomatic_gc; + backtrace.args = &Qnil; backtrace.nargs = 0; backtrace.debug_on_exit = 0; backtrace_list = &backtrace; diff --git a/src/eval.c b/src/eval.c index 851b2bb1129..561ba922482 100644 --- a/src/eval.c +++ b/src/eval.c @@ -552,7 +552,7 @@ interactive_p (void) /* If this isn't a byte-compiled function, there may be a frame at the top for Finteractive_p. If so, skip it. */ - fun = Findirect_function (*btp->function, Qnil); + fun = Findirect_function (btp->function, Qnil); if (SUBRP (fun) && (XSUBR (fun) == &Sinteractive_p || XSUBR (fun) == &Scalled_interactively_p)) btp = btp->next; @@ -565,7 +565,7 @@ interactive_p (void) If this isn't a byte-compiled function, then we may now be looking at several frames for special forms. Skip past them. */ while (btp - && (EQ (*btp->function, Qbytecode) + && (EQ (btp->function, Qbytecode) || btp->nargs == UNEVALLED)) btp = btp->next; @@ -573,13 +573,13 @@ interactive_p (void) a special form, ignoring frames for Finteractive_p and/or Fbytecode at the top. If this frame is for a built-in function (such as load or eval-region) return false. */ - fun = Findirect_function (*btp->function, Qnil); + fun = Findirect_function (btp->function, Qnil); if (SUBRP (fun)) return 0; /* `btp' points to the frame of a Lisp function that called interactive-p. Return t if that function was called interactively. */ - if (btp && btp->next && EQ (*btp->next->function, Qcall_interactively)) + if (btp && btp->next && EQ (btp->next->function, Qcall_interactively)) return 1; return 0; } @@ -1496,10 +1496,10 @@ See also the function `condition-case'. */) if (backtrace_list && !NILP (error_symbol)) { bp = backtrace_list->next; - if (bp && bp->function && EQ (*bp->function, Qerror)) + if (bp && EQ (bp->function, Qerror)) bp = bp->next; - if (bp && bp->function) - Vsignaling_function = *bp->function; + if (bp) + Vsignaling_function = bp->function; } for (h = handlerlist; h; h = h->next) @@ -1510,7 +1510,7 @@ See also the function `condition-case'. */) } if (/* Don't run the debugger for a memory-full error. - (There is no room in memory to do that!) */ + (There is no room in memory to do that!) */ !NILP (error_symbol) && (!NILP (Vdebug_on_signal) /* If no handler is present now, try to run the debugger. */ @@ -2045,7 +2045,7 @@ eval_sub (Lisp_Object form) original_args = XCDR (form); backtrace.next = backtrace_list; - backtrace.function = &original_fun; /* This also protects them from gc. */ + backtrace.function = original_fun; /* This also protects them from gc. */ backtrace.args = &original_args; backtrace.nargs = UNEVALLED; backtrace.debug_on_exit = 0; @@ -2713,7 +2713,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */) } backtrace.next = backtrace_list; - backtrace.function = &args[0]; + backtrace.function = args[0]; backtrace.args = &args[1]; /* This also GCPROs them. */ backtrace.nargs = nargs - 1; backtrace.debug_on_exit = 0; @@ -3289,12 +3289,12 @@ Output stream used is value of `standard-output'. */) write_string (backlist->debug_on_exit ? "* " : " ", 2); if (backlist->nargs == UNEVALLED) { - Fprin1 (Fcons (*backlist->function, *backlist->args), Qnil); + Fprin1 (Fcons (backlist->function, *backlist->args), Qnil); write_string ("\n", -1); } else { - tem = *backlist->function; + tem = backlist->function; Fprin1 (tem, Qnil); /* This can QUIT. */ write_string ("(", -1); if (backlist->nargs == MANY) @@ -3352,7 +3352,7 @@ If NFRAMES is more than the number of frames, the value is nil. */) if (!backlist) return Qnil; if (backlist->nargs == UNEVALLED) - return Fcons (Qnil, Fcons (*backlist->function, *backlist->args)); + return Fcons (Qnil, Fcons (backlist->function, *backlist->args)); else { if (backlist->nargs == MANY) /* FIXME: Can this happen? */ @@ -3360,7 +3360,7 @@ If NFRAMES is more than the number of frames, the value is nil. */) else tem = Flist (backlist->nargs, backlist->args); - return Fcons (Qt, Fcons (*backlist->function, tem)); + return Fcons (Qt, Fcons (backlist->function, tem)); } } diff --git a/src/lisp.h b/src/lisp.h index 21ac55c1063..c3cabe0af29 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2034,7 +2034,7 @@ extern ptrdiff_t specpdl_size; struct backtrace { struct backtrace *next; - Lisp_Object *function; + Lisp_Object function; Lisp_Object *args; /* Points to vector of args. */ ptrdiff_t nargs; /* Length of vector. */ /* Nonzero means call value of debugger when done with this operation. */ diff --git a/src/profiler.c b/src/profiler.c index 4d748b547f5..44a12fc159c 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -149,7 +149,7 @@ record_backtrace (log_t *log, size_t count) /* Copy the backtrace contents into working memory. */ for (; i < asize && backlist; i++, backlist = backlist->next) /* FIXME: For closures we should ignore the environment. */ - ASET (backtrace, i, *backlist->function); + ASET (backtrace, i, backlist->function); /* Make sure that unused space of working memory is filled with nil. */ for (; i < asize; i++) @@ -218,7 +218,7 @@ static void sigprof_handler_1 (int signal) { eassert (HASH_TABLE_P (cpu_log)); - if (backtrace_list && EQ (*backtrace_list->function, Qautomatic_gc)) + if (backtrace_list && EQ (backtrace_list->function, Qautomatic_gc)) /* Special case the time-count inside GC because the hash-table code is not prepared to be used while the GC is running. More specifically it uses ASIZE at many places where it does diff --git a/src/xdisp.c b/src/xdisp.c index 701ae22cd06..b23a06ff3d1 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -12975,8 +12975,8 @@ redisplay_internal (void) /* Record this function, so it appears on the profiler's backtraces. */ backtrace.next = backtrace_list; - backtrace.function = &Qredisplay_internal; - backtrace.args = &Qredisplay_internal; + backtrace.function = Qredisplay_internal; + backtrace.args = &Qnil; backtrace.nargs = 0; backtrace.debug_on_exit = 0; backtrace_list = &backtrace; From cd155987b5ac2f9d7ce2ba72ba31e5ad8fae2fd2 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sat, 29 Sep 2012 19:06:28 +0200 Subject: [PATCH 018/128] nt/config.nt: Sync with autogen/config.in (HAVE_TIMER_SETTIME): New macro. --- nt/ChangeLog | 5 +++++ nt/config.nt | 3 +++ 2 files changed, 8 insertions(+) diff --git a/nt/ChangeLog b/nt/ChangeLog index 9f7b4df2e81..d615151310e 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,8 @@ +2012-09-29 Juanma Barranquero + + * config.nt: Sync with autogen/config.in + (HAVE_TIMER_SETTIME): New macro. + 2012-09-23 Eli Zaretskii * inc/ms-w32.h (emacs_raise): Redefine to invoke emacs_abort. diff --git a/nt/config.nt b/nt/config.nt index 23b33731a36..f8ba4ff9c6c 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -968,6 +968,9 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if you have the tiff library (-ltiff). */ #undef HAVE_TIFF +/* Define to 1 if you have the `timer_settime' function. */ +#undef HAVE_TIMER_SETTIME + /* Define if struct tm has the tm_gmtoff member. */ #undef HAVE_TM_GMTOFF From 8e5691a0ecd85ea07c423835085ecfffc0013736 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sat, 29 Sep 2012 19:07:01 +0200 Subject: [PATCH 019/128] src/makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. --- src/ChangeLog | 4 ++++ src/makefile.w32-in | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 500522a2feb..3400361bf3a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-29 Juanma Barranquero + + * makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. + 2012-09-29 Stefan Monnier * lisp.h (struct backtrace): Remove indirection for `function' field. diff --git a/src/makefile.w32-in b/src/makefile.w32-in index 83e101d2c76..7482211ee0a 100644 --- a/src/makefile.w32-in +++ b/src/makefile.w32-in @@ -978,7 +978,8 @@ $(BLD)/profiler.$(O) : \ $(SRC)/profiler.c \ $(NT_INC)/sys/time.h \ $(CONFIG_H) \ - $(LISP_H) + $(LISP_H) \ + $(SYSSIGNAL_H) $(BLD)/image.$(O) : \ $(SRC)/image.c \ From de82e29b3fe963e92ed7f60bc52009e3ef923a29 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 11:15:57 -0700 Subject: [PATCH 020/128] Do not autoload defcustoms in hippie-exp.el * lisp/hippie-exp.el (hippie-expand-try-functions-list) (hippie-expand-verbose, hippie-expand-dabbrev-skip-space) (hippie-expand-dabbrev-as-symbol, hippie-expand-no-restriction) (hippie-expand-max-buffers, hippie-expand-ignore-buffers) (hippie-expand-only-buffers): Do not autoload defcustoms. * lisp/progmodes/vhdl-mode.el (vhdl-line-expand): Explicitly load hippie-exp, so it does not get autoloaded while hippie-expand-try-functions-list is let-bound. --- lisp/ChangeLog | 11 +++++++++++ lisp/hippie-exp.el | 8 -------- lisp/progmodes/vhdl-mode.el | 1 + 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 455cf684757..4e61d02da9e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2012-09-29 Glenn Morris + + * hippie-exp.el (hippie-expand-try-functions-list) + (hippie-expand-verbose, hippie-expand-dabbrev-skip-space) + (hippie-expand-dabbrev-as-symbol, hippie-expand-no-restriction) + (hippie-expand-max-buffers, hippie-expand-ignore-buffers) + (hippie-expand-only-buffers): Do not autoload defcustoms. + * progmodes/vhdl-mode.el (vhdl-line-expand): + Explicitly load hippie-exp, so it does not get autoloaded + while hippie-expand-try-functions-list is let-bound. + 2012-09-28 Glenn Morris * emacs-lisp/cl.el (flet): Fix case of obsolescence message. diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el index f787319fb0c..5639a4796a5 100644 --- a/lisp/hippie-exp.el +++ b/lisp/hippie-exp.el @@ -199,7 +199,6 @@ (defvar he-search-window ()) -;;;###autoload (defcustom hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name @@ -217,31 +216,26 @@ or insert functions in this list." :type '(repeat function) :group 'hippie-expand) -;;;###autoload (defcustom hippie-expand-verbose t "Non-nil makes `hippie-expand' output which function it is trying." :type 'boolean :group 'hippie-expand) -;;;###autoload (defcustom hippie-expand-dabbrev-skip-space nil "Non-nil means tolerate trailing spaces in the abbreviation to expand." :group 'hippie-expand :type 'boolean) -;;;###autoload (defcustom hippie-expand-dabbrev-as-symbol t "Non-nil means expand as symbols, i.e. syntax `_' is considered a letter." :group 'hippie-expand :type 'boolean) -;;;###autoload (defcustom hippie-expand-no-restriction t "Non-nil means that narrowed buffers are widened during search." :group 'hippie-expand :type 'boolean) -;;;###autoload (defcustom hippie-expand-max-buffers () "The maximum number of buffers (apart from the current) searched. If nil, all buffers are searched." @@ -249,7 +243,6 @@ If nil, all buffers are searched." integer) :group 'hippie-expand) -;;;###autoload (defcustom hippie-expand-ignore-buffers (list (purecopy "^ \\*.*\\*$") 'dired-mode) "A list specifying which buffers not to search (if not current). Can contain both regexps matching buffer names (as strings) and major modes @@ -257,7 +250,6 @@ Can contain both regexps matching buffer names (as strings) and major modes :type '(repeat (choice regexp (symbol :tag "Major Mode"))) :group 'hippie-expand) -;;;###autoload (defcustom hippie-expand-only-buffers () "A list specifying the only buffers to search (in addition to current). Can contain both regexps matching buffer names (as strings) and major modes diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index 0ca3439dd60..52757b9eede 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el @@ -12522,6 +12522,7 @@ options vhdl-upper-case-{keywords,types,attributes,enum-values}." (defun vhdl-line-expand (&optional prefix-arg) "Hippie-expand current line." (interactive "P") + (require 'hippie-exp) (let ((case-fold-search t) (case-replace nil) (hippie-expand-try-functions-list '(try-expand-line try-expand-line-all-buffers))) From 0e3e4156242bfe3104b8f507a07c38d966d110eb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 11:20:12 -0700 Subject: [PATCH 021/128] Do not autoload defcustoms in inf-lisp.el * lisp/progmodes/inf-lisp.el (inferior-lisp-filter-regexp) (inferior-lisp-program, inferior-lisp-load-command) (inferior-lisp-prompt, inferior-lisp-mode-hook): Do not autoload defcustoms. --- lisp/ChangeLog | 5 +++++ lisp/progmodes/inf-lisp.el | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4e61d02da9e..d6e7b498f4e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2012-09-29 Glenn Morris + * progmodes/inf-lisp.el (inferior-lisp-filter-regexp) + (inferior-lisp-program, inferior-lisp-load-command) + (inferior-lisp-prompt, inferior-lisp-mode-hook): + Do not autoload defcustoms. + * hippie-exp.el (hippie-expand-try-functions-list) (hippie-expand-verbose, hippie-expand-dabbrev-skip-space) (hippie-expand-dabbrev-as-symbol, hippie-expand-no-restriction) diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el index 401970b2ce8..cccda962082 100644 --- a/lisp/progmodes/inf-lisp.el +++ b/lisp/progmodes/inf-lisp.el @@ -69,7 +69,6 @@ :group 'lisp :version "22.1") -;;;###autoload (defcustom inferior-lisp-filter-regexp (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") "What not to save on inferior Lisp's input history. @@ -137,13 +136,11 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword (define-key inferior-lisp-mode-map "\C-cv" 'lisp-show-variable-documentation)) -;;;###autoload (defcustom inferior-lisp-program (purecopy "lisp") "Program name for invoking an inferior Lisp in Inferior Lisp mode." :type 'string :group 'inferior-lisp) -;;;###autoload (defcustom inferior-lisp-load-command (purecopy "(load \"%s\")\n") "Format-string for building a Lisp expression to load a file. This format string should use `%s' to substitute a file name @@ -155,7 +152,6 @@ but it works only in Common Lisp." :type 'string :group 'inferior-lisp) -;;;###autoload (defcustom inferior-lisp-prompt (purecopy "^[^> \n]*>+:? *") "Regexp to recognize prompts in the Inferior Lisp mode. Defaults to \"^[^> \\n]*>+:? *\", which works pretty good for Lucid, kcl, @@ -207,7 +203,6 @@ one process, this does the right thing. If you run multiple processes, you can change `inferior-lisp-buffer' to another process buffer with \\[set-variable].") -;;;###autoload (defvar inferior-lisp-mode-hook '() "Hook for customizing Inferior Lisp mode.") From ced0838266516d9fb1b8a4576c077d0f710ff90c Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 11:21:45 -0700 Subject: [PATCH 022/128] * lisp/help-macro.el (three-step-help): Do not autoload defcustom. --- lisp/ChangeLog | 2 ++ lisp/help-macro.el | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d6e7b498f4e..048966a6061 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-09-29 Glenn Morris + * help-macro.el (three-step-help): Do not autoload defcustom. + * progmodes/inf-lisp.el (inferior-lisp-filter-regexp) (inferior-lisp-program, inferior-lisp-load-command) (inferior-lisp-prompt, inferior-lisp-mode-hook): diff --git a/lisp/help-macro.el b/lisp/help-macro.el index 112c72778bc..0600484b6df 100644 --- a/lisp/help-macro.el +++ b/lisp/help-macro.el @@ -69,7 +69,6 @@ (require 'backquote) -;;;###autoload (defcustom three-step-help nil "Non-nil means give more info about Help command in three steps. The three steps are simple prompt, prompt with all options, and From 2923922f5ec17c2ccd38d7d7c7d3d98de357443d Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 11:28:01 -0700 Subject: [PATCH 023/128] No need to autoload vc-rcs, vc-sccs defcustoms. * lisp/vc/vc-rcs.el (vc-rcs-master-templates): * lisp/vc/vc-sccs.el (vc-sccs-master-templates): No need to autoload. --- lisp/ChangeLog | 9 ++++++--- lisp/vc/vc-rcs.el | 4 +--- lisp/vc/vc-sccs.el | 3 +-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 048966a6061..bb9d19c0862 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,17 +1,20 @@ 2012-09-29 Glenn Morris - * help-macro.el (three-step-help): Do not autoload defcustom. + * vc/vc-rcs.el (vc-rcs-master-templates): + * vc/vc-sccs.el (vc-sccs-master-templates): No need to autoload. + + * help-macro.el (three-step-help): No need to autoload defcustom. * progmodes/inf-lisp.el (inferior-lisp-filter-regexp) (inferior-lisp-program, inferior-lisp-load-command) (inferior-lisp-prompt, inferior-lisp-mode-hook): - Do not autoload defcustoms. + No need to autoload defcustoms. * hippie-exp.el (hippie-expand-try-functions-list) (hippie-expand-verbose, hippie-expand-dabbrev-skip-space) (hippie-expand-dabbrev-as-symbol, hippie-expand-no-restriction) (hippie-expand-max-buffers, hippie-expand-ignore-buffers) - (hippie-expand-only-buffers): Do not autoload defcustoms. + (hippie-expand-only-buffers): No need to autoload defcustoms. * progmodes/vhdl-mode.el (vhdl-line-expand): Explicitly load hippie-exp, so it does not get autoloaded while hippie-expand-try-functions-list is let-bound. diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el index ecd7b826437..083089834a0 100644 --- a/lisp/vc/vc-rcs.el +++ b/lisp/vc/vc-rcs.el @@ -89,9 +89,7 @@ to use --brief and sets this variable to remember whether it worked." :type '(choice (const :tag "Work out" nil) (const yes) (const no)) :group 'vc-rcs) -;;;###autoload -(defcustom vc-rcs-master-templates - (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) +(defcustom vc-rcs-master-templates '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s") "Where to look for RCS master files. For a description of possible values, see `vc-check-master-templates'." :type '(choice (const :tag "Use standard RCS file names" diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index a34222f7236..d283425a976 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -74,9 +74,8 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." :version "24.1" ; no longer consult the obsolete vc-header-alist :group 'vc-sccs) -;;;###autoload (defcustom vc-sccs-master-templates - (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) + '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir) "Where to look for SCCS master files. For a description of possible values, see `vc-check-master-templates'." :type '(choice (const :tag "Use standard SCCS file names" From 3ef6d50528bf31c40b0f5c5b4be9f871d8d7e392 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 11:30:52 -0700 Subject: [PATCH 024/128] Remove purecopy's that are no longer needed following previous change --- lisp/hippie-exp.el | 2 +- lisp/progmodes/inf-lisp.el | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/hippie-exp.el b/lisp/hippie-exp.el index 5639a4796a5..2f0a6e3af59 100644 --- a/lisp/hippie-exp.el +++ b/lisp/hippie-exp.el @@ -243,7 +243,7 @@ If nil, all buffers are searched." integer) :group 'hippie-expand) -(defcustom hippie-expand-ignore-buffers (list (purecopy "^ \\*.*\\*$") 'dired-mode) +(defcustom hippie-expand-ignore-buffers '("^ \\*.*\\*$" dired-mode) "A list specifying which buffers not to search (if not current). Can contain both regexps matching buffer names (as strings) and major modes \(as atoms)" diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el index cccda962082..f2578c14066 100644 --- a/lisp/progmodes/inf-lisp.el +++ b/lisp/progmodes/inf-lisp.el @@ -70,7 +70,7 @@ :version "22.1") (defcustom inferior-lisp-filter-regexp - (purecopy "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'") + "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'" "What not to save on inferior Lisp's input history. Input matching this regexp is not saved on the input history in Inferior Lisp mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword @@ -136,12 +136,12 @@ mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword (define-key inferior-lisp-mode-map "\C-cv" 'lisp-show-variable-documentation)) -(defcustom inferior-lisp-program (purecopy "lisp") +(defcustom inferior-lisp-program "lisp" "Program name for invoking an inferior Lisp in Inferior Lisp mode." :type 'string :group 'inferior-lisp) -(defcustom inferior-lisp-load-command (purecopy "(load \"%s\")\n") +(defcustom inferior-lisp-load-command "(load \"%s\")\n" "Format-string for building a Lisp expression to load a file. This format string should use `%s' to substitute a file name and should result in a Lisp expression that will command the inferior Lisp @@ -152,7 +152,7 @@ but it works only in Common Lisp." :type 'string :group 'inferior-lisp) -(defcustom inferior-lisp-prompt (purecopy "^[^> \n]*>+:? *") +(defcustom inferior-lisp-prompt "^[^> \n]*>+:? *" "Regexp to recognize prompts in the Inferior Lisp mode. Defaults to \"^[^> \\n]*>+:? *\", which works pretty good for Lucid, kcl, and franz. This variable is used to initialize `comint-prompt-regexp' in the From d2a54f135f49226ceb27b4caf3806af4ce84467b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 12:19:17 -0700 Subject: [PATCH 025/128] Revert bogus vc autoloads change --- lisp/ChangeLog | 3 --- lisp/vc/vc-rcs.el | 4 +++- lisp/vc/vc-sccs.el | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bb9d19c0862..072fb1bd1f4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,8 +1,5 @@ 2012-09-29 Glenn Morris - * vc/vc-rcs.el (vc-rcs-master-templates): - * vc/vc-sccs.el (vc-sccs-master-templates): No need to autoload. - * help-macro.el (three-step-help): No need to autoload defcustom. * progmodes/inf-lisp.el (inferior-lisp-filter-regexp) diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el index 083089834a0..ecd7b826437 100644 --- a/lisp/vc/vc-rcs.el +++ b/lisp/vc/vc-rcs.el @@ -89,7 +89,9 @@ to use --brief and sets this variable to remember whether it worked." :type '(choice (const :tag "Work out" nil) (const yes) (const no)) :group 'vc-rcs) -(defcustom vc-rcs-master-templates '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s") +;;;###autoload +(defcustom vc-rcs-master-templates + (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "Where to look for RCS master files. For a description of possible values, see `vc-check-master-templates'." :type '(choice (const :tag "Use standard RCS file names" diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index d283425a976..a34222f7236 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -74,8 +74,9 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." :version "24.1" ; no longer consult the obsolete vc-header-alist :group 'vc-sccs) +;;;###autoload (defcustom vc-sccs-master-templates - '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir) + (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "Where to look for SCCS master files. For a description of possible values, see `vc-check-master-templates'." :type '(choice (const :tag "Use standard SCCS file names" From 04558d31ab27743cf80f0a8119b70c015009e6ed Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Sat, 29 Sep 2012 22:45:44 +0200 Subject: [PATCH 026/128] url-util.el: Fix two docstrings. --- Makefile.in | 13 +++++++++++++ lisp/url/ChangeLog | 5 +++++ lisp/url/url-util.el | 6 +++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Makefile.in b/Makefile.in index 571013e3244..4e94a4e3f23 100644 --- a/Makefile.in +++ b/Makefile.in @@ -281,6 +281,19 @@ all: ${SUBDIR} .PHONY: all ${SUBDIR} blessmail epaths-force FRC +help:: + $(info ) + $(info make all Compile and build Emacs.) + $(info make install Install Emacs.) + $(info make TAGS Update tags tables.) + $(info ) + $(info make clean Delete files created by building Emacs.) + $(info make distclean Delete all files created by building or configuring.) + $(info make maintainer-clean Like distclean, but delete more files: *.elc, etc.) + $(info make extra-clean Like maintainer-clean, but delete backups and autosaves.) + $(info ) + $(info make bootstrap Compile and build from a clean state.) + removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g' # Generate epaths.h from epaths.in. This target is invoked by `configure'. diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 62665654654..279db5ee3e4 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,8 @@ +2012-09-29 Bastien Guerry + + * url-util.el (url-insert-entities-in-string) + (url-build-query-string): Fix docstrings. + 2012-09-25 Chong Yidong * url-parse.el (url-recreate-url-attributes): diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el index 4761f71ad8f..038b7fcf7fe 100644 --- a/lisp/url/url-util.el +++ b/lisp/url/url-util.el @@ -132,8 +132,8 @@ If a list, it is a list of the types of messages to be logged." (defun url-insert-entities-in-string (string) "Convert HTML markup-start characters to entity references in STRING. Also replaces the \" character, so that the result may be safely used as - an attribute value in a tag. Returns a new string with the result of the - conversion. Replaces these characters as follows: +an attribute value in a tag. Returns a new string with the result of the +conversion. Replaces these characters as follows: & ==> & < ==> < > ==> > @@ -294,7 +294,7 @@ Given a QUERY in the form: (key2 val2) (key3 val1 val2) (key4) - (key5 "")) + (key5 \"\")) \(This is the same format as produced by `url-parse-query-string') From 78819a9ff85a3c70ce1f68e0a7962b50e95bc66e Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Sun, 30 Sep 2012 00:01:57 +0200 Subject: [PATCH 027/128] Partially revert previous commit. The help: target for the Makefile was just meant as a local test. --- Makefile.in | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Makefile.in b/Makefile.in index 4e94a4e3f23..571013e3244 100644 --- a/Makefile.in +++ b/Makefile.in @@ -281,19 +281,6 @@ all: ${SUBDIR} .PHONY: all ${SUBDIR} blessmail epaths-force FRC -help:: - $(info ) - $(info make all Compile and build Emacs.) - $(info make install Install Emacs.) - $(info make TAGS Update tags tables.) - $(info ) - $(info make clean Delete files created by building Emacs.) - $(info make distclean Delete all files created by building or configuring.) - $(info make maintainer-clean Like distclean, but delete more files: *.elc, etc.) - $(info make extra-clean Like maintainer-clean, but delete backups and autosaves.) - $(info ) - $(info make bootstrap Compile and build from a clean state.) - removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g' # Generate epaths.h from epaths.in. This target is invoked by `configure'. From 93ab178b0479ff9c7a8da3370a23eb38b18e9a27 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 16:13:29 -0700 Subject: [PATCH 028/128] Comments for vc-bzr, clarifying vc-bzr-registered --- lisp/vc/vc-bzr.el | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el index 1eb33776f6a..74a61548d8b 100644 --- a/lisp/vc/vc-bzr.el +++ b/lisp/vc/vc-bzr.el @@ -150,12 +150,6 @@ Use the current Bzr root directory as the ROOT argument to (defconst vc-bzr-admin-branchconf (concat vc-bzr-admin-dirname "/branch/branch.conf")) -;;;###autoload (defun vc-bzr-registered (file) -;;;###autoload (if (vc-find-root file vc-bzr-admin-checkout-format-file) -;;;###autoload (progn -;;;###autoload (load "vc-bzr") -;;;###autoload (vc-bzr-registered file)))) - (defun vc-bzr-root (file) "Return the root directory of the bzr repository containing FILE." ;; Cache technique copied from vc-arch.el. @@ -291,6 +285,14 @@ in the repository root directory of FILE." (message "Falling back on \"slow\" status detection (%S)" err) (vc-bzr-state file)))))) +;; This is a cheap approximation that is autoloaded. If it finds a +;; possible match it loads this file and runs the real function. +;; It requires vc-bzr-admin-checkout-format-file to be autoloaded too. +;;;###autoload (defun vc-bzr-registered (file) +;;;###autoload (if (vc-find-root file vc-bzr-admin-checkout-format-file) +;;;###autoload (progn +;;;###autoload (load "vc-bzr") +;;;###autoload (vc-bzr-registered file)))) (defun vc-bzr-registered (file) "Return non-nil if FILE is registered with bzr." From 91740b408c4490e0425f8a36eba90ffb382f6429 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 16:18:33 -0700 Subject: [PATCH 029/128] Comment for vc-sccs --- lisp/vc/vc-sccs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index a34222f7236..82f30b509ff 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -74,6 +74,9 @@ If nil, use the value of `vc-diff-switches'. If t, use no switches." :version "24.1" ; no longer consult the obsolete vc-header-alist :group 'vc-sccs) +;; This needs to be autoloaded because vc-sccs-registered uses it (via +;; vc-default-registered), and vc-hooks needs to be able to check +;; for a registered backend without loading every backend. ;;;###autoload (defcustom vc-sccs-master-templates (purecopy '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) From a123c57a3674c982f84098a076d6d99c54e1151a Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 16:19:46 -0700 Subject: [PATCH 030/128] Comment for vc-rcs --- lisp/vc/vc-rcs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el index ecd7b826437..baaf0c3a926 100644 --- a/lisp/vc/vc-rcs.el +++ b/lisp/vc/vc-rcs.el @@ -89,6 +89,9 @@ to use --brief and sets this variable to remember whether it worked." :type '(choice (const :tag "Work out" nil) (const yes) (const no)) :group 'vc-rcs) +;; This needs to be autoloaded because vc-rcs-registered uses it (via +;; vc-default-registered), and vc-hooks needs to be able to check +;; for a registered backend without loading every backend. ;;;###autoload (defcustom vc-rcs-master-templates (purecopy '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) From 7bd302ebcb9562d98abc1c6c63f42967fc46007e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 16:21:57 -0700 Subject: [PATCH 031/128] Remove duplication of vc-sccs-registered definition * lisp/vc/vc-sccs.el (vc-sccs-registered): Use the progn trick to get the full definition in loaddefs, rather than duplicating it. Cf vc-rcs-registered. --- lisp/ChangeLog | 3 +++ lisp/vc/vc-sccs.el | 13 ++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 072fb1bd1f4..f567369b46b 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-29 Glenn Morris + * vc/vc-sccs.el (vc-sccs-registered): Use the progn trick to get + the full definition in loaddefs, rather than duplicating it. + * help-macro.el (three-step-help): No need to autoload defcustom. * progmodes/inf-lisp.el (inferior-lisp-filter-regexp) diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index 82f30b509ff..026aab1c412 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -107,13 +107,12 @@ For a description of possible values, see `vc-check-master-templates'." ;;; State-querying functions ;;; -;; The autoload cookie below places vc-sccs-registered directly into -;; loaddefs.el, so that vc-sccs.el does not need to be loaded for -;; every file that is visited. The definition is repeated below -;; so that Help and etags can find it. - -;;;###autoload (defun vc-sccs-registered(f) (vc-default-registered 'SCCS f)) -(defun vc-sccs-registered (f) (vc-default-registered 'SCCS f)) +;; The autoload cookie below places vc-rcs-registered directly into +;; loaddefs.el, so that vc-rcs.el does not need to be loaded for +;; every file that is visited. +;;;###autoload +(progn +(defun vc-sccs-registered (f) (vc-default-registered 'SCCS f))) (defun vc-sccs-state (file) "SCCS-specific function to compute the version control state." From 5cc2e639c3eacf72c4864c45454a196279a0d512 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 16:52:03 -0700 Subject: [PATCH 032/128] Use define-minor-mode for winner-mode * lisp/winner.el (winner-mode): Remove variable (let define-minor-mode handle it). (winner-dont-bind-my-keys, winner-boring-buffers, winner-mode-hook): Doc fixes. (winner-mode-leave-hook): Rename to winner-mode-off-hook. (winner-mode): Use define-minor-mode. * etc/NEWS: Mention winner-mode-hook. --- etc/NEWS | 3 +++ lisp/ChangeLog | 7 +++++ lisp/winner.el | 70 ++++++++++++++++---------------------------------- 3 files changed, 32 insertions(+), 48 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index d860baa014b..b2444edcafe 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -568,6 +568,9 @@ in case that is not properly encoded. ** which-function-mode now applies to all applicable major modes by default. +--- +** winner-mode-hook now runs when the mode is disabled, as well as when it is +enabled. ** FIXME something happened to ses.el, 2012-04-17. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f567369b46b..5dc8d4eb87e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2012-09-29 Glenn Morris + * winner.el (winner-mode): Remove variable (let define-minor-mode + handle it). + (winner-dont-bind-my-keys, winner-boring-buffers, winner-mode-hook): + Doc fixes. + (winner-mode-leave-hook): Rename to winner-mode-off-hook. + (winner-mode): Use define-minor-mode. + * vc/vc-sccs.el (vc-sccs-registered): Use the progn trick to get the full definition in loaddefs, rather than duplicating it. diff --git a/lisp/winner.el b/lisp/winner.el index d808a54a10e..453330598b6 100644 --- a/lisp/winner.el +++ b/lisp/winner.el @@ -63,19 +63,8 @@ "Restoring window configurations." :group 'windows) -;;;###autoload -(defcustom winner-mode nil - "Toggle Winner mode. -Setting this variable directly does not take effect; -use either \\[customize] or the function `winner-mode'." - :set #'(lambda (symbol value) (funcall symbol (or value 0))) - :initialize 'custom-initialize-default - :type 'boolean - :group 'winner - :require 'winner) - (defcustom winner-dont-bind-my-keys nil - "If non-nil: Do not use `winner-mode-map' in Winner mode." + "Non-nil means do not use `winner-mode-map' in Winner mode." :type 'boolean :group 'winner) @@ -85,15 +74,13 @@ use either \\[customize] or the function `winner-mode'." :group 'winner) (defcustom winner-boring-buffers '("*Completions*") - "`winner-undo' will not restore windows displaying any of these buffers. + "List of buffer names whose windows `winner-undo' will not restore. You may want to include buffer names such as *Help*, *Apropos*, *Buffer List*, *info* and *Compile-Log*." :type '(repeat string) :group 'winner) - - ;;;; Saving old configurations (internal variables and subroutines) @@ -337,11 +324,14 @@ You may want to include buffer names such as *Help*, *Apropos*, ;;;; Winner mode (a minor mode) (defcustom winner-mode-hook nil - "Functions to run whenever Winner mode is turned on." + "Functions to run whenever Winner mode is turned on or off." :type 'hook :group 'winner) -(defcustom winner-mode-leave-hook nil +(define-obsolete-variable-alias 'winner-mode-leave-hook + 'winner-mode-off-hook "24.3") + +(defcustom winner-mode-off-hook nil "Functions to run whenever Winner mode is turned off." :type 'hook :group 'winner) @@ -364,37 +354,21 @@ You may want to include buffer names such as *Help*, *Apropos*, ;;;###autoload -(defun winner-mode (&optional arg) - "Toggle Winner mode. -With arg, turn Winner mode on if and only if arg is positive." - (interactive "P") - (let ((on-p (if arg (> (prefix-numeric-value arg) 0) - (not winner-mode)))) - (cond - ;; Turn mode on - (on-p - (setq winner-mode t) - (cond - ((winner-hook-installed-p) - (add-hook 'window-configuration-change-hook 'winner-change-fun) - (add-hook 'post-command-hook 'winner-save-old-configurations)) - (t (add-hook 'post-command-hook 'winner-save-conditionally))) - (add-hook 'minibuffer-setup-hook 'winner-save-unconditionally) - (setq winner-modified-list (frame-list)) - (winner-save-old-configurations) - (run-hooks 'winner-mode-hook) - (when (called-interactively-p 'interactive) - (message "Winner mode enabled"))) - ;; Turn mode off - (winner-mode - (setq winner-mode nil) - (remove-hook 'window-configuration-change-hook 'winner-change-fun) - (remove-hook 'post-command-hook 'winner-save-old-configurations) - (remove-hook 'post-command-hook 'winner-save-conditionally) - (remove-hook 'minibuffer-setup-hook 'winner-save-unconditionally) - (run-hooks 'winner-mode-leave-hook) - (when (called-interactively-p 'interactive) - (message "Winner mode disabled")))))) +(define-minor-mode winner-mode nil :global t ; let d-m-m make the doc + (if winner-mode + (progn + (if (winner-hook-installed-p) + (progn + (add-hook 'window-configuration-change-hook 'winner-change-fun) + (add-hook 'post-command-hook 'winner-save-old-configurations)) + (add-hook 'post-command-hook 'winner-save-conditionally)) + (add-hook 'minibuffer-setup-hook 'winner-save-unconditionally) + (setq winner-modified-list (frame-list)) + (winner-save-old-configurations)) + (remove-hook 'window-configuration-change-hook 'winner-change-fun) + (remove-hook 'post-command-hook 'winner-save-old-configurations) + (remove-hook 'post-command-hook 'winner-save-conditionally) + (remove-hook 'minibuffer-setup-hook 'winner-save-unconditionally))) ;; Inspired by undo (simple.el) From 9d4dcdc961052a421cc9b97200eb635b29baa13b Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 29 Sep 2012 18:29:53 -0700 Subject: [PATCH 033/128] * sysdep.c (handle_fatal_signal): Bump backtrace size to 40. Suggested by Eli Zaretskii in . --- src/ChangeLog | 6 ++++++ src/sysdep.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3400361bf3a..fd4319eb4b0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-09-30 Paul Eggert + + * sysdep.c (handle_fatal_signal): Bump backtrace size to 40. + Suggested by Eli Zaretskii in + . + 2012-09-29 Juanma Barranquero * makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. diff --git a/src/sysdep.c b/src/sysdep.c index f4e055c31a0..4deb022fb90 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -1549,7 +1549,7 @@ static char *my_sys_siglist[NSIG]; static void handle_fatal_signal (int sig) { - terminate_due_to_signal (sig, 10); + terminate_due_to_signal (sig, 40); } static void From 630d468c930e09e80d8100bb3cea1d1700c4b72e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 29 Sep 2012 19:27:36 -0700 Subject: [PATCH 034/128] Comment fix --- lisp/vc/vc-sccs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el index 026aab1c412..c4f6fd10bdb 100644 --- a/lisp/vc/vc-sccs.el +++ b/lisp/vc/vc-sccs.el @@ -107,8 +107,8 @@ For a description of possible values, see `vc-check-master-templates'." ;;; State-querying functions ;;; -;; The autoload cookie below places vc-rcs-registered directly into -;; loaddefs.el, so that vc-rcs.el does not need to be loaded for +;; The autoload cookie below places vc-sccs-registered directly into +;; loaddefs.el, so that vc-sccs.el does not need to be loaded for ;; every file that is visited. ;;;###autoload (progn From 98a5e33b90b50d363a6243e8be7d0290a69dbc42 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:10:13 -0400 Subject: [PATCH 035/128] * lisp/textmodes/tex-mode.el (tex-mode-map): Don't bind paren keys. --- lisp/ChangeLog | 4 ++++ lisp/textmodes/tex-mode.el | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5dc8d4eb87e..1646d2518dc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Stefan Monnier + + * textmodes/tex-mode.el (tex-mode-map): Don't bind paren keys. + 2012-09-29 Glenn Morris * winner.el (winner-mode): Remove variable (let define-minor-mode diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 620a1da633e..a324daa9283 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -860,10 +860,6 @@ START is the position of the \\ and DELIM is the delimiter char." (set-keymap-parent map text-mode-map) (tex-define-common-keys map) (define-key map "\"" 'tex-insert-quote) - (define-key map "(" 'skeleton-pair-insert-maybe) - (define-key map "{" 'skeleton-pair-insert-maybe) - (define-key map "[" 'skeleton-pair-insert-maybe) - (define-key map "$" 'skeleton-pair-insert-maybe) (define-key map "\n" 'tex-terminate-paragraph) (define-key map "\M-\r" 'latex-insert-item) (define-key map "\C-c}" 'up-list) From 4ffb41a99e7bbbc83715cab8d7710afcaa571eec Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:20:00 -0400 Subject: [PATCH 036/128] * lisp/textmodes/text-mode.el (paragraph-indent-minor-mode): Make it a proper minor-mode. --- lisp/ChangeLog | 3 +++ lisp/textmodes/text-mode.el | 23 +++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1646d2518dc..4d4312b03be 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-30 Stefan Monnier + * textmodes/text-mode.el (paragraph-indent-minor-mode): Make it + a proper minor-mode. + * textmodes/tex-mode.el (tex-mode-map): Don't bind paren keys. 2012-09-29 Glenn Morris diff --git a/lisp/textmodes/text-mode.el b/lisp/textmodes/text-mode.el index 30e5390a3e1..301f69f45be 100644 --- a/lisp/textmodes/text-mode.el +++ b/lisp/textmodes/text-mode.el @@ -80,18 +80,29 @@ Turning on Paragraph-Indent Text mode runs the normal hooks :abbrev-table nil :syntax-table nil (paragraph-indent-minor-mode)) -(defun paragraph-indent-minor-mode () +(define-minor-mode paragraph-indent-minor-mode "Minor mode for editing text, with leading spaces starting a paragraph. In this mode, you do not need blank lines between paragraphs when the first line of the following paragraph starts with whitespace, as with `paragraph-indent-text-mode'. Turning on Paragraph-Indent minor mode runs the normal hook `paragraph-indent-text-mode-hook'." - (interactive) - (set (make-local-variable 'paragraph-start) - (concat "[ \t\n\f]\\|" paragraph-start)) - (set (make-local-variable 'indent-line-function) 'indent-to-left-margin) - (run-hooks 'paragraph-indent-text-mode-hook)) + :initial-value nil + ;; Change the definition of a paragraph start. + (let ((ps-re "[ \t\n\f]\\|")) + (if (eq t (compare-strings ps-re nil nil + paragraph-start nil (length ps-re))) + (if (not paragraph-indent-minor-mode) + (set (make-local-variable 'paragraph-start) + (substring paragraph-start (length ps-re)))) + (if paragraph-indent-minor-mode + (set (make-local-variable 'paragraph-start) + (concat ps-re paragraph-start))))) + ;; Change the indentation function. + (if paragraph-indent-minor-mode + (set (make-local-variable 'indent-line-function) 'indent-to-left-margin) + (if (eq indent-line-function 'indent-to-left-margin) + (set (make-local-variable 'indent-line-function) 'indent-region)))) (defalias 'indented-text-mode 'text-mode) From 38a30d64628c84690467008888984d14683f9c9d Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:21:50 -0400 Subject: [PATCH 037/128] * lisp/tutorial.el (help-with-tutorial): Use minibuffer-with-setup-hook. --- lisp/ChangeLog | 2 ++ lisp/tutorial.el | 15 +++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4d4312b03be..a0697cdc546 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-09-30 Stefan Monnier + * tutorial.el (help-with-tutorial): Use minibuffer-with-setup-hook. + * textmodes/text-mode.el (paragraph-indent-minor-mode): Make it a proper minor-mode. diff --git a/lisp/tutorial.el b/lisp/tutorial.el index 64879e5cfd5..6f76068ea9d 100644 --- a/lisp/tutorial.el +++ b/lisp/tutorial.el @@ -765,14 +765,13 @@ Run the Viper tutorial? ")) (funcall 'viper-tutorial 0)) (message "Tutorial aborted by user")) (message prompt1))) - (let* ((lang (if arg - (let ((minibuffer-setup-hook minibuffer-setup-hook)) - (add-hook 'minibuffer-setup-hook - 'minibuffer-completion-help) - (read-language-name 'tutorial "Language: " "English")) - (if (get-language-info current-language-environment 'tutorial) - current-language-environment - "English"))) + (let* ((lang (cond + (arg + (minibuffer-with-setup-hook #'minibuffer-completion-help + (read-language-name 'tutorial "Language: " "English"))) + ((get-language-info current-language-environment 'tutorial) + current-language-environment) + (t "English"))) (filename (get-language-info lang 'tutorial)) (tut-buf-name filename) (old-tut-buf (get-buffer tut-buf-name)) From 23855148a2706fe5adeac444abfc2d1e71d911f8 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:26:52 -0400 Subject: [PATCH 038/128] * lisp/url/url-handlers.el (url-file-handler): Don't assume any url-FOO function is a good handler for FOO. (url-copy-file, url-file-local-copy, url-insert-file-contents) (url-file-name-completion, url-file-name-all-completions) (url-handlers-create-wrapper): Explicitly register as handler. --- lisp/url/ChangeLog | 8 ++++++++ lisp/url/url-handlers.el | 31 +++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 279db5ee3e4..a00d748a4a4 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,11 @@ +2012-09-30 Stefan Monnier + + * url-handlers.el (url-file-handler): Don't assume any url-FOO function + is a good handler for FOO. + (url-copy-file, url-file-local-copy, url-insert-file-contents) + (url-file-name-completion, url-file-name-all-completions) + (url-handlers-create-wrapper): Explicitly register as handler. + 2012-09-29 Bastien Guerry * url-util.el (url-insert-entities-in-string) diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el index f731f614d13..796980afbd5 100644 --- a/lisp/url/url-handlers.el +++ b/lisp/url/url-handlers.el @@ -137,11 +137,13 @@ like URLs \(Gnus is particularly bad at this\)." "Function called from the `file-name-handler-alist' routines. OPERATION is what needs to be done (`file-exists-p', etc). ARGS are the arguments that would have been passed to OPERATION." - (let ((fn (or (get operation 'url-file-handlers) - (intern-soft (format "url-%s" operation)))) + (let ((fn (get operation 'url-file-handlers)) (val nil) (hooked nil)) - (if (and fn (fboundp fn)) + (if (and (not fn) (intern-soft (format "url-%s" operation)) + (fboundp (intern-soft (format "url-%s" operation)))) + (error "Missing URL handler mapping for %s" operation)) + (if fn (setq hooked t val (save-match-data (apply fn args))) (setq hooked nil @@ -249,6 +251,7 @@ A prefix arg makes KEEP-TIME non-nil." (mm-save-part-to-file handle newname) (kill-buffer buffer) (mm-destroy-parts handle))) +(put 'copy-file 'url-file-handlers 'url-copy-file) ;;;###autoload (defun url-file-local-copy (url &rest ignored) @@ -258,6 +261,7 @@ accessible." (let ((filename (make-temp-file "url"))) (url-copy-file url filename 'ok-if-already-exists) filename)) +(put 'file-local-copy 'url-file-handlers 'url-file-local-copy) (defun url-insert (buffer &optional beg end) "Insert the body of a URL object. @@ -300,22 +304,29 @@ They count bytes from the beginning of the body." ;; usual heuristic/rules that we apply to files. (decode-coding-inserted-region start (point) url visit beg end replace)) (list url (car size-and-charset)))))) +(put 'insert-file-contents 'url-file-handlers 'url-insert-file-contents) (defun url-file-name-completion (url directory &optional predicate) (error "Unimplemented")) +(put 'file-name-completion 'url-file-handlers 'url-file-name-completion) (defun url-file-name-all-completions (file directory) (error "Unimplemented")) +(put 'file-name-all-completions + 'url-file-handlers 'url-file-name-all-completions) ;; All other handlers map onto their respective backends. (defmacro url-handlers-create-wrapper (method args) - `(defun ,(intern (format "url-%s" method)) ,args - ,(format "URL file-name-handler wrapper for `%s' call.\n---\n%s" method - (or (documentation method t) "No original documentation.")) - (setq url (url-generic-parse-url url)) - (when (url-type url) - (funcall (url-scheme-get-property (url-type url) (quote ,method)) - ,@(remove '&rest (remove '&optional args)))))) + `(progn + (defun ,(intern (format "url-%s" method)) ,args + ,(format "URL file-name-handler wrapper for `%s' call.\n---\n%s" method + (or (documentation method t) "No original documentation.")) + (setq url (url-generic-parse-url url)) + (when (url-type url) + (funcall (url-scheme-get-property (url-type url) (quote ,method)) + ,@(remove '&rest (remove '&optional args))))) + (unless (get ',method 'url-file-handlers) + (put ',method 'url-file-handlers ',(intern (format "url-%s" method)))))) (url-handlers-create-wrapper file-exists-p (url)) (url-handlers-create-wrapper file-attributes (url &optional id-format)) From 43711d4b0111f97442db6f3ccd79574c21ece81a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:28:38 -0400 Subject: [PATCH 039/128] * lisp/vc/ediff-util.el (ediff-diff-at-point): Don't assume point-min==1. --- lisp/ChangeLog | 2 ++ lisp/vc/ediff-util.el | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a0697cdc546..13daa83ac3d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-09-30 Stefan Monnier + * vc/ediff-util.el (ediff-diff-at-point): Don't assume point-min==1. + * tutorial.el (help-with-tutorial): Use minibuffer-with-setup-hook. * textmodes/text-mode.el (paragraph-indent-minor-mode): Make it diff --git a/lisp/vc/ediff-util.el b/lisp/vc/ediff-util.el index 78a2163f653..86293ade580 100644 --- a/lisp/vc/ediff-util.el +++ b/lisp/vc/ediff-util.el @@ -1907,8 +1907,8 @@ in the specified buffer." (cond ((eq which-diff 'after) (1+ diff-no)) ((eq which-diff 'before) diff-no) - ((< (abs (count-lines pos (max 1 prev-end))) - (abs (count-lines pos (max 1 beg)))) + ((< (abs (count-lines pos (max (point-min) prev-end))) + (abs (count-lines pos (max (point-min) beg)))) diff-no) ; choose prev difference (t (1+ diff-no))) ; choose next difference From 02661b3a811a769064ad91757fb681b52ae8f4a1 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:30:25 -0400 Subject: [PATCH 040/128] * lisp/vc/log-edit.el (log-edit-font-lock-keywords): Ignore case to chose face. (log-edit-empty-buffer-p): Don't require a space after a header. --- lisp/ChangeLog | 4 ++++ lisp/vc/log-edit.el | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 13daa83ac3d..98fc9066e3e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2012-09-30 Stefan Monnier + * vc/log-edit.el (log-edit-font-lock-keywords): Ignore case to + chose face. + (log-edit-empty-buffer-p): Don't require a space after a header. + * vc/ediff-util.el (ediff-diff-at-point): Don't assume point-min==1. * tutorial.el (help-with-tutorial): Use minibuffer-with-setup-hook. diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 2fc2e0ce46d..932abb9818c 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -343,14 +343,17 @@ automatically." `((log-edit-match-to-eoh (,(concat "^\\(\\([[:alpha:]]+\\):\\)" log-edit-header-contents-regexp) (progn (goto-char (match-beginning 0)) (match-end 0)) nil - (1 (if (assoc (match-string 2) log-edit-headers-alist) + (1 (if (assoc-string (match-string 2) log-edit-headers-alist t) 'log-edit-header 'log-edit-unknown-header) nil lax) ;; From `log-edit-header-contents-regexp': - (3 (or (cdr (assoc (match-string 2) log-edit-headers-alist)) + (3 (or (cdr (assoc-string (match-string 2) log-edit-headers-alist t)) 'log-edit-header) - nil lax))))) + nil lax)) + ("^\n" + (progn (goto-char (match-end 0)) (1+ (match-end 0))) nil + (0 '(:height 0.1 :inverse-video t)))))) (defvar log-edit-font-lock-gnu-style nil "If non-nil, highlight common failures to follow the GNU coding standards.") @@ -574,7 +577,7 @@ If you want to abort the commit, simply delete the buffer." (or (= (point-min) (point-max)) (save-excursion (goto-char (point-min)) - (while (and (looking-at "^\\([a-zA-Z]+: \\)?$") + (while (and (looking-at "^\\([a-zA-Z]+: ?\\)?$") (zerop (forward-line 1)))) (eobp)))) @@ -807,7 +810,7 @@ where LOGBUFFER is the name of the ChangeLog buffer, and each change-log-default-name) ;; `find-change-log' uses `change-log-default-name' if set ;; and sets it before exiting, so we need to work around - ;; that memoizing which is undesired here + ;; that memoizing which is undesired here. (setq change-log-default-name nil) (find-change-log))))) (with-current-buffer (find-file-noselect changelog-file-name) From e01c13fea4176aab4ec3dadc9e29e82efe967239 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 29 Sep 2012 23:44:35 -0400 Subject: [PATCH 041/128] * lisp/vc/pcvs.el (cvs-cleanup-collection): Keep entries that are currently visited in a buffer. (cvs-insert-visited-file): New function. (find-file-hook): Use it. * lisp/vc/pcvs-info.el (cvs-fileinfo-pp): Don't use non-existent faces. --- lisp/ChangeLog | 7 +++++++ lisp/vc/pcvs-info.el | 4 ++-- lisp/vc/pcvs.el | 25 +++++++++++++++++++++---- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 98fc9066e3e..093c87eba70 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2012-09-30 Stefan Monnier + * vc/pcvs.el (cvs-cleanup-collection): Keep entries that are currently + visited in a buffer. + (cvs-insert-visited-file): New function. + (find-file-hook): Use it. + + * vc/pcvs-info.el (cvs-fileinfo-pp): Don't use non-existent faces. + * vc/log-edit.el (log-edit-font-lock-keywords): Ignore case to chose face. (log-edit-empty-buffer-p): Don't require a space after a header. diff --git a/lisp/vc/pcvs-info.el b/lisp/vc/pcvs-info.el index 36572640cfc..e863096d587 100644 --- a/lisp/vc/pcvs-info.el +++ b/lisp/vc/pcvs-info.el @@ -124,7 +124,7 @@ to confuse some users sometimes." (define-obsolete-face-alias 'cvs-marked-face 'cvs-marked "22.1") (defface cvs-msg - '((t (:slant italic))) + '((t :slant italic)) "PCL-CVS face used to highlight CVS messages." :group 'pcl-cvs) (define-obsolete-face-alias 'cvs-msg-face 'cvs-msg "22.1") @@ -358,7 +358,7 @@ For use by the cookie package." ;;(MOD-CONFLICT "Not Removed") (`DEAD "") (_ (capitalize (symbol-name type))))) - (face (let ((sym (intern + (face (let ((sym (intern-soft (concat "cvs-fi-" (downcase (symbol-name type)) "-face")))) diff --git a/lisp/vc/pcvs.el b/lisp/vc/pcvs.el index 659151a31e9..4bc3eaf8c2c 100644 --- a/lisp/vc/pcvs.el +++ b/lisp/vc/pcvs.el @@ -60,8 +60,6 @@ ;; - rework the displaying of error messages. ;; - allow to flush messages only ;; - allow to protect files like ChangeLog from flushing -;; - automatically cvs-mode-insert files from find-file-hook -;; (and don't flush them as long as they are visited) ;; - query the user for cvs-get-marked (for some cmds or if nothing's selected) ;; - don't return the first (resp last) FI if the cursor is before ;; (resp after) it. @@ -877,7 +875,10 @@ RM-MSGS if non-nil means remove messages." ;; remove entries (`DEAD nil) ;; handled also? - (`UP-TO-DATE (not rm-handled)) + (`UP-TO-DATE + (if (find-buffer-visiting (cvs-fileinfo->full-name fi)) + t + (not rm-handled))) ;; keep the rest (_ (not (run-hook-with-args-until-success 'cvs-cleanup-functions fi)))))) @@ -1617,7 +1618,8 @@ With prefix argument, prompt for cvs flags." (defun-cvs-mode (cvs-mode-diff . DOUBLE) (flags) "Diff the selected files against the repository. This command compares the files in your working area against the -revision which they are based upon." +revision which they are based upon. +See also `cvs-diff-ignore-marks'." (interactive (list (cvs-add-branch-prefix (cvs-add-secondary-branch-prefix @@ -2435,6 +2437,21 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (add-hook 'after-save-hook 'cvs-mark-buffer-changed) +(defun cvs-insert-visited-file () + (let* ((file (expand-file-name buffer-file-name)) + (version (and (fboundp 'vc-backend) + (eq (vc-backend file) 'CVS) + (vc-working-revision file)))) + (when version + (save-current-buffer + (dolist (cvs-buf (buffer-list)) + (set-buffer cvs-buf) + ;; look for a corresponding pcl-cvs buffer + (when (and (eq major-mode 'cvs-mode) + (string-prefix-p default-directory file)) + (cvs-insert-file file))))))) + +(add-hook 'find-file-hook 'cvs-insert-visited-file 'append) (provide 'pcvs) From 34cf6f39526599378cc1d5800e707a8a6e80c8dd Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 30 Sep 2012 00:00:46 -0400 Subject: [PATCH 042/128] * lisp/winner.el (winner-mode-map): Obey winner-dont-bind-my-keys here. (minor-mode-map-alist): Remove redundant code. --- lisp/ChangeLog | 3 +++ lisp/winner.el | 14 ++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 093c87eba70..7e41ddc2ad1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-30 Stefan Monnier + * winner.el (winner-mode-map): Obey winner-dont-bind-my-keys here. + (minor-mode-map-alist): Remove redundant code. + * vc/pcvs.el (cvs-cleanup-collection): Keep entries that are currently visited in a buffer. (cvs-insert-visited-file): New function. diff --git a/lisp/winner.el b/lisp/winner.el index 453330598b6..65b3d30a80c 100644 --- a/lisp/winner.el +++ b/lisp/winner.el @@ -64,7 +64,7 @@ :group 'windows) (defcustom winner-dont-bind-my-keys nil - "Non-nil means do not use `winner-mode-map' in Winner mode." + "Non-nil means do not bind keys in Winner mode." :type 'boolean :group 'winner) @@ -338,8 +338,9 @@ You may want to include buffer names such as *Help*, *Apropos*, (defvar winner-mode-map (let ((map (make-sparse-keymap))) - (define-key map [(control c) left] 'winner-undo) - (define-key map [(control c) right] 'winner-redo) + (unless winner-dont-bind-my-keys + (define-key map [(control c) left] 'winner-undo) + (define-key map [(control c) right] 'winner-redo)) map) "Keymap for Winner mode.") @@ -435,12 +436,5 @@ In other words, \"undo\" changes in window configuration." (message "Winner undid undo"))) (t (error "Previous command was not a `winner-undo'")))) -;;; To be evaluated when the package is loaded: - -(unless (or (assq 'winner-mode minor-mode-map-alist) - winner-dont-bind-my-keys) - (push (cons 'winner-mode winner-mode-map) - minor-mode-map-alist)) - (provide 'winner) ;;; winner.el ends here From 65788e2e93a48015493514b7e8b712700d31a7a2 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 29 Sep 2012 21:19:32 -0700 Subject: [PATCH 043/128] Merge from gnulib. --- ChangeLog | 5 +++++ m4/extern-inline.m4 | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c7de7d7c14d..411ef633420 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-09-30 Paul Eggert + + Merge from gnulib, incorporating: + 2012-09-28 extern-inline: provide a -Wundef safe config.h + 2012-09-27 Paul Eggert Check more robustly for timer_settime. diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4 index 12f24fab95f..600c8d3fa17 100644 --- a/m4/extern-inline.m4 +++ b/m4/extern-inline.m4 @@ -18,7 +18,9 @@ AC_DEFUN([gl_EXTERN_INLINE], . _GL_INLINE_HEADER_END contains useful stuff to put in the same include file, after uses of _GL_INLINE. */ -#if __GNUC__ ? __GNUC_STDC_INLINE__ : 199901L <= __STDC_VERSION__ +#if (__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : 199901L <= __STDC_VERSION__) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline #elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) @@ -35,7 +37,7 @@ AC_DEFUN([gl_EXTERN_INLINE], #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) -# if __GNUC_STDC_INLINE__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ From d89460ed93e67852a95a597a7a1a7983e8828fb9 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 29 Sep 2012 23:19:33 -0700 Subject: [PATCH 044/128] Profiler improvements: more-accurate timers, overflow checks. * profiler.c: Don't include stdio.h, limits.h, sys/time.h, signal.h, setjmp.h. Include systime.h instead. (saturated_add): New function. (record_backtrace, current_sample_interval): Use EMACS_INT, not size_t. (record_backtrace, handle_profiler_signal): Saturate on fixnum overflow. (profiler_timer, profiler_timer_ok) [HAVE_TIMER_SETTIME]: New static vars. (enum profiler_cpu_running): New enumn. (profiler_cpu_running): Now of that enum type, not bool. All uses changed to store the new value. (handle_profiler_signal): Rename from sigprof_handler_1, for consistency with other handlers. Do not check whether cpu_log is a hash-table if garbage collecting, since it doesn't matter in that case. (deliver_profiler_signal): Rename from sigprof_handler, for consistency with other handlers. (setup_cpu_timer): New function, with much of what used to be in Fprofiler_cpu_start. Check for out-of-range argument. Prefer timer_settime if available, and prefer thread cputime clocks, then process cputime clocks, then monotonic clocks, to the old realtime clock. Use make_timeval to round more-correctly when falling back to setitimer. (Fprofiler_cpu_start): Use it. (Fprofiler_cpu_stop): Prefer timer_settime if available. Don't assume that passing NULL as the 2nd argument of setitimer is the same as passing a pointer to all-zero storage. Ignore SIGPROF afterwards. (malloc_probe): Saturate at MOST_POSITIVE_FIXNUM. * sysdep.c (emacs_sigaction_init): Also mask out SIGPROF in non-fatal signal handlers. Ignore SIGPROF on startup. * syssignal.h (PROFILER_CPU_SUPPORT): Define this macro here, not in profiler.c, since sysdep.c now uses it. --- src/ChangeLog | 34 +++++++++ src/profiler.c | 189 ++++++++++++++++++++++++++++++++++-------------- src/sysdep.c | 5 +- src/syssignal.h | 4 + 4 files changed, 178 insertions(+), 54 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index fd4319eb4b0..97f955e7136 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,39 @@ 2012-09-30 Paul Eggert + Profiler improvements: more-accurate timers, overflow checks. + * profiler.c: Don't include stdio.h, limits.h, sys/time.h, + signal.h, setjmp.h. Include systime.h instead. + (saturated_add): New function. + (record_backtrace, current_sample_interval): Use EMACS_INT, not size_t. + (record_backtrace, handle_profiler_signal): Saturate on fixnum overflow. + (profiler_timer, profiler_timer_ok) [HAVE_TIMER_SETTIME]: + New static vars. + (enum profiler_cpu_running): New enumn. + (profiler_cpu_running): Now of that enum type, not bool. + All uses changed to store the new value. + (handle_profiler_signal): Rename from sigprof_handler_1, + for consistency with other handlers. Do not check whether + cpu_log is a hash-table if garbage collecting, since it + doesn't matter in that case. + (deliver_profiler_signal): Rename from sigprof_handler, + for consistency with other handlers. + (setup_cpu_timer): New function, with much of what used to be in + Fprofiler_cpu_start. Check for out-of-range argument. + Prefer timer_settime if available, and prefer + thread cputime clocks, then process cputime clocks, then + monotonic clocks, to the old realtime clock. Use make_timeval + to round more-correctly when falling back to setitimer. + (Fprofiler_cpu_start): Use it. + (Fprofiler_cpu_stop): Prefer timer_settime if available. + Don't assume that passing NULL as the 2nd argument of setitimer + is the same as passing a pointer to all-zero storage. + Ignore SIGPROF afterwards. + (malloc_probe): Saturate at MOST_POSITIVE_FIXNUM. + * sysdep.c (emacs_sigaction_init): Also mask out SIGPROF in + non-fatal signal handlers. Ignore SIGPROF on startup. + * syssignal.h (PROFILER_CPU_SUPPORT): Define this macro here, not + in profiler.c, since sysdep.c now uses it. + * sysdep.c (handle_fatal_signal): Bump backtrace size to 40. Suggested by Eli Zaretskii in . diff --git a/src/profiler.c b/src/profiler.c index 44a12fc159c..489c68b7291 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -18,13 +18,18 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ #include -#include -#include -#include -#include -#include #include "lisp.h" #include "syssignal.h" +#include "systime.h" + +/* Return A + B, but return the maximum fixnum if the result would overflow. + Assume A and B are nonnegative and in fixnum range. */ + +static EMACS_INT +saturated_add (EMACS_INT a, EMACS_INT b) +{ + return min (a + b, MOST_POSITIVE_FIXNUM); +} /* Logs. */ @@ -122,14 +127,12 @@ static void evict_lower_half (log_t *log) } } -/* Record the current backtrace in LOG. BASE is a special name for - describing which the backtrace come from. BASE can be nil. COUNT is - a number how many times the profiler sees the backtrace at the - time. ELAPSED is a elapsed time in millisecond that the backtrace - took. */ +/* Record the current backtrace in LOG. COUNT is the weight of this + current backtrace: milliseconds for CPU counts, and the allocation + size for memory logs. */ static void -record_backtrace (log_t *log, size_t count) +record_backtrace (log_t *log, EMACS_INT count) { struct backtrace *backlist = backtrace_list; Lisp_Object backtrace; @@ -162,8 +165,11 @@ record_backtrace (log_t *log, size_t count) EMACS_UINT hash; ptrdiff_t j = hash_lookup (log, backtrace, &hash); if (j >= 0) - set_hash_value_slot (log, j, - make_number (count + XINT (HASH_VALUE (log, j)))); + { + EMACS_INT old_val = XINT (HASH_VALUE (log, j)); + EMACS_INT new_val = saturated_add (old_val, count); + set_hash_value_slot (log, j, make_number (new_val)); + } else { /* BEWARE! hash_put in general can allocate memory. But currently it only does that if log->next_free is nil. */ @@ -195,29 +201,35 @@ record_backtrace (log_t *log, size_t count) /* Sample profiler. */ /* FIXME: Add support for the CPU profiler in W32. */ -/* FIXME: the sigprof_handler suffers from race-conditions if the signal - is delivered to a thread other than the main Emacs thread. */ -#if defined SIGPROF && defined HAVE_SETITIMER -#define PROFILER_CPU_SUPPORT +#ifdef PROFILER_CPU_SUPPORT -/* True if sampling profiler is running. */ -static bool profiler_cpu_running; +/* The profiler timer and whether it was properly initialized, if + POSIX timers are available. */ +#ifdef HAVE_TIMER_SETTIME +static timer_t profiler_timer; +static bool profiler_timer_ok; +#endif +/* Status of sampling profiler. */ +static enum profiler_cpu_running + { NOT_RUNNING, TIMER_SETTIME_RUNNING, SETITIMER_RUNNING } + profiler_cpu_running; + +/* Hash-table log of CPU profiler. */ static Lisp_Object cpu_log; + /* Separate counter for the time spent in the GC. */ static EMACS_INT cpu_gc_count; -/* The current sample interval in millisecond. */ - -static int current_sample_interval; +/* The current sample interval in milliseconds. */ +static EMACS_INT current_sample_interval; /* Signal handler for sample profiler. */ static void -sigprof_handler_1 (int signal) +handle_profiler_signal (int signal) { - eassert (HASH_TABLE_P (cpu_log)); if (backtrace_list && EQ (backtrace_list->function, Qautomatic_gc)) /* Special case the time-count inside GC because the hash-table code is not prepared to be used while the GC is running. @@ -225,27 +237,90 @@ sigprof_handler_1 (int signal) not expect the ARRAY_MARK_FLAG to be set. We could try and harden the hash-table code, but it doesn't seem worth the effort. */ - cpu_gc_count += current_sample_interval; + cpu_gc_count = saturated_add (cpu_gc_count, current_sample_interval); else - record_backtrace (XHASH_TABLE (cpu_log), current_sample_interval); + { + eassert (HASH_TABLE_P (cpu_log)); + record_backtrace (XHASH_TABLE (cpu_log), current_sample_interval); + } } static void -sigprof_handler (int signal) +deliver_profiler_signal (int signal) { - deliver_process_signal (signal, sigprof_handler_1); + deliver_process_signal (signal, handle_profiler_signal); +} + +static enum profiler_cpu_running +setup_cpu_timer (Lisp_Object sample_interval) +{ + struct sigaction action; + struct itimerval timer; + struct timespec interval; + + if (! RANGED_INTEGERP (1, sample_interval, + (TYPE_MAXIMUM (time_t) < EMACS_INT_MAX / 1000 + ? (EMACS_INT) TYPE_MAXIMUM (time_t) * 1000 + 999 + : EMACS_INT_MAX))) + return NOT_RUNNING; + + current_sample_interval = XINT (sample_interval); + interval = make_emacs_time (current_sample_interval / 1000, + current_sample_interval % 1000 * 1000000); + emacs_sigaction_init (&action, deliver_profiler_signal); + sigaction (SIGPROF, &action, 0); + +#ifdef HAVE_TIMER_SETTIME + if (! profiler_timer_ok) + { + /* System clocks to try, in decreasing order of desirability. */ + static clockid_t const system_clock[] = { +#ifdef CLOCK_THREAD_CPUTIME_ID + CLOCK_THREAD_CPUTIME_ID, +#endif +#ifdef CLOCK_PROCESS_CPUTIME_ID + CLOCK_PROCESS_CPUTIME_ID, +#endif +#ifdef CLOCK_MONOTONIC + CLOCK_MONOTONIC, +#endif + CLOCK_REALTIME + }; + int i; + struct sigevent sigev; + sigev.sigev_value.sival_ptr = &profiler_timer; + sigev.sigev_signo = SIGPROF; + sigev.sigev_notify = SIGEV_SIGNAL; + + for (i = 0; i < sizeof system_clock / sizeof *system_clock; i++) + if (timer_create (system_clock[i], &sigev, &profiler_timer) == 0) + { + profiler_timer_ok = 1; + break; + } + } + + if (profiler_timer_ok) + { + struct itimerspec ispec; + ispec.it_value = ispec.it_interval = interval; + timer_settime (profiler_timer, 0, &ispec, 0); + return TIMER_SETTIME_RUNNING; + } +#endif + + timer.it_value = timer.it_interval = make_timeval (interval); + setitimer (ITIMER_PROF, &timer, 0); + return SETITIMER_RUNNING; } DEFUN ("profiler-cpu-start", Fprofiler_cpu_start, Sprofiler_cpu_start, 1, 1, 0, doc: /* Start or restart the cpu profiler. -The cpu profiler will take call-stack samples each SAMPLE-INTERVAL (expressed in milliseconds). +It takes call-stack samples each SAMPLE-INTERVAL milliseconds. See also `profiler-log-size' and `profiler-max-stack-depth'. */) (Lisp_Object sample_interval) { - struct sigaction sa; - struct itimerval timer; - if (profiler_cpu_running) error ("Sample profiler is already running"); @@ -256,19 +331,9 @@ See also `profiler-log-size' and `profiler-max-stack-depth'. */) profiler_max_stack_depth); } - current_sample_interval = XINT (sample_interval); - - sa.sa_handler = sigprof_handler; - sa.sa_flags = SA_RESTART; - sigemptyset (&sa.sa_mask); - sigaction (SIGPROF, &sa, 0); - - timer.it_interval.tv_sec = 0; - timer.it_interval.tv_usec = current_sample_interval * 1000; - timer.it_value = timer.it_interval; - setitimer (ITIMER_PROF, &timer, 0); - - profiler_cpu_running = true; + profiler_cpu_running = setup_cpu_timer (sample_interval); + if (! profiler_cpu_running) + error ("Invalid sample interval"); return Qt; } @@ -279,12 +344,30 @@ DEFUN ("profiler-cpu-stop", Fprofiler_cpu_stop, Sprofiler_cpu_stop, Return non-nil if the profiler was running. */) (void) { - if (!profiler_cpu_running) - return Qnil; - profiler_cpu_running = false; + switch (profiler_cpu_running) + { + case NOT_RUNNING: + return Qnil; - setitimer (ITIMER_PROF, 0, 0); + case TIMER_SETTIME_RUNNING: + { + struct itimerspec disable; + memset (&disable, 0, sizeof disable); + timer_settime (profiler_timer, 0, &disable, 0); + } + break; + case SETITIMER_RUNNING: + { + struct itimerval disable; + memset (&disable, 0, sizeof disable); + setitimer (ITIMER_PROF, &disable, 0); + } + break; + } + + signal (SIGPROF, SIG_IGN); + profiler_cpu_running = NOT_RUNNING; return Qt; } @@ -307,7 +390,7 @@ Before returning, a new log is allocated for future samples. */) (void) { Lisp_Object result = cpu_log; - /* Here we're making the log visible to Elisp , so it's not safe any + /* Here we're making the log visible to Elisp, so it's not safe any more for our use afterwards since we can't rely on its special pre-allocated keys anymore. So we have to allocate a new one. */ cpu_log = (profiler_cpu_running @@ -319,7 +402,7 @@ Before returning, a new log is allocated for future samples. */) cpu_gc_count = 0; return result; } -#endif /* not defined PROFILER_CPU_SUPPORT */ +#endif /* PROFILER_CPU_SUPPORT */ /* Memory profiler. */ @@ -399,7 +482,7 @@ void malloc_probe (size_t size) { eassert (HASH_TABLE_P (memory_log)); - record_backtrace (XHASH_TABLE (memory_log), size); + record_backtrace (XHASH_TABLE (memory_log), min (size, MOST_POSITIVE_FIXNUM)); } void @@ -415,7 +498,7 @@ to make room for new entries. */); profiler_log_size = 10000; #ifdef PROFILER_CPU_SUPPORT - profiler_cpu_running = false; + profiler_cpu_running = NOT_RUNNING; cpu_log = Qnil; staticpro (&cpu_log); defsubr (&Sprofiler_cpu_start); diff --git a/src/sysdep.c b/src/sysdep.c index 4deb022fb90..b7141011d05 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -1447,6 +1447,9 @@ emacs_sigaction_init (struct sigaction *action, signal_handler_t handler) #ifdef SIGDANGER sigaddset (&action->sa_mask, SIGDANGER); #endif +#ifdef PROFILER_CPU_SUPPORT + sigaddset (&action->sa_mask, SIGPROF); +#endif #ifdef SIGWINCH sigaddset (&action->sa_mask, SIGWINCH); #endif @@ -1837,7 +1840,7 @@ init_signals (bool dumping) #endif sigaction (SIGTERM, &process_fatal_action, 0); #ifdef SIGPROF - sigaction (SIGPROF, &process_fatal_action, 0); + signal (SIGPROF, SIG_IGN); #endif #ifdef SIGVTALRM sigaction (SIGVTALRM, &process_fatal_action, 0); diff --git a/src/syssignal.h b/src/syssignal.h index 5c0edaa591d..0bc856769ba 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -29,6 +29,10 @@ extern void init_signals (bool); #define FORWARD_SIGNAL_TO_MAIN_THREAD #endif +#if defined SIGPROF && (defined HAVE_TIMER_SETTIME || defined HAVE_SETITIMER) +# define PROFILER_CPU_SUPPORT +#endif + extern sigset_t empty_mask; typedef void (*signal_handler_t) (int); From 84f72efd0c52bbae42a5169d9a94ad0feacb789e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 30 Sep 2012 09:26:32 +0200 Subject: [PATCH 045/128] Fix compilation failure introduced in 2012-09-30T06:19:33Z!eggert@cs.ucla.edu. src/profiler.c (Fprofiler_cpu_stop): Use timer_settime only if HAVE_TIMER_SETTIME is defined. --- src/ChangeLog | 7 ++++++- src/profiler.c | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 97f955e7136..cb8692b4589 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-30 Eli Zaretskii + + * profiler.c (Fprofiler_cpu_stop): Use timer_settime only if + HAVE_TIMER_SETTIME is defined. + 2012-09-30 Paul Eggert Profiler improvements: more-accurate timers, overflow checks. @@ -8,7 +13,7 @@ (record_backtrace, handle_profiler_signal): Saturate on fixnum overflow. (profiler_timer, profiler_timer_ok) [HAVE_TIMER_SETTIME]: New static vars. - (enum profiler_cpu_running): New enumn. + (enum profiler_cpu_running): New enum. (profiler_cpu_running): Now of that enum type, not bool. All uses changed to store the new value. (handle_profiler_signal): Rename from sigprof_handler_1, diff --git a/src/profiler.c b/src/profiler.c index 489c68b7291..90a85c5230e 100644 --- a/src/profiler.c +++ b/src/profiler.c @@ -349,6 +349,7 @@ Return non-nil if the profiler was running. */) case NOT_RUNNING: return Qnil; +#ifdef HAVE_TIMER_SETTIME case TIMER_SETTIME_RUNNING: { struct itimerspec disable; @@ -356,6 +357,7 @@ Return non-nil if the profiler was running. */) timer_settime (profiler_timer, 0, &disable, 0); } break; +#endif case SETITIMER_RUNNING: { From cb5b02667a8dcfc00d990103b2fb3236259bd627 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 30 Sep 2012 01:15:11 -0700 Subject: [PATCH 046/128] * syssignal.h (PROFILER_CPU_SUPPORT): Don't define if PROFILING. Suggested by Eli Zaretskii in . --- src/ChangeLog | 6 ++++++ src/syssignal.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index cb8692b4589..e07f7e131cb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-09-30 Paul Eggert + + * syssignal.h (PROFILER_CPU_SUPPORT): Don't define if PROFILING. + Suggested by Eli Zaretskii in + . + 2012-09-30 Eli Zaretskii * profiler.c (Fprofiler_cpu_stop): Use timer_settime only if diff --git a/src/syssignal.h b/src/syssignal.h index 0bc856769ba..ece2515dec9 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -29,7 +29,8 @@ extern void init_signals (bool); #define FORWARD_SIGNAL_TO_MAIN_THREAD #endif -#if defined SIGPROF && (defined HAVE_TIMER_SETTIME || defined HAVE_SETITIMER) +#if (defined SIGPROF && (defined HAVE_TIMER_SETTIME || defined HAVE_SETITIMER) \ + && !defined PROFILING) # define PROFILER_CPU_SUPPORT #endif From c4c0c2dff6a733c411119418de41e2fb3a72b262 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 30 Sep 2012 16:24:56 +0800 Subject: [PATCH 047/128] * help-fns.el (help-fns--obsolete): Fix last change. --- lisp/ChangeLog | 4 ++++ lisp/help-fns.el | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7e41ddc2ad1..4b1ba1e6606 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Chong Yidong + + * help-fns.el (help-fns--obsolete): Fix last change. + 2012-09-30 Stefan Monnier * winner.el (winner-mode-map): Obey winner-dont-bind-my-keys here. diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 7dc7eebb061..ef482f8f0e9 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -494,8 +494,7 @@ suitable file is found, return nil." (use (car obsolete))) (when obsolete (insert "\nThis " - (if (eq (car-safe (symbol-function 'with-current-buffer)) - 'macro) + (if (eq (car-safe (symbol-function function)) 'macro) "macro" "function") " is obsolete") From d39d3c8e5f4738a405aa2b36ed7895e92dfa5a4b Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 30 Sep 2012 16:35:11 +0800 Subject: [PATCH 048/128] * lisp/bindings.el (goto-map): Bind M-g TAB to move-to-column. --- etc/NEWS | 14 +++++++++----- lisp/ChangeLog | 2 ++ lisp/bindings.el | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index b2444edcafe..d95c707ba36 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -184,6 +184,15 @@ The PCL-CVS commands are still available via the keyboard. * Editing Changes in Emacs 24.3 +** Navigation command changes + +*** New binding `M-g c' for `goto-char'. + +*** New binding `M-g TAB' for `move-to-column'. + +*** `M-g TAB' (`move-to-column') prompts for a column number if called +interactively with no prefix arg. Previously, it moved to column 1. + +++ ** `C-x 8 RET' is now bound to `insert-char', which is now a command. `ucs-insert' is now an obsolete alias for `insert-char'. @@ -226,11 +235,6 @@ append-to-register and M-x prepend-to-register. ** `C-u M-=' now counts lines/words/characters in the entire buffer. -** New binding `M-g c' for `goto-char'. - -** M-x move-to-column, if called interactively with no prefix arg, now -prompts for a column number. - ** New command `C-x r M-w' (copy-rectangle-as-kill). It copies the region-rectangle as the last rectangle kill. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4b1ba1e6606..f9a81c2b7cb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,7 @@ 2012-09-30 Chong Yidong + * bindings.el (goto-map): Bind M-g TAB to move-to-column. + * help-fns.el (help-fns--obsolete): Fix last change. 2012-09-30 Stefan Monnier diff --git a/lisp/bindings.el b/lisp/bindings.el index 7ca1bf4719f..b4f9d29fe52 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -898,6 +898,7 @@ if `inhibit-field-text-motion' is non-nil." (define-key goto-map "\M-n" 'next-error) (define-key goto-map "p" 'previous-error) (define-key goto-map "\M-p" 'previous-error) +(define-key goto-map "\t" 'move-to-column) (defvar search-map (make-sparse-keymap) "Keymap for search related commands.") From a97dc380601446c00adfbd1d8e86e73e7d81a359 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 30 Sep 2012 16:41:37 +0800 Subject: [PATCH 049/128] Minor code tweak for delete-trailing-whitespace. * lisp/simple.el (delete-trailing-whitespace): Avoid an unnecessary restriction change. --- lisp/ChangeLog | 3 +++ lisp/simple.el | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f9a81c2b7cb..65ff71c74f8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2012-09-30 Chong Yidong + * simple.el (delete-trailing-whitespace): Avoid an unnecessary + restriction change. + * bindings.el (goto-map): Bind M-g TAB to move-to-column. * help-fns.el (help-fns--obsolete): Fix last change. diff --git a/lisp/simple.el b/lisp/simple.el index 417dedb43db..616a4d7b1ea 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -606,7 +606,7 @@ buffer if the variable `delete-trailing-lines' is non-nil." (when (and (not end) delete-trailing-lines ;; Really the end of buffer. - (save-restriction (widen) (eobp)) + (= (point-max) (1+ (buffer-size))) (<= (skip-chars-backward "\n") -2)) (delete-region (1+ (point)) end-marker)) (set-marker end-marker nil)))) From 5938d5196d09aff887aa74603c102b1f303a613a Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sun, 30 Sep 2012 11:10:59 +0200 Subject: [PATCH 050/128] Handle window-height and window-width alist entries in `display-buffer'. In buffer display functions handle window-height/window-width alist entries. Suggested by Juri Linkov as fix for Bug#1806. * window.el (window--display-buffer): New argument ALIST. Obey window-height and window-width alist entries. (window--try-to-split-window): New argument ALIST. Bind window-combination-limit to t when the window's size shall be changed and window-combination-limit equals `window-size'. (display-buffer-in-atom-window) (display-buffer-in-major-side-window) (display-buffer-in-side-window, display-buffer-same-window) (display-buffer-reuse-window, display-buffer-pop-up-frame) (display-buffer-pop-up-window, display-buffer-below-selected) (display-buffer-at-bottom, display-buffer-in-previous-window) (display-buffer-use-some-window): Adjust all callers of window--display-buffer and window--try-to-split-window. (fit-frame-to-buffer): New option. (fit-window-to-buffer): Can resize frames if fit-frame-to-buffer is non-nil. (display-buffer-in-major-side-window): Evaluate window-height / window-width alist entries. * help.el (temp-buffer-resize-frames) (temp-buffer-resize-regexps): Remove options. (temp-buffer-resize-mode): Adjust doc-string. (resize-temp-buffer-window): Don't consult temp-buffer-resize-regexps. Use fit-frame-to-buffer instead of temp-buffer-resize-frames. * dired.el (dired-mark-pop-up): Call display-buffer-below-selected with a fit-window-to-buffer alist entry. * window.c (Vwindow_combination_limit): New default value. (Qwindow_size): New symbol replacing Qtemp_buffer_resize. --- etc/NEWS | 10 +- lisp/ChangeLog | 34 +++++ lisp/dired.el | 3 +- lisp/help.el | 70 +++------- lisp/window.el | 354 ++++++++++++++++++++++++++++++------------------- src/ChangeLog | 6 + src/window.c | 20 +-- 7 files changed, 295 insertions(+), 202 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index d95c707ba36..616db77fe02 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -738,14 +738,11 @@ now accept a third argument to avoid choosing the selected window. *** New macro `with-temp-buffer-window'. -*** New options `temp-buffer-resize-frames' and -`temp-buffer-resize-regexps'. - *** `temp-buffer-resize-mode' no longer resizes windows that have been reused. -*** New function `fit-frame-to-buffer' and new option -`fit-frame-to-buffer-bottom-margin'. +*** New function `fit-frame-to-buffer' and new options +`fit-frame-to-buffer' and `fit-frame-to-buffer-bottom-margin'. *** New display action functions `display-buffer-below-selected', `display-buffer-at-bottom' and `display-buffer-in-previous-window'. @@ -760,6 +757,9 @@ non-nil, specifies frame parameters to give any newly-created frame. *** New display action alist entry `previous-window', if non-nil, specifies window to reuse in `display-buffer-in-previous-window'. +*** New display action alist entries `window-height' and `window-width' +to specify size of new window created by `display-buffer'. + *** The following variables are obsolete, as they can be replaced by appropriate entries in the `display-buffer-alist' function introduced in Emacs 24.1: diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 65ff71c74f8..3e1b93ae3ba 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,37 @@ +2012-09-30 Martin Rudalics + + In buffer display functions handle window-height/window-width + alist entries. Suggested by Juri Linkov as fix for Bug#1806. + * window.el (window--display-buffer): New argument ALIST. Obey + window-height and window-width alist entries. + (window--try-to-split-window): New argument ALIST. Bind + window-combination-limit to t when the window's size shall be + changed and window-combination-limit equals `window-size'. + (display-buffer-in-atom-window) + (display-buffer-in-major-side-window) + (display-buffer-in-side-window, display-buffer-same-window) + (display-buffer-reuse-window, display-buffer-pop-up-frame) + (display-buffer-pop-up-window, display-buffer-below-selected) + (display-buffer-at-bottom, display-buffer-in-previous-window) + (display-buffer-use-some-window): Adjust all callers of + window--display-buffer and window--try-to-split-window. + (fit-frame-to-buffer): New option. + (fit-window-to-buffer): Can resize frames if fit-frame-to-buffer + is non-nil. + (display-buffer-in-major-side-window): Evaluate window-height / + window-width alist entries. + + * help.el (temp-buffer-resize-frames) + (temp-buffer-resize-regexps): Remove options. + (temp-buffer-resize-mode): Adjust doc-string. + (resize-temp-buffer-window): Don't consult + temp-buffer-resize-regexps. Use fit-frame-to-buffer instead of + temp-buffer-resize-frames. + + * dired.el (dired-mark-pop-up): Call + display-buffer-below-selected with a fit-window-to-buffer alist + entry. + 2012-09-30 Chong Yidong * simple.el (delete-trailing-whitespace): Avoid an unnecessary diff --git a/lisp/dired.el b/lisp/dired.el index e0f90b321aa..8cb3902161a 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -2997,7 +2997,8 @@ argument or confirmation)." (let ((split-height-threshold 0)) (with-temp-buffer-window buffer - (cons 'display-buffer-below-selected nil) + (cons 'display-buffer-below-selected + '((window-height . fit-window-to-buffer))) #'(lambda (window _value) (with-selected-window window (unwind-protect diff --git a/lisp/help.el b/lisp/help.el index 707c8e3c84f..0df9c607f69 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -981,26 +981,6 @@ function is called, the window to be resized is selected." :group 'help :version "24.2") -(defcustom temp-buffer-resize-frames nil - "Non-nil means `temp-buffer-resize-mode' can resize frames. -A frame can be resized if and only if its root window is a live -window. The height of the root window is subject to the values of -`temp-buffer-max-height' and `window-min-height'." - :type 'boolean - :version "24.2" - :group 'help) - -(defcustom temp-buffer-resize-regexps nil - "List of regexps that inhibit Temp Buffer Resize mode. -Any window of a buffer whose name matches one of these regular -expressions is left alone by Temp Buffer Resize mode." - :type '(repeat - :tag "Buffer" - :value "" - (regexp :format "%v")) - :version "24.3" - :group 'help) - (define-minor-mode temp-buffer-resize-mode "Toggle auto-resizing temporary buffer windows (Temp Buffer Resize Mode). With a prefix argument ARG, enable Temp Buffer Resize mode if ARG @@ -1014,9 +994,8 @@ fit the buffer's contents, but never more than A window is resized only if it has been specially created for the buffer. Windows that have shown another buffer before are not -resized. A window showing a buffer whose name matches any of the -expressions in `temp-buffer-resize-regexps' is not resized. A -frame is resized only if `temp-buffer-resize-frames' is non-nil. +resized. A frame is resized only if `fit-frame-to-buffer' is +non-nil. This mode is used by `help', `apropos' and `completion' buffers, and some others." @@ -1034,33 +1013,28 @@ WINDOW can be any live window and defaults to the selected one. Do not make WINDOW higher than `temp-buffer-max-height' nor smaller than `window-min-height'. Do nothing if WINDOW is not vertically combined or some of its contents are scrolled out of -view. Do nothing if the name of WINDOW's buffer matches an -expression in `temp-buffer-resize-regexps'." +view." (setq window (window-normalize-window window t)) (let ((buffer-name (buffer-name (window-buffer window)))) - (unless (catch 'found - (dolist (regexp temp-buffer-resize-regexps) - (when (string-match regexp buffer-name) - (throw 'found t)))) - (let ((height (if (functionp temp-buffer-max-height) - (with-selected-window window - (funcall temp-buffer-max-height (window-buffer))) - temp-buffer-max-height)) - (quit-cadr (cadr (window-parameter window 'quit-restore)))) - (cond - ;; Don't resize WINDOW if it showed another buffer before. - ((and (eq quit-cadr 'window) - (pos-visible-in-window-p (point-min) window) - (window-combined-p window)) - (fit-window-to-buffer window height)) - ((and temp-buffer-resize-frames - (eq quit-cadr 'frame) - (eq window (frame-root-window window))) - (let ((frame (window-frame window))) - (fit-frame-to-buffer - frame (+ (frame-height frame) - (- (window-total-size window)) - height))))))))) + (let ((height (if (functionp temp-buffer-max-height) + (with-selected-window window + (funcall temp-buffer-max-height (window-buffer))) + temp-buffer-max-height)) + (quit-cadr (cadr (window-parameter window 'quit-restore)))) + (cond + ;; Don't resize WINDOW if it showed another buffer before. + ((and (eq quit-cadr 'window) + (pos-visible-in-window-p (point-min) window) + (window-combined-p window)) + (fit-window-to-buffer window height)) + ((and fit-frame-to-buffer + (eq quit-cadr 'frame) + (eq window (frame-root-window window))) + (let ((frame (window-frame window))) + (fit-frame-to-buffer + frame (+ (frame-height frame) + (- (window-total-size window)) + height)))))))) ;;; Help windows. (defcustom help-window-select 'other diff --git a/lisp/window.el b/lisp/window.el index b978eacc0be..3f399bc39fb 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -508,7 +508,7 @@ failed." (window-make-atom (window-parent window)) ;; Display BUFFER in NEW and return NEW. (window--display-buffer - buffer new 'window display-buffer-mark-dedicated)))) + buffer new 'window alist display-buffer-mark-dedicated)))) (defun window--atom-check-1 (window) "Subroutine of `window--atom-check'." @@ -677,12 +677,6 @@ The new window automatically becomes the \"major\" side window on SIDE. Return the new window, nil if its creation window failed." (let* ((root (frame-root-window)) (left-or-right (memq side '(left right))) - (size (or (assq 'size alist) - (/ (window-total-size (frame-root-window) left-or-right) - ;; By default use a fourth of the size of the - ;; frame's root window. This has to be made - ;; customizable via ALIST. - 4))) (major (window--major-side-window side)) (selected-window (selected-window)) (on-side (cond @@ -694,7 +688,7 @@ SIDE. Return the new window, nil if its creation window failed." ;; parent window unless needed. (window-combination-resize 'side) (window-combination-limit nil) - (new (split-window major (- size) on-side)) + (new (split-window major nil on-side)) fun) (when new ;; Initialize `window-side' parameter of new window to SIDE. @@ -705,8 +699,22 @@ SIDE. Return the new window, nil if its creation window failed." ;; the new window is deleted, a side window on the opposite side ;; does not get resized. (set-window-parameter new 'delete-window 'delete-side-window) + ;; Auto-adjust height/width of new window unless a size has been + ;; explicitly requested. + (unless (if left-or-right + (cdr (assq 'window-width alist)) + (cdr (assq 'window-height alist))) + (setq alist + (cons + (cons + (if left-or-right 'window-width 'window-height) + (/ (window-total-size (frame-root-window) left-or-right) + ;; By default use a fourth of the size of the + ;; frame's root window. + 4)) + alist))) ;; Install BUFFER in new window and return NEW. - (window--display-buffer buffer new 'window 'side)))) + (window--display-buffer buffer new 'window alist 'side)))) (defun delete-side-window (window) "Delete side window WINDOW." @@ -814,7 +822,7 @@ following symbols can be used: ;; ALIST (or, better, avoided in the "other" functions). (or (and this-window ;; Reuse `this-window'. - (window--display-buffer buffer this-window 'reuse 'side)) + (window--display-buffer buffer this-window 'reuse alist 'side)) (and (or (not max-slots) (< slots max-slots)) (or (and next-window ;; Make new window before `next-window'. @@ -839,13 +847,14 @@ following symbols can be used: window 'delete-window 'delete-side-window) window))) (set-window-parameter window 'window-slot slot) - (window--display-buffer buffer window 'window 'side)) + (window--display-buffer buffer window 'window alist 'side)) (and best-window ;; Reuse `best-window'. (progn ;; Give best-window the new slot value. (set-window-parameter best-window 'window-slot slot) - (window--display-buffer buffer best-window 'reuse 'side))))))))) + (window--display-buffer + buffer best-window 'reuse alist 'side))))))))) (defun window--side-check (&optional frame) "Check the side window configuration of FRAME. @@ -5077,7 +5086,7 @@ split." (with-selected-window window (split-window-below)))))))) -(defun window--try-to-split-window (window) +(defun window--try-to-split-window (window &optional alist) "Try to split WINDOW. Return value returned by `split-window-preferred-function' if it represents a live window, nil otherwise." @@ -5085,9 +5094,14 @@ represents a live window, nil otherwise." (not (frame-parameter (window-frame window) 'unsplittable)) (let* ((window-combination-limit ;; When `window-combination-limit' equals - ;; `display-buffer' bind it to t so resizing steals - ;; space preferably from the window that was split. - (if (eq window-combination-limit 'display-buffer) + ;; `display-buffer' or equals `resize-window' and a + ;; `window-height' or `window-width' alist entry are + ;; present, bind it to t so resizing steals space + ;; preferably from the window that was split. + (if (or (eq window-combination-limit 'display-buffer) + (and (eq window-combination-limit 'window-size) + (or (cdr (assq 'window-height alist)) + (cdr (assq 'window-width alist))))) t window-combination-limit)) (new-window @@ -5144,7 +5158,7 @@ is higher than WINDOW." (/ (- (window-total-height window) (window-total-height)) 2)) (error nil)))) -(defun window--display-buffer (buffer window type &optional dedicated) +(defun window--display-buffer (buffer window type &optional alist dedicated) "Display BUFFER in WINDOW and make its frame visible. TYPE must be one of the symbols `reuse', `window' or `frame' and is passed unaltered to `display-buffer-record-window'. Set @@ -5159,6 +5173,58 @@ BUFFER and WINDOW are live." (set-window-dedicated-p window dedicated)) (when (memq type '(window frame)) (set-window-prev-buffers window nil))) + (let ((parameter (window-parameter window 'quit-restore)) + (height (cdr (assq 'window-height alist))) + (width (cdr (assq 'window-width alist)))) + (when (or (memq type '(window frame)) + (and (eq (car parameter) 'same) + (memq (nth 1 parameter) '(window frame)))) + ;; Adjust height of new window or frame. + (cond + ((not height)) + ((numberp height) + (let* ((new-height + (if (integerp height) + height + (round + (* (window-total-size (frame-root-window window)) + height)))) + (delta (- new-height (window-total-size window)))) + (cond + ((and (window-resizable-p window delta nil 'safe) + (window-combined-p window)) + (window-resize window delta nil 'safe)) + ((or (eq type 'frame) + (and (eq (car parameter) 'same) + (eq (nth 1 parameter) 'frame))) + (set-frame-height + (window-frame window) + (+ (frame-height (window-frame window)) delta)))))) + ((functionp height) + (ignore-errors (funcall height window)))) + ;; Adjust width of a window or frame. + (cond + ((not width)) + ((numberp width) + (let* ((new-width + (if (integerp width) + width + (round + (* (window-total-size (frame-root-window window) t) + width)))) + (delta (- new-width (window-total-size window t)))) + (cond + ((and (window-resizable-p window delta t 'safe) + (window-combined-p window t)) + (window-resize window delta t 'safe)) + ((or (eq type 'frame) + (and (eq (car parameter) 'same) + (eq (nth 1 parameter) 'frame))) + (set-frame-width + (window-frame window) + (+ (frame-width (window-frame window)) delta)))))) + ((functionp width) + (ignore-errors (funcall width window)))))) window)) (defun window--maybe-raise-frame (frame) @@ -5400,7 +5466,7 @@ selected window." (unless (or (cdr (assq 'inhibit-same-window alist)) (window-minibuffer-p) (window-dedicated-p)) - (window--display-buffer buffer (selected-window) 'reuse))) + (window--display-buffer buffer (selected-window) 'reuse alist))) (defun display-buffer--maybe-same-window (buffer alist) "Conditionally display BUFFER in the selected window. @@ -5448,7 +5514,7 @@ that frame." (get-buffer-window-list buffer 'nomini frames)))))) (when (window-live-p window) - (prog1 (window--display-buffer buffer window 'reuse) + (prog1 (window--display-buffer buffer window 'reuse alist) (unless (cdr (assq 'inhibit-switch-frame alist)) (window--maybe-raise-frame (window-frame window))))))) @@ -5485,8 +5551,8 @@ new frame." (when (and fun (setq frame (funcall fun)) (setq window (frame-selected-window frame))) - (prog1 (window--display-buffer buffer window - 'frame display-buffer-mark-dedicated) + (prog1 (window--display-buffer + buffer window 'frame alist display-buffer-mark-dedicated) (unless (cdr (assq 'inhibit-switch-frame alist)) (window--maybe-raise-frame frame)))))) @@ -5511,11 +5577,11 @@ raising the frame." (not (frame-parameter frame 'unsplittable)))) ;; Attempt to split largest or least recently used window. (setq window (or (window--try-to-split-window - (get-largest-window frame t)) + (get-largest-window frame t) alist) (window--try-to-split-window - (get-lru-window frame t))))) - (prog1 (window--display-buffer buffer window - 'window display-buffer-mark-dedicated) + (get-lru-window frame t) alist)))) + (prog1 (window--display-buffer + buffer window 'window alist display-buffer-mark-dedicated) (unless (cdr (assq 'inhibit-switch-frame alist)) (window--maybe-raise-frame (window-frame window))))))) @@ -5534,21 +5600,21 @@ again with `display-buffer-pop-up-window'." (and pop-up-windows (display-buffer-pop-up-window buffer alist)))) -(defun display-buffer-below-selected (buffer _alist) +(defun display-buffer-below-selected (buffer alist) "Try displaying BUFFER in a window below the selected window. This either splits the selected window or reuses the window below the selected one." (let (window) (or (and (not (frame-parameter nil 'unsplittable)) - (setq window (window--try-to-split-window (selected-window))) + (setq window (window--try-to-split-window (selected-window) alist)) (window--display-buffer - buffer window 'window display-buffer-mark-dedicated)) + buffer window 'window alist display-buffer-mark-dedicated)) (and (setq window (window-in-direction 'below)) (not (window-dedicated-p window)) (window--display-buffer - buffer window 'reuse display-buffer-mark-dedicated))))) + buffer window 'reuse alist display-buffer-mark-dedicated))))) -(defun display-buffer-at-bottom (buffer _alist) +(defun display-buffer-at-bottom (buffer alist) "Try displaying BUFFER in a window at the botom of the selected frame. This either splits the window at the bottom of the frame or the frame's root window, or reuses an existing window at the bottom @@ -5556,20 +5622,20 @@ of the selected frame." (let (bottom-window window) (walk-window-tree (lambda (window) (setq bottom-window window))) (or (and (not (frame-parameter nil 'unsplittable)) - (setq window (window--try-to-split-window bottom-window)) + (setq window (window--try-to-split-window bottom-window alist)) (window--display-buffer - buffer window 'window display-buffer-mark-dedicated)) + buffer window 'window alist display-buffer-mark-dedicated)) (and (not (frame-parameter nil 'unsplittable)) (setq window (condition-case nil (split-window (frame-root-window)) (error nil))) (window--display-buffer - buffer window 'window display-buffer-mark-dedicated)) + buffer window 'window alist display-buffer-mark-dedicated)) (and (setq window bottom-window) (not (window-dedicated-p window)) (window--display-buffer - buffer window 'reuse display-buffer-mark-dedicated))))) + buffer window 'reuse alist display-buffer-mark-dedicated))))) (defun display-buffer-in-previous-window (buffer alist) "Display BUFFER in a window previously showing it. @@ -5625,7 +5691,7 @@ above, even if that window never showed BUFFER before." (setq best-window window))) ;; Return best or second best window found. (when (setq window (or best-window second-best-window)) - (window--display-buffer buffer window 'reuse)))) + (window--display-buffer buffer window 'reuse alist)))) (defun display-buffer-use-some-window (buffer alist) "Display BUFFER in an existing window. @@ -5653,7 +5719,7 @@ that frame." (get-largest-window 0 not-this-window)))) (when (window-live-p window) (prog1 - (window--display-buffer buffer window 'reuse) + (window--display-buffer buffer window 'reuse alist) (window--even-window-heights window) (unless (cdr (assq 'inhibit-switch-frame alist)) (window--maybe-raise-frame (window-frame window))))))) @@ -5923,108 +5989,14 @@ WINDOW must be a live window and defaults to the selected one." window)))) ;;; Resizing buffers to fit their contents exactly. -(defun fit-window-to-buffer (&optional window max-height min-height) - "Adjust height of WINDOW to display its buffer's contents exactly. -WINDOW must be a live window and defaults to the selected one. - -Optional argument MAX-HEIGHT specifies the maximum height of -WINDOW and defaults to the height of WINDOW's frame. Optional -argument MIN-HEIGHT specifies the minimum height of WINDOW and -defaults to `window-min-height'. Both MAX-HEIGHT and MIN-HEIGHT -are specified in lines and include the mode line and header line, -if any. - -Return the number of lines by which WINDOW was enlarged or -shrunk. If an error occurs during resizing, return nil but don't -signal an error. - -Note that even if this function makes WINDOW large enough to show -_all_ lines of its buffer you might not see the first lines when -WINDOW was scrolled." - (interactive) - (setq window (window-normalize-window window t)) - ;; Can't resize a full height or fixed-size window. - (unless (or (window-size-fixed-p window) - (window-full-height-p window)) - (with-selected-window window - (let* ((height (window-total-size)) - (min-height - ;; Adjust MIN-HEIGHT. - (if (numberp min-height) - ;; Can't get smaller than `window-safe-min-height'. - (max min-height window-safe-min-height) - ;; Preserve header and mode line if present. - (window-min-size nil nil t))) - (max-height - ;; Adjust MAX-HEIGHT. - (if (numberp max-height) - ;; Can't get larger than height of frame. - (min max-height - (window-total-size (frame-root-window window))) - ;, Don't delete other windows. - (+ height (window-max-delta nil nil window)))) - ;; Make `desired-height' the height necessary to show - ;; all of WINDOW's buffer, constrained by MIN-HEIGHT - ;; and MAX-HEIGHT. - (desired-height - (max - (min - (+ (count-screen-lines) - ;; For non-minibuffers count the mode line, if any. - (if (and (not (window-minibuffer-p window)) - mode-line-format) - 1 - 0) - ;; Count the header line, if any. - (if header-line-format 1 0)) - max-height) - min-height)) - (desired-delta - (- desired-height (window-total-size window))) - (delta - (if (> desired-delta 0) - (min desired-delta - (window-max-delta window nil window)) - (max desired-delta - (- (window-min-delta window nil window)))))) - (condition-case nil - (if (zerop delta) - ;; Return zero if DELTA became zero in the process. - 0 - ;; Don't try to redisplay with the cursor at the end on its - ;; own line--that would force a scroll and spoil things. - (when (and (eobp) (bolp) (not (bobp))) - ;; It's silly to put `point' at the end of the previous - ;; line and so maybe force horizontal scrolling. - (set-window-point window (line-beginning-position 0))) - ;; Call `window-resize' with OVERRIDE argument equal WINDOW. - (window-resize window delta nil window) - ;; Check if the last line is surely fully visible. If - ;; not, enlarge the window. - (let ((end (save-excursion - (goto-char (point-max)) - (when (and (bolp) (not (bobp))) - ;; Don't include final newline. - (backward-char 1)) - (when truncate-lines - ;; If line-wrapping is turned off, test the - ;; beginning of the last line for - ;; visibility instead of the end, as the - ;; end of the line could be invisible by - ;; virtue of extending past the edge of the - ;; window. - (forward-line 0)) - (point)))) - (set-window-vscroll window 0) - ;; This loop might in some rare pathological cases raise - ;; an error - another reason for the `condition-case'. - (while (and (< desired-height max-height) - (= desired-height (window-total-size)) - (not (pos-visible-in-window-p end))) - (window-resize window 1 nil window) - (setq desired-height (1+ desired-height))))) - (error (setq delta nil))) - delta)))) +(defcustom fit-frame-to-buffer nil + "Non-nil means `fit-window-to-buffer' can resize frames. +A frame can be resized if and only if its root window is a live +window. The height of the root window is subject to the values +of `fit-frame-to-buffer-max-height' and `window-min-height'." + :type 'boolean + :version "24.2" + :group 'help) (defcustom fit-frame-to-buffer-bottom-margin 4 "Bottom margin for `fit-frame-to-buffer'. @@ -6108,6 +6080,112 @@ FRAME." (error (setq delta nil)))) delta)) +(defun fit-window-to-buffer (&optional window max-height min-height) + "Adjust height of WINDOW to display its buffer's contents exactly. +WINDOW must be a live window and defaults to the selected one. + +Optional argument MAX-HEIGHT specifies the maximum height of +WINDOW and defaults to the height of WINDOW's frame. Optional +argument MIN-HEIGHT specifies the minimum height of WINDOW and +defaults to `window-min-height'. Both MAX-HEIGHT and MIN-HEIGHT +are specified in lines and include the mode line and header line, +if any. + +Return the number of lines by which WINDOW was enlarged or +shrunk. If an error occurs during resizing, return nil but don't +signal an error. + +Note that even if this function makes WINDOW large enough to show +_all_ lines of its buffer you might not see the first lines when +WINDOW was scrolled." + (interactive) + (setq window (window-normalize-window window t)) + (cond + ((window-size-fixed-p window)) + ((window-full-height-p window) + (when fit-frame-to-buffer + (fit-frame-to-buffer (window-frame window)))) + (t + (with-selected-window window + (let* ((height (window-total-size)) + (min-height + ;; Adjust MIN-HEIGHT. + (if (numberp min-height) + ;; Can't get smaller than `window-safe-min-height'. + (max min-height window-safe-min-height) + ;; Preserve header and mode line if present. + (window-min-size nil nil t))) + (max-height + ;; Adjust MAX-HEIGHT. + (if (numberp max-height) + ;; Can't get larger than height of frame. + (min max-height + (window-total-size (frame-root-window window))) + ;; Don't delete other windows. + (+ height (window-max-delta nil nil window)))) + ;; Make `desired-height' the height necessary to show + ;; all of WINDOW's buffer, constrained by MIN-HEIGHT + ;; and MAX-HEIGHT. + (desired-height + (max + (min + (+ (count-screen-lines) + ;; For non-minibuffers count the mode line, if any. + (if (and (not (window-minibuffer-p window)) + mode-line-format) + 1 + 0) + ;; Count the header line, if any. + (if header-line-format 1 0)) + max-height) + min-height)) + (desired-delta + (- desired-height (window-total-size window))) + (delta + (if (> desired-delta 0) + (min desired-delta + (window-max-delta window nil window)) + (max desired-delta + (- (window-min-delta window nil window)))))) + (condition-case nil + (if (zerop delta) + ;; Return zero if DELTA became zero in the process. + 0 + ;; Don't try to redisplay with the cursor at the end on its + ;; own line--that would force a scroll and spoil things. + (when (and (eobp) (bolp) (not (bobp))) + ;; It's silly to put `point' at the end of the previous + ;; line and so maybe force horizontal scrolling. + (set-window-point window (line-beginning-position 0))) + ;; Call `window-resize' with OVERRIDE argument equal WINDOW. + (window-resize window delta nil window) + ;; Check if the last line is surely fully visible. If + ;; not, enlarge the window. + (let ((end (save-excursion + (goto-char (point-max)) + (when (and (bolp) (not (bobp))) + ;; Don't include final newline. + (backward-char 1)) + (when truncate-lines + ;; If line-wrapping is turned off, test the + ;; beginning of the last line for + ;; visibility instead of the end, as the + ;; end of the line could be invisible by + ;; virtue of extending past the edge of the + ;; window. + (forward-line 0)) + (point)))) + (set-window-vscroll window 0) + ;; This loop might in some rare pathological cases raise + ;; an error - another reason for the `condition-case'. + (while (and (< desired-height max-height) + (= desired-height (window-total-size)) + (not (pos-visible-in-window-p end))) + (window-resize window 1 nil window) + (setq desired-height (1+ desired-height))))) + (error (setq delta nil))) + delta))))) + (defun window-safely-shrinkable-p (&optional window) "Return t if WINDOW can be shrunk without shrinking other windows. WINDOW defaults to the selected window." diff --git a/src/ChangeLog b/src/ChangeLog index e07f7e131cb..12992f1de0a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-30 Martin Rudalics + + * window.c (Vwindow_combination_limit): New default value. + (Qwindow_size): New symbol replacing Qtemp_buffer_resize. + 2012-09-30 Paul Eggert * syssignal.h (PROFILER_CPU_SUPPORT): Don't define if PROFILING. @@ -131,6 +136,7 @@ (redisplay_internal): Record itself in backtrace_list. (syms_of_xdisp): Define Qautomatic_redisplay. +2012-09-25 Eli Zaretskii 2012-09-25 Juanma Barranquero * makefile.w32-in ($(BLD)/callproc.$(O)): Update dependencies. diff --git a/src/window.c b/src/window.c index 86f86deedb2..bb3b73f9acd 100644 --- a/src/window.c +++ b/src/window.c @@ -60,7 +60,7 @@ static Lisp_Object Qwindow_deletable_p, Qdelete_window, Qdisplay_buffer; static Lisp_Object Qreplace_buffer_in_windows, Qget_mru_window; static Lisp_Object Qwindow_resize_root_window, Qwindow_resize_root_window_vertically; static Lisp_Object Qscroll_up, Qscroll_down, Qscroll_command; -static Lisp_Object Qsafe, Qabove, Qbelow, Qtemp_buffer_resize, Qclone_of; +static Lisp_Object Qsafe, Qabove, Qbelow, Qwindow_size, Qclone_of; static int displayed_window_lines (struct window *); static int count_windows (struct window *); @@ -6704,7 +6704,7 @@ syms_of_window (void) DEFSYM (Qreplace_buffer_in_windows, "replace-buffer-in-windows"); DEFSYM (Qrecord_window_buffer, "record-window-buffer"); DEFSYM (Qget_mru_window, "get-mru-window"); - DEFSYM (Qtemp_buffer_resize, "temp-buffer-resize"); + DEFSYM (Qwindow_size, "window-size"); DEFSYM (Qtemp_buffer_show_hook, "temp-buffer-show-hook"); DEFSYM (Qabove, "above"); DEFSYM (Qbelow, "below"); @@ -6804,19 +6804,19 @@ This variable takes no effect if `window-combination-limit' is non-nil. */); The following values are recognized: nil means splitting a window will create a new parent window only if the - window has no parent window or the window shall become a combination - orthogonal to the one it is part of. + window has no parent window or the window shall become part of a + combination orthogonal to the one it is part of. -`temp-buffer-resize' means that splitting a window for displaying a - temporary buffer makes a new parent window provided - `temp-buffer-resize-mode' is enabled. Otherwise, this value is - handled like nil. +`window-size' means that splitting a window for displaying a buffer + makes a new parent window provided `display-buffer' is supposed to + explicitly set the window's size due to the presence of a + `window-height' or `window-width' entry in the alist used by + `display-buffer'. Otherwise, this value is handled like nil. `temp-buffer' means that splitting a window for displaying a temporary buffer always makes a new parent window. Otherwise, this value is handled like nil. - `display-buffer' means that splitting a window for displaying a buffer always makes a new parent window. Since temporary buffers are displayed by the function `display-buffer', this value is stronger @@ -6829,7 +6829,7 @@ t means that splitting a window always creates a new parent window. If sibling. Other values are reserved for future use. */); - Vwindow_combination_limit = Qtemp_buffer_resize; + Vwindow_combination_limit = Qwindow_size; DEFVAR_LISP ("window-persistent-parameters", Vwindow_persistent_parameters, doc: /* Alist of persistent window parameters. From 48de8b12215e22390db1bc822e809708070ab938 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 30 Sep 2012 17:18:38 +0800 Subject: [PATCH 051/128] Update docs for a bunch of 24.3 changes. * doc/emacs/killing.texi (Rectangles): Document copy-rectangle-as-kill. * doc/emacs/search.texi (Special Isearch): Document the lax space search feature and M-s SPC. (Regexp Search): Move main search-whitespace-regexp description to Special Isearch. (Replace): Document replace-lax-whitespace. * doc/emacs/basic.texi (Position Info): Document C-u M-=. (Moving Point): Document move-to-column. * doc/emacs/display.texi (Useless Whitespace): Add delete-trailing-lines. * doc/emacs/misc.texi (emacsclient Options): Document the effect of initial-buffer-choice on client frames. Document server-auth-dir. Do not document server-host, which is bad security practice. * doc/emacs/building.texi (Lisp Libraries): Docstring lookups can trigger autoloading. Document help-enable-auto-load. * doc/emacs/mini.texi (Yes or No Prompts): New node. * doc/emacs/ack.texi (Acknowledgments): Remove obsolete packages. * doc/lispref/commands.texi (Click Events): Define "mouse position list". Remove mention of unimplemented horizontal scroll bars. (Drag Events, Motion Events): Refer to "mouse position list". (Accessing Mouse): Document posnp. * doc/lispref/errors.texi (Standard Errors): Tweak arith-error description. Tweak markup. Remove domain-error and friends, which seem to be unused after the floating-point code revamp. * doc/lispref/functions.texi (Obsolete Functions): Obsolescence also affects documentation commands. Various clarifications. (Declare Form): New node. * doc/lispref/loading.texi (Autoload): * doc/lispref/help.texi (Documentation Basics): The special sequences can trigger autoloading. * doc/lispref/macros.texi (Defining Macros): Move description of `declare' to Declare Form node. * doc/lispref/numbers.texi (Integer Basics): Copyedits. (Float Basics): Consider IEEE floating point always available. (Random Numbers): Document actual limits. (Arithmetic Operations): Clarify division by zero. Don't mention the machine-independence of negative division since it does not happen in practice. * doc/lispref/os.texi (Idle Timers): Minor clarifications. (User Identification): Add system-users and system-groups. * doc/lispref/strings.texi (String Basics): Copyedits. * lisp/minibuffer.el (minibuffer-local-filename-syntax): Doc fix. * lisp/server.el (server-host): Document the security implications. (server-auth-key): Doc fix. * lisp/startup.el (initial-buffer-choice): Doc fix. * src/fns.c (Frandom): Doc fix. --- doc/emacs/ChangeLog | 26 ++++++ doc/emacs/ack.texi | 29 +++--- doc/emacs/basic.texi | 24 +++-- doc/emacs/building.texi | 10 ++- doc/emacs/display.texi | 14 +-- doc/emacs/emacs.texi | 1 + doc/emacs/entering.texi | 5 -- doc/emacs/help.texi | 2 +- doc/emacs/killing.texi | 9 ++ doc/emacs/mini.texi | 51 +++++++++++ doc/emacs/misc.texi | 74 ++++++--------- doc/emacs/search.texi | 38 ++++++-- doc/lispref/ChangeLog | 42 +++++++++ doc/lispref/commands.texi | 142 +++++++++++++++-------------- doc/lispref/elisp.texi | 1 + doc/lispref/errors.texi | 160 ++++++++++++++------------------- doc/lispref/frames.texi | 24 ++--- doc/lispref/functions.texi | 109 +++++++++++++++++++---- doc/lispref/help.texi | 16 ++-- doc/lispref/loading.texi | 8 +- doc/lispref/macros.texi | 39 +------- doc/lispref/numbers.texi | 178 +++++++++++++++++-------------------- doc/lispref/os.texi | 118 ++++++++++++------------ doc/lispref/strings.texi | 41 +++++---- etc/NEWS | 95 ++++++++++++-------- lisp/ChangeLog | 7 ++ lisp/minibuffer.el | 2 +- lisp/server.el | 25 ++++-- lisp/startup.el | 5 +- src/ChangeLog | 4 + src/fns.c | 5 +- 31 files changed, 759 insertions(+), 545 deletions(-) diff --git a/doc/emacs/ChangeLog b/doc/emacs/ChangeLog index e0ed850c394..c1894fb900b 100644 --- a/doc/emacs/ChangeLog +++ b/doc/emacs/ChangeLog @@ -1,3 +1,29 @@ +2012-09-30 Chong Yidong + + * killing.texi (Rectangles): Document copy-rectangle-as-kill. + + * search.texi (Special Isearch): Document the lax space search + feature and M-s SPC. + (Regexp Search): Move main search-whitespace-regexp description to + Special Isearch. + (Replace): Document replace-lax-whitespace. + + * basic.texi (Position Info): Document C-u M-=. + (Moving Point): Document move-to-column. + + * display.texi (Useless Whitespace): Add delete-trailing-lines. + + * misc.texi (emacsclient Options): Document the effect of + initial-buffer-choice on client frames. Document server-auth-dir. + Do not document server-host, which is bad security practice. + + * building.texi (Lisp Libraries): Docstring lookups can trigger + autoloading. Document help-enable-auto-load. + + * mini.texi (Yes or No Prompts): New node. + + * ack.texi (Acknowledgments): Remove obsolete packages. + 2012-09-27 Glenn Morris * cal-xtra.texi (Advanced Calendar/Diary Usage): diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index 487e3c19c16..8d1e4221a6c 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -644,10 +644,9 @@ statically scoped Emacs lisp. @item Daniel LaLiberte wrote @file{edebug.el}, a source-level debugger for Emacs Lisp; @file{cl-specs.el}, specifications to help @code{edebug} -debug code written using David Gillespie's Common Lisp support; -@file{cust-print.el}, a customizable package for printing lisp -objects; and @file{isearch.el}, Emacs's incremental search minor mode. -He also co-wrote @file{hideif.el} (q.v.@:). +debug code written using David Gillespie's Common Lisp support; and +@file{isearch.el}, Emacs's incremental search minor mode. He also +co-wrote @file{hideif.el} (q.v.@:). @item Karl Landstrom and Daniel Colascione wrote @file{js.el}, a mode for @@ -1301,15 +1300,14 @@ providing electric accent keys. Colin Walters wrote Ibuffer, an enhanced buffer menu. @item -Barry Warsaw wrote @file{assoc.el}, a set of utility functions for -working with association lists; @file{cc-mode.el}, a mode for editing -C, C@t{++}, and Java code, based on earlier work by Dave Detlefs, -Stewart Clamen, and Richard Stallman; @file{elp.el}, a profiler for -Emacs Lisp programs; @file{man.el}, a mode for reading Unix manual -pages; @file{regi.el}, providing an AWK-like functionality for use in -lisp programs; @file{reporter.el}, providing customizable bug -reporting for lisp packages; and @file{supercite.el}, a minor mode for -quoting sections of mail messages and news articles. +Barry Warsaw wrote @file{cc-mode.el}, a mode for editing C, C@t{++}, +and Java code, based on earlier work by Dave Detlefs, Stewart Clamen, +and Richard Stallman; @file{elp.el}, a profiler for Emacs Lisp +programs; @file{man.el}, a mode for reading Unix manual pages; +@file{regi.el}, providing an AWK-like functionality for use in lisp +programs; @file{reporter.el}, providing customizable bug reporting for +lisp packages; and @file{supercite.el}, a minor mode for quoting +sections of mail messages and news articles. @item Christoph Wedler wrote @file{antlr-mode.el}, a major mode for ANTLR @@ -1351,9 +1349,8 @@ Directory Client; and @code{eshell}, a command shell implemented entirely in Emacs Lisp. He also contributed to Org mode (q.v.@:). @item -Mike Williams wrote @file{mouse-sel.el}, providing enhanced mouse -selection; and @file{thingatpt.el}, a library of functions for finding -the ``thing'' (word, line, s-expression) containing point. +Mike Williams wrote @file{thingatpt.el}, a library of functions for +finding the ``thing'' (word, line, s-expression) at point. @item Roland Winkler wrote @file{proced.el}, a system process editor. diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi index 16ccdba0866..42bd2a4fde2 100644 --- a/doc/emacs/basic.texi +++ b/doc/emacs/basic.texi @@ -267,7 +267,8 @@ necessary (@code{scroll-up-command}). @xref{Scrolling}. Scroll one screen backward, and move point onscreen if necessary (@code{scroll-down-command}). @xref{Scrolling}. -@item M-x goto-char +@item M-g c +@kindex M-g c @findex goto-char Read a number @var{n} and move point to buffer position @var{n}. Position 1 is the beginning of the buffer. @@ -285,6 +286,13 @@ also specify @var{n} by giving @kbd{M-g M-g} a numeric prefix argument. @xref{Select Buffer}, for the behavior of @kbd{M-g M-g} when you give it a plain prefix argument. +@item M-g @key{TAB} +@kindex M-g TAB +@findex move-to-column +Read a number @var{n} and move to column @var{n} in the current line. +Column 0 is the leftmost column. If called with a prefix argument, +move to the column number specified by the argument's numeric value. + @item C-x C-n @kindex C-x C-n @findex set-goal-column @@ -619,12 +627,16 @@ narrowed region and the line number relative to the whole buffer. @kindex M-= @findex count-words-region -@findex count-words @kbd{M-=} (@code{count-words-region}) displays a message reporting -the number of lines, words, and characters in the region. @kbd{M-x -count-words} displays a similar message for the entire buffer, or for -the region if the region is @dfn{active}. @xref{Mark}, for an -explanation of the region. +the number of lines, words, and characters in the region +(@pxref{Mark}, for an explanation of the region). With a prefix +argument, @kbd{C-u M-=}, the command displays a count for the entire +buffer. + +@findex count-words + The command @kbd{M-x count-words} does the same job, but with a +different calling convention. It displays a count for the region if +the region is active, and for the buffer otherwise. @kindex C-x = @findex what-cursor-position diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index 21948f181fb..eaee16ac8d5 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -1393,13 +1393,21 @@ putting a line like this in your init file (@pxref{Init File}): @end example @cindex autoload - Some commands are @dfn{autoloaded}: when you run them, Emacs + Some commands are @dfn{autoloaded}; when you run them, Emacs automatically loads the associated library first. For instance, the @kbd{M-x compile} command (@pxref{Compilation}) is autoloaded; if you call it, Emacs automatically loads the @code{compile} library first. In contrast, the command @kbd{M-x recompile} is not autoloaded, so it is unavailable until you load the @code{compile} library. +@vindex help-enable-auto-load + Automatic loading can also occur when you look up the documentation +of an autoloaded command (@pxref{Name Help}), if the documentation +refers to other functions and variables in its library (loading the +library lets Emacs properly set up the hyperlinks in the @file{*Help*} +buffer). To disable this feature, change the variable +@code{help-enable-auto-load} to @code{nil}. + @vindex load-dangerous-libraries @cindex Lisp files byte-compiled by XEmacs By default, Emacs refuses to load compiled Lisp files which were diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index 2238570eaa9..2313d117a90 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -1044,9 +1044,9 @@ the left fringe, but no arrow bitmaps, use @code{((top . left) @cindex whitespace, trailing @vindex show-trailing-whitespace It is easy to leave unnecessary spaces at the end of a line, or -empty lines at the end of a file, without realizing it. In most -cases, this @dfn{trailing whitespace} has no effect, but there are -special circumstances where it matters, and it can be a nuisance. +empty lines at the end of a buffer, without realizing it. In most +cases, this @dfn{trailing whitespace} has no effect, but sometimes it +can be a nuisance. You can make trailing whitespace at the end of a line visible by setting the buffer-local variable @code{show-trailing-whitespace} to @@ -1061,9 +1061,13 @@ the location of point is enough to show you that the spaces are present. @findex delete-trailing-whitespace +@vindex delete-trailing-lines Type @kbd{M-x delete-trailing-whitespace} to delete all trailing -whitespace within the buffer. If the region is active, it deletes all -trailing whitespace in the region instead. +whitespace. This command deletes all extra spaces at the end of each +line in the buffer, and all empty lines at the end of the buffer; to +ignore the latter, change the varaible @code{delete-trailing-lines} to +@code{nil}. If the region is active, the command instead deletes +extra spaces at the end of each line in the region. @vindex indicate-empty-lines @cindex unused lines diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index c18123d7b29..a2eaaf673e5 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -267,6 +267,7 @@ The Minibuffer * Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer. * Passwords:: Entering passwords in the echo area. +* Yes or No Prompts:: Replying yes or no in the echo area. Completion diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi index de143516ce8..224ab356d08 100644 --- a/doc/emacs/entering.texi +++ b/doc/emacs/entering.texi @@ -79,11 +79,6 @@ non-@code{nil} value. (In that case, even if you specify one or more files on the command line, Emacs opens but does not display them.) The value of @code{initial-buffer-choice} should be the name of the desired file or directory. -@ignore -@c I do not think this should be mentioned. AFAICS it is just a dodge -@c around inhibit-startup-screen not being settable on a site-wide basis. -or @code{t}, which means to display the @file{*scratch*} buffer. -@end ignore @node Exiting @section Exiting Emacs diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index d09885c5edd..050ecd150ab 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -243,7 +243,7 @@ by the innermost Lisp expression in the buffer around point, (That name appears as the default while you enter the argument.) For example, if point is located following the text @samp{(make-vector (car x)}, the innermost list containing point is the one that starts -with @samp{(make-vector}, so @kbd{C-h f @key{RET}} will describe the +with @samp{(make-vector}, so @kbd{C-h f @key{RET}} describes the function @code{make-vector}. @kbd{C-h f} is also useful just to verify that you spelled a diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi index 1eb53d0d2ec..5510816b067 100644 --- a/doc/emacs/killing.texi +++ b/doc/emacs/killing.texi @@ -709,6 +709,9 @@ rectangle, depending on the command that uses them. @item C-x r k Kill the text of the region-rectangle, saving its contents as the ``last killed rectangle'' (@code{kill-rectangle}). +@item C-x r M-w +Save the text of the region-rectangle as the ``last killed rectangle'' +(@code{copy-rectangle-as-kill}). @item C-x r d Delete the text of the region-rectangle (@code{delete-rectangle}). @item C-x r y @@ -757,6 +760,12 @@ yanking a rectangle is so different from yanking linear text that different yank commands have to be used. Yank-popping is not defined for rectangles. +@kindex C-x r M-w +@findex copy-rectangle-as-kill + @kbd{C-x r M-w} (@code{copy-rectangle-as-kill}) is the equivalent of +@kbd{M-w} for rectangles: it records the rectangle as the ``last +killed rectangle'', without deleting the text from the buffer. + @kindex C-x r y @findex yank-rectangle To yank the last killed rectangle, type @kbd{C-x r y} diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index 2856db7a4fa..5d2fc804498 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -45,6 +45,7 @@ do not echo. * Minibuffer History:: Reusing recent minibuffer arguments. * Repetition:: Re-executing commands that used the minibuffer. * Passwords:: Entering passwords in the echo area. +* Yes or No Prompts:: Replying yes or no in the echo area. @end menu @node Minibuffer File @@ -733,3 +734,53 @@ password (@pxref{Killing}). You may type either @key{RET} or @key{ESC} to submit the password. Any other self-inserting character key inserts the associated character into the password, and all other input is ignored. + +@node Yes or No Prompts +@section Yes or No Prompts + + An Emacs command may require you to answer a ``yes or no'' question +during the course of its execution. Such queries come in two main +varieties. + +@cindex y or n prompt + For the first type of ``yes or no'' query, the prompt ends with +@samp{(y or n)}. Such a query does not actually use the minibuffer; +the prompt appears in the echo area, and you answer by typing either +@samp{y} or @samp{n}, which immediately delivers the response. For +example, if you type @kbd{C-x C-w} (@kbd{write-file}) to save a +buffer, and enter the name of an existing file, Emacs issues a prompt +like this: + +@smallexample +File `foo.el' exists; overwrite? (y or n) +@end smallexample + +@noindent +Because this query does not actually use the minibuffer, the usual +minibuffer editing commands cannot be used. However, you can perform +some window scrolling operations while the query is active: @kbd{C-l} +recenters the selected window; @kbd{M-v} (or @key{PageDown} or +@key{next}) scrolls forward; @kbd{C-v} (or @key{PageUp}, or +@key{prior}) scrolls backward; @kbd{C-M-v} scrolls forward in the next +window; and @kbd{C-M-S-v} scrolls backward in the next window. Typing +@kbd{C-g} dismisses the query, and quits the command that issued it +(@pxref{Quitting}). + +@cindex yes or no prompt + The second type of ``yes or no'' query is typically employed if +giving the wrong answer would have serious consequences; it uses the +minibuffer, and features a prompt ending with @samp{(yes or no)}. For +example, if you invoke @kbd{C-x k} (@code{kill-buffer}) on a +file-visiting buffer with unsaved changes, Emacs activates the +minibuffer with a prompt like this: + +@smallexample +Buffer foo.el modified; kill anyway? (yes or no) +@end smallexample + +@noindent +To answer, you must type @samp{yes} or @samp{no} into the minibuffer, +followed by @key{RET}. The minibuffer behaves as described in the +previous sections; you can switch to another window with @kbd{C-x o}, +use the history commands @kbd{M-p} and @kbd{M-f}, etc. Type @kbd{C-g} +to quit the minibuffer and the querying command. diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 5d7a51a01f5..4f0a1009e30 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1509,15 +1509,11 @@ precedence. @cindex client frame @item -c Create a new graphical @dfn{client frame}, instead of using an -existing Emacs frame. If you omit a filename argument while supplying -the @samp{-c} option, the new frame displays the @file{*scratch*} -buffer (@pxref{Buffers}). See below for the special behavior of -@kbd{C-x C-c} in a client frame. - -If Emacs is unable to create a new graphical frame (e.g.@: if it is -unable to connect to the X server), it tries to create a text terminal -client frame, as though you had supplied the @samp{-t} option instead -(see below). +existing Emacs frame. See below for the special behavior of @kbd{C-x +C-c} in a client frame. If Emacs cannot create a new graphical frame +(e.g.@: if it cannot connect to the X server), it tries to create a +text terminal client frame, as though you had supplied the @samp{-t} +option instead. On MS-Windows, a single Emacs session cannot display frames on both graphical and text terminals, nor on multiple text terminals. Thus, @@ -1525,6 +1521,11 @@ if the Emacs server is running on a text terminal, the @samp{-c} option, like the @samp{-t} option, creates a new frame in the server's current text terminal. @xref{Windows Startup}. +If you omit a filename argument while supplying the @samp{-c} option, +the new frame displays the @file{*scratch*} buffer by default. If +@code{initial-buffer-choice} is a string (@pxref{Entering Emacs}), the +new frame displays that file or directory instead. + @item -F @var{alist} @itemx --frame-parameters=@var{alist} Set the parameters for a newly-created graphical frame @@ -1545,38 +1546,24 @@ evaluate, @emph{not} as a list of files to visit. @item -f @var{server-file} @itemx --server-file=@var{server-file} @cindex @env{EMACS_SERVER_FILE} environment variable -@cindex server file -@vindex server-use-tcp -@vindex server-host Specify a @dfn{server file} for connecting to an Emacs server via TCP. An Emacs server usually uses an operating system feature called a ``local socket'' to listen for connections. Some operating systems, such as Microsoft Windows, do not support local sockets; in that case, -Emacs uses TCP instead. When you start the Emacs server, Emacs -creates a server file containing some TCP information that -@command{emacsclient} needs for making the connection. By default, -the server file is in @file{~/.emacs.d/server/}. On Microsoft -Windows, if @command{emacsclient} does not find the server file there, -it looks in the @file{.emacs.d/server/} subdirectory of the directory -pointed to by the @env{APPDATA} environment variable. You can tell -@command{emacsclient} to use a specific server file with the @samp{-f} -or @samp{--server-file} option, or by setting the -@env{EMACS_SERVER_FILE} environment variable. - -Even if local sockets are available, you can tell Emacs to use TCP by -setting the variable @code{server-use-tcp} to @code{t}. One advantage -of TCP is that the server can accept connections from remote machines. -For this to work, you must (i) set the variable @code{server-host} to -the hostname or IP address of the machine on which the Emacs server -runs, and (ii) provide @command{emacsclient} with the server file. -(One convenient way to do the latter is to put the server file on a -networked file system such as NFS.) +the server communicates with @command{emacsclient} via TCP. +@vindex server-auth-dir +@cindex server file @vindex server-port - When the Emacs server is using TCP, the variable @code{server-port} -determines the port number to listen on; the default value, -@code{nil}, means to choose a random port when the server starts. +When you start a TCP Emacs server, Emacs creates a @dfn{server file} +containing the TCP information to be used by @command{emacsclient} to +connect to the server. The variable @code{server-auth-dir} specifies +the directory containing the server file; by default, this is +@file{~/.emacs.d/server/}. To tell @command{emacsclient} to connect +to the server over TCP with a specific server file, use the @samp{-f} +or @samp{--server-file} option, or set the @env{EMACS_SERVER_FILE} +environment variable. @item -n @itemx --no-wait @@ -1606,19 +1593,14 @@ server it finds. (This option is not supported on MS-Windows.) @itemx --tty @itemx -nw Create a new client frame on the current text terminal, instead of -using an existing Emacs frame. This is similar to the @samp{-c} -option, above, except that it creates a text terminal frame -(@pxref{Non-Window Terminals}). If you omit a filename argument while -supplying this option, the new frame displays the @file{*scratch*} -buffer (@pxref{Buffers}). See below for the special behavior of -@kbd{C-x C-c} in a client frame. +using an existing Emacs frame. This behaves just like the @samp{-c} +option, described above, except that it creates a text terminal frame +(@pxref{Non-Window Terminals}). -On MS-Windows, a single Emacs session cannot display frames on both -graphical and text terminals, nor on multiple text terminals. Thus, -if the Emacs server is using the graphical display, @samp{-t} behaves -like @samp{-c} (see above); whereas if the Emacs server is running on -a text terminal, it creates a new frame in its current text terminal. -@xref{Windows Startup}. +On MS-Windows, @samp{-t} behaves just like @samp{-c} if the Emacs +server is using the graphical display, but if the Emacs server is +running on a text terminal, it creates a new frame in the current text +terminal. @end table The new graphical or text terminal frames created by the @samp{-c} diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index d5c9783b772..21db02c8ab8 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -17,7 +17,6 @@ thing, but search for patterns instead of fixed strings. (@pxref{Operating on Files}), or ask the @code{grep} program to do it (@pxref{Grep Searching}). - @menu * Incremental Search:: Search happens as you type the string. * Nonincremental Search:: Specify entire string and then search. @@ -218,6 +217,24 @@ search. Some of the characters you type during incremental search have special effects. +@cindex lax space matching +@kindex M-s SPC @r{(Incremental search)} +@kindex SPC @r{(Incremental search)} +@findex isearch-toggle-lax-whitespace +@vindex search-whitespace-regexp + By default, incremental search performs @dfn{lax space matching}: +each space, or sequence of spaces, matches any sequence of one or more +spaces in the text. Hence, @samp{foo bar} matches @samp{foo bar}, +@samp{foo bar}, @samp{foo bar}, and so on (but not @samp{foobar}). +More precisely, Emacs matches each sequence of space characters in the +search string to a regular expression specified by the variable +@code{search-whitespace-regexp}. For example, set it to +@samp{"[[:space:]\n]+"} to make spaces match sequences of newlines as +well as spaces. To toggle lax space matching, type @kbd{M-s SPC} +(@code{isearch-toggle-lax-whitespace}). To disable this feature +entirely, change @code{search-whitespace-regexp} to @code{nil}; then +each space in the search string matches exactly one space + If the search string you entered contains only lower-case letters, the search is case-insensitive; as long as an upper-case letter exists in the search string, the search becomes case-sensitive. If you @@ -492,12 +509,12 @@ Incremental regexp and non-regexp searches have independent defaults. They also have separate search rings, which you can access with @kbd{M-p} and @kbd{M-n}. -@vindex search-whitespace-regexp - If you type @key{SPC} in incremental regexp search, it matches any -sequence of whitespace characters, including newlines. If you want to -match just a space, type @kbd{C-q @key{SPC}}. You can control what a -bare space matches by setting the variable -@code{search-whitespace-regexp} to the desired regexp. + Just as in ordinary incremental search, any @key{SPC} typed in +incremental regexp search matches any sequence of one or more +whitespace characters. The variable @code{search-whitespace-regexp} +specifies the regexp for the lax space matching, and @kbd{M-s SPC} +(@code{isearch-toggle-lax-whitespace}) toggles the feature. +@xref{Special Isearch}. In some cases, adding characters to the regexp in an incremental regexp search can make the cursor move back and start again. For @@ -974,6 +991,13 @@ instead (@pxref{Mark}). The basic replace commands replace one is possible to perform several replacements in parallel, using the command @code{expand-region-abbrevs} (@pxref{Expanding Abbrevs}). +@vindex replace-lax-whitespace + Unlike incremental search, the replacement commands do not use lax +space matching (@pxref{Special Isearch}) by default. To enable lax +space matching for replacement, change the variable +@code{replace-lax-whitespace} to @code{t}. (This only affects how +Emacs finds the text to replace, not the replacement text.) + @menu * Unconditional Replace:: Replacing all matches for a string. * Regexp Replace:: Replacing all matches for a regexp. diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 76f06edaacb..b5c847b4b72 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,45 @@ +2012-09-30 Chong Yidong + + * commands.texi (Click Events): Define "mouse position list". + Remove mention of unimplemented horizontal scroll bars. + (Drag Events, Motion Events): Refer to "mouse position list". + (Accessing Mouse): Document posnp. + + * errors.texi (Standard Errors): Tweak arith-error description. + Tweak markup. Remove domain-error and friends, which seem to be + unused after the floating-point code revamp. + + * functions.texi (Obsolete Functions): Obsolescence also affects + documentation commands. Various clarifications. + (Declare Form): New node. + + * strings.texi (String Basics): Copyedits. + + * os.texi (Idle Timers): Minor clarifications. + (User Identification): Add system-users and system-groups. + + * macros.texi (Defining Macros): Move description of `declare' to + Declare Form node. + + * loading.texi (Autoload): + * help.texi (Documentation Basics): The special sequences can + trigger autoloading. + + * numbers.texi (Integer Basics): Copyedits. + (Float Basics): Consider IEEE floating point always available. + (Random Numbers): Document actual limits. + (Arithmetic Operations): Clarify division by zero. Don't mention + the machine-independence of negative division since it does not + happen in practice. + +2012-09-28 Chong Yidong + + * os.texi (Startup Summary): Document leim-list.el change. + +2012-09-25 Chong Yidong + + * functions.texi (Defining Functions): defun is now a macro. + 2012-09-28 Leo Liu * files.texi (Files): Fix typo. diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index dc0fa4c639d..93dba237013 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1275,12 +1275,21 @@ describe events by their types; thus, if there is a key binding for @var{event-type} is @code{mouse-1}. @item @var{position} -This is the position where the mouse click occurred. The actual -format of @var{position} depends on what part of a window was clicked -on. +@cindex mouse position list +This is a @dfn{mouse position list} specifying where the mouse click +occurred; see below for details. -For mouse click events in the text area, mode line, header line, or in -the marginal areas, @var{position} has this form: +@item @var{click-count} +This is the number of rapid repeated presses so far of the same mouse +button. @xref{Repeat Events}. +@end table + + To access the contents of a mouse position list in the +@var{position} slot of a click event, you should typically use the +functions documented in @ref{Accessing Mouse}. The explicit format of +the list depends on where the click occurred. For clicks in the text +area, mode line, header line, or in the fringe or marginal areas, the +mouse position list has the form @example (@var{window} @var{pos-or-area} (@var{x} . @var{y}) @var{timestamp} @@ -1289,18 +1298,16 @@ the marginal areas, @var{position} has this form: @end example @noindent -The meanings of these list elements are documented below. -@xref{Accessing Mouse}, for functions that let you easily access these -elements. +The meanings of these list elements are as follows: @table @asis @item @var{window} -This is the window in which the click occurred. +The window in which the click occurred. @item @var{pos-or-area} -This is the buffer position of the character clicked on in the text -area, or if clicked outside the text area, it is the window area in -which the click occurred. It is one of the symbols @code{mode-line}, +The buffer position of the character clicked on in the text area; or, +if the click was outside the text area, the window area where it +occurred. It is one of the symbols @code{mode-line}, @code{header-line}, @code{vertical-line}, @code{left-margin}, @code{right-margin}, @code{left-fringe}, or @code{right-fringe}. @@ -1310,22 +1317,23 @@ happens after the imaginary prefix keys for the event are registered by Emacs. @xref{Key Sequence Input}. @item @var{x}, @var{y} -These are the relative pixel coordinates of the click. For clicks in -the text area of a window, the coordinate origin @code{(0 . 0)} is -taken to be the top left corner of the text area. @xref{Window -Sizes}. For clicks in a mode line or header line, the coordinate -origin is the top left corner of the window itself. For fringes, -margins, and the vertical border, @var{x} does not have meaningful -data. For fringes and margins, @var{y} is relative to the bottom edge -of the header line. In all cases, the @var{x} and @var{y} coordinates -increase rightward and downward respectively. +The relative pixel coordinates of the click. For clicks in the text +area of a window, the coordinate origin @code{(0 . 0)} is taken to be +the top left corner of the text area. @xref{Window Sizes}. For +clicks in a mode line or header line, the coordinate origin is the top +left corner of the window itself. For fringes, margins, and the +vertical border, @var{x} does not have meaningful data. For fringes +and margins, @var{y} is relative to the bottom edge of the header +line. In all cases, the @var{x} and @var{y} coordinates increase +rightward and downward respectively. @item @var{timestamp} -This is the time at which the event occurred, in milliseconds. +The time at which the event occurred, as an integer number of +milliseconds since a system-dependent initial time. @item @var{object} -This is either @code{nil} if there is no string-type text property at -the click position, or a cons cell of the form (@var{string} +Either @code{nil} if there is no string-type text property at the +click position, or a cons cell of the form (@var{string} . @var{string-pos}) if there is one: @table @asis @@ -1371,8 +1379,7 @@ These are the pixel width and height of @var{object} or, if this is @code{nil}, those of the character glyph clicked on. @end table -@sp 1 -For mouse clicks on a scroll-bar, @var{position} has this form: +For clicks on a scroll bar, @var{position} has this form: @example (@var{window} @var{area} (@var{portion} . @var{whole}) @var{timestamp} @var{part}) @@ -1380,32 +1387,35 @@ For mouse clicks on a scroll-bar, @var{position} has this form: @table @asis @item @var{window} -This is the window whose scroll-bar was clicked on. +The window whose scroll bar was clicked on. @item @var{area} -This is the scroll bar where the click occurred. It is one of the -symbols @code{vertical-scroll-bar} or @code{horizontal-scroll-bar}. +This is the symbol @code{vertical-scroll-bar}. @item @var{portion} -This is the distance of the click from the top or left end of -the scroll bar. +The number of pixels from the top of the scroll bar to the click +position. On some toolkits, including GTK+, Emacs cannot extract this +data, so the value is always @code{0}. @item @var{whole} -This is the length of the entire scroll bar. +The total length, in pixels, of the scroll bar. On some toolkits, +including GTK+, Emacs cannot extract this data, so the value is always +@code{0}. @item @var{timestamp} -This is the time at which the event occurred, in milliseconds. +The time at which the event occurred, in milliseconds. On some +toolkits, including GTK+, Emacs cannot extract this data, so the value +is always @code{0}. @item @var{part} -This is the part of the scroll-bar which was clicked on. It is one -of the symbols @code{above-handle}, @code{handle}, @code{below-handle}, -@code{up}, @code{down}, @code{top}, @code{bottom}, and @code{end-scroll}. +The part of the scroll bar on which the click occurred. It is one of +the symbols @code{handle} (the scroll bar handle), @code{above-handle} +(the area above the handle), @code{below-handle} (the area below the +handle), @code{up} (the up arrow at one end of the scroll bar), or +@code{down} (the down arrow at one end of the scroll bar). +@c The `top', `bottom', and `end-scroll' codes don't seem to be used. @end table -@item @var{click-count} -This is the number of rapid repeated presses so far of the same mouse -button. @xref{Repeat Events}. -@end table @node Drag Events @subsection Drag Events @@ -1429,10 +1439,9 @@ For a drag event, the name of the symbol @var{event-type} contains the prefix @samp{drag-}. For example, dragging the mouse with button 2 held down generates a @code{drag-mouse-2} event. The second and third elements of the event give the starting and ending position of the -drag. They have the same form as @var{position} in a click event -(@pxref{Click Events}) that is not on the scroll bar part of the -window. You can access the second element of any mouse event in the -same way, with no need to distinguish drag events from others. +drag, as mouse position lists (@pxref{Click Events}). You can access +the second element of any mouse event in the same way, with no need to +distinguish drag events from others. The @samp{drag-} prefix follows the modifier key prefixes such as @samp{C-} and @samp{M-}. @@ -1575,13 +1584,14 @@ represented by lists that look like this: (mouse-movement POSITION) @end example -The second element of the list describes the current position of the -mouse, just as in a click event (@pxref{Click Events}). +@noindent +@var{position} is a mouse position list (@pxref{Click Events}), +specifying the current position of the mouse cursor. -The special form @code{track-mouse} enables generation of motion events -within its body. Outside of @code{track-mouse} forms, Emacs does not -generate events for mere motion of the mouse, and these events do not -appear. @xref{Mouse Tracking}. +The special form @code{track-mouse} enables generation of motion +events within its body. Outside of @code{track-mouse} forms, Emacs +does not generate events for mere motion of the mouse, and these +events do not appear. @xref{Mouse Tracking}. @node Focus Events @subsection Focus Events @@ -1648,13 +1658,11 @@ frame has already been made visible, Emacs has no work to do. @cindex @code{wheel-up} event @cindex @code{wheel-down} event @item (wheel-up @var{position}) -@item (wheel-down @var{position}) -These kinds of event are generated by moving a mouse wheel. Their -usual meaning is a kind of scroll or zoom. - -The element @var{position} is a list describing the position of the -event, in the same format as used in a mouse-click event (@pxref{Click -Events}). +@itemx (wheel-down @var{position}) +These kinds of event are generated by moving a mouse wheel. The +@var{position} element is a mouse position list (@pxref{Click +Events}), specifying the position of the mouse cursor when the event +occurred. @vindex mouse-wheel-up-event @vindex mouse-wheel-down-event @@ -1922,14 +1930,8 @@ must be the last element of the list. For example, This section describes convenient functions for accessing the data in a mouse button or motion event. - These two functions return the starting or ending position of a -mouse-button event, as a list of this form (@pxref{Click Events}): - -@example -(@var{window} @var{pos-or-area} (@var{x} . @var{y}) @var{timestamp} - @var{object} @var{text-pos} (@var{col} . @var{row}) - @var{image} (@var{dx} . @var{dy}) (@var{width} . @var{height})) -@end example + The following two functions return a mouse position list +(@pxref{Click Events}), specifying the position of a mouse event. @defun event-start event This returns the starting position of @var{event}. @@ -1948,9 +1950,15 @@ event, the value is actually the starting position, which is the only position such events have. @end defun +@defun posnp object +This function returns non-@code{nil} if @var{object} is a mouse +oposition list, in either of the formats documented in @ref{Click +Events}); and @code{nil} otherwise. +@end defun + @cindex mouse position list, accessing - These functions take a position list as described above, and -return various parts of it. + These functions take a mouse position list as argument, and return +various parts of it: @defun posn-window position Return the window that @var{position} is in. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index db770616820..d46cb071bf7 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -516,6 +516,7 @@ Functions * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Defining functions that the compiler will expand inline. +* Declare Form:: Adding additional information about a function. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi index a822a2d9608..b7b26c8708c 100644 --- a/doc/lispref/errors.texi +++ b/doc/lispref/errors.texi @@ -37,78 +37,69 @@ handled. @table @code @item error -@code{"error"}@* -@xref{Errors}. +The message is @samp{error}. @xref{Errors}. @item quit -@code{"Quit"}@* -@xref{Quitting}. +The message is @samp{Quit}. @xref{Quitting}. @item args-out-of-range -@code{"Args out of range"}@* -This happens when trying to access an element beyond the range of a -sequence or buffer.@* -@xref{Sequences Arrays Vectors}, @xref{Text}. +The message is @samp{Args out of range}. This happens when trying to +access an element beyond the range of a sequence, buffer, or other +container-like object. @xref{Sequences Arrays Vectors}, and +@xref{Text}. @item arith-error -@code{"Arithmetic error"}@* +The message is @samp{Arithmetic error}. This occurs when trying to +perform integer division by zero. @xref{Numeric Conversions}, and @xref{Arithmetic Operations}. @item beginning-of-buffer -@code{"Beginning of buffer"}@* -@xref{Character Motion}. +The message is @samp{Beginning of buffer}. @xref{Character Motion}. @item buffer-read-only -@code{"Buffer is read-only"}@* -@xref{Read Only Buffers}. +The message is @samp{Buffer is read-only}. @xref{Read Only Buffers}. @item circular-list -@code{"List contains a loop"}@* -This happens when some operations (e.g. resolving face names) -encounter circular structures.@* -@xref{Circular Objects}. +The message is @samp{List contains a loop}. This happens when a +circular structure is encountered. @xref{Circular Objects}. @item cl-assertion-failed -@code{"Assertion failed"}@* -This happens when the @code{assert} macro fails a test.@* -@xref{Assertions,,, cl, Common Lisp Extensions}. +The message is @samp{Assertion failed}. This happens when the +@code{assert} macro fails a test. @xref{Assertions,,, cl, Common Lisp +Extensions}. @item coding-system-error -@code{"Invalid coding system"}@* -@xref{Lisp and Coding Systems}. +The message is @samp{Invalid coding system}. @xref{Lisp and Coding +Systems}. @item cyclic-function-indirection -@code{"Symbol's chain of function indirections contains a loop"}@* -@xref{Function Indirection}. +The message is @samp{Symbol's chain of function indirections contains +a loop}. @xref{Function Indirection}. @item cyclic-variable-indirection -@code{"Symbol's chain of variable indirections contains a loop"}@* -@xref{Variable Aliases}. +The message is @samp{Symbol's chain of variable indirections contains +a loop}. @xref{Variable Aliases}. @item dbus-error -@code{"D-Bus error"}@* -This is only defined if Emacs was compiled with D-Bus support.@* -@xref{Errors and Events,,, dbus, D-Bus integration in Emacs}. +The message is @samp{D-Bus error}. This is only defined if Emacs was +compiled with D-Bus support. @xref{Errors and Events,,, dbus, D-Bus +integration in Emacs}. @item end-of-buffer -@code{"End of buffer"}@* -@xref{Character Motion}. +The message is @samp{End of buffer}. @xref{Character Motion}. @item end-of-file -@code{"End of file during parsing"}@* -Note that this is not a subcategory of @code{file-error}, -because it pertains to the Lisp reader, not to file I/O.@* -@xref{Input Functions}. +The message is @samp{End of file during parsing}. Note that this is +not a subcategory of @code{file-error}, because it pertains to the +Lisp reader, not to file I/O. @xref{Input Functions}. @item file-already-exists -This is a subcategory of @code{file-error}.@* -@xref{Writing to Files}. +This is a subcategory of @code{file-error}. @xref{Writing to Files}. @item file-date-error This is a subcategory of @code{file-error}. It occurs when @code{copy-file} tries and fails to set the last-modification time of -the output file.@* -@xref{Changing Files}. +the output file. @xref{Changing Files}. @item file-error We do not list the error-strings of this error and its subcategories, @@ -116,122 +107,109 @@ because the error message is normally constructed from the data items alone when the error condition @code{file-error} is present. Thus, the error-strings are not very relevant. However, these error symbols do have @code{error-message} properties, and if no data is provided, -the @code{error-message} property @emph{is} used.@* -@xref{Files}. +the @code{error-message} property @emph{is} used. @xref{Files}. @c jka-compr.el @item compression-error This is a subcategory of @code{file-error}, which results from -problems handling a compressed file.@* -@xref{How Programs Do Loading}. +problems handling a compressed file. @xref{How Programs Do Loading}. @c userlock.el @item file-locked -This is a subcategory of @code{file-error}.@* -@xref{File Locks}. +This is a subcategory of @code{file-error}. @xref{File Locks}. @c userlock.el @item file-supersession -This is a subcategory of @code{file-error}.@* -@xref{Modification Time}. +This is a subcategory of @code{file-error}. @xref{Modification Time}. @c net/ange-ftp.el @item ftp-error -This is a subcategory of @code{file-error}, which results from problems -in accessing a remote file using ftp.@* -@xref{Remote Files,,, emacs, The GNU Emacs Manual}. +This is a subcategory of @code{file-error}, which results from +problems in accessing a remote file using ftp. @xref{Remote Files,,, +emacs, The GNU Emacs Manual}. @item invalid-function -@code{"Invalid function"}@* -@xref{Function Indirection}. +The message is @samp{Invalid function}. @xref{Function Indirection}. @item invalid-read-syntax -@code{"Invalid read syntax"}@* -@xref{Printed Representation}. +The message is @samp{Invalid read syntax}. @xref{Printed +Representation}. @item invalid-regexp -@code{"Invalid regexp"}@* -@xref{Regular Expressions}. +The message is @samp{Invalid regexp}. @xref{Regular Expressions}. @c simple.el @item mark-inactive -@code{"The mark is not active now"}@* -@xref{The Mark}. +The message is @samp{The mark is not active now}. @xref{The Mark}. @item no-catch -@code{"No catch for tag"}@* -@xref{Catch and Throw}. +The message is @samp{No catch for tag}. @xref{Catch and Throw}. @ignore @c Not actually used for anything? Probably definition should be removed. @item protected-field -@code{"Attempt to modify a protected field"} +The message is @samp{Attempt to modify a protected fiel. @end ignore @item scan-error -@code{"Scan error"}@* -This happens when certain syntax-parsing functions -find invalid syntax or mismatched parentheses.@* -@xref{List Motion}, and @ref{Parsing Expressions}. +The message is @samp{Scan error}. This happens when certain +syntax-parsing functions find invalid syntax or mismatched +parentheses. @xref{List Motion}, and @xref{Parsing Expressions}. @item search-failed -@code{"Search failed"}@* -@xref{Searching and Matching}. +The message is @samp{Search failed}. @xref{Searching and Matching}. @item setting-constant -@code{"Attempt to set a constant symbol"}@* -The values of the symbols @code{nil} and @code{t}, -and any symbols that start with @samp{:}, -may not be changed.@* -@xref{Constant Variables, , Variables that Never Change}. +The message is @samp{Attempt to set a constant symbol}. This happens +when attempting to assign values to @code{nil}, @code{t}, and keyword +symbols. @xref{Constant Variables}. @c simple.el @item text-read-only -@code{"Text is read-only"}@* -This is a subcategory of @code{buffer-read-only}.@* -@xref{Special Properties}. +The message is @samp{Text is read-only}. This is a subcategory of +@code{buffer-read-only}. @xref{Special Properties}. @item undefined-color -@code{"Undefined color"}@* -@xref{Color Names}. +The message is @samp{Undefined color}. @xref{Color Names}. @item void-function -@code{"Symbol's function definition is void"}@* +The message is @samp{Symbol's function definition is void}. @xref{Function Cells}. @item void-variable -@code{"Symbol's value as variable is void"}@* +The message is @samp{Symbol's value as variable is void}. @xref{Accessing Variables}. @item wrong-number-of-arguments -@code{"Wrong number of arguments"}@* -@xref{Classifying Lists}. +The message is @samp{Wrong number of arguments}. @xref{Classifying +Lists}. @item wrong-type-argument -@code{"Wrong type argument"}@* -@xref{Type Predicates}. +The message is @samp{Wrong type argument}. @xref{Type Predicates}. @end table +@ignore The following seem to be unused now. The following kinds of error, which are classified as special cases of @code{arith-error}, can occur on certain systems for invalid use of mathematical functions. @xref{Math Functions}. @table @code @item domain-error -@code{"Arithmetic domain error"} +The message is @samp{Arithmetic domain error}. @item overflow-error -@code{"Arithmetic overflow error"}@* -This is a subcategory of @code{domain-error}. +The message is @samp{Arithmetic overflow error}. This is a subcategory +of @code{domain-error}. @item range-error -@code{"Arithmetic range error"} +The message is @code{Arithmetic range error}. @item singularity-error -@code{"Arithmetic singularity error"}@* -This is a subcategory of @code{domain-error}. +The mssage is @samp{Arithmetic singularity error}. This is a +subcategory of @code{domain-error}. @item underflow-error -@code{"Arithmetic underflow error"}@* -This is a subcategory of @code{domain-error}. +The message is @samp{Arithmetic underflow error}. This is a +subcategory of @code{domain-error}. @end table +@end ignore diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 356a891fbcd..af6f4b4c079 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1529,24 +1529,14 @@ track of such changes. @xref{Misc Events}. @node Raising and Lowering @section Raising and Lowering Frames - Most window systems use a desktop metaphor. Part of this metaphor is -the idea that windows are stacked in a notional third dimension -perpendicular to the screen surface, and thus ordered from ``highest'' -to ``lowest''. Where two windows overlap, the one higher up covers -the one underneath. Even a window at the bottom of the stack can be -seen if no other window overlaps it. - -@c @cindex raising a frame redundant with raise-frame +@cindex raising a frame @cindex lowering a frame - A window's place in this ordering is not fixed; in fact, users tend -to change the order frequently. @dfn{Raising} a window means moving -it ``up'', to the top of the stack. @dfn{Lowering} a window means -moving it to the bottom of the stack. This motion is in the notional -third dimension only, and does not change the position of the window -on the screen. - - With Emacs, frames constitute the windows in the metaphor sketched -above. You can raise and lower frames using these functions: + Most window systems use a desktop metaphor. Part of this metaphor +is the idea that system-level windows (e.g.@: Emacs frames) are +stacked in a notional third dimension perpendicular to the screen +surface. Where two overlap, the one higher up covers the one +underneath. You can @dfn{raise} or @dfn{lower} a frame using the +functions @code{raise-frame} and @code{lower-frame}. @deffn Command raise-frame &optional frame This function raises frame @var{frame} (default, the selected frame). diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 9e1d3f9c6ae..cab6d12a3d8 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -23,6 +23,7 @@ define them. * Closures:: Functions that enclose a lexical environment. * Obsolete Functions:: Declaring functions obsolete. * Inline Functions:: Functions that the compiler will expand inline. +* Declare Form:: Adding additional information about a function. * Declaring Functions:: Telling the compiler that a function is defined. * Function Safety:: Determining whether a function is safe to call. * Related Topics:: Cross-references to specific Lisp primitives @@ -521,7 +522,7 @@ Scheme.) is called @dfn{defining a function}, and it is done with the @code{defun} special form. -@defspec defun name argument-list body-forms... +@defmac defun name argument-list body-forms... @code{defun} is the usual way to define new Lisp functions. It defines the symbol @var{name} as a function that looks like this: @@ -578,7 +579,7 @@ without any hesitation or notification. Emacs does not prevent you from doing this, because redefining a function is sometimes done deliberately, and there is no way to distinguish deliberate redefinition from unintentional redefinition. -@end defspec +@end defmac @cindex function aliases @defun defalias name definition &optional docstring @@ -1132,29 +1133,46 @@ examining or altering the structure of closure objects. @node Obsolete Functions @section Declaring Functions Obsolete -You can use @code{make-obsolete} to declare a function obsolete. This -indicates that the function may be removed at some stage in the future. + You can mark a named function as @dfn{obsolete}, meaning that it may +be removed at some point in the future. This causes Emacs to warn +that the function is obsolete whenever it byte-compiles code +containing that function, and whenever it displays the documentation +for that function. In all other respects, an obsolete function +behaves like any other function. + + The easiest way to mark a function as obsolete is to put a +@code{(declare (obsolete @dots{}))} form in the function's +@code{defun} definition. @xref{Declare Form}. Alternatively, you can +use the @code{make-obsolete} function, described below. + + A macro (@pxref{Macros}) can also be marked obsolete with +@code{make-obsolete}; this has the same effects as for a function. An +alias for a function or macro can also be marked as obsolete; this +makes the alias itself obsolete, not the function or macro which it +resolves to. @defun make-obsolete obsolete-name current-name &optional when -This function makes the byte compiler warn that the function -@var{obsolete-name} is obsolete. If @var{current-name} is a symbol, the -warning message says to use @var{current-name} instead of -@var{obsolete-name}. @var{current-name} does not need to be an alias for -@var{obsolete-name}; it can be a different function with similar -functionality. If @var{current-name} is a string, it is the warning -message. +This function marks @var{obsolete-name} as obsolete. +@var{obsolete-name} should be a symbol naming a function or macro, or +an alias for a function or macro. + +If @var{current-name} is a symbol, the warning message says to use +@var{current-name} instead of @var{obsolete-name}. @var{current-name} +does not need to be an alias for @var{obsolete-name}; it can be a +different function with similar functionality. @var{current-name} can +also be a string, which serves as the warning message. The message +should begin in lower case, and end with a period. It can also be +@code{nil}, in which case the warning message provides no additional +details. If provided, @var{when} should be a string indicating when the function was first made obsolete---for example, a date or a release number. @end defun -You can define a function as an alias and declare it obsolete at the -same time using the macro @code{define-obsolete-function-alias}: - @defmac define-obsolete-function-alias obsolete-name current-name &optional when docstring -This macro marks the function @var{obsolete-name} obsolete and also -defines it as an alias for the function @var{current-name}. It is -equivalent to the following: +This convenience macro marks the function @var{obsolete-name} obsolete +and also defines it as an alias for the function @var{current-name}. +It is equivalent to the following: @example (defalias @var{obsolete-name} @var{current-name} @var{docstring}) @@ -1236,6 +1254,63 @@ body uses the arguments, as you do for macros. After an inline function is defined, its inline expansion can be performed later on in the same file, just like macros. +@node Declare Form +@section The @code{declare} Form +@findex declare + + @code{declare} is a special macro which can be used to add ``meta'' +properties to a function or macro: for example, marking it as +obsolete, or giving its forms a special @key{TAB} indentation +convention in Emacs Lisp mode. + +@anchor{Definition of declare} +@defmac declare @var{specs}@dots{} +This macro ignores its arguments and evaluates to @code{nil}; it has +no run-time effect. However, when a @code{declare} form occurs as the +@emph{very first form} in the body of a @code{defun} function +definition or a @code{defmacro} macro definition (@pxref{Defining +Macros}, for a description of @code{defmacro}), it appends the +properties specified by @var{specs} to the function or macro. This +work is specially performed by the @code{defun} and @code{defmacro} +macros. + +Note that if you put a @code{declare} form in an interactive function, +it should go before the @code{interactive} form. + +Each element in @var{specs} should have the form @code{(@var{property} +@var{args}@dots{})}, which should not be quoted. These have the +following effects: + +@table @code +@item (advertised-calling-convention @var{signature} @var{when}) +This acts like a call to @code{set-advertised-calling-convention} +(@pxref{Obsolete Functions}); @var{signature} specifies the correct +argument list for calling the function or macro, and @var{when} should +be a string indicating when the variable was first made obsolete. + +@item (debug @var{edebug-form-spec}) +This is valid for macros only. When stepping through the macro with +Edebug, use @var{edebug-form-spec}. @xref{Instrumenting Macro Calls}. + +@item (doc-string @var{n}) +Use element number @var{n}, if any, as the documentation string. + +@item (indent @var{indent-spec}) +Indent calls to this function or macro according to @var{indent-spec}. +This is typically used for macros, though it works for functions too. +@xref{Indenting Macros}. + +@item (obsolete @var{current-name} @var{when}) +Mark the function or macro as obsolete, similar to a call to +@code{make-obsolete} (@pxref{Obsolete Functions}). @var{current-name} +should be a symbol (in which case the warning message says to use that +instead), a string (specifying the warning message), or @code{nil} (in +which case the warning message gives no extra details). @var{when} +should be a string indicating when the function or macro was first +made obsolete. +@end table +@end defmac + @node Declaring Functions @section Telling the Compiler that a Function is Defined @cindex function declaration diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 5dd8f3c11f5..1375a057a5a 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -58,11 +58,17 @@ use @kbd{C-h f} (@code{describe-function}) or @kbd{C-h v} are many other conventions for documentation strings; see @ref{Documentation Tips}. - Documentation strings can contain several special substrings, which -stand for key bindings to be looked up in the current keymaps when the -documentation is displayed. This allows documentation strings to refer -to the keys for related commands and be accurate even when a user -rearranges the key bindings. (@xref{Keys in Documentation}.) + Documentation strings can contain several special text sequences, +referring to key bindings which are looked up in the current keymaps +when the user views the documentation. This allows the help commands +to display the correct keys even if a user rearranges the default key +bindings. @xref{Keys in Documentation}. + + In the documentation string of an autoloaded command +(@pxref{Autoload}), these special text sequences have an additional +special effect: they cause @kbd{C-h f} (@code{describe-function}) on +the command to trigger autoloading. (This is needed for correctly +setting up the hyperlinks in the @file{*Help*} buffer). @vindex emacs-lisp-docstring-fill-column Emacs Lisp mode fills documentation strings to the width diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 3c9bee96639..aa243185359 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -384,11 +384,13 @@ non-@acronym{ASCII} characters written as @code{?v@var{literal}}. @section Autoload @cindex autoload - The @dfn{autoload} facility allows you to register the existence of -a function or macro, but put off loading the file that defines it. -The first call to the function automatically reads the proper file, in + The @dfn{autoload} facility lets you register the existence of a +function or macro, but put off loading the file that defines it. The +first call to the function automatically loads the proper library, in order to install the real definition and other associated code, then runs the real definition as if it had been loaded all along. +Autoloading can also be triggered by looking up the documentation of +the function or macro (@pxref{Documentation Basics}). There are two ways to set up an autoloaded function: by calling @code{autoload}, and by writing a special ``magic'' comment in the diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index efe298bf647..0a5152a43a1 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -235,43 +235,8 @@ of constants and nonconstant parts. To make this easier, use the @end example The body of a macro definition can include a @code{declare} form, -which can specify how @key{TAB} should indent macro calls, and how to -step through them for Edebug. - -@defmac declare @var{specs}@dots{} -@anchor{Definition of declare} -A @code{declare} form is used in a macro definition to specify various -additional information about it. The following specifications are -currently supported: - -@table @code -@item (debug @var{edebug-form-spec}) -Specify how to step through macro calls for Edebug. -@xref{Instrumenting Macro Calls}. - -@item (indent @var{indent-spec}) -Specify how to indent calls to this macro. @xref{Indenting Macros}, -for more details. - -@item (doc-string @var{number}) -Specify which element of the macro is the documentation string, if -any. -@end table - -A @code{declare} form only has its special effect in the body of a -@code{defmacro} form if it immediately follows the documentation -string, if present, or the argument list otherwise. (Strictly -speaking, @emph{several} @code{declare} forms can follow the -documentation string or argument list, but since a @code{declare} form -can have several @var{specs}, they can always be combined into a -single form.) When used at other places in a @code{defmacro} form, or -outside a @code{defmacro} form, @code{declare} just returns @code{nil} -without evaluating any @var{specs}. -@end defmac - - No macro absolutely needs a @code{declare} form, because that form -has no effect on how the macro expands, on what the macro means in the -program. It only affects the secondary features listed above. +which specifies additional properties about the macro. @xref{Declare +Form}. @node Problems with Macros @section Common Problems Using Macros diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 7c9672a38c0..a086f2b3af1 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -48,9 +48,8 @@ to @tex @math{2^{29}-1}), @end tex -but some machines provide a wider range. Many examples in this -chapter assume that an integer has 30 bits and that floating point -numbers are IEEE double precision. +but many machines provide a wider range. Many examples in this +chapter assume the minimum integer width of 30 bits. @cindex overflow The Lisp reader reads an integer as a sequence of digits with optional @@ -160,8 +159,9 @@ The value of this variable is the smallest integer that Emacs Lisp can handle. It is negative. @end defvar - @xref{Character Codes, max-char}, for the maximum value of a valid -character codepoint. + In Emacs Lisp, text characters are represented by integers. Any +integer between zero and the value of @code{max-char}, inclusive, is +considered to be valid as a character. @xref{String Basics}. @node Float Basics @section Floating Point Basics @@ -171,8 +171,8 @@ character codepoint. not integral. The precise range of floating point numbers is machine-specific; it is the same as the range of the C data type @code{double} on the machine you are using. Emacs uses the -@acronym{IEEE} floating point standard where possible (the standard is -supported by most modern computers). +@acronym{IEEE} floating point standard, which is supported by all +modern computers. The read syntax for floating point numbers requires either a decimal point (with at least one digit following), an exponent, or both. For @@ -316,17 +316,16 @@ compare them, then you test whether two values are the same @emph{object}. By contrast, @code{=} compares only the numeric values of the objects. - At present, each integer value has a unique Lisp object in Emacs Lisp. + In Emacs Lisp, each integer value is a unique Lisp object. Therefore, @code{eq} is equivalent to @code{=} where integers are -concerned. It is sometimes convenient to use @code{eq} for comparing an -unknown value with an integer, because @code{eq} does not report an -error if the unknown value is not a number---it accepts arguments of any -type. By contrast, @code{=} signals an error if the arguments are not -numbers or markers. However, it is a good idea to use @code{=} if you -can, even for comparing integers, just in case we change the -representation of integers in a future Emacs version. +concerned. It is sometimes convenient to use @code{eq} for comparing +an unknown value with an integer, because @code{eq} does not report an +error if the unknown value is not a number---it accepts arguments of +any type. By contrast, @code{=} signals an error if the arguments are +not numbers or markers. However, it is better programming practice to +use @code{=} if you can, even for comparing integers. - Sometimes it is useful to compare numbers with @code{equal}; it + Sometimes it is useful to compare numbers with @code{equal}, which treats two numbers as equal if they have the same data type (both integers, or both floating point) and the same value. By contrast, @code{=} can treat an integer and a floating point number as equal. @@ -439,15 +438,16 @@ If @var{number} is already a floating point number, @code{float} returns it unchanged. @end defun -There are four functions to convert floating point numbers to integers; -they differ in how they round. All accept an argument @var{number} -and an optional argument @var{divisor}. Both arguments may be -integers or floating point numbers. @var{divisor} may also be + There are four functions to convert floating point numbers to +integers; they differ in how they round. All accept an argument +@var{number} and an optional argument @var{divisor}. Both arguments +may be integers or floating point numbers. @var{divisor} may also be @code{nil}. If @var{divisor} is @code{nil} or omitted, these functions convert @var{number} to an integer, or return it unchanged if it already is an integer. If @var{divisor} is non-@code{nil}, they divide @var{number} by @var{divisor} and convert the result to an -integer. An @code{arith-error} results if @var{divisor} is 0. +integer. integer. If @var{divisor} is zero (whether integer or +floating-point), Emacs signals an @code{arith-error} error. @defun truncate number &optional divisor This returns @var{number}, converted to an integer by rounding towards @@ -524,14 +524,12 @@ depending on your machine. @section Arithmetic Operations @cindex arithmetic operations - Emacs Lisp provides the traditional four arithmetic operations: -addition, subtraction, multiplication, and division. Remainder and modulus -functions supplement the division functions. The functions to -add or subtract 1 are provided because they are traditional in Lisp and -commonly used. - - All of these functions except @code{%} return a floating point value -if any argument is floating. + Emacs Lisp provides the traditional four arithmetic operations +(addition, subtraction, multiplication, and division), as well as +remainder and modulus functions, and functions to add or subtract 1. +Except for @code{%}, each of these functions accepts both integer and +floating point arguments, and returns a floating point number if any +argument is a floating point number. It is important to note that in Emacs Lisp, arithmetic functions do not check for overflow. Thus @code{(1+ 536870911)} may evaluate to @@ -620,40 +618,49 @@ quotient. If there are additional arguments @var{divisors}, then it divides @var{dividend} by each divisor in turn. Each argument may be a number or a marker. -If all the arguments are integers, then the result is an integer too. -This means the result has to be rounded. On most machines, the result -is rounded towards zero after each division, but some machines may round -differently with negative arguments. This is because the Lisp function -@code{/} is implemented using the C division operator, which also -permits machine-dependent rounding. As a practical matter, all known -machines round in the standard fashion. - -@cindex @code{arith-error} in division -If you divide an integer by 0, an @code{arith-error} error is signaled. -(@xref{Errors}.) Floating point division by zero returns either -infinity or a NaN if your machine supports @acronym{IEEE} floating point; -otherwise, it signals an @code{arith-error} error. +If all the arguments are integers, the result is an integer, obtained +by rounding the quotient towards zero after each division. +(Hypothetically, some machines may have different rounding behavior +for negative arguments, because @code{/} is implemented using the C +division operator, which permits machine-dependent rounding; but this +does not happen in practice.) @example @group (/ 6 2) @result{} 3 @end group +@group (/ 5 2) @result{} 2 +@end group +@group (/ 5.0 2) @result{} 2.5 +@end group +@group (/ 5 2.0) @result{} 2.5 +@end group +@group (/ 5.0 2.0) @result{} 2.5 +@end group +@group (/ 25 3 2) @result{} 4 +@end group @group (/ -17 6) - @result{} -2 @r{(could in theory be @minus{}3 on some machines)} + @result{} -2 @end group @end example + +@cindex @code{arith-error} in division +If you divide an integer by the integer 0, Emacs signals an +@code{arith-error} error (@pxref{Errors}). If you divide a floating +point number by 0, or divide by the floating point number 0.0, the +result is either positive or negative infinity (@pxref{Float Basics}). @end defun @defun % dividend divisor @@ -661,22 +668,6 @@ otherwise, it signals an @code{arith-error} error. This function returns the integer remainder after division of @var{dividend} by @var{divisor}. The arguments must be integers or markers. -For negative arguments, the remainder is in principle machine-dependent -since the quotient is; but in practice, all known machines behave alike. - -An @code{arith-error} results if @var{divisor} is 0. - -@example -(% 9 4) - @result{} 1 -(% -9 4) - @result{} -1 -(% 9 -4) - @result{} 1 -(% -9 -4) - @result{} -1 -@end example - For any two integers @var{dividend} and @var{divisor}, @example @@ -687,7 +678,19 @@ For any two integers @var{dividend} and @var{divisor}, @end example @noindent -always equals @var{dividend}. +always equals @var{dividend}. If @var{divisor} is zero, Emacs signals +an @code{arith-error} error. + +@example +(% 9 4) + @result{} 1 +(% -9 4) + @result{} -1 +(% 9 -4) + @result{} 1 +(% -9 -4) + @result{} -1 +@end example @end defun @defun mod dividend divisor @@ -697,10 +700,9 @@ in other words, the remainder after division of @var{dividend} by @var{divisor}, but with the same sign as @var{divisor}. The arguments must be numbers or markers. -Unlike @code{%}, @code{mod} returns a well-defined result for negative -arguments. It also permits floating point arguments; it rounds the -quotient downward (towards minus infinity) to an integer, and uses that -quotient to compute the remainder. +Unlike @code{%}, @code{mod} permits floating point arguments; it +rounds the quotient downward (towards minus infinity) to an integer, +and uses that quotient to compute the remainder. If @var{divisor} is zero, @code{mod} signals an @code{arith-error} error if both arguments are integers, and returns a NaN otherwise. @@ -1086,8 +1088,8 @@ numbers as arguments. @defun sin arg @defunx cos arg @defunx tan arg -These are the ordinary trigonometric functions, with argument measured -in radians. +These are the basic trigonometric functions, with argument @var{arg} +measured in radians. @end defun @defun asin arg @@ -1154,20 +1156,6 @@ This function returns the logarithm of @var{arg}, with base returns a NaN. @end defun -@ignore -@defun expm1 arg -This function returns @code{(1- (exp @var{arg}))}, but it is more -accurate than that when @var{arg} is negative and @code{(exp @var{arg})} -is close to 1. -@end defun - -@defun log1p arg -This function returns @code{(log (1+ @var{arg}))}, but it is more -accurate than that when @var{arg} is so small that adding 1 to it would -lose accuracy. -@end defun -@end ignore - @defun log10 arg This function returns the logarithm of @var{arg}, with base 10: @code{(log10 @var{x})} @equiv{} @code{(log @var{x} 10)}. @@ -1201,20 +1189,20 @@ The mathematical constant @math{pi} (3.14159@dots{}). @section Random Numbers @cindex random numbers -A deterministic computer program cannot generate true random numbers. -For most purposes, @dfn{pseudo-random numbers} suffice. A series of -pseudo-random numbers is generated in a deterministic fashion. The -numbers are not truly random, but they have certain properties that -mimic a random series. For example, all possible values occur equally -often in a pseudo-random series. + A deterministic computer program cannot generate true random +numbers. For most purposes, @dfn{pseudo-random numbers} suffice. A +series of pseudo-random numbers is generated in a deterministic +fashion. The numbers are not truly random, but they have certain +properties that mimic a random series. For example, all possible +values occur equally often in a pseudo-random series. -In Emacs, pseudo-random numbers are generated from a ``seed''. -Starting from any given seed, the @code{random} function always -generates the same sequence of numbers. Emacs typically starts with a -different seed each time, so the sequence of values of @code{random} -typically differs in each Emacs run. + Pseudo-random numbers are generated from a ``seed''. Starting from +any given seed, the @code{random} function always generates the same +sequence of numbers. By default, Emacs initializes the random seed at +startup, in such a way that the sequence of values of @code{random} +(with overwhelming likelihood) differs in each Emacs run. -Sometimes you want the random number sequence to be repeatable. For + Sometimes you want the random number sequence to be repeatable. For example, when debugging a program whose behavior depends on the random number sequence, it is helpful to get the same behavior in each program run. To make the sequence repeat, execute @code{(random "")}. @@ -1227,8 +1215,10 @@ This function returns a pseudo-random integer. Repeated calls return a series of pseudo-random integers. If @var{limit} is a positive integer, the value is chosen to be -nonnegative and less than @var{limit}. Otherwise, the value -might be any integer representable in Lisp. +nonnegative and less than @var{limit}. Otherwise, the value might be +any integer representable in Lisp, i.e.@: an integer between +@code{most-negative-fixnum} and @code{most-positive-fixnum} +(@pxref{Integer Basics}). If @var{limit} is @code{t}, it means to choose a new seed based on the current time of day and on Emacs's process @acronym{ID} number. diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index 68e53c78972..54754f8e5e9 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -70,13 +70,11 @@ in their turn. The files @file{subdirs.el} are normally generated automatically when Emacs is installed. @item -It registers input methods by loading any @file{leim-list.el} file -found in the @code{load-path}. - -@c It removes PWD from the environment if it is not accurate. -@c It abbreviates default-directory. - -@c Now normal-top-level calls command-line. +If the library @file{leim-list.el} exists, Emacs loads it. This +optional library is intended for registering input methods; Emacs +looks for it in @code{load-path} (@pxref{Library Search}), skipping +those directories containing the standard Emacs libraries (since +@file{leim-list.el} should not exist in those directories). @vindex before-init-time @item @@ -1159,6 +1157,20 @@ This function returns the effective @acronym{UID} of the user. The value may be a floating point number. @end defun +@defun system-users +This function returns a list of strings, listing the user names on the +system. If Emacs cannot retrieve this information, the return value +is a list containing just the value of @code{user-real-login-name}. +@end defun + +@cindex user groups +@defun system-groups +This function returns a list of strings, listing the names of user +groups on the system. If Emacs cannot retrieve this information, the +return value is @code{nil}. +@end defun + + @node Time of Day @section Time of Day @@ -1812,43 +1824,6 @@ minutes, and even if there have been garbage collections and autosaves. input. Then it becomes idle again, and all the idle timers that are set up to repeat will subsequently run another time, one by one. -@defun current-idle-time -If Emacs is idle, this function returns the length of time Emacs has -been idle, as a list of four integers: @code{(@var{sec-high} -@var{sec-low} @var{microsec} @var{picosec})}, using the same format as -@code{current-time} (@pxref{Time of Day}). - -When Emacs is not idle, @code{current-idle-time} returns @code{nil}. -This is a convenient way to test whether Emacs is idle. - -The main use of this function is when an idle timer function wants to -``take a break'' for a while. It can set up another idle timer to -call the same function again, after a few seconds more idleness. -Here's an example: - -@smallexample -(defvar resume-timer nil - "Timer that `timer-function' used to reschedule itself, or nil.") - -(defun timer-function () - ;; @r{If the user types a command while @code{resume-timer}} - ;; @r{is active, the next time this function is called from} - ;; @r{its main idle timer, deactivate @code{resume-timer}.} - (when resume-timer - (cancel-timer resume-timer)) - ...@var{do the work for a while}... - (when @var{taking-a-break} - (setq resume-timer - (run-with-idle-timer - ;; Compute an idle time @var{break-length} - ;; more than the current value. - (time-add (current-idle-time) - (seconds-to-time @var{break-length})) - nil - 'timer-function)))) -@end smallexample -@end defun - Do not write an idle timer function containing a loop which does a certain amount of processing each time around, and exits when @code{(input-pending-p)} is non-@code{nil}. This approach seems very @@ -1864,16 +1839,50 @@ It blocks out any idle timers that ought to run during that time. @end itemize @noindent -For similar reasons, do not write an idle timer function that sets -up another idle time (including the same idle timer) with the -@var{secs} argument less or equal to the current idleness time. Such -a timer will run almost immediately, and continue running again and -again, instead of waiting for the next time Emacs becomes idle. +Similarly, do not write an idle timer function that sets up another +idle timer (including the same idle timer) with @var{secs} argument +less than or equal to the current idleness time. Such a timer will +run almost immediately, and continue running again and again, instead +of waiting for the next time Emacs becomes idle. The correct approach +is to reschedule with an appropriate increment of the current value of +the idleness time, as described below. -@noindent -The correct approach is for the idle timer to reschedule itself after -a brief pause, using the method in the @code{timer-function} example -above. +@defun current-idle-time +If Emacs is idle, this function returns the length of time Emacs has +been idle, as a list of four integers: @code{(@var{sec-high} +@var{sec-low} @var{microsec} @var{picosec})}, using the same format as +@code{current-time} (@pxref{Time of Day}). + +When Emacs is not idle, @code{current-idle-time} returns @code{nil}. +This is a convenient way to test whether Emacs is idle. +@end defun + + The main use of @code{current-idle-time} is when an idle timer +function wants to ``take a break'' for a while. It can set up another +idle timer to call the same function again, after a few seconds more +idleness. Here's an example: + +@example +(defvar my-resume-timer nil + "Timer for `my-timer-function' to reschedule itself, or nil.") + +(defun my-timer-function () + ;; @r{If the user types a command while @code{my-resume-timer}} + ;; @r{is active, the next time this function is called from} + ;; @r{its main idle timer, deactivate @code{my-resume-timer}.} + (when my-resume-timer + (cancel-timer my-resume-timer)) + ...@var{do the work for a while}... + (when @var{taking-a-break} + (setq my-resume-timer + (run-with-idle-timer + ;; Compute an idle time @var{break-length} + ;; more than the current value. + (time-add (current-idle-time) + (seconds-to-time @var{break-length})) + nil + 'my-timer-function)))) +@end example @node Terminal Input @section Terminal Input @@ -1907,7 +1916,6 @@ If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff} (@kbd{C-q}, @kbd{C-s}) flow control for output to the terminal. This has no effect except in @sc{cbreak} mode. -@c Emacs 19 feature The argument @var{meta} controls support for input character codes above 127. If @var{meta} is @code{t}, Emacs converts characters with the 8th bit set into Meta characters. If @var{meta} is @code{nil}, @@ -1916,7 +1924,6 @@ it as a parity bit. If @var{meta} is neither @code{t} nor @code{nil}, Emacs uses all 8 bits of input unchanged. This is good for terminals that use 8-bit character sets. -@c Emacs 19 feature If @var{quit-char} is non-@code{nil}, it specifies the character to use for quitting. Normally this character is @kbd{C-g}. @xref{Quitting}. @@ -1925,7 +1932,6 @@ use for quitting. Normally this character is @kbd{C-g}. The @code{current-input-mode} function returns the input mode settings Emacs is currently using. -@c Emacs 19 feature @defun current-input-mode This function returns the current mode for reading keyboard input. It returns a list, corresponding to the arguments of @code{set-input-mode}, diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index b7097e057c0..865435c91b3 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -35,28 +35,31 @@ keyboard character events. @node String Basics @section String and Character Basics - Characters are represented in Emacs Lisp as integers; -whether an integer is a character or not is determined only by how it is -used. Thus, strings really contain integers. @xref{Character Codes}, -for details about character representation in Emacs. + A character is a Lisp object which represents a single character of +text. In Emacs Lisp, characters are simply integers; whether an +integer is a character or not is determined only by how it is used. +@xref{Character Codes}, for details about character representation in +Emacs. - The length of a string (like any array) is fixed, and cannot be -altered once the string exists. Strings in Lisp are @emph{not} -terminated by a distinguished character code. (By contrast, strings in -C are terminated by a character with @acronym{ASCII} code 0.) + A string is a fixed sequence of characters. It is a type of +sequence called a @dfn{array}, meaning that its length is fixed and +cannot be altered once it is created (@pxref{Sequences Arrays +Vectors}). Unlike in C, Emacs Lisp strings are @emph{not} terminated +by a distinguished character code. Since strings are arrays, and therefore sequences as well, you can -operate on them with the general array and sequence functions. -(@xref{Sequences Arrays Vectors}.) For example, you can access or -change individual characters in a string using the functions @code{aref} -and @code{aset} (@pxref{Array Functions}). However, note that -@code{length} should @emph{not} be used for computing the width of a -string on display; use @code{string-width} (@pxref{Width}) instead. +operate on them with the general array and sequence functions +documented in @ref{Sequences Arrays Vectors}. For example, you can +access or change individual characters in a string using the functions +@code{aref} and @code{aset} (@pxref{Array Functions}). However, note +that @code{length} should @emph{not} be used for computing the width +of a string on display; use @code{string-width} (@pxref{Width}) +instead. - There are two text representations for non-@acronym{ASCII} characters in -Emacs strings (and in buffers): unibyte and multibyte (@pxref{Text -Representations}). For most Lisp programming, you don't need to be -concerned with these two representations. + There are two text representations for non-@acronym{ASCII} +characters in Emacs strings (and in buffers): unibyte and multibyte. +For most Lisp programming, you don't need to be concerned with these +two representations. @xref{Text Representations}, for details. Sometimes key sequences are represented as unibyte strings. When a unibyte string is a key sequence, string elements in the range 128 to @@ -88,7 +91,7 @@ for information about the syntax of characters and strings. representations and to encode and decode character codes. @node Predicates for Strings -@section The Predicates for Strings +@section Predicates for Strings For more information about general sequence and array predicates, see @ref{Sequences Arrays Vectors}, and @ref{Arrays}. diff --git a/etc/NEWS b/etc/NEWS index 616db77fe02..0aff5e40251 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -76,6 +76,7 @@ You can explicitly require a specific version by passing * Startup Changes in Emacs 24.3 ++++ ** Emacs no longer searches for `leim-list.el' files beneath the standard lisp/ directory. There should not be any there anyway. If you have been adding them there, put them somewhere else, eg site-lisp. @@ -89,10 +90,12 @@ been adding them there, put them somewhere else, eg site-lisp. ** minibuffer-electric-default-mode can rewrite (default ...) to [...]. Just set minibuffer-eldef-shorten-default to t before enabling the mode. ++++ ** Most y-or-n prompts now allow you to scroll the selected window. Typing C-v or M-v at a y-or-n prompt scrolls forward or backward respectively, without exiting from the prompt. +--- ** In minibuffer filename prompts, `C-M-f' and `C-M-b' now move to the next and previous path separator, respectively. @@ -107,12 +110,14 @@ invokes `set-buffer-file-coding-system'. ** Help changes ++++ *** `C-h f' (describe-function) can now perform autoloading. When this command is called for an autoloaded function whose docstring contains a key substitution construct, that function's library is automatically loaded, so that the documentation can be shown correctly. To disable this, set `help-enable-auto-load' to nil. +--- *** `C-h f' now reports previously-autoloaded functions as "autoloaded", even after their associated libraries have been loaded (and the autoloads have been redefined as functions). @@ -136,11 +141,11 @@ treated as images. :background image spec property. ** Server and client changes - ++++ *** emacsclient now obeys string values for `initial-buffer-choice', if it is told to open a new frame without specifying any file to visit or expression to evaluate. - +--- *** New option `server-auth-key' specifies a shared server key. ** In the Package Menu, newly-available packages are listed as "new", @@ -155,6 +160,7 @@ On encountering a fatal error, Emacs now outputs a textual description of the fatal signal, and a short backtrace on platforms like glibc that support backtraces. +--- ** If your Emacs was built from a bzr checkout, the new variable `emacs-bzr-version' contains information about the bzr revision used. @@ -185,14 +191,33 @@ The PCL-CVS commands are still available via the keyboard. * Editing Changes in Emacs 24.3 ** Navigation command changes - ++++ *** New binding `M-g c' for `goto-char'. - ++++ *** New binding `M-g TAB' for `move-to-column'. - ++++ *** `M-g TAB' (`move-to-column') prompts for a column number if called interactively with no prefix arg. Previously, it moved to column 1. +** Search and Replace changes ++++ +*** Non-regexp Isearch now performs "lax" space matching. +Each sequence of spaces in the supplied search string may match any +sequence of one or more whitespace characters, as specified by the +variable `search-whitespace-regexp'. (This variable is also used by a +similar existing feature for regexp Isearch). ++++ +*** New Isearch command `M-s SPC' toggles lax space matching. +This applies to both ordinary and regexp Isearch. ++++ +*** New option `replace-lax-whitespace'. +If non-nil, `query-replace' uses flexible whitespace matching too. +The default is nil. + +*** Global `M-s _' starts a symbol (identifier) incremental search, +and `M-s _' in Isearch toggles symbol search mode. +`M-s c' in Isearch toggles search case-sensitivity. + +++ ** `C-x 8 RET' is now bound to `insert-char', which is now a command. `ucs-insert' is now an obsolete alias for `insert-char'. @@ -202,29 +227,11 @@ interactively with no prefix arg. Previously, it moved to column 1. It used to be bound to `kill-this-buffer', but `z' is too easy to accidentally type. ++++ ** New option `delete-trailing-lines' specifies whether M-x delete-trailing-whitespace should delete trailing lines at the end of the buffer. It defaults to t. -** Search and Replace changes - -*** Non-regexp Isearch now performs "lax" space matching. -Each sequence of spaces in the supplied search string may match any -sequence of one or more whitespace characters, as specified by the -variable `search-whitespace-regexp'. (This variable is also used by a -similar existing feature for regexp Isearch). - -*** New Isearch command `M-s SPC' toggles lax space matching. -This applies to both ordinary and regexp Isearch. - -*** New option `replace-lax-whitespace'. -If non-nil, `query-replace' uses flexible whitespace matching too. -The default is nil. - -*** Global `M-s _' starts a symbol (identifier) incremental search, -and `M-s _' in Isearch toggles symbol search mode. -`M-s c' in Isearch toggles search case-sensitivity. - ** Register changes +++ *** `C-x r +' is now overloaded to invoke `append-to-register. @@ -233,8 +240,10 @@ and `M-s _' in Isearch toggles symbol search mode. the text to put between collected texts for use with M-x append-to-register and M-x prepend-to-register. ++++ ** `C-u M-=' now counts lines/words/characters in the entire buffer. ++++ ** New command `C-x r M-w' (copy-rectangle-as-kill). It copies the region-rectangle as the last rectangle kill. @@ -246,17 +255,17 @@ just removing them, as done by `yank-excluded-properties'. * Changes in Specialized Modes and Packages in Emacs 24.3 ** Apropos - +--- *** The faces used by Apropos are now directly customizable. These faces are named `apropos-symbol', `apropos-keybinding', and so on; see the `apropos' Custom group for details. - -**** The old options whose values specified faces to use were removed +--- +*** The old options whose values specified faces to use were removed (i.e. `apropos-symbol-face', `apropos-keybinding-face', etc.). ** Buffer Menu This package has been rewritten to use Tabulated List mode. - +--- *** Option `Buffer-menu-buffer+size-width' is now obsolete. Use `Buffer-menu-name-width' and `Buffer-menu-size-width' instead. @@ -580,22 +589,22 @@ enabled. ** Obsolete packages: - ++++ *** assoc.el In most cases, assoc+member+push+delq work just as well. And in any case it's just a terrible package: ugly semantics, terrible inefficiency, and not namespace-clean. - +--- *** bruce.el - +--- *** ledit.el - +--- *** mailpost.el - ++++ *** mouse-sel.el - +--- *** patcomp.el - ++++ *** cust-print.el @@ -603,11 +612,13 @@ inefficiency, and not namespace-clean. * Incompatible Lisp Changes in Emacs 24.3 ++++ ** (random) by default now returns a different random sequence in every Emacs run. Use (random S), where S is a string, to set the random seed to a value based on S, in order to get a repeatable sequence in later calls. +--- ** The function `x-select-font' can return a font spec, instead of a font name as a string. Whether it returns a font spec or a font name depends on the graphical library. @@ -628,6 +639,7 @@ and are now undefined. For backwards compatibility, defun and defmacro currently return the name of the newly defined function/macro but this should not be relied upon. +--- ** `face-spec-set' no longer sets frame-specific attributes when the third argument is a frame (that usage was obsolete since Emacs 22.2). @@ -772,23 +784,24 @@ in Emacs 24.1: **** `display-buffer-function' ** Time - +--- *** `current-time-string' no longer requires that its argument's year must be in the range 1000..9999. It now works with any year supported by the underlying C implementation. - +--- *** `current-time' now returns extended-format time stamps (HIGH LOW USEC PSEC), where the new PSEC slot specifies picoseconds. PSEC is typically a multiple of 1000 on current machines. Other functions that use this format, such as file-attributes and format-time-string, have been changed accordingly. Old-format time stamps are still accepted. - +--- *** The format of timers in timer-list and timer-idle-list is now [TRIGGERED-P HI-SECS LO-SECS USECS REPEAT-DELAY FUNCTION ARGS IDLE-DELAY PSECS]. The PSECS slot is new, and uses picosecond resolution. It can be accessed via the new timer--psecs accessor. ++++ ** Floating point functions now always return special values like NaN, instead of signaling errors, if given invalid args, e.g. (log -1.0). Previously, they returned NaNs on some platforms but signaled errors @@ -806,18 +819,22 @@ result in a warning describing the cycle. *** `autoloadp' *** `autoload-do-load'. ++++ *** `buffer-narrowed-p' tests if the buffer is narrowed. *** `file-name-base' returns a file name sans directory and extension. *** `function-get' fetches a function property, following aliases. ++++ *** `posnp' tests if an object is a `posn'. *** `set-temporary-overlay-map' sets up a temporary overlay map. ++++ *** `system-users' returns the user names on the system. ++++ *** `system-groups' returns the group names on the system. *** `tty-top-frame' returns the topmost frame of a text terminal. ** New macros `setq-local' and `defvar-local'. -** New fringe bitmap exclamation-mark. +** New fringe bitmap `exclamation-mark'. ** Face underlining can now use a wave. See the "Face Attributes" section of the Elisp manual. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3e1b93ae3ba..d7b8163ae9e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -34,6 +34,13 @@ 2012-09-30 Chong Yidong + * server.el (server-host): Document the security implications. + (server-auth-key): Doc fix. + + * startup.el (initial-buffer-choice): Doc fix. + + * minibuffer.el (minibuffer-local-filename-syntax): Doc fix. + * simple.el (delete-trailing-whitespace): Avoid an unnecessary restriction change. diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 27c53744d54..cf990019abc 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2332,7 +2332,7 @@ and `read-file-name-function'." (modify-syntax-entry c "." table)) '(?/ ?: ?\\)) table) - "Syntax table to be used in minibuffer for reading file name.") + "Syntax table used when reading a file name in the minibuffer.") ;; minibuffer-completing-file-name is a variable used internally in minibuf.c ;; to determine whether to use minibuffer-local-filename-completion-map or diff --git a/lisp/server.el b/lisp/server.el index 4fd55bcf6d1..73c253a87a6 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -101,7 +101,12 @@ (defcustom server-host nil "The name or IP address to use as host address of the server process. -If set, the server accepts remote connections; otherwise it is local." +If set, the server accepts remote connections; otherwise it is local. + +DO NOT give this a non-nil value unless you know what you are +doing! On unsecured networks, accepting remote connections is +very dangerous, because server-client communication (including +session authentication) is not encrypted." :group 'server :type '(choice (string :tag "Name or IP address") @@ -140,12 +145,12 @@ directory residing in a NTFS partition instead." (defcustom server-auth-key nil "Server authentication key. +This is only used if `server-use-tcp' is non-nil. Normally, the authentication key is randomly generated when the -server starts, which guarantees some level of security. It is -recommended to leave it that way. Using a long-lived shared key -will decrease security (especially since the key is transmitted as -plain text). +server starts. It is recommended to leave it that way. Using a +long-lived shared key will decrease security (especially since +the key is transmitted as plain-text). In some situations however, it can be difficult to share randomly generated passwords with remote hosts (eg. no shared directory), @@ -153,11 +158,13 @@ so you can set the key with this variable and then copy the server file to the remote host (with possible changes to IP address and/or port if that applies). -The key must consist of 64 ASCII printable characters except for -space (this means characters from ! to ~; or from code 33 to 126). +Note that the usual security risks of using the server over +remote TCP, arising from the fact that client-server +communications are unencrypted, still apply. -You can use \\[server-generate-key] to get a random authentication -key." +The key must consist of 64 ASCII printable characters except for +space (this means characters from ! to ~; or from code 33 to +126). You can use \\[server-generate-key] to get a random key." :group 'server :type '(choice (const :tag "Random" nil) diff --git a/lisp/startup.el b/lisp/startup.el index 243c9621752..6658e16683b 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -43,7 +43,10 @@ If the value is nil and `inhibit-startup-screen' is nil, show the startup screen. If the value is a string, visit the specified file or directory using `find-file'. If t, open the `*scratch*' -buffer." +buffer. + +A string value also causes emacsclient to open the specified file +or directory when no target file is specified." :type '(choice (const :tag "Startup screen" nil) (directory :tag "Directory" :value "~/") diff --git a/src/ChangeLog b/src/ChangeLog index 12992f1de0a..122dbd903fe 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Chong Yidong + + * fns.c (Frandom): Doc fix. + 2012-09-30 Martin Rudalics * window.c (Vwindow_combination_limit): New default value. diff --git a/src/fns.c b/src/fns.c index b4bb9e83fa8..6d6f019b311 100644 --- a/src/fns.c +++ b/src/fns.c @@ -61,8 +61,9 @@ DEFUN ("identity", Fidentity, Sidentity, 1, 1, 0, DEFUN ("random", Frandom, Srandom, 0, 1, 0, doc: /* Return a pseudo-random number. -All integers representable in Lisp are equally likely. - On most systems, this is 29 bits' worth. +All integers representable in Lisp, i.e. between `most-negative-fixnum' +and `most-positive-fixnum', inclusive, are equally likely. + With positive integer LIMIT, return random number in interval [0,LIMIT). With argument t, set the random number seed from the current time and pid. Other values of LIMIT are ignored. */) From 0e8bc990346ed3d77915251b21ec04f7ed10dba3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sun, 30 Sep 2012 06:17:45 -0400 Subject: [PATCH 052/128] Auto-commit of generated files. --- autogen/config.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/autogen/config.in b/autogen/config.in index 8852686c360..8a8799db1cf 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -1522,7 +1522,9 @@ along with GNU Emacs. If not, see . */ . _GL_INLINE_HEADER_END contains useful stuff to put in the same include file, after uses of _GL_INLINE. */ -#if __GNUC__ ? __GNUC_STDC_INLINE__ : 199901L <= __STDC_VERSION__ +#if (__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : 199901L <= __STDC_VERSION__) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline #elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) @@ -1539,7 +1541,7 @@ along with GNU Emacs. If not, see . */ #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) -# if __GNUC_STDC_INLINE__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ From 1bc834133da819bb132a732b1797df7481f86a8b Mon Sep 17 00:00:00 2001 From: Martin Rudalics Date: Sun, 30 Sep 2012 12:44:43 +0200 Subject: [PATCH 053/128] Fix last fix of window--display-buffer. --- lisp/window.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/window.el b/lisp/window.el index 3f399bc39fb..811b1781b4c 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5191,7 +5191,7 @@ BUFFER and WINDOW are live." height)))) (delta (- new-height (window-total-size window)))) (cond - ((and (window-resizable-p window delta nil 'safe) + ((and (window--resizable-p window delta nil 'safe) (window-combined-p window)) (window-resize window delta nil 'safe)) ((or (eq type 'frame) @@ -5214,7 +5214,7 @@ BUFFER and WINDOW are live." width)))) (delta (- new-width (window-total-size window t)))) (cond - ((and (window-resizable-p window delta t 'safe) + ((and (window--resizable-p window delta t 'safe) (window-combined-p window t)) (window-resize window delta t 'safe)) ((or (eq type 'frame) From 9ee2ee9f1b160bcb2efbcdede152005f1bc95d48 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sun, 30 Sep 2012 14:27:23 +0200 Subject: [PATCH 054/128] nt/config.nt: Sync with autogen/config.in. --- nt/ChangeLog | 6 +++++- nt/config.nt | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nt/ChangeLog b/nt/ChangeLog index d615151310e..7e064cc3e42 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,6 +1,10 @@ +2012-09-30 Juanma Barranquero + + * config.nt: Sync with autogen/config.in. + 2012-09-29 Juanma Barranquero - * config.nt: Sync with autogen/config.in + * config.nt: Sync with autogen/config.in. (HAVE_TIMER_SETTIME): New macro. 2012-09-23 Eli Zaretskii diff --git a/nt/config.nt b/nt/config.nt index f8ba4ff9c6c..3b398eae04c 100644 --- a/nt/config.nt +++ b/nt/config.nt @@ -1531,7 +1531,9 @@ along with GNU Emacs. If not, see . */ . _GL_INLINE_HEADER_END contains useful stuff to put in the same include file, after uses of _GL_INLINE. */ -#if __GNUC__ ? __GNUC_STDC_INLINE__ : 199901L <= __STDC_VERSION__ +#if (__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : 199901L <= __STDC_VERSION__) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline #elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) @@ -1548,7 +1550,7 @@ along with GNU Emacs. If not, see . */ #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) -# if __GNUC_STDC_INLINE__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ From 427730ebdec426ceaae9ab04c9b0951ac8bbb923 Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sun, 30 Sep 2012 14:27:58 +0200 Subject: [PATCH 055/128] src/makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. --- src/ChangeLog | 4 ++++ src/makefile.w32-in | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 122dbd903fe..1f240b219e0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Juanma Barranquero + + * makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. + 2012-09-30 Chong Yidong * fns.c (Frandom): Doc fix. diff --git a/src/makefile.w32-in b/src/makefile.w32-in index 7482211ee0a..3d1464cc742 100644 --- a/src/makefile.w32-in +++ b/src/makefile.w32-in @@ -976,10 +976,10 @@ $(BLD)/xml.$(O) : \ $(BLD)/profiler.$(O) : \ $(SRC)/profiler.c \ - $(NT_INC)/sys/time.h \ $(CONFIG_H) \ $(LISP_H) \ - $(SYSSIGNAL_H) + $(SYSSIGNAL_H) \ + $(SYSTIME_H) $(BLD)/image.$(O) : \ $(SRC)/image.c \ From ee41332bd8a529ee7ce96b4d19d350f6fcc5248c Mon Sep 17 00:00:00 2001 From: Juanma Barranquero Date: Sun, 30 Sep 2012 14:28:50 +0200 Subject: [PATCH 056/128] lisp/ido.el (ido-max-directory-size): Default to nil. The current default is small for POSIX systems, and impractical on Windows 7 now that lstat returns directory sizes for NTFS. --- lisp/ChangeLog | 6 ++++++ lisp/ido.el | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d7b8163ae9e..255b8924784 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-09-30 Juanma Barranquero + + * ido.el (ido-max-directory-size): Default to nil; the current + default is small for POSIX systems, and impractical on Windows 7 + now that lstat returns directory sizes for NTFS. + 2012-09-30 Martin Rudalics In buffer display functions handle window-height/window-width diff --git a/lisp/ido.el b/lisp/ido.el index f511dbbf8ac..94818fe57b0 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -714,7 +714,7 @@ See also `ido-dir-file-cache' and `ido-save-directory-list-file'." :type 'integer :group 'ido) -(defcustom ido-max-directory-size 30000 +(defcustom ido-max-directory-size nil "Maximum size (in bytes) for directories to use ido completion. If you enter a directory with a size larger than this size, ido will not provide the normal completion. To show the completions, use C-a." From dd946752ab8810149a66a3eff469eb128709972d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 30 Sep 2012 14:50:09 +0200 Subject: [PATCH 057/128] Add support for fullscreen in the NS port. * etc/NEWS: The NS port supports fullscreen. * src/nsfns.m (ns_frame_parm_handlers): Add x_set_fullscreen. * src/nsterm.h (MAC_OS_X_VERSION_10_7, MAC_OS_X_VERSION_10_8): New. (EmacsView): Add variables for fullscreen. (handleFS, setFSValue, toggleFullScreen): New in EmacsView. (EmacsFSWindow): New interface for fullscreen. * src/nsterm.m (NEW_STYLE_FS): New define. (ns_fullscreen_hook, windowWillEnterFullScreen) (windowDidEnterFullScreen, windowWillExitFullScreen) (windowDidExitFullScreen, toggleFullScreen, handleFS) (setFSValue): New functions. (EmacsFSWindow): New implementation. (canBecomeKeyWindow): New function for EmacsFSWindow. (ns_create_terminal): Set fullscreen_hook to ns_fullscreen_hook. (dealloc): Release nonfs_window if in fullscreen. (updateFrameSize:): Call windowDidMove to update top/left. (windowWillResize:toSize:): Check if frame is still maximized. (initFrameFromEmacs:): Initialize fs_state, fs_before_fs, next_maximized, maximized_width, maximized_height and nonfs_window. Call setCollectionBehavior if NEW_STYLE_FS. Initialize bwidth and tbar_height. (windowWillUseStandardFrame:defaultFrame:): Update frame parameter fullscreen. Set maximized_width/height. Act on next_maximized. --- etc/ChangeLog | 4 + etc/NEWS | 2 + src/ChangeLog | 27 +++++ src/nsfns.m | 2 +- src/nsterm.h | 18 +++ src/nsterm.m | 296 +++++++++++++++++++++++++++++++++++++++++++++++--- 6 files changed, 333 insertions(+), 16 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 6f2b178fcd7..2c1e3758ea0 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Jan Djärv + + * NEWS: The NS port supports fullscreen. + 2012-09-17 Glenn Morris * refcards/emacsver.tex: New file. diff --git a/etc/NEWS b/etc/NEWS index 0aff5e40251..e6f09d83f43 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -187,6 +187,8 @@ The PCL-CVS commands are still available via the keyboard. --- *** New input method `vietnamese-vni'. +** The NS port supports fullscreen. + * Editing Changes in Emacs 24.3 diff --git a/src/ChangeLog b/src/ChangeLog index 1f240b219e0..6aaa6bc88f8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,30 @@ +2012-09-30 Jan Djärv + + * nsfns.m (ns_frame_parm_handlers): Add x_set_fullscreen. + + * nsterm.m (NEW_STYLE_FS): New define. + (ns_fullscreen_hook, windowWillEnterFullScreen) + (windowDidEnterFullScreen, windowWillExitFullScreen) + (windowDidExitFullScreen, toggleFullScreen, handleFS) + (setFSValue): New functions. + (EmacsFSWindow): New implementation. + (canBecomeKeyWindow): New function for EmacsFSWindow. + (ns_create_terminal): Set fullscreen_hook to ns_fullscreen_hook. + (dealloc): Release nonfs_window if in fullscreen. + (updateFrameSize:): Call windowDidMove to update top/left. + (windowWillResize:toSize:): Check if frame is still maximized. + (initFrameFromEmacs:): Initialize fs_state, fs_before_fs, + next_maximized, maximized_width, maximized_height and nonfs_window. + Call setCollectionBehavior if NEW_STYLE_FS. Initialize bwidth and + tbar_height. + (windowWillUseStandardFrame:defaultFrame:): Update frame parameter + fullscreen. Set maximized_width/height. Act on next_maximized. + + * nsterm.h (MAC_OS_X_VERSION_10_7, MAC_OS_X_VERSION_10_8): New. + (EmacsView): Add variables for fullscreen. + (handleFS, setFSValue, toggleFullScreen): New in EmacsView. + (EmacsFSWindow): New interface for fullscreen. + 2012-09-30 Juanma Barranquero * makefile.w32-in ($(BLD)/profiler.$(O)): Update dependencies. diff --git a/src/nsfns.m b/src/nsfns.m index 94ace360438..c96ec99ed2e 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1018,7 +1018,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side x_set_fringe_width, /* generic OK */ x_set_fringe_width, /* generic OK */ 0, /* x_set_wait_for_wm, will ignore */ - 0, /* x_set_fullscreen will ignore */ + x_set_fullscreen, /* generic OK */ x_set_font_backend, /* generic OK */ x_set_alpha, 0, /* x_set_sticky */ diff --git a/src/nsterm.h b/src/nsterm.h index 97fc6be20e5..f06e0cb0f7f 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -38,6 +38,12 @@ along with GNU Emacs. If not, see . */ #ifndef MAC_OS_X_VERSION_10_6 #define MAC_OS_X_VERSION_10_6 1060 #endif +#ifndef MAC_OS_X_VERSION_10_7 +#define MAC_OS_X_VERSION_10_7 1070 +#endif +#ifndef MAC_OS_X_VERSION_10_8 +#define MAC_OS_X_VERSION_10_8 1080 +#endif #endif /* NS_IMPL_COCOA */ #ifdef __OBJC__ @@ -80,6 +86,9 @@ along with GNU Emacs. If not, see . */ BOOL windowClosing; NSString *workingText; BOOL processingCompose; + int fs_state, fs_before_fs, next_maximized, tbar_height, bwidth; + int maximized_width, maximized_height; + NSWindow *nonfs_window; @public struct frame *emacsframe; int rows, cols; @@ -104,6 +113,9 @@ along with GNU Emacs. If not, see . */ - (EmacsToolbar *) toolbar; - (void) deleteWorkingText; - (void) updateFrameSize: (BOOL) delay; +- (void) handleFS; +- (void) setFSValue: (int)value; +- (void) toggleFullScreen: (id) sender; #ifdef NS_IMPL_GNUSTEP /* Not declared, but useful. */ @@ -120,6 +132,12 @@ along with GNU Emacs. If not, see . */ @end +/* Fullscreen version of the above. */ +@interface EmacsFSWindow : EmacsWindow +{ +} +@end + /* ========================================================================== The main menu implementation diff --git a/src/nsterm.m b/src/nsterm.m index 5af3c2e2ae1..d41c38f4e40 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -72,6 +72,11 @@ Updated by Christian Limpach (chris@nice.ch) #define NSTRACE(x) #endif +#if defined (NS_IMPL_COCOA) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 +#define NEW_STYLE_FS +#endif + extern NSString *NSMenuDidBeginTrackingNotification; /* ========================================================================== @@ -1306,6 +1311,17 @@ Free a pool and temporary objects it refers to (callable from C) } +static void +ns_fullscreen_hook (FRAME_PTR f) +{ + EmacsView *view = (EmacsView *)FRAME_NS_VIEW (f); + + if (! f->async_visible) return; + + block_input (); + [view handleFS]; + unblock_input (); +} /* ========================================================================== @@ -3932,7 +3948,7 @@ static Lisp_Object ns_string_to_lispmod (const char *s) terminal->frame_rehighlight_hook = ns_frame_rehighlight; terminal->frame_raise_lower_hook = ns_frame_raise_lower; - terminal->fullscreen_hook = 0; /* see XTfullscreen_hook */ + terminal->fullscreen_hook = ns_fullscreen_hook; terminal->set_vertical_scroll_bar_hook = ns_set_vertical_scroll_bar; terminal->condemn_scroll_bars_hook = ns_condemn_scroll_bars; @@ -4687,6 +4703,8 @@ - (void)dealloc { NSTRACE (EmacsView_dealloc); [toolbar release]; + if (fs_state == FULLSCREEN_BOTH) + [nonfs_window release]; [super dealloc]; } @@ -5405,6 +5423,7 @@ - (void) updateFrameSize: (BOOL) delay; SET_FRAME_GARBAGED (emacsframe); cancel_mouse_face (emacsframe); [view setFrame: NSMakeRect (0, 0, neww, newh)]; + [self windowDidMove:nil]; // Update top/left. } } @@ -5414,6 +5433,19 @@ - (NSSize)windowWillResize: (NSWindow *)sender toSize: (NSSize)frameSize NSTRACE (windowWillResize); /*fprintf (stderr,"Window will resize: %.0f x %.0f\n",frameSize.width,frameSize.height); */ + if (fs_state == FULLSCREEN_MAXIMIZED + && (maximized_width != (int)frameSize.width + || maximized_height != (int)frameSize.height)) + [self setFSValue: FULLSCREEN_NONE]; + else if (fs_state == FULLSCREEN_WIDTH + && maximized_width != (int)frameSize.width) + [self setFSValue: FULLSCREEN_NONE]; + else if (fs_state == FULLSCREEN_HEIGHT + && maximized_height != (int)frameSize.height) + [self setFSValue: FULLSCREEN_NONE]; + if (fs_state == FULLSCREEN_NONE) + maximized_width = maximized_height = -1; + cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (emacsframe, #ifdef NS_IMPL_GNUSTEP frameSize.width + 3); @@ -5595,6 +5627,10 @@ - (BOOL)isOpaque windowClosing = NO; processingCompose = NO; scrollbarsNeedingUpdate = 0; + fs_state = FULLSCREEN_NONE; + fs_before_fs = next_maximized = -1; + maximized_width = maximized_height = -1; + nonfs_window = nil; /*fprintf (stderr,"init with %d, %d\n",f->text_cols, f->text_lines); */ @@ -5619,9 +5655,13 @@ - (BOOL)isOpaque backing: NSBackingStoreBuffered defer: YES]; +#ifdef NEW_STYLE_FS + [win setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; +#endif + wr = [win frame]; - f->border_width = wr.size.width - r.size.width; - FRAME_NS_TITLEBAR_HEIGHT (f) = wr.size.height - r.size.height; + bwidth = f->border_width = wr.size.width - r.size.width; + tbar_height = FRAME_NS_TITLEBAR_HEIGHT (f) = wr.size.height - r.size.height; [win setAcceptsMouseMovedEvents: YES]; [win setDelegate: self]; @@ -5727,27 +5767,50 @@ - (NSRect)windowWillUseStandardFrame:(NSWindow *)sender NSTRACE (windowWillUseStandardFrame); - if (abs (defaultFrame.size.height - result.size.height) - > FRAME_LINE_HEIGHT (emacsframe)) + if (fs_before_fs != -1) /* Entering fullscreen */ + { + result = defaultFrame; + } + else if (next_maximized == FULLSCREEN_HEIGHT + || (next_maximized == -1 + && abs (defaultFrame.size.height - result.size.height) + > FRAME_LINE_HEIGHT (emacsframe))) { /* first click */ ns_userRect = result; - result.size.height = defaultFrame.size.height; + maximized_height = result.size.height = defaultFrame.size.height; + maximized_width = -1; result.origin.y = defaultFrame.origin.y; + [self setFSValue: FULLSCREEN_HEIGHT]; + } + else if (next_maximized == FULLSCREEN_WIDTH) + { + ns_userRect = result; + maximized_width = result.size.width = defaultFrame.size.width; + maximized_height = -1; + result.origin.x = defaultFrame.origin.x; + [self setFSValue: FULLSCREEN_WIDTH]; + } + else if (next_maximized == FULLSCREEN_MAXIMIZED + || (next_maximized == -1 + && abs (defaultFrame.size.width - result.size.width) + > FRAME_COLUMN_WIDTH (emacsframe))) + { + result = defaultFrame; /* second click */ + maximized_width = result.size.width; + maximized_height = result.size.height; + [self setFSValue: FULLSCREEN_MAXIMIZED]; } else { - if (abs (defaultFrame.size.width - result.size.width) - > FRAME_COLUMN_WIDTH (emacsframe)) - result = defaultFrame; /* second click */ - else - { - /* restore */ - result = ns_userRect.size.height ? ns_userRect : result; - ns_userRect = NSMakeRect (0, 0, 0, 0); - } + /* restore */ + result = ns_userRect.size.height ? ns_userRect : result; + ns_userRect = NSMakeRect (0, 0, 0, 0); + [self setFSValue: FULLSCREEN_NONE]; + maximized_width = maximized_width = -1; } + if (fs_before_fs == -1) next_maximized = -1; [self windowWillResize: sender toSize: result.size]; return result; } @@ -5799,6 +5862,200 @@ - (void)windowDidMiniaturize: sender } } +- (void)windowWillEnterFullScreen:(NSNotification *)notification +{ + fs_before_fs = fs_state; +} + +- (void)windowDidEnterFullScreen:(NSNotification *)notification +{ + [self setFSValue: FULLSCREEN_BOTH]; +#ifndef NEW_STYLE_FS + fprintf(stderr, "%s %d\n", __func__, FRAME_PIXEL_WIDTH (emacsframe)); + [self windowDidBecomeKey:notification]; +#endif +} + +- (void)windowWillExitFullScreen:(NSNotification *)notification +{ + if (next_maximized != -1) + fs_before_fs = next_maximized; +} + +- (void)windowDidExitFullScreen:(NSNotification *)notification +{ + [self setFSValue: fs_before_fs]; + fs_before_fs = -1; + if (next_maximized != -1) + [[self window] performZoom:self]; +} + +- (void)toggleFullScreen: (id)sender +{ + /* Bugs remain: + 1) Having fullscreen in initial/default frame alist. + 2) Fullscreen in default frame alist only applied to first frame. + */ + +#ifdef NEW_STYLE_FS + [[self window] toggleFullScreen:sender]; +#else + NSWindow *w = [self window], *fw; + BOOL onFirstScreen = [[w screen] + isEqual:[[NSScreen screens] objectAtIndex:0]]; + struct frame *f = emacsframe; + NSSize sz; + NSRect r; + NSColor *col = ns_lookup_indexed_color (NS_FACE_BACKGROUND + (FRAME_DEFAULT_FACE (f)), + f); + + sz.width = FRAME_COLUMN_WIDTH (f); + sz.height = FRAME_LINE_HEIGHT (f); + + if (fs_state != FULLSCREEN_BOTH) + { + /* Hide dock and menubar if we are on the primary screen. */ + if (onFirstScreen) + { +#if defined (NS_IMPL_COCOA) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + NSApplicationPresentationOptions options + = NSApplicationPresentationAutoHideDock + | NSApplicationPresentationAutoHideMenuBar; + + [NSApp setPresentationOptions: options]; +#else + [NSMenu setMenuBarVisible:NO]; +#endif + } + + fw = [[EmacsFSWindow alloc] + initWithContentRect:[w contentRectForFrameRect:[w frame]] + styleMask:NSBorderlessWindowMask + backing:NSBackingStoreBuffered + defer:YES + screen:[w screen]]; + + [fw setContentView:[w contentView]]; + [fw setTitle:[w title]]; + [fw makeKeyAndOrderFront:NSApp]; + [fw setDelegate:self]; + [fw makeFirstResponder:self]; + [fw setAcceptsMouseMovedEvents: YES]; + [fw useOptimizedDrawing: YES]; + [fw setResizeIncrements: sz]; + [fw setBackgroundColor: col]; + if ([col alphaComponent] != 1.0) + [fw setOpaque: NO]; + + f->border_width = 0; + FRAME_NS_TITLEBAR_HEIGHT (f) = 0; + + nonfs_window = w; + [self windowWillEnterFullScreen:nil]; + [w orderOut:self]; + r = [fw frameRectForContentRect:[[fw screen] frame]]; + [fw setFrame: r display:YES animate:YES]; + [self windowDidEnterFullScreen:nil]; + } + else + { + fw = w; + w = nonfs_window; + + if (onFirstScreen) + { +#if defined (NS_IMPL_COCOA) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + [NSApp setPresentationOptions: NSApplicationPresentationDefault]; +#else + [NSMenu setMenuBarVisible:YES]; +#endif + } + + [w setContentView:[fw contentView]]; + [w setResizeIncrements: sz]; + [w setBackgroundColor: col]; + if ([col alphaComponent] != 1.0) + [w setOpaque: NO]; + + f->border_width = bwidth; + FRAME_NS_TITLEBAR_HEIGHT (f) = tbar_height; + + [self windowWillExitFullScreen:nil]; + [fw setFrame: [w frame] display:YES animate:YES]; + [fw close]; + [w makeKeyAndOrderFront:NSApp]; + [self windowDidExitFullScreen:nil]; + } +#endif +} + +- (void)handleFS +{ + if (fs_state != emacsframe->want_fullscreen) + { + if (fs_state == FULLSCREEN_BOTH) + { + [self toggleFullScreen:self]; + } + + switch (emacsframe->want_fullscreen) + { + case FULLSCREEN_BOTH: + [self toggleFullScreen:self]; + break; + case FULLSCREEN_WIDTH: + next_maximized = FULLSCREEN_WIDTH; + if (fs_state != FULLSCREEN_BOTH) + [[self window] performZoom:self]; + break; + case FULLSCREEN_HEIGHT: + next_maximized = FULLSCREEN_HEIGHT; + if (fs_state != FULLSCREEN_BOTH) + [[self window] performZoom:self]; + break; + case FULLSCREEN_MAXIMIZED: + next_maximized = FULLSCREEN_MAXIMIZED; + if (fs_state != FULLSCREEN_BOTH) + [[self window] performZoom:self]; + break; + case FULLSCREEN_NONE: + if (fs_state != FULLSCREEN_BOTH) + { + next_maximized = FULLSCREEN_NONE; + [[self window] performZoom:self]; + } + break; + } + + emacsframe->want_fullscreen = FULLSCREEN_NONE; + } + +} + +- (void) setFSValue: (int)value +{ + Lisp_Object lval = Qnil; + switch (value) + { + case FULLSCREEN_BOTH: + lval = Qfullboth; + break; + case FULLSCREEN_WIDTH: + lval = Qfullwidth; + break; + case FULLSCREEN_HEIGHT: + lval = Qfullheight; + break; + case FULLSCREEN_MAXIMIZED: + lval = Qmaximized; + break; + } + store_frame_param (emacsframe, Qfullscreen, lval); + fs_state = value; +} - (void)mouseEntered: (NSEvent *)theEvent { @@ -6290,6 +6547,15 @@ - (void)mouseDragged: (NSEvent *)theEvent @end /* EmacsWindow */ +@implementation EmacsFSWindow + +- (BOOL)canBecomeKeyWindow +{ + return YES; +} + +@end + /* ========================================================================== EmacsScroller implementation From 95402d5faa114a311cabfb8c64cf22a93787a066 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Sun, 30 Sep 2012 22:25:11 +0900 Subject: [PATCH 058/128] coding.c (decode_coding_ccl, encode_coding_ccl): Pay attention to the buffer relocation which may be caused by ccl_driver. --- src/ChangeLog | 5 +++++ src/coding.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 676f4127ba5..508ac9925a8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-09-30 Kenichi Handa + + * coding.c (decode_coding_ccl, encode_coding_ccl): Pay attention + to the buffer relocation which may be caused by ccl_driver. + 2012-09-22 Paul Eggert * .gdbinit: Just stop at fatal_error_backtrace. diff --git a/src/coding.c b/src/coding.c index 4b3d22f956c..40e67b9a6c8 100644 --- a/src/coding.c +++ b/src/coding.c @@ -5106,6 +5106,7 @@ decode_coding_ccl (struct coding_system *coding) while (1) { const unsigned char *p = src; + ptrdiff_t offset; int i = 0; if (multibytep) @@ -5123,8 +5124,17 @@ decode_coding_ccl (struct coding_system *coding) if (p == src_end && coding->mode & CODING_MODE_LAST_BLOCK) ccl->last_block = 1; + /* As ccl_driver calls DECODE_CHAR, buffer may be relocated. */ + charset_map_loaded = 0; ccl_driver (ccl, source_charbuf, charbuf, i, charbuf_end - charbuf, charset_list); + if (charset_map_loaded + && (offset = coding_change_source (coding))) + { + p += offset; + src += offset; + src_end += offset; + } charbuf += ccl->produced; if (multibytep) src += source_byteidx[ccl->consumed]; @@ -5177,8 +5187,15 @@ encode_coding_ccl (struct coding_system *coding) do { + ptrdiff_t offset; + + /* As ccl_driver calls DECODE_CHAR, buffer may be relocated. */ + charset_map_loaded = 0; ccl_driver (ccl, charbuf, destination_charbuf, charbuf_end - charbuf, 1024, charset_list); + if (charset_map_loaded + && (offset = coding_change_destination (coding))) + dst += offset; if (multibytep) { ASSURE_DESTINATION (ccl->produced * 2); From d7e642cc001a237dda8511f99b284e1a22865024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Dj=C3=A4rv?= Date: Sun, 30 Sep 2012 15:43:47 +0200 Subject: [PATCH 059/128] Support file name dialog on NS. * etc/NEWS: Mention that the file dialog is used on NS. * lisp/term/ns-win.el (x-file-dialog): New function. * src/fileio.c (Fnext_read_file_uses_dialog_p): Add HAVE_NS. * src/nsfns.m (ns_frame_parm_handlers): Add x_set_fullscreen. * src/nsfns.m (Fns_read_file_name): Add argument DIR_ONLY_P. Initialize panel name field if OSX >= 10.6. * src/w32fns.c (Fx_file_dialog): Update comment. * src/xfns.c (Fx_file_dialog): Update comment. --- etc/ChangeLog | 1 + etc/NEWS | 7 +++++-- lisp/ChangeLog | 4 ++++ lisp/term/ns-win.el | 11 +++++++++++ src/ChangeLog | 9 +++++++++ src/fileio.c | 3 ++- src/nsfns.m | 36 +++++++++++++++++++++++++++--------- src/w32fns.c | 2 +- src/xfns.c | 4 ++-- 9 files changed, 62 insertions(+), 15 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index 2c1e3758ea0..099d7ca044f 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,6 +1,7 @@ 2012-09-30 Jan Djärv * NEWS: The NS port supports fullscreen. + Mention that the file dialog is used on NS. 2012-09-17 Glenn Morris diff --git a/etc/NEWS b/etc/NEWS index e6f09d83f43..2791a25e051 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -187,8 +187,11 @@ The PCL-CVS commands are still available via the keyboard. --- *** New input method `vietnamese-vni'. -** The NS port supports fullscreen. - +** NextStep/OSX port changes. +--- +*** Fullscreen and frame parameter fullscreen is supported. +--- +*** A file dialog is used when open/saved is done from the menu/toolbar. * Editing Changes in Emacs 24.3 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 255b8924784..5d1a7eea095 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2012-09-30 Jan Djärv + + * term/ns-win.el (x-file-dialog): New function. + 2012-09-30 Juanma Barranquero * ido.el (ido-max-directory-size): Default to nil; the current diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index 06b67475c1d..c229ec14dd5 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -452,6 +452,17 @@ Lines are highlighted according to `ns-input-line'." ;;;; File handling. +(defun x-file-dialog (prompt dir default_filename mustmatch only_dir_p) +"Read file name, prompting with PROMPT in directory DIR. +Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file +selection box, if specified. If MUSTMATCH is non-nil, the returned file +or directory must exist. + +This function is only defined on NS, MS Windows, and X Windows with the +Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. +Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories." + (ns-read-file-name prompt dir mustmatch default_filename only_dir_p)) + (defun ns-open-file-using-panel () "Pop up open-file panel, and load the result in a buffer." (interactive) diff --git a/src/ChangeLog b/src/ChangeLog index 6aaa6bc88f8..119651e0651 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,14 @@ 2012-09-30 Jan Djärv + * xfns.c (Fx_file_dialog): Update comment. + + * w32fns.c (Fx_file_dialog): Update comment. + + * nsfns.m (Fns_read_file_name): Add argument DIR_ONLY_P. + Initialize panel name field if OSX >= 10.6. + + * fileio.c (Fnext_read_file_uses_dialog_p): Add HAVE_NS. + * nsfns.m (ns_frame_parm_handlers): Add x_set_fullscreen. * nsterm.m (NEW_STYLE_FS): New define. diff --git a/src/fileio.c b/src/fileio.c index 9d8a0dc8b45..9ce9e7b8395 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -5520,7 +5520,8 @@ The return value is only relevant for a call to `read-file-name' that happens before any other event (mouse or keypress) is handled. */) (void) { -#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) +#if defined (USE_MOTIF) || defined (HAVE_NTGUI) || defined (USE_GTK) \ + || defined (HAVE_NS) if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event)) && use_dialog_box && use_file_dialog diff --git a/src/nsfns.m b/src/nsfns.m index c96ec99ed2e..1efadf0cb98 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1467,13 +1467,15 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side } -DEFUN ("ns-read-file-name", Fns_read_file_name, Sns_read_file_name, 1, 4, 0, +DEFUN ("ns-read-file-name", Fns_read_file_name, Sns_read_file_name, 1, 5, 0, doc: /* Use a graphical panel to read a file name, using prompt PROMPT. Optional arg DIR, if non-nil, supplies a default directory. Optional arg MUSTMATCH, if non-nil, means the returned file or directory must exist. -Optional arg INIT, if non-nil, provides a default file name to use. */) - (Lisp_Object prompt, Lisp_Object dir, Lisp_Object mustmatch, Lisp_Object init) +Optional arg INIT, if non-nil, provides a default file name to use. +Optional arg DIR_ONLY_P, if non-nil, means choose only directories. */) + (Lisp_Object prompt, Lisp_Object dir, Lisp_Object mustmatch, + Lisp_Object init, Lisp_Object dir_only_p) { static id fileDelegate = nil; int ret; @@ -1498,21 +1500,36 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side if ([dirS characterAtIndex: 0] == '~') dirS = [dirS stringByExpandingTildeInPath]; - panel = NILP (mustmatch) ? + panel = NILP (mustmatch) && NILP (dir_only_p) ? (id)[EmacsSavePanel savePanel] : (id)[EmacsOpenPanel openPanel]; [panel setTitle: promptS]; - /* Puma (10.1) does not have */ - if ([panel respondsToSelector: @selector (setAllowsOtherFileTypes:)]) - [panel setAllowsOtherFileTypes: YES]; - + [panel setAllowsOtherFileTypes: YES]; [panel setTreatsFilePackagesAsDirectories: YES]; [panel setDelegate: fileDelegate]; panelOK = 0; + if (! NILP (dir_only_p)) + { + [panel setCanChooseDirectories: YES]; + [panel setCanChooseFiles: NO]; + } + block_input (); - if (NILP (mustmatch)) +#if defined (NS_IMPL_COCOA) && \ + MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + if (! NILP (mustmatch) || ! NILP (dir_only_p)) + [panel setAllowedFileTypes: nil]; + if (dirS) [panel setDirectoryURL: [NSURL fileURLWithPath: dirS]]; + if (initS && NILP (Ffile_directory_p (init))) + [panel setNameFieldStringValue: [initS lastPathComponent]]; + else + [panel setNameFieldStringValue: @""]; + + ret = [panel runModal]; +#else + if (NILP (mustmatch) && NILP (dir_only_p)) { ret = [panel runModalForDirectory: dirS file: initS]; } @@ -1521,6 +1538,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side [panel setCanChooseDirectories: YES]; ret = [panel runModalForDirectory: dirS file: initS types: nil]; } +#endif ret = (ret == NSOKButton) || panelOK; diff --git a/src/w32fns.c b/src/w32fns.c index 808e19d0b66..d7b45e263b3 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -5945,7 +5945,7 @@ Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file selection box, if specified. If MUSTMATCH is non-nil, the returned file or directory must exist. -This function is only defined on MS Windows, and X Windows with the +This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) diff --git a/src/xfns.c b/src/xfns.c index 928e6367743..d497cffe3df 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -5344,7 +5344,7 @@ Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file selection box, if specified. If MUSTMATCH is non-nil, the returned file or directory must exist. -This function is only defined on MS Windows, and X Windows with the +This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) @@ -5517,7 +5517,7 @@ Use a file selection dialog. Select DEFAULT-FILENAME in the dialog's file selection box, if specified. If MUSTMATCH is non-nil, the returned file or directory must exist. -This function is only defined on MS Windows, and X Windows with the +This function is only defined on NS, MS Windows, and X Windows with the Motif or Gtk toolkits. With the Motif toolkit, ONLY-DIR-P is ignored. Otherwise, if ONLY-DIR-P is non-nil, the user can only select directories. */) (Lisp_Object prompt, Lisp_Object dir, Lisp_Object default_filename, Lisp_Object mustmatch, Lisp_Object only_dir_p) From 8223b1d23361b74ede10bac47974ce7803804380 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Sun, 30 Sep 2012 17:14:59 +0200 Subject: [PATCH 060/128] Sync Org 7.9.2 from the commit tagged "release_7.9.2" in Org's Git repo. --- doc/misc/ChangeLog | 204 ++ doc/misc/org.texi | 1110 +++++--- etc/ORG-NEWS | 1886 ++++++++----- etc/org/OrgOdtContentTemplate.xml | 1 + etc/org/OrgOdtStyles.xml | 5 + etc/refcards/orgcard.pdf | Bin 118438 -> 118438 bytes etc/refcards/orgcard.tex | 2 +- lisp/org/ChangeLog | 3030 ++++++++++++++++++++ lisp/org/ob-C.el | 42 +- lisp/org/ob-R.el | 89 +- lisp/org/ob-asymptote.el | 4 +- lisp/org/ob-awk.el | 9 +- lisp/org/ob-calc.el | 10 +- lisp/org/ob-clojure.el | 2 +- lisp/org/ob-comint.el | 76 +- lisp/org/ob-css.el | 2 +- lisp/org/ob-ditaa.el | 19 +- lisp/org/ob-dot.el | 3 +- lisp/org/ob-emacs-lisp.el | 12 +- lisp/org/ob-eval.el | 4 +- lisp/org/ob-exp.el | 160 +- lisp/org/ob-fortran.el | 60 +- lisp/org/ob-gnuplot.el | 79 +- lisp/org/ob-haskell.el | 4 +- lisp/org/ob-io.el | 122 + lisp/org/ob-js.el | 6 +- lisp/org/ob-latex.el | 2 +- lisp/org/ob-ledger.el | 4 +- lisp/org/ob-lilypond.el | 130 +- lisp/org/ob-lisp.el | 6 +- lisp/org/ob-lob.el | 69 +- lisp/org/ob-maxima.el | 36 +- lisp/org/ob-mscgen.el | 6 +- lisp/org/ob-ocaml.el | 14 +- lisp/org/ob-octave.el | 16 +- lisp/org/ob-org.el | 2 +- lisp/org/ob-perl.el | 12 +- lisp/org/ob-picolisp.el | 6 +- lisp/org/ob-plantuml.el | 2 +- lisp/org/ob-python.el | 59 +- lisp/org/ob-ref.el | 211 +- lisp/org/ob-ruby.el | 12 +- lisp/org/ob-scala.el | 120 + lisp/org/ob-screen.el | 12 +- lisp/org/ob-sh.el | 59 +- lisp/org/ob-sql.el | 34 +- lisp/org/ob-sqlite.el | 24 +- lisp/org/ob-table.el | 2 +- lisp/org/ob-tangle.el | 328 +-- lisp/org/ob.el | 1030 ++++--- lisp/org/org-agenda.el | 3572 +++++++++++++---------- lisp/org/org-archive.el | 46 +- lisp/org/org-ascii.el | 98 +- lisp/org/org-attach.el | 30 +- lisp/org/org-bbdb.el | 58 +- lisp/org/org-beamer.el | 23 +- lisp/org/org-bibtex.el | 279 +- lisp/org/org-capture.el | 500 ++-- lisp/org/org-clock.el | 927 +++--- lisp/org/org-colview.el | 165 +- lisp/org/org-compat.el | 49 +- lisp/org/org-crypt.el | 21 +- lisp/org/org-ctags.el | 49 +- lisp/org/org-datetree.el | 85 +- lisp/org/org-docbook.el | 22 +- lisp/org/org-element.el | 4356 +++++++++++++++++++++++++++++ lisp/org/org-entities.el | 56 +- lisp/org/org-eshell.el | 20 +- lisp/org/org-exp-blocks.el | 238 +- lisp/org/org-exp.el | 427 +-- lisp/org/org-faces.el | 61 +- lisp/org/org-feed.el | 124 +- lisp/org/org-footnote.el | 32 +- lisp/org/org-freemind.el | 112 +- lisp/org/org-gnus.el | 25 +- lisp/org/org-habit.el | 6 + lisp/org/org-html.el | 683 +++-- lisp/org/org-icalendar.el | 81 +- lisp/org/org-id.el | 63 +- lisp/org/org-indent.el | 142 +- lisp/org/org-info.el | 6 +- lisp/org/org-inlinetask.el | 162 +- lisp/org/org-irc.el | 78 +- lisp/org/org-jsinfo.el | 180 +- lisp/org/org-latex.el | 587 ++-- lisp/org/org-list.el | 235 +- lisp/org/org-lparse.el | 107 +- lisp/org/org-mac-message.el | 92 +- lisp/org/org-macs.el | 65 +- lisp/org/org-mew.el | 3 +- lisp/org/org-mhe.el | 26 +- lisp/org/org-mobile.el | 258 +- lisp/org/org-mouse.el | 708 +++-- lisp/org/org-odt.el | 242 +- lisp/org/org-pcomplete.el | 109 +- lisp/org/org-plot.el | 116 +- lisp/org/org-protocol.el | 104 +- lisp/org/org-publish.el | 144 +- lisp/org/org-remember.el | 88 +- lisp/org/org-rmail.el | 15 +- lisp/org/org-special-blocks.el | 12 +- lisp/org/org-src.el | 123 +- lisp/org/org-table.el | 369 ++- lisp/org/org-taskjuggler.el | 82 +- lisp/org/org-timer.el | 156 +- lisp/org/org-version.el | 27 + lisp/org/org-vm.el | 89 +- lisp/org/org-wl.el | 12 +- lisp/org/org-xoxo.el | 2 +- lisp/org/org.el | 4349 +++++++++++++++++----------- 110 files changed, 20940 insertions(+), 9093 deletions(-) create mode 100644 lisp/org/ob-io.el create mode 100644 lisp/org/ob-scala.el create mode 100644 lisp/org/org-element.el create mode 100644 lisp/org/org-version.el diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog index 8ecaf97a84a..2e48b61def9 100644 --- a/doc/misc/ChangeLog +++ b/doc/misc/ChangeLog @@ -1,3 +1,207 @@ +2012-09-30 Achim Gratz + + * org.texi: Add description of ORG_ADD_CONTRIB to info + documentation. Add link to Worg for more details. + + * org.texi: Clarify installation procedure. Provide link to the + build system description on Worg. + + * org.texi: Remove reference to utils/, x11idle.c is now in + contrib/scripts. + + * org.texi: Re-normalize to "Org mode" in manual. + + * org.texi (Installation): Adapt documentation to new build + system. Mention GNU ELPA (since it needs to be handled like Emacs + built-in Org). + + * org.texi: Include "org-version.inc" instead of + "git-describe.texi". + + * org.texi: Remove @set for VERSION and DATE and do an @include + git-describe.texi instead. + +2012-09-30 Adam Spiers (tiny change) + + * org.texi: Fix typo in description of the 'Hooks' section. + + * org.texi: Add ID to the list of special properties. + +2012-09-30 Andrew Hyatt (tiny change) + + * org.texi (Moving subtrees): Document the ability to archive to a + datetree. + +2012-09-30 Bastien Guerry + + * org.texi (Installation, Feedback, Batch execution): Use + (add-to-list 'load-path ... t) for the contrib dir. + + * org.texi (results): Update documentation for ":results drawer" + and ":results org". + + * org.texi (Column width and alignment): Fix typo. + + * org.texi (Activation): Point to the "Conflicts" section. + + * org.texi (Conflicts): Mention filladapt.el in the list of + conflicting packages. + + * org.texi (Activation): Adding org-mode to `auto-mode-alist' is + not needed for versions of Emacs > 22.1. + + * org.texi (History and Acknowledgments): Fix typo. + + * org.texi (History and Acknowledgments): Add my own + acknowledgments. + + * org.texi (Agenda commands): Document the new command and the new + option. + + * org.texi (Agenda commands): Delete `org-agenda-action' section. + (Agenda commands): Reorder. Document `*' to toggle persistent + marks. + + * org.texi (Agenda dispatcher): Mention + `org-toggle-agenda-sticky'. + (Agenda commands, Exporting Agenda Views): Fix typo. + + * org.texi (Templates in contexts, Setting Options): Update to + reflect changes in how contexts options are processed. + + * org.texi (Templates in contexts): Document the new structure of + the variables `org-agenda-custom-commands-contexts' and + `org-capture-templates-contexts'. + + * org.texi (Templates in contexts): Document the new option + `org-capture-templates-contexts'. + (Storing searches): Document the new option + `org-agenda-custom-commands-contexts'. + + * org.texi (Formula syntax for Lisp): Reformat. + + * org.texi (Special properties, Column attributes) + (Agenda column view): Document the new special property + CLOCKSUM_T. + + * org.texi (Template expansion): Document the new %l template. + + * org.texi (Fast access to TODO states): Fix documentation about + allowed characters for fast todo selection. + + * org.texi (Weekly/daily agenda): Mention APPT_WARNTIME and its + use in `org-agenda-to-appt'. + + * org.texi (Comment lines): Update wrt comments. + + * org.texi (Resolving idle time): Document new keybinding. + + * org.texi (Clocking commands): Document the use of S-M- + on clock timestamps. + + * org.texi (Fast access to TODO states): Explicitely says only + letters are supported as fast TODO selection keys. + + * org.texi (Link abbreviations): Illustrate the use of the "%h" + specifier. Document the new "%(my-function)" specifier. + + * org.texi (Clocking commands): New cindex. + (Clocking commands): Update documentation for `org-clock-in'. + Document `org-clock-in-last'. Mention `org-clock-out' and + `org-clock-in-last' as commands that can be globally bound. + (Resolving idle time): Document continuous clocking. + + * org.texi (Top, Introduction): Fix formatting. + (Activation): Add index entries. + (Conventions): Update section. + (Embedded @LaTeX{}): Fix formatting. + + * org.texi (Visibility cycling): Document `show-children'. + + * org.texi (Using capture): Mention the `org-capture-last-stored' + bookmark as a way to jump to the last stored capture. + + * org.texi (Uploading files): Fix typo. + + * org.texi (Using capture): Document `C-0' as a prefix argument + for `org-capture'. + + * org.texi (Agenda commands): Document persistent marks. + + * org.texi (Template expansion): Update doc to reflect change. + + * org.texi (Radio tables): Document the :no-escape parameter. + + * org.texi (Repeated tasks): Document repeat cookies for years, + months, weeks, days and hours. + + * org.texi (Export options): State that you can use the d: option + by specifying a list of drawers. + + * org.texi (HTML preamble and postamble): Small doc improvement. + +2012-09-30 Brian van den Broek (tiny change) + + * org.texi: The sections in the Exporting section of the manual + left out articles in the description of the org-export-as-* + commands, among other places. This patch adds them, adds a few + missing prepositions, and switches instances of "an HTML" to "a + html" for internal consistency. + + * org.texi: Alter several examples of headings with timestamps in + them to include the timestamps in the body instead of the heading. + +2012-09-30 Carsten Dominik + + * org.texi (Agenda dispatcher): Document sticky agenda views and + the new key for them. + +2012-09-30 Charles (tiny change) + + * org.texi (Advanced features): Fix error in table. + +2012-09-30 Feng Shu + + * org.texi (@LaTeX{} fragments): Document imagemagick as an + alternative to dvipng. + +2012-09-30 François Allisson (tiny change) + + * org.texi: Remove extra curly bracket. + +2012-09-30 Giovanni Ridolfi (tiny change) + + * org.texi (org-clock-in-last and org-clock-cancel): Update the + defkeys. + +2012-09-30 Ippei FURUHASHI (tiny change) + + * org.texi (Agenda commands): Fix two typos by giving + corresponding function names, according to + `org-agenda-view-mode-dispatch'. + +2012-09-30 Jan Bäcker + + * org.texi (The spreadsheet): Fix typo. + +2012-09-30 Memnon Anon (tiny change) + + * org.texi (Tracking your habits): Point to the "Tracking TODO + state changes" section. + +2012-09-30 Nicolas Goaziou + + * org.texi (Literal examples): Remove reference to unknown + `org-export-latex-minted' variable. Also simplify footnote since + `org-export-latex-listings' documentation is exhaustive already. + + * org.texi (Plain lists): Remove reference to now hard-coded + `bullet' automatic rule. + +2012-09-30 Toby S. Cubitt + + * org.texi: Updated documentation accordingly. + 2012-09-13 Paul Eggert * texinfo.tex: Merge from gnulib. diff --git a/doc/misc/org.texi b/doc/misc/org.texi index 575b9cbebe6..227af8faf10 100644 --- a/doc/misc/org.texi +++ b/doc/misc/org.texi @@ -1,11 +1,8 @@ - \input texinfo @c %**start of header @setfilename ../../info/org @settitle The Org Manual - -@set VERSION 7.8.11 -@set DATE May 2012 +@set VERSION 7.9.2 (GNU Emacs 24.3) @c Use proper quote and backtick for code sections in PDF output @c Cf. Texinfo manual 14.2 @@ -347,7 +344,7 @@ Introduction * Installation:: How to install a downloaded version of Org * Activation:: How to activate Org for certain buffers * Feedback:: Bug reports, ideas, patches etc. -* Conventions:: Type-setting conventions in the manual +* Conventions:: Typesetting conventions in the manual Document structure @@ -495,6 +492,7 @@ Capture templates * Template elements:: What is needed for a complete template entry * Template expansion:: Filling in information about time and context +* Templates in contexts:: Only show a template in a specific context Archiving @@ -560,7 +558,7 @@ Embedded @LaTeX{} * Special symbols:: Greek letters and other symbols * Subscripts and superscripts:: Simple syntax for raising/lowering text -* @LaTeX{} fragments:: Complex formulas made easy +* @LaTeX{} fragments:: Complex formulas made easy * Previewing @LaTeX{} fragments:: What will this snippet look like? * CDLaTeX mode:: Speed up entering of formulas @@ -695,6 +693,7 @@ Specific header arguments * results:: Specify the type of results and how they will be collected and handled * file:: Specify a path for file output +* file-desc:: Specify a description for file results * dir:: Specify the default (possibly remote) directory for code block execution * exports:: Export code and/or results @@ -718,6 +717,7 @@ Specific header arguments * rownames:: Handle row names in tables * shebang:: Make tangled files executable * eval:: Limit evaluation of specific code blocks +* wrap:: Mark source block evaluation results Miscellaneous @@ -740,7 +740,7 @@ Interaction with other packages Hacking -* Hooks:: Who to reach into Org's internals +* Hooks:: How to reach into Org's internals * Add-on packages:: Available extensions * Adding hyperlink types:: New custom link types * Context-sensitive commands:: How to add functionality to such commands @@ -776,7 +776,7 @@ MobileOrg * Installation:: How to install a downloaded version of Org * Activation:: How to activate Org for certain buffers * Feedback:: Bug reports, ideas, patches etc. -* Conventions:: Type-setting conventions in the manual +* Conventions:: Typesetting conventions in the manual @end menu @node Summary, Installation, Introduction, Introduction @@ -854,61 +854,111 @@ Theory Ltd.} @cindex installation @cindex XEmacs -@b{Important:} @i{If you are using a version of Org that is part of the Emacs -distribution or an XEmacs package, please skip this section and go directly -to @ref{Activation}. To see what version of Org (if any) is part of your -Emacs distribution, type @kbd{M-x load-library RET org} and then @kbd{M-x -org-version}.} +@b{Important:} @i{If you the version of Org that comes with Emacs or as a +XEmacs package, please skip this section and go directly to @ref{Activation}. +If you downloaded Org as an ELPA package, please read the instructions on the +@uref{http://orgmode.org/elpa/, Org ELPA page}. To see what version of Org +(if any) is part of your Emacs distribution, type @kbd{M-x org-version} (if +your Emacs distribution does not come with Org, this function will not be +defined).} -If you have downloaded Org from the Web, either as a distribution @file{.zip} -or @file{.tar} file, or as a Git archive, you must take the following steps -to install it: go into the unpacked Org distribution directory and edit the -top section of the file @file{Makefile}. You must set the name of the Emacs -binary (likely either @file{emacs} or @file{xemacs}), and the paths to the -directories where local Lisp and Info files are kept. If you don't have -access to the system-wide directories, you can simply run Org directly from -the distribution directory by adding the @file{lisp} subdirectory to the -Emacs load path. To do this, add the following line to @file{.emacs}: +Installation of Org mode uses a build system, which is described in more +detail on @uref{http://orgmode.org/worg/dev/org-build-system.html, Worg}. + +If you have downloaded Org from the Web as a distribution @file{.zip} or +@file{.tar.gz} archive, take the following steps to install it: + +@itemize @bullet +@item Unpack the distribution archive. +@item Change into (@code{cd}) the Org directory. +@item Run @code{make help config} +and then check and edit the file @file{local.mk} if the default configuration +does not match your system. Set the name of the Emacs binary (likely either +@file{emacs} or @file{xemacs}), and the paths to the directories where local +Lisp and Info files will be installed. If the Emacs binary is not in your +path, give the full path to the executable. Avoid spaces in any path names. +@item Run @code{make config} +again to check the configuration. +@item Optionally run @code{make test} +to build Org mode and then run the full testsuite. +@item Run @code{make install} or @code{sudo make install} +to build and install Org mode on your system. +@end itemize + +If you use a cloned Git repository, then the procedure is slightly different. +The following description assumes that you are using the @code{master} branch +(where the development is done). You could also use the @code{maint} branch +instead, where the release versions are published, just replace @code{master} +with @code{maint} in the description below. + +@itemize @bullet +@item Change into (@code{cd}) the Org repository. +@item Run @code{git checkout master} +to switch to the @code{master} branch of the Org repository. +@item Run @code{make help} +and then check and edit the file @file{local.mk}. You must set the name of +the Emacs binary (likely either @file{emacs} or @file{xemacs}), and the paths +to the directories where local Lisp and Info files will be installed. If the +Emacs binary is not in your path, you must give the full path to the +executable. Avoid spaces in any path names. +@item Run @code{make config} +to check the configuration. +@item Run @code{make update2} or @code{make up2} +to update the Git repository and build and install Org mode. The latter +invocation runs the complete test suite before installation and installs only +if the build passes all tests. +@end itemize + +If you don't have access to the system-wide directories and you don't want to +install somewhere into your home directory, you can run Org directly from the +distribution directory or Org repository by compiling Org mode in place: + +@itemize @bullet +@item Change into (@code{cd}) the Org repository. +@item Run @code{git checkout master} +to switch to the @code{master} branch of the Org repository. +@item Run @code{make compile} +@end itemize + +Last but not least you can also run Org mode directly from an Org repository +without any compilation. Simply replace the last step in the recipe above +with @code{make uncompiled}. + +Then add the following line to @file{.emacs}: @example -(setq load-path (cons "~/path/to/orgdir/lisp" load-path)) +(add-to-list 'load-path "~/path/to/orgdir/lisp") @end example @noindent -If you plan to use code from the @file{contrib} subdirectory, do a similar -step for this directory: +If you plan to use code from the @file{contrib} subdirectory without +compiling them, do a similar step for this directory: @example -(setq load-path (cons "~/path/to/orgdir/contrib/lisp" load-path)) +(add-to-list 'load-path "~/path/to/orgdir/contrib/lisp" t) @end example -@noindent Now byte-compile the Lisp files with the shell command: - -@example -make -@end example - -@noindent If you are running Org from the distribution directory, this is -all. If you want to install Org into the system directories, use (as -administrator) - -@example -make install -@end example +If you want to include those files with the build and install, please +customize the variable @code{ORG_ADD_CONTRIB} instead in your @code{local.mk} +file, for more details please see this +@uref{http://orgmode.org/worg/dev/org-build-system.html#sec-4-1-2, +description on Worg}. Installing Info files is system dependent, because of differences in the -@file{install-info} program. The following should correctly install the Info -files on most systems, please send a bug report if not@footnote{The output -from install-info (if any) is also system dependent. In particular Debian -and its derivatives use two different versions of install-info and you may -see the message: +@file{install-info} program. The Info documentation is installed together +with the rest of Org mode. If you don't install Org mode, it is possible to +install the Info documentation seperately (you need to have +install-info@footnote{The output from install-info (if any) is system +dependent. In particular Debian and its derivatives use two different +versions of install-info and you may see the message: @example This is not dpkg install-info anymore, but GNU install-info See the man page for ginstall-info for command line arguments @end example -@noindent which can be safely ignored.}. +@noindent which can be safely ignored.} +on your system). @example make install-info @@ -928,17 +978,28 @@ Do not forget to activate Org as described in the following section. @section Activation @cindex activation @cindex autoload +@cindex ELPA @cindex global key bindings @cindex key bindings, global +@findex org-agenda +@findex org-capture +@findex org-store-link +@findex org-iswitchb + +Since Emacs 22.2, files with the @file{.org} extension use Org mode by +default. If you are using an earlier version of Emacs, add this line to your +@file{.emacs} file: -To make sure files with extension @file{.org} use Org mode, add the following -line to your @file{.emacs} file. @lisp (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) @end lisp -@noindent Org mode buffers need font-lock to be turned on - this is the -default in Emacs@footnote{If you don't use font-lock globally, turn it on in -Org buffer with @code{(add-hook 'org-mode-hook 'turn-on-font-lock)}}. + +Org mode buffers need font-lock to be turned on - this is the default in +Emacs@footnote{If you don't use font-lock globally, turn it on in Org buffer +with @code{(add-hook 'org-mode-hook 'turn-on-font-lock)}}. + +There are compatibility issues between Org mode and some other Elisp +packages, please take the time to check the list (@pxref{Conflicts}). The four Org commands @command{org-store-link}, @command{org-capture}, @command{org-agenda}, and @command{org-iswitchb} should be accessible through @@ -1016,8 +1077,9 @@ $ emacs -Q -l /path/to/minimal-org.el @end example However if you are using Org mode as distributed with Emacs, a minimal setup -is not necessary. In that case it is sufficient to start Emacs as @code{emacs --Q}. The @code{minimal-org.el} setup file can have contents as shown below. +is not necessary. In that case it is sufficient to start Emacs as +@code{emacs -Q}. The @code{minimal-org.el} setup file can have contents as +shown below. @example ;;; Minimal setup to load latest `org-mode' @@ -1029,7 +1091,7 @@ is not necessary. In that case it is sufficient to start Emacs as @code{emacs ;; add latest org-mode to load path (add-to-list 'load-path (expand-file-name "/path/to/org-mode/lisp")) -(add-to-list 'load-path (expand-file-name "/path/to/org-mode/contrib/lisp")) +(add-to-list 'load-path (expand-file-name "/path/to/org-mode/contrib/lisp" t)) ;; activate org (require 'org-install) @@ -1081,7 +1143,9 @@ attach it to your bug report. @node Conventions, , Feedback, Introduction @section Typesetting conventions used in this manual -Org uses three types of keywords: TODO keywords, tags, and property +@subsubheading TODO keywords, tags, properties, etc. + +Org mainly uses three types of keywords: TODO keywords, tags and property names. In this manual we use the following conventions: @table @code @@ -1099,17 +1163,33 @@ User-defined properties are capitalized; built-in properties with special meaning are written with all capitals. @end table -The manual lists both the keys and the corresponding commands for accessing -functionality. Org mode often uses the same key for different functions, -depending on context. The command that is bound to such keys has a generic -name, like @code{org-metaright}. In the manual we will, wherever possible, -give the function that is internally called by the generic command. For -example, in the chapter on document structure, @kbd{M-@key{right}} will be -listed to call @code{org-do-demote}, while in the chapter on tables, it will -be listed to call org-table-move-column-right. +Moreover, Org uses @i{option keywords} (like @code{#+TITLE} to set the title) +and @i{environment keywords} (like @code{#+BEGIN_HTML} to start a @code{HTML} +environment). They are written in uppercase in the manual to enhance its +readability, but you can use lowercase in your Org files@footnote{Easy +templates insert lowercase keywords and Babel dynamically inserts +@code{#+results}.} -If you prefer, you can compile the manual without the command names by -unsetting the flag @code{cmdnames} in @file{org.texi}. +@subsubheading Keybindings and commands +@kindex C-c a +@findex org-agenda +@kindex C-c c +@findex org-capture + +The manual suggests two global keybindings: @kbd{C-c a} for @code{org-agenda} +and @kbd{C-c c} for @code{org-capture}. These are only suggestions, but the +rest of the manual assumes that you are using these keybindings. + +Also, the manual lists both the keys and the corresponding commands for +accessing a functionality. Org mode often uses the same key for different +functions, depending on context. The command that is bound to such keys has +a generic name, like @code{org-metaright}. In the manual we will, wherever +possible, give the function that is internally called by the generic command. +For example, in the chapter on document structure, @kbd{M-@key{right}} will +be listed to call @code{org-do-demote}, while in the chapter on tables, it +will be listed to call @code{org-table-move-column-right}. If you prefer, +you can compile the manual without the command names by unsetting the flag +@code{cmdnames} in @file{org.texi}. @node Document Structure, Tables, Introduction, Top @chapter Document structure @@ -1159,7 +1239,8 @@ Headlines define the structure of an outline tree. The headlines in Org start with one or more stars, on the left margin@footnote{See the variables @code{org-special-ctrl-a/e}, @code{org-special-ctrl-k}, and @code{org-ctrl-k-protect-subtree} to configure special behavior of @kbd{C-a}, -@kbd{C-e}, and @kbd{C-k} in headlines.}. For example: +@kbd{C-e}, and @kbd{C-k} in headlines.} @footnote{Clocking only works with +headings indented less then 30 stars.}. For example: @example * Top level headline @@ -1239,6 +1320,7 @@ tables, @kbd{S-@key{TAB}} jumps to the previous field. @cindex show all, command @orgcmd{C-u C-u C-u @key{TAB},show-all} Show all, including drawers. +@cindex revealing context @orgcmd{C-c C-r,org-reveal} Reveal context around point, showing the current entry, the following heading and the hierarchy above. Useful for working near a location that has been @@ -1246,8 +1328,13 @@ exposed by a sparse tree command (@pxref{Sparse trees}) or an agenda command (@pxref{Agenda commands}). With a prefix argument show, on each level, all sibling headings. With a double prefix argument, also show the entire subtree of the parent. +@cindex show branches, command @orgcmd{C-c C-k,show-branches} Expose all the headings of the subtree, CONTENT view for just one subtree. +@cindex show children, command +@orgcmd{C-c @key{TAB},show-children} +Expose all direct children of the subtree. With a numeric prefix argument N, +expose all children down to level N. @orgcmd{C-c C-x b,org-tree-to-indirect-buffer} Show the current subtree in an indirect buffer@footnote{The indirect buffer @@ -1429,7 +1516,7 @@ more details, see the docstring of the command @code{org-clone-subtree-with-time-shift}. @orgcmd{C-c C-w,org-refile} Refile entry or region to a different location. @xref{Refiling notes}. -@orgcmd{C-c ^,org-sort-entries-or-items} +@orgcmd{C-c ^,org-sort} Sort same-level entries. When there is an active region, all entries in the region will be sorted. Otherwise the children of the current headline are sorted. The command prompts for the sorting method, which can be @@ -1714,19 +1801,16 @@ state of the checkbox. In any case, verify bullets and indentation consistency in the whole list. @kindex C-c - @vindex org-plain-list-ordered-item-terminator -@vindex org-list-automatic-rules @item C-c - Cycle the entire list level through the different itemize/enumerate bullets (@samp{-}, @samp{+}, @samp{*}, @samp{1.}, @samp{1)}) or a subset of them, depending on @code{org-plain-list-ordered-item-terminator}, the type of list, -and its position@footnote{See @code{bullet} rule in -@code{org-list-automatic-rules} for more information.}. With a numeric -prefix argument N, select the Nth bullet from this list. If there is an -active region when calling this, selected text will be changed into an item. -With a prefix argument, all lines will be converted to list items. If the -first line already was a list item, any item marker will be removed from the -list. Finally, even without an active region, a normal line will be -converted into a list item. +and its indentation. With a numeric prefix argument N, select the Nth bullet +from this list. If there is an active region when calling this, selected +text will be changed into an item. With a prefix argument, all lines will be +converted to list items. If the first line already was a list item, any item +marker will be removed from the list. Finally, even without an active +region, a normal line will be converted into a list item. @kindex C-c * @item C-c * Turn a plain list item into a headline (so that it becomes a subheading at @@ -1756,11 +1840,13 @@ numerically, alphabetically, by time, or by custom function. @cindex visibility cycling, drawers @vindex org-drawers +@cindex org-insert-drawer +@kindex C-c C-x d Sometimes you want to keep information associated with an entry, but you normally don't want to see it. For this, Org mode has @emph{drawers}. Drawers need to be configured with the variable -@code{org-drawers}@footnote{You can define drawers on a per-file basis -with a line like @code{#+DRAWERS: HIDDEN PROPERTIES STATE}}. Drawers +@code{org-drawers}@footnote{You can define additional drawers on a +per-file basis with a line like @code{#+DRAWERS: HIDDEN STATE}}. Drawers look like this: @example @@ -1772,6 +1858,13 @@ look like this: After the drawer. @end example +You can interactively insert drawers at point by calling +@code{org-insert-drawer}, which is bound to @key{C-c C-x d}. With an active +region, this command will put the region inside the drawer. With a prefix +argument, this command calls @code{org-insert-property-drawer} and add a +property drawer right below the current headline. Completion over drawer +keywords is also possible using @key{M-TAB}. + Visibility cycling (@pxref{Visibility cycling}) on the headline will hide and show the entry, but keep the drawer collapsed to a single line. In order to look inside the drawer, you need to move the cursor to the drawer line and @@ -2226,7 +2319,7 @@ on a per-file basis with: If you would like to overrule the automatic alignment of number-rich columns to the right and of string-rich column to the left, you can use @samp{}, -@samp{c}@footnote{Centering does not work inside Emacs, but it does have an +@samp{}@footnote{Centering does not work inside Emacs, but it does have an effect when exporting to HTML.} or @samp{} in a similar fashion. You may also combine alignment and field width like this: @samp{}. @@ -2577,23 +2670,28 @@ durations computations @ref{Durations and time values}. @subsection Emacs Lisp forms as formulas @cindex Lisp forms, as table formulas -It is also possible to write a formula in Emacs Lisp; this can be useful for -string manipulation and control structures, if Calc's functionality is not -enough. If a formula starts with a single-quote followed by an opening -parenthesis, then it is evaluated as a Lisp form. The evaluation should -return either a string or a number. Just as with @file{calc} formulas, you -can specify modes and a printf format after a semicolon. With Emacs Lisp -forms, you need to be conscious about the way field references are -interpolated into the form. By default, a reference will be interpolated as -a Lisp string (in double-quotes) containing the field. If you provide the -@samp{N} mode switch, all referenced elements will be numbers (non-number -fields will be zero) and interpolated as Lisp numbers, without quotes. If -you provide the @samp{L} flag, all fields will be interpolated literally, -without quotes. I.e., if you want a reference to be interpreted as a string -by the Lisp form, enclose the reference operator itself in double-quotes, -like @code{"$3"}. Ranges are inserted as space-separated fields, so you can -embed them in list or vector syntax. Here are a few examples---note how the -@samp{N} mode is used when we do computations in Lisp: +It is also possible to write a formula in Emacs Lisp. This can be useful +for string manipulation and control structures, if Calc's functionality is +not enough. + +If a formula starts with a single-quote followed by an opening parenthesis, +then it is evaluated as a Lisp form. The evaluation should return either a +string or a number. Just as with @file{calc} formulas, you can specify modes +and a printf format after a semicolon. + +With Emacs Lisp forms, you need to be conscious about the way field +references are interpolated into the form. By default, a reference will be +interpolated as a Lisp string (in double-quotes) containing the field. If +you provide the @samp{N} mode switch, all referenced elements will be numbers +(non-number fields will be zero) and interpolated as Lisp numbers, without +quotes. If you provide the @samp{L} flag, all fields will be interpolated +literally, without quotes. I.e., if you want a reference to be interpreted +as a string by the Lisp form, enclose the reference operator itself in +double-quotes, like @code{"$3"}. Ranges are inserted as space-separated +fields, so you can embed them in list or vector syntax. + +Here are a few examples---note how the @samp{N} mode is used when we do +computations in Lisp: @example @r{Swap the first two characters of the content of column 1} @@ -2657,7 +2755,7 @@ modified in order to still reference the same field. To avoid this from happening, in particular in range references, anchor ranges at the table borders (using @code{@@<}, @code{@@>}, @code{$<}, @code{$>}), or at hlines using the @code{@@I} notation. Automatic adaptation of field references does -of cause not happen if you edit the table structure with normal editing +of course not happen if you edit the table structure with normal editing commands---then you must fix the equations yourself. Instead of typing an equation into the field, you may also use the following @@ -2899,7 +2997,7 @@ makes use of these features: | # | Peter | 10 | 8 | 23 | 41 | 8.2 | | # | Sam | 2 | 4 | 3 | 9 | 1.8 | |---+---------+--------+--------+--------+-------+------| -| | Average | | | | 29.7 | | +| | Average | | | | 25.0 | | | ^ | | | | | at | | | $ | max=50 | | | | | | |---+---------+--------+--------+--------+-------+------| @@ -3227,6 +3325,8 @@ mailto:adent@@galaxy.net @r{Mail link} vm:folder @r{VM folder link} vm:folder#id @r{VM message link} vm://myself@@some.where.org/folder#id @r{VM on remote machine} +vm-imap:account:folder @r{VM IMAP folder link} +vm-imap:account:folder#id @r{VM IMAP message link} wl:folder @r{WANDERLUST folder link} wl:folder#id @r{WANDERLUST message link} mhe:folder @r{MH-E folder link} @@ -3498,18 +3598,26 @@ that relates the linkwords to replacement text. Here is an example: @smalllisp @group (setq org-link-abbrev-alist - '(("bugzilla" . "http://10.1.2.9/bugzilla/show_bug.cgi?id=") - ("google" . "http://www.google.com/search?q=") - ("gmap" . "http://maps.google.com/maps?q=%s") - ("omap" . "http://nominatim.openstreetmap.org/search?q=%s&polygon=1") - ("ads" . "http://adsabs.harvard.edu/cgi-bin/nph-abs_connect?author=%s&db_key=AST"))) + '(("bugzilla" . "http://10.1.2.9/bugzilla/show_bug.cgi?id=") + ("url-to-ja" . "http://translate.google.fr/translate?sl=en&tl=ja&u=%h") + ("google" . "http://www.google.com/search?q=") + ("gmap" . "http://maps.google.com/maps?q=%s") + ("omap" . "http://nominatim.openstreetmap.org/search?q=%s&polygon=1") + ("ads" . "http://adsabs.harvard.edu/cgi-bin/nph-abs_connect?author=%s&db_key=AST"))) @end group @end smalllisp If the replacement text contains the string @samp{%s}, it will be -replaced with the tag. Otherwise the tag will be appended to the string -in order to create the link. You may also specify a function that will -be called with the tag as the only argument to create the link. +replaced with the tag. Using @samp{%h} instead of @samp{%s} will +url-encode the tag (see the example above, where we need to encode +the URL parameter.) Using @samp{%(my-function)} will pass the tag +to a custom function, and replace it by the resulting string. + +If the replacement text don't contain any specifier, it will simply +be appended to the string in order to create the link. + +Instead of a string, you may also specify a function that will be +called with the tag as the only argument to create the link. With the above setting, you could link to a specific bug with @code{[[bugzilla:129]]}, search the web for @samp{OrgMode} with @@ -3567,7 +3675,7 @@ Jump to line 255. Search for a link target @samp{<>}, or do a text search for @samp{my target}, similar to the search in internal links, see @ref{Internal links}. In HTML export (@pxref{HTML export}), such a file -link will become an HTML reference to the corresponding named anchor in +link will become a HTML reference to the corresponding named anchor in the linked file. @item *My Target In an Org file, restrict search to headlines. @@ -3844,9 +3952,10 @@ from @code{DONE} to @code{REPORT} in the example above. See also @subsection Fast access to TODO states If you would like to quickly change an entry to an arbitrary TODO state -instead of cycling through the states, you can set up keys for -single-letter access to the states. This is done by adding the section -key after each keyword, in parentheses. For example: +instead of cycling through the states, you can set up keys for single-letter +access to the states. This is done by adding the selection character after +each keyword, in parentheses@footnote{All characters are allowed except +@code{@@^!}, which have a special meaning here.}. For example: @lisp (setq org-todo-keywords @@ -4065,9 +4174,11 @@ time-stamped note for a change. These records will be inserted after the headline as an itemized list, newest first@footnote{See the variable @code{org-log-states-order-reversed}}. When taking a lot of notes, you might want to get the notes out of the way into a drawer (@pxref{Drawers}). -Customize the variable @code{org-log-into-drawer} to get this -behavior---the recommended drawer for this is called @code{LOGBOOK}. You can -also overrule the setting of this variable for a subtree by setting a +Customize the variable @code{org-log-into-drawer} to get this behavior---the +recommended drawer for this is called @code{LOGBOOK}@footnote{Note that the +@code{LOGBOOK} drawer is unfolded when pressing @key{SPC} in the agenda to +show an entry---use @key{C-u SPC} to keep it folded here}. You can also +overrule the setting of this variable for a subtree by setting a @code{LOG_INTO_DRAWER} property. Since it is normally too much to record a note for every state, Org mode @@ -4157,10 +4268,10 @@ The TODO may also have minimum and maximum ranges specified by using the syntax @samp{.+2d/3d}, which says that you want to do the task at least every three days, but at most every two days. @item -You must also have state logging for the @code{DONE} state enabled, in order -for historical data to be represented in the consistency graph. If it is not -enabled it is not an error, but the consistency graphs will be largely -meaningless. +You must also have state logging for the @code{DONE} state enabled +(@pxref{Tracking TODO state changes}), in order for historical data to be +represented in the consistency graph. If it is not enabled it is not an +error, but the consistency graphs will be largely meaningless. @end enumerate To give you an idea of what the above rules look like in action, here's an @@ -4872,8 +4983,8 @@ in the current file will be offered as possible completions. @orgcmd{C-c C-x p,org-set-property} Set a property. This prompts for a property name and a value. If necessary, the property drawer is created as well. -@item M-x org-insert-property-drawer -@findex org-insert-property-drawer +@item C-u M-x org-insert-drawer +@cindex org-insert-drawer Insert a property drawer into the current entry. The drawer will be inserted early in the entry, but after the lines with planning information like deadlines. @@ -4904,6 +5015,7 @@ column view (@pxref{Column view}), or to use them in queries. The following property names are special and (except for @code{:CATEGORY:}) should not be used as keys in the properties drawer: +@cindex property, special, ID @cindex property, special, TODO @cindex property, special, TAGS @cindex property, special, ALLTAGS @@ -4915,11 +5027,14 @@ used as keys in the properties drawer: @cindex property, special, TIMESTAMP @cindex property, special, TIMESTAMP_IA @cindex property, special, CLOCKSUM +@cindex property, special, CLOCKSUM_T @cindex property, special, BLOCKED @c guessing that ITEM is needed in this area; also, should this list be sorted? @cindex property, special, ITEM @cindex property, special, FILE @example +ID @r{A globally unique ID used for synchronization during} + @r{iCalendar or MobileOrg export.} TODO @r{The TODO keyword of the entry.} TAGS @r{The tags defined directly in the headline.} ALLTAGS @r{All tags, including inherited ones.} @@ -4932,8 +5047,11 @@ TIMESTAMP @r{The first keyword-less timestamp in the entry.} TIMESTAMP_IA @r{The first inactive timestamp in the entry.} CLOCKSUM @r{The sum of CLOCK intervals in the subtree. @code{org-clock-sum}} @r{must be run first to compute the values in the current buffer.} +CLOCKSUM_T @r{The sum of CLOCK intervals in the subtree for today.} + @r{@code{org-clock-sum-today} must be run first to compute the} + @r{values in the current buffer.} BLOCKED @r{"t" if task is currently blocked by children or siblings} -ITEM @r{The content of the entry.} +ITEM @r{The headline of the entry.} FILE @r{The filename the entry is located in.} @end example @@ -5149,7 +5267,7 @@ values. @example :COLUMNS: %25ITEM %9Approved(Approved?)@{X@} %Owner %11Status \@footnote{Please note that the COLUMNS definition must be on a single line---it is wrapped here only because of formatting constraints.} - %10Time_Estimate@{:@} %CLOCKSUM + %10Time_Estimate@{:@} %CLOCKSUM %CLOCKSUM_T :Owner_ALL: Tammy Mark Karl Lisa Don :Status_ALL: "In progress" "Not started yet" "Finished" "" :Approved_ALL: "[ ]" "[X]" @@ -5168,8 +5286,9 @@ modified title (@samp{Approved?}, with a question mark). Summaries will be created for the @samp{Time_Estimate} column by adding time duration expressions like HH:MM, and for the @samp{Approved} column, by providing an @samp{[X]} status if all children have been checked. The -@samp{CLOCKSUM} column is special, it lists the sum of CLOCK intervals -in the subtree. +@samp{CLOCKSUM} and @samp{CLOCKSUM_T} columns are special, they lists the +sums of CLOCK intervals in the subtree, either for all clocks or just for +today. @node Using column view, Capturing column view, Defining columns, Column view @subsection Using column view @@ -5370,8 +5489,10 @@ timeline and agenda displays, the headline of an entry associated with a plain timestamp will be shown exactly on that date. @example -* Meet Peter at the movies <2006-11-01 Wed 19:15> -* Discussion on climate change <2006-11-02 Thu 20:00-22:00> +* Meet Peter at the movies + <2006-11-01 Wed 19:15> +* Discussion on climate change + <2006-11-02 Thu 20:00-22:00> @end example @item Timestamp with repeater interval @@ -5382,7 +5503,8 @@ interval of N days (d), weeks (w), months (m), or years (y). The following will show up in the agenda every Wednesday: @example -* Pick up Sam at school <2007-05-16 Wed 12:30 +1w> +* Pick up Sam at school + <2007-05-16 Wed 12:30 +1w> @end example @item Diary-style sexp entries @@ -5426,7 +5548,8 @@ angular ones. These timestamps are inactive in the sense that they do @emph{not} trigger an entry to show up in the agenda. @example -* Gillian comes late for the fifth time [2006-11-01 Wed] +* Gillian comes late for the fifth time + [2006-11-01 Wed] @end example @end table @@ -5825,9 +5948,10 @@ or plain timestamp. In the following example @noindent the @code{+1m} is a repeater; the intended interpretation is that the task has a deadline on <2005-10-01> and repeats itself every (one) month starting -from that time. If you need both a repeater and a special warning period in -a deadline entry, the repeater should come first and the warning period last: -@code{DEADLINE: <2005-10-01 Sat +1m -3d>}. +from that time. You can use yearly, monthly, weekly, daily and hourly repeat +cookies by using the @code{y/w/m/d/h} letters. If you need both a repeater +and a special warning period in a deadline entry, the repeater should come +first and the warning period last: @code{DEADLINE: <2005-10-01 Sat +1m -3d>}. @vindex org-todo-repeat-to-state Deadlines and scheduled items produce entries in the agenda when they are @@ -5898,12 +6022,14 @@ created for this purpose, it is described in @ref{Structure editing}. @cindex time clocking Org mode allows you to clock the time you spend on specific tasks in a -project. When you start working on an item, you can start the clock. -When you stop working on that task, or when you mark the task done, the -clock is stopped and the corresponding time interval is recorded. It -also computes the total time spent on each subtree of a project. And it -remembers a history or tasks recently clocked, to that you can jump quickly -between a number of tasks absorbing your time. +project. When you start working on an item, you can start the clock. When +you stop working on that task, or when you mark the task done, the clock is +stopped and the corresponding time interval is recorded. It also computes +the total time spent on each subtree@footnote{Clocking only works if all +headings are indented with less than 30 stars. This is a hardcoded +limitation of `lmax' in `org-clock-sum'.} of a project. And it remembers a +history or tasks recently clocked, to that you can jump quickly between a +number of tasks absorbing your time. To save the clock history across Emacs sessions, use @lisp @@ -5928,6 +6054,7 @@ what to do with it. @table @kbd @orgcmd{C-c C-x C-i,org-clock-in} @vindex org-clock-into-drawer +@vindex org-clock-continuously @cindex property, LOG_INTO_DRAWER Start the clock on the current item (clock-in). This inserts the CLOCK keyword together with a timestamp. If this is not the first clocking of @@ -5938,9 +6065,10 @@ the setting of this variable for a subtree by setting a @code{CLOCK_INTO_DRAWER} or @code{LOG_INTO_DRAWER} property. When called with a @kbd{C-u} prefix argument, select the task from a list of recently clocked tasks. With two @kbd{C-u -C-u} prefixes, clock into the task at point and mark it as the default task. -The default task will always be available when selecting a clocking task, -with letter @kbd{d}.@* +C-u} prefixes, clock into the task at point and mark it as the default task; +the default task will then always be available with letter @kbd{d} when +selecting a clocking task. With three @kbd{C-u C-u C-u} prefixes, force +continuous clocking by starting the clock when the last clock stopped.@* @cindex property: CLOCK_MODELINE_TOTAL @cindex property: LAST_REPEAT @vindex org-clock-modeline-total @@ -5970,6 +6098,12 @@ HH:MM}. See the variable @code{org-log-note-clock-out} for the possibility to record an additional note together with the clock-out timestamp@footnote{The corresponding in-buffer setting is: @code{#+STARTUP: lognoteclock-out}}. +@orgcmd{C-c C-x C-x,org-clock-in-last} +@vindex org-clock-continuously +Reclock the last clocked task. With one @kbd{C-u} prefix argument, +select the task from the clock history. With two @kbd{C-u} prefixes, +force continuous clocking by starting the clock when the last clock +stopped. @orgcmd{C-c C-x C-e,org-clock-modify-effort-estimate} Update the effort estimate for the current clock task. @kindex C-c C-y @@ -5979,12 +6113,18 @@ Recompute the time interval after changing one of the timestamps. This is only necessary if you edit the timestamps directly. If you change them with @kbd{S-@key{cursor}} keys, the update is automatic. @orgcmd{C-S-@key{up/down},org-clock-timestamps-up/down} -On @code{CLOCK} log lines, increase/decrease both timestamps at the same -time so that duration keeps the same. +On @code{CLOCK} log lines, increase/decrease both timestamps so that the +clock duration keeps the same. +@orgcmd{S-M-@key{up/down},org-timestamp-up/down} +On @code{CLOCK} log lines, increase/decrease the timestamp at point and +the one of the previous (or the next clock) timestamp by the same duration. +For example, if you hit @kbd{S-M-@key{up}} to increase a clocked-out timestamp +by five minutes, then the clocked-in timestamp of the next clock will be +increased by five minutes. @orgcmd{C-c C-t,org-todo} Changing the TODO state of an item to DONE automatically stops the clock if it is running in this same item. -@orgcmd{C-c C-x C-x,org-clock-cancel} +@orgcmd{C-c C-x C-q,org-clock-cancel} Cancel the current clock. This is useful if a clock was started by mistake, or if you ended up working on something else. @orgcmd{C-c C-x C-j,org-clock-goto} @@ -6004,6 +6144,10 @@ The @kbd{l} key may be used in the timeline (@pxref{Timeline}) and in the agenda (@pxref{Weekly/daily agenda}) to show which tasks have been worked on or closed during a day. +@strong{Important:} note that both @code{org-clock-out} and +@code{org-clock-in-last} can have a global keybinding and will not +modify the window disposition. + @node The clock table, Resolving idle time, Clocking commands, Clocking work time @subsection The clock table @cindex clocktable, dynamic block @@ -6141,7 +6285,9 @@ would be @end example @node Resolving idle time, , The clock table, Clocking work time -@subsection Resolving idle time +@subsection Resolving idle time and continuous clocking + +@subsubheading Resolving idle time @cindex resolve idle time @cindex idle, resolve, dangling @@ -6156,12 +6302,12 @@ as 10 or 15, Emacs can alert you when you get back to your computer after being idle for that many minutes@footnote{On computers using Mac OS X, idleness is based on actual user idleness, not just Emacs' idle time. For X11, you can install a utility program @file{x11idle.c}, available in the -UTILITIES directory of the Org git distribution, to get the same general -treatment of idleness. On other systems, idle time refers to Emacs idle time -only.}, and ask what you want to do with the idle time. There will be a -question waiting for you when you get back, indicating how much idle time has -passed (constantly updated with the current amount), as well as a set of -choices to correct the discrepancy: +@code{contrib/scripts} directory of the Org git distribution, to get the same +general treatment of idleness. On other systems, idle time refers to Emacs +idle time only.}, and ask what you want to do with the idle time. There will +be a question waiting for you when you get back, indicating how much idle +time has passed (constantly updated with the current amount), as well as a +set of choices to correct the discrepancy: @table @kbd @item k @@ -6206,7 +6352,19 @@ identical to dealing with away time due to idleness; it is just happening due to a recovery event rather than a set amount of idle time. You can also check all the files visited by your Org agenda for dangling -clocks at any time using @kbd{M-x org-resolve-clocks}. +clocks at any time using @kbd{M-x org-resolve-clocks RET} (or @kbd{C-c C-x C-z}). + +@subsubheading Continuous clocking +@cindex continuous clocking +@vindex org-clock-continuously + +You may want to start clocking from the time when you clocked out the +previous task. To enable this systematically, set @code{org-clock-continuously} +to @code{t}. Each time you clock in, Org retrieves the clock-out time of the +last clocked entry for this session, and start the new clock from there. + +If you only want this from time to time, use three universal prefix arguments +with @code{org-clock-in} and two @kbd{C-u C-u} with @code{org-clock-in-last}. @node Effort estimates, Relative timer, Clocking work time, Dates and Times @section Effort estimates @@ -6436,6 +6594,15 @@ template in the usual way. Visit the last stored capture item in its buffer. @end table +@vindex org-capture-bookmark +@cindex org-capture-last-stored +You can also jump to the bookmark @code{org-capture-last-stored}, which will +automatically be created unless you set @code{org-capture-bookmark} to +@code{nil}. + +To insert the capture at point in an Org buffer, call @code{org-capture} with +a @code{C-0} prefix argument. + @node Capture templates, , Using capture, Capture @subsection Capture templates @cindex templates, for Capture @@ -6490,6 +6657,7 @@ like this: @menu * Template elements:: What is needed for a complete template entry * Template expansion:: Filling in information about time and context +* Templates in contexts:: Only show a template in a specific context @end menu @node Template elements, Template expansion, Capture templates, Capture templates @@ -6633,36 +6801,38 @@ buffer again after capture is completed. @end table @end table -@node Template expansion, , Template elements, Capture templates +@node Template expansion, Templates in contexts, Template elements, Capture templates @subsubsection Template expansion In the template itself, special @kbd{%}-escapes@footnote{If you need one of -these sequences literally, escape the @kbd{%} with a backslash.} allow +these sequences literally, escape the @kbd{%} with a backslash.} allow dynamic insertion of content. The templates are expanded in the order given here: @smallexample -%[@var{file}] @r{insert the contents of the file given by @var{file}.} -%(@var{sexp}) @r{evaluate Elisp @var{sexp} and replace with the result.} -%<...> @r{the result of format-time-string on the ... format specification.} -%t @r{timestamp, date only.} -%T @r{timestamp with date and time.} -%u, %U @r{like the above, but inactive timestamps.} -%a @r{annotation, normally the link created with @code{org-store-link}.} -%i @r{initial content, the region when capture is called while the} +%[@var{file}] @r{Insert the contents of the file given by @var{file}.} +%(@var{sexp}) @r{Evaluate Elisp @var{sexp} and replace with the result.} + @r{The sexp must return a string.} +%<...> @r{The result of format-time-string on the ... format specification.} +%t @r{Timestamp, date only.} +%T @r{Timestamp, with date and time.} +%u, %U @r{Like the above, but inactive timestamps.} +%i @r{Initial content, the region when capture is called while the} @r{region is active.} @r{The entire text will be indented like @code{%i} itself.} -%A @r{like @code{%a}, but prompt for the description part.} +%a @r{Annotation, normally the link created with @code{org-store-link}.} +%A @r{Like @code{%a}, but prompt for the description part.} +%l @r{Like %a, but only insert the literal link.} %c @r{Current kill ring head.} %x @r{Content of the X clipboard.} -%k @r{title of the currently clocked task.} -%K @r{link to the currently clocked task.} -%n @r{user name (taken from @code{user-full-name}).} -%f @r{file visited by current buffer when org-capture was called.} -%F @r{full path of the file or directory visited by current buffer.} -%:keyword @r{specific information for certain link types, see below.} -%^g @r{prompt for tags, with completion on tags in target file.} -%^G @r{prompt for tags, with completion all tags in all agenda files.} -%^t @r{like @code{%t}, but prompt for date. Similarly @code{%^T}, @code{%^u}, @code{%^U}.} +%k @r{Title of the currently clocked task.} +%K @r{Link to the currently clocked task.} +%n @r{User name (taken from @code{user-full-name}).} +%f @r{File visited by current buffer when org-capture was called.} +%F @r{Full path of the file or directory visited by current buffer.} +%:keyword @r{Specific information for certain link types, see below.} +%^g @r{Prompt for tags, with completion on tags in target file.} +%^G @r{Prompt for tags, with completion all tags in all agenda files.} +%^t @r{Like @code{%t}, but prompt for date. Similarly @code{%^T}, @code{%^u}, @code{%^U}.} @r{You may define a prompt like @code{%^@{Birthday@}t}.} %^C @r{Interactive selection of which kill or clip to use.} %^L @r{Like @code{%^C}, but insert as link.} @@ -6671,6 +6841,9 @@ dynamic insertion of content. The templates are expanded in the order given her @r{You may specify a default value and a completion table with} @r{%^@{prompt|default|completion2|completion3...@}.} @r{The arrow keys access a prompt-specific history.} +%\n @r{Insert the text entered at the nth %^@{@var{prompt}@}, where @code{n} is} + @r{a number, starting from 1.} +%? @r{After completing the template, position cursor here.} @end smallexample @noindent @@ -6682,21 +6855,21 @@ similar way.}: @vindex org-from-is-user-regexp @smallexample -Link type | Available keywords -------------------------+---------------------------------------------- -bbdb | %:name %:company -irc | %:server %:port %:nick -vm, wl, mh, mew, rmail | %:type %:subject %:message-id - | %:from %:fromname %:fromaddress - | %:to %:toname %:toaddress - | %:date @r{(message date header field)} - | %:date-timestamp @r{(date as active timestamp)} - | %:date-timestamp-inactive @r{(date as inactive timestamp)} - | %:fromto @r{(either "to NAME" or "from NAME")@footnote{This will always be the other, not the user. See the variable @code{org-from-is-user-regexp}.}} -gnus | %:group, @r{for messages also all email fields} -w3, w3m | %:url -info | %:file %:node -calendar | %:date +Link type | Available keywords +---------------------------------+---------------------------------------------- +bbdb | %:name %:company +irc | %:server %:port %:nick +vm, vm-imap, wl, mh, mew, rmail | %:type %:subject %:message-id + | %:from %:fromname %:fromaddress + | %:to %:toname %:toaddress + | %:date @r{(message date header field)} + | %:date-timestamp @r{(date as active timestamp)} + | %:date-timestamp-inactive @r{(date as inactive timestamp)} + | %:fromto @r{(either "to NAME" or "from NAME")@footnote{This will always be the other, not the user. See the variable @code{org-from-is-user-regexp}.}} +gnus | %:group, @r{for messages also all email fields} +w3, w3m | %:url +info | %:file %:node +calendar | %:date @end smallexample @noindent @@ -6706,6 +6879,29 @@ To place the cursor after template expansion use: %? @r{After completing the template, position cursor here.} @end smallexample +@node Templates in contexts, , Template expansion, Capture templates +@subsubsection Templates in contexts + +@vindex org-capture-templates-contexts +To control whether a capture template should be accessible from a specific +context, you can customize @var{org-capture-templates-contexts}. Let's say +for example that you have a capture template @code{"p"} for storing Gnus +emails containing patches. Then you would configure this option like this: + +@example +(setq org-capture-templates-contexts + '(("p" (in-mode . "message-mode")))) +@end example + +You can also tell that the command key @code{"p"} should refer to another +template. In that case, add this command key like this: + +@example +(setq org-capture-templates-contexts + '(("p" "q" (in-mode . "message-mode")))) +@end example + +See the docstring of the variable for more information. @node Attachments, RSS Feeds, Capture, Capture - Refile - Archive @section Attachments @@ -6947,16 +7143,20 @@ is invoked, the level 1 trees will be checked. @cindex archive locations The default archive location is a file in the same directory as the current file, with the name derived by appending @file{_archive} to the -current file name. For information and examples on how to change this, +current file name. You can also choose what heading to file archived +items under, with the possibility to add them to a datetree in a file. +For information and examples on how to specify the file and the heading, see the documentation string of the variable -@code{org-archive-location}. There is also an in-buffer option for -setting this variable, for example@footnote{For backward compatibility, -the following also works: If there are several such lines in a file, -each specifies the archive location for the text below it. The first -such line also applies to any text before its definition. However, -using this method is @emph{strongly} deprecated as it is incompatible -with the outline structure of the document. The correct method for -setting multiple archive locations in a buffer is using properties.}: +@code{org-archive-location}. + +There is also an in-buffer option for setting this variable, for +example@footnote{For backward compatibility, the following also works: +If there are several such lines in a file, each specifies the archive +location for the text below it. The first such line also applies to any +text before its definition. However, using this method is +@emph{strongly} deprecated as it is incompatible with the outline +structure of the document. The correct method for setting multiple +archive locations in a buffer is using properties.}: @cindex #+ARCHIVE @example @@ -7220,6 +7420,17 @@ the region. Otherwise, restrict it to the current subtree@footnote{For backward compatibility, you can also press @kbd{0} to restrict to the current region/subtree.}. After pressing @kbd{< <}, you still need to press the character selecting the command. + +@item * +@vindex org-agenda-sticky +Toggle sticky agenda views. By default, Org maintains only a single agenda +buffer and rebuilds it each time you change the view, to make sure everything +is always up to date. If you switch between views often and the build time +bothers you, you can turn on sticky agenda buffers (make this the default by +customizing the variable @code{org-agenda-sticky}). With sticky agendas, the +dispatcher only switches to the selected view, you need to update it by hand +with @kbd{r} or @kbd{g}. You can toggle sticky agenda view any time with +@code{org-toggle-sticky-agenda}. @end table You can also define custom commands that will be accessible through the @@ -7368,11 +7579,13 @@ in an Org or Diary file. @cindex appointment @cindex reminders -Org can interact with Emacs appointments notification facility. To add all -the appointments of your agenda files, use the command -@code{org-agenda-to-appt}. This command also lets you filter through the -list of your appointments and add only those belonging to a specific category -or matching a regular expression. See the docstring for details. +Org can interact with Emacs appointments notification facility. To add the +appointments of your agenda files, use the command @code{org-agenda-to-appt}. +This command lets you filter through the list of your appointments and add +only those belonging to a specific category or matching a regular expression. +It also reads a @code{APPT_WARNTIME} property which will then override the +value of @code{appt-message-warning-time} for this appointment. See the +docstring for details. @node Global TODO list, Matching tags and properties, Weekly/daily agenda, Built-in agenda views @subsection The global TODO list @@ -7511,6 +7724,9 @@ So a search @samp{+LEVEL=3+boss-TODO="DONE"} lists all level three headlines that have the tag @samp{boss} and are @emph{not} marked with the TODO keyword DONE. In buffers with @code{org-odd-levels-only} set, @samp{LEVEL} does not count the number of stars, but @samp{LEVEL=2} will correspond to 3 stars etc. +The ITEM special property cannot currently be used in tags/property +searches@footnote{But @pxref{x-agenda-skip-entry-regexp, +,skipping entries based on regexp}.}. Here are more examples: @table @samp @@ -8218,21 +8434,6 @@ Schedule this item. With prefix arg remove the scheduling timestamp @orgcmd{C-c C-d,org-agenda-deadline} Set a deadline for this item. With prefix arg remove the deadline. @c -@orgcmd{k,org-agenda-action} -Agenda actions, to set dates for selected items to the cursor date. -This command also works in the calendar! The command prompts for an -additional key: -@example -m @r{Mark the entry at point for action. You can also make entries} - @r{in Org files with @kbd{C-c C-x C-k}.} -d @r{Set the deadline of the marked entry to the date at point.} -s @r{Schedule the marked entry at the date at point.} -r @r{Call @code{org-capture} with the cursor date as default date.} -@end example -@noindent -Press @kbd{r} afterward to refresh the agenda and see the effect of the -command. -@c @orgcmd{S-@key{right},org-agenda-do-date-later} Change the timestamp associated with the current line by one day into the future. If the date is in the past, the first call to this command will move @@ -8265,9 +8466,18 @@ Cancel the currently running clock. @c @orgcmd{J,org-agenda-clock-goto} Jump to the running clock in another window. +@c +@orgcmd{k,org-agenda-capture} +Like @code{org-capture}, but use the date at point as the default date for +the capture template. See @var{org-capture-use-agenda-date} to make this +the default behavior of @code{org-capture}. +@cindex capturing, from agenda +@vindex org-capture-use-agenda-date @tsubheading{Bulk remote editing selected entries} @cindex remote editing, bulk, from agenda +@vindex org-agenda-bulk-persistent-marks +@vindex org-agenda-bulk-custom-functions @orgcmd{m,org-agenda-bulk-mark} Mark the entry at point for bulk action. With prefix arg, mark that many @@ -8286,10 +8496,12 @@ Unmark all marked entries for bulk action. Bulk action: act on all marked entries in the agenda. This will prompt for another key to select the action to be applied. The prefix arg to @kbd{B} will be passed through to the @kbd{s} and @kbd{d} commands, to bulk-remove -these special timestamps. +these special timestamps. By default, marks are removed after the bulk. If +you want them to persist, set @code{org-agenda-bulk-persistent-marks} to +@code{t} or hit @kbd{p} at the prompt. + @example -r @r{Prompt for a single refile target and move all entries. The entries} - @r{will no longer be in the agenda; refresh (@kbd{g}) to bring them back.} +* @r{Toggle persistent marks.} $ @r{Archive all selected entries.} A @r{Archive entries by moving them to their respective archive siblings.} t @r{Change TODO state. This prompts for a single TODO keyword and} @@ -8300,10 +8512,12 @@ t @r{Change TODO state. This prompts for a single TODO keyword and} s @r{Schedule all items to a new date. To shift existing schedule dates} @r{by a fixed number of days, use something starting with double plus} @r{at the prompt, for example @samp{++8d} or @samp{++2w}.} +d @r{Set deadline to a specific date.} +r @r{Prompt for a single refile target and move all entries. The entries} + @r{will no longer be in the agenda; refresh (@kbd{g}) to bring them back.} S @r{Reschedule randomly into the coming N days. N will be prompted for.} @r{With prefix arg (@kbd{C-u B S}), scatter only across weekdays.} -d @r{Set deadline to a specific date.} -f @r{Apply a function to marked entries.} +f @r{Apply a function@footnote{You can also create persistent custom functions through@code{org-agenda-bulk-custom-functions}.} to marked entries.} @r{For example, the function below sets the CATEGORY property of the} @r{entries to web.} @r{(defun set-category ()} @@ -8371,7 +8585,7 @@ Export a single iCalendar file containing entries from all agenda files. This is a globally available command, and also available in the agenda menu. @tsubheading{Exporting to a file} -@orgcmd{C-x C-w,org-write-agenda} +@orgcmd{C-x C-w,org-agenda-write} @cindex exporting agenda views @cindex agenda views, exporting @vindex org-agenda-exporter-settings @@ -8420,11 +8634,12 @@ buffer, or a sparse tree (the latter covering of course only the current buffer). @kindex C-c a C @vindex org-agenda-custom-commands + Custom commands are configured in the variable @code{org-agenda-custom-commands}. You can customize this variable, for -example by pressing @kbd{C-c a C}. You can also directly set it with -Emacs Lisp in @file{.emacs}. The following example contains all valid -search types: +example by pressing @kbd{C-c a C}. You can also directly set it with Emacs +Lisp in @file{.emacs}. The following example contains all valid search +types: @lisp @group @@ -8584,6 +8799,27 @@ this interface, the @emph{values} are just Lisp expressions. So if the value is a string, you need to add the double-quotes around the value yourself. +@vindex org-agenda-custom-commands-contexts +To control whether an agenda command should be accessible from a specific +context, you can customize @var{org-agenda-custom-commands-contexts}. Let's +say for example that you have an agenda commands @code{"o"} displaying a view +that you only need when reading emails. Then you would configure this option +like this: + +@example +(setq org-agenda-custom-commands-contexts + '(("o" (in-mode . "message-mode")))) +@end example + +You can also tell that the command key @code{"o"} should refer to another +command key @code{"r"}. In that case, add this command key like this: + +@example +(setq org-agenda-custom-commands-contexts + '(("o" "r" (in-mode . "message-mode")))) +@end example + +See the docstring of the variable for more information. @node Exporting Agenda Views, Agenda column view, Custom agenda views, Agenda Views @section Exporting Agenda Views @@ -8598,7 +8834,7 @@ a PDF file will also create the postscript file.}, and iCalendar files. If you want to do this only occasionally, use the command @table @kbd -@orgcmd{C-x C-w,org-write-agenda} +@orgcmd{C-x C-w,org-agenda-write} @cindex exporting agenda views @cindex agenda views, exporting @vindex org-agenda-exporter-settings @@ -8777,6 +9013,14 @@ a column listing the planned total effort for a task---one of the major applications for column view in the agenda. If you want information about clocked time in the displayed period use clock table mode (press @kbd{R} in the agenda). + +@item +@cindex property, special, CLOCKSUM_T +When the column view in the agenda shows the @code{CLOCKSUM_T}, that is +always today's clocked time for this item. So even in the weekly agenda, +the clocksum listed in column view only originates from today. This lets +you compare the time you spent on a task for today, with the time already +spent (via @code{CLOCKSUM}) and with the planned total effort for it. @end enumerate @@ -8988,11 +9232,11 @@ a horizontal line (@samp{
} in HTML and @code{\hrule} in @LaTeX{}). @cindex exporting, not @cindex #+BEGIN_COMMENT -Lines starting with @samp{#} in column zero are treated as comments and will -never be exported. If you want an indented line to be treated as a comment, -start it with @samp{#+ }. Also entire subtrees starting with the word -@samp{COMMENT} will never be exported. Finally, regions surrounded by -@samp{#+BEGIN_COMMENT} ... @samp{#+END_COMMENT} will not be exported. +Lines starting with zero or more whitespace characters followed by @samp{#} +are treated as comments and will never be exported. Also entire subtrees +starting with the word @samp{COMMENT} will never be exported. Finally, +regions surrounded by @samp{#+BEGIN_COMMENT} ... @samp{#+END_COMMENT} will +not be exported. @table @kbd @kindex C-c ; @@ -9016,7 +9260,7 @@ the object with @code{\ref@{tab:basic-data@}}: @example #+CAPTION: This is the caption for the next table (or link) -#+LABEL: tbl:basic-data +#+LABEL: tab:basic-data | ... | ...| |-----|----| @end example @@ -9080,23 +9324,14 @@ look like the fontified Emacs buffer@footnote{This works automatically for the HTML backend (it requires version 1.34 of the @file{htmlize.el} package, which is distributed with Org). Fontified code chunks in @LaTeX{} can be achieved using either the listings or the -@url{http://code.google.com/p/minted, minted,} package. To use listings, turn -on the variable @code{org-export-latex-listings} and ensure that the listings -package is included by the @LaTeX{} header (e.g.@: by configuring -@code{org-export-latex-packages-alist}). See the listings documentation for -configuration options, including obtaining colored output. For minted it is -necessary to install the program @url{http://pygments.org, pygments}, in -addition to setting @code{org-export-latex-minted}, ensuring that the minted -package is included by the @LaTeX{} header, and ensuring that the -@code{-shell-escape} option is passed to @file{pdflatex} (see -@code{org-latex-to-pdf-process}). See the documentation of the variables -@code{org-export-latex-listings} and @code{org-export-latex-minted} for -further details.}. This is done with the @samp{src} block, where you also -need to specify the name of the major mode that should be used to fontify the -example@footnote{Code in @samp{src} blocks may also be evaluated either -interactively or on export. See @pxref{Working With Source Code} for more -information on evaluating code blocks.}, see @ref{Easy Templates} for -shortcuts to easily insert code blocks. +@url{http://code.google.com/p/minted, minted,} package. Refer to +@code{org-export-latex-listings} documentation for details.}. This is done +with the @samp{src} block, where you also need to specify the name of the +major mode that should be used to fontify the example@footnote{Code in +@samp{src} blocks may also be evaluated either interactively or on export. +See @pxref{Working With Source Code} for more information on evaluating code +blocks.}, see @ref{Easy Templates} for shortcuts to easily insert code +blocks. @cindex #+BEGIN_SRC @example @@ -9276,7 +9511,7 @@ readily processed to produce pretty output for a number of export backends. @menu * Special symbols:: Greek letters and other symbols * Subscripts and superscripts:: Simple syntax for raising/lowering text -* @LaTeX{} fragments:: Complex formulas made easy +* @LaTeX{} fragments:: Complex formulas made easy * Previewing @LaTeX{} fragments:: What will this snippet look like? * CDLaTeX mode:: Speed up entering of formulas @end menu @@ -9382,10 +9617,11 @@ this regularly or on pages with significant page views, you should install server in order to limit the load of our server.}. Finally, it can also process the mathematical expressions into images@footnote{For this to work you need to be on a system with a working @LaTeX{} installation. You also -need the @file{dvipng} program, available at -@url{http://sourceforge.net/projects/dvipng/}. The @LaTeX{} header that will -be used when processing a fragment can be configured with the variable -@code{org-format-latex-header}.} that can be displayed in a browser or in +need the @file{dvipng} program or the @file{convert}, respectively available +at @url{http://sourceforge.net/projects/dvipng/} and from the +@file{imagemagick} suite. The @LaTeX{} header that will be used when +processing a fragment can be configured with the variable +@code{org-format-latex-header}.} that can be displayed in a browser or in DocBook documents. @LaTeX{} fragments don't need any special marking at all. The following @@ -9630,7 +9866,7 @@ Insert template with export options, see example below. @cindex #+EXPORT_SELECT_TAGS @cindex #+EXPORT_EXCLUDE_TAGS @cindex #+XSLT -@cindex #+LATEX_HEADER +@cindex #+LaTeX_HEADER @vindex user-full-name @vindex user-mail-address @vindex org-export-default-language @@ -9650,7 +9886,7 @@ Insert template with export options, see example below. @r{You need to confirm using these, or configure @code{org-export-allow-BIND}} #+LINK_UP: the ``up'' link of an exported page #+LINK_HOME: the ``home'' link of an exported page -#+LATEX_HEADER: extra line(s) for the @LaTeX{} header, like \usepackage@{xyz@} +#+LaTeX_HEADER: extra line(s) for the @LaTeX{} header, like \usepackage@{xyz@} #+EXPORT_SELECT_TAGS: Tags that select a tree for export #+EXPORT_EXCLUDE_TAGS: Tags that exclude a tree from export #+XSLT: the XSLT stylesheet used by DocBook exporter to generate FO file @@ -9707,7 +9943,7 @@ author: @r{turn on/off inclusion of author name/email into exported file} email: @r{turn on/off inclusion of author email into exported file} creator: @r{turn on/off inclusion of creator info into exported file} timestamp: @r{turn on/off inclusion creation time into exported file} -d: @r{turn on/off inclusion of drawers} +d: @r{turn on/off inclusion of drawers, or list drawers to include} @end example @noindent These options take effect in both the HTML and @LaTeX{} export, except for @@ -9770,7 +10006,7 @@ with special characters and symbols available in these encodings. @table @kbd @orgcmd{C-c C-e a,org-export-as-ascii} @cindex property, EXPORT_FILE_NAME -Export as ASCII file. For an Org file, @file{myfile.org}, the ASCII file +Export as an ASCII file. For an Org file, @file{myfile.org}, the ASCII file will be @file{myfile.txt}. The file will be overwritten without warning. If there is an active region@footnote{This requires @code{transient-mark-mode} be turned on.}, only the region will be @@ -9802,13 +10038,13 @@ at a different level, specify it with a prefix argument. For example, @end example @noindent -creates only top level headlines and does the rest as items. When +creates only top level headlines and exports the rest as items. When headlines are converted to items, the indentation of the text following the headline is changed to fit nicely under the item. This is done with the assumption that the first body line indicates the base indentation of the body text. Any indentation larger than this is adjusted to preserve the layout relative to the first line. Should there be lines with less -indentation than the first, these are left alone. +indentation than the first one, these are left alone. @vindex org-export-ascii-links-to-notes Links will be exported in a footnote-like style, with the descriptive part in @@ -9819,7 +10055,7 @@ the text and the link in a note before the next heading. See the variable @section HTML export @cindex HTML export -Org mode contains an HTML (XHTML 1.0 strict) exporter with extensive +Org mode contains a HTML (XHTML 1.0 strict) exporter with extensive HTML formatting, in ways similar to John Gruber's @emph{markdown} language, but with additional support for tables. @@ -9845,7 +10081,7 @@ language, but with additional support for tables. @table @kbd @orgcmd{C-c C-e h,org-export-as-html} @cindex property, EXPORT_FILE_NAME -Export as HTML file. For an Org file @file{myfile.org}, +Export as a HTML file. For an Org file @file{myfile.org}, the HTML file will be @file{myfile.html}. The file will be overwritten without warning. If there is an active region@footnote{This requires @code{transient-mark-mode} be turned on.}, only the region will be @@ -9854,7 +10090,7 @@ current subtree, use @kbd{C-c @@}.}, the tree head will become the document title. If the tree head entry has, or inherits, an @code{EXPORT_FILE_NAME} property, that name will be used for the export. @orgcmd{C-c C-e b,org-export-as-html-and-open} -Export as HTML file and immediately open it with a browser. +Export as a HTML file and immediately open it with a browser. @orgcmd{C-c C-e H,org-export-as-html-to-buffer} Export to a temporary buffer. Do not create a file. @orgcmd{C-c C-e R,org-export-region-as-html} @@ -9864,7 +10100,7 @@ the region. This is good for cut-and-paste operations. @item C-c C-e v h/b/H/R Export only the visible part of the document. @item M-x org-export-region-as-html -Convert the region to HTML under the assumption that it was Org mode +Convert the region to HTML under the assumption that it was in Org mode syntax before. This is a global command that can be invoked in any buffer. @item M-x org-replace-region-by-HTML @@ -9901,11 +10137,11 @@ creates two levels of headings and does the rest as items. The HTML exporter lets you define a preamble and a postamble. The default value for @code{org-export-html-preamble} is @code{t}, which -means that the preamble is inserted depending on the relevant formatting -string in @code{org-export-html-preamble-format}. +means that the preamble is inserted depending on the relevant format string +in @code{org-export-html-preamble-format}. Setting @code{org-export-html-preamble} to a string will override the default -formatting string. Setting it to a function, will insert the output of the +format string. Setting it to a function, will insert the output of the function, which must be a string; such a function takes no argument but you can check against the value of @code{opt-plist}, which contains the list of publishing properties for the current file. Setting to @code{nil} will not @@ -9917,7 +10153,7 @@ means that the HTML exporter will look for the value of @code{org-export-creator-info} and @code{org-export-time-stamp-file}, @code{org-export-html-validation-link} and build the postamble from these values. Setting @code{org-export-html-postamble} to @code{t} will insert the -postamble from the relevant formatting string found in +postamble from the relevant format string found in @code{org-export-html-postamble-format}. Setting it to @code{nil} will not insert any postamble. @@ -9958,7 +10194,7 @@ includes automatic links created by radio targets (@pxref{Radio targets}). Links to external files will still work if the target file is on the same @i{relative} path as the published Org file. Links to other @file{.org} files will be translated into HTML links under the assumption -that an HTML version also exists of the linked file, at the same relative +that a HTML version also exists of the linked file, at the same relative path. @samp{id:} links can then be used to jump to specific entries across files. For information related to linking files while publishing them to a publishing directory see @ref{Publishing links}. @@ -10199,7 +10435,7 @@ viewing options: path: @r{The path to the script. The default is to grab the script from} @r{@url{http://orgmode.org/org-info.js}, but you might want to have} @r{a local copy and use a path like @samp{../scripts/org-info.js}.} -view: @r{Initial view when website is first shown. Possible values are:} +view: @r{Initial view when the website is first shown. Possible values are:} info @r{Info-like interface with one section per page.} overview @r{Folding interface, initially showing only top-level.} content @r{Folding interface, starting with all headlines visible.} @@ -10265,7 +10501,7 @@ sections. @table @kbd @orgcmd{C-c C-e l,org-export-as-latex} @cindex property EXPORT_FILE_NAME -Export as @LaTeX{} file. For an Org file +Export as a @LaTeX{} file. For an Org file @file{myfile.org}, the @LaTeX{} file will be @file{myfile.tex}. The file will be overwritten without warning. If there is an active region@footnote{This requires @code{transient-mark-mode} be turned on.}, only the region will be @@ -10278,7 +10514,7 @@ Export to a temporary buffer. Do not create a file. @item C-c C-e v l/L Export only the visible part of the document. @item M-x org-export-region-as-latex -Convert the region to @LaTeX{} under the assumption that it was Org mode +Convert the region to @LaTeX{} under the assumption that it was in Org mode syntax before. This is a global command that can be invoked in any buffer. @item M-x org-replace-region-by-latex @@ -10322,11 +10558,11 @@ By default, the @LaTeX{} output uses the class @code{article}. @vindex org-export-latex-classes @vindex org-export-latex-default-packages-alist @vindex org-export-latex-packages-alist -@cindex #+LATEX_HEADER -@cindex #+LATEX_CLASS -@cindex #+LATEX_CLASS_OPTIONS -@cindex property, LATEX_CLASS -@cindex property, LATEX_CLASS_OPTIONS +@cindex #+LaTeX_HEADER +@cindex #+LaTeX_CLASS +@cindex #+LaTeX_CLASS_OPTIONS +@cindex property, LaTeX_CLASS +@cindex property, LaTeX_CLASS_OPTIONS You can change this globally by setting a different value for @code{org-export-latex-default-class} or locally by adding an option like @code{#+LaTeX_CLASS: myclass} in your file, or with a @code{:LaTeX_CLASS:} @@ -10336,11 +10572,22 @@ defines a header template for each class@footnote{Into which the values of @code{org-export-latex-default-packages-alist} and @code{org-export-latex-packages-alist} are spliced.}, and allows you to define the sectioning structure for each class. You can also define your own -classes there. @code{#+LaTeX_CLASS_OPTIONS} or a @code{LaTeX_CLASS_OPTIONS} -property can specify the options for the @code{\documentclass} macro. You -can also use @code{#+LATEX_HEADER: \usepackage@{xyz@}} to add lines to the -header. See the docstring of @code{org-export-latex-classes} for more -information. +classes there. @code{#+LaTeX_CLASS_OPTIONS} or a @code{:LaTeX_CLASS_OPTIONS:} +property can specify the options for the @code{\documentclass} macro. The +options to documentclass have to be provided, as expected by @LaTeX{}, within +square brackets. You can also use @code{#+LaTeX_HEADER: \usepackage@{xyz@}} +to add lines to the header. See the docstring of +@code{org-export-latex-classes} for more information. An example is shown +below. + +@example +#+LaTeX_CLASS: article +#+LaTeX_CLASS_OPTIONS: [a4paper] +#+LaTeX_HEADER: \usepackage@{xyz@} + +* Headline 1 + some text +@end example @node Quoting @LaTeX{} code, Tables in @LaTeX{} export, Header and sectioning, @LaTeX{} and PDF export @subsection Quoting @LaTeX{} code @@ -10424,9 +10671,7 @@ add something like @samp{placement=[h!]} to the attributes. It is to be noted this option can be used with tables as well@footnote{One can also take advantage of this option to pass other, unrelated options into the figure or table environment. For an example see the section ``Exporting org files'' in -@url{http://orgmode.org/worg/org-hacks.html}}. For example the -@code{#+ATTR_LaTeX:} line below is exported as the @code{figure} environment -below it. +@url{http://orgmode.org/worg/org-hacks.html}}. If you would like to let text flow around the image, add the word @samp{wrap} to the @code{#+ATTR_LaTeX:} line, which will make the figure occupy the left @@ -10513,7 +10758,7 @@ transitions. Frames will automatically receive a @code{fragile} option if they contain source code that uses the verbatim environment. Special @file{beamer} specific code can be inserted using @code{#+BEAMER:} and -@code{#+BEGIN_beamer...#+end_beamer} constructs, similar to other export +@code{#+BEGIN_BEAMER...#+END_BEAMER} constructs, similar to other export backends, but with the difference that @code{#+LaTeX:} stuff will be included in the presentation as well. @@ -10613,7 +10858,7 @@ Currently DocBook exporter only supports DocBook V5.0. @table @kbd @orgcmd{C-c C-e D,org-export-as-docbook} @cindex property EXPORT_FILE_NAME -Export as DocBook file. For an Org file, @file{myfile.org}, the DocBook XML +Export as a DocBook file. For an Org file, @file{myfile.org}, the DocBook XML file will be @file{myfile.xml}. The file will be overwritten without warning. If there is an active region@footnote{This requires @code{transient-mark-mode} to be turned on}, only the region will be @@ -10622,12 +10867,12 @@ current subtree, use @kbd{C-c @@}.}, the tree head will become the document title. If the tree head entry has, or inherits, an @code{EXPORT_FILE_NAME} property, that name will be used for the export. @orgcmd{C-c C-e V,org-export-as-docbook-pdf-and-open} -Export as DocBook file, process to PDF, then open the resulting PDF file. +Export as a DocBook file, process to PDF, then open the resulting PDF file. @vindex org-export-docbook-xslt-proc-command @vindex org-export-docbook-xsl-fo-proc-command -Note that, in order to produce PDF output based on exported DocBook file, you -need to have XSLT processor and XSL-FO processor software installed on your +Note that, in order to produce PDF output based on an exported DocBook file, +you need to have XSLT processor and XSL-FO processor software installed on your system. Check variables @code{org-export-docbook-xslt-proc-command} and @code{org-export-docbook-xsl-fo-proc-command}. @@ -10791,7 +11036,7 @@ special characters included in XHTML entities: @cindex org-odt.el @cindex org-modules -Orgmode@footnote{Versions 7.8 or later} supports export to OpenDocument Text +Org Mode@footnote{Versions 7.8 or later} supports export to OpenDocument Text (ODT) format using the @file{org-odt.el} module. Documents created by this exporter use the @cite{OpenDocument-v1.2 specification}@footnote{@url{http://docs.oasis-open.org/office/v1.2/OpenDocument-v1.2.html, @@ -10848,7 +11093,7 @@ inherits, an @code{EXPORT_FILE_NAME} property, that name will be used for the export. @orgcmd{C-c C-e O,org-export-as-odt-and-open} -Export as OpenDocument Text file and open the resulting file. +Export as an OpenDocument Text file and open the resulting file. @vindex org-export-odt-preferred-output-format If @code{org-export-odt-preferred-output-format} is specified, open the @@ -11180,11 +11425,11 @@ the @LaTeX{}-to-MathML converter. @table @kbd @item M-x org-export-as-odf -Convert a @LaTeX{} math snippet to OpenDocument formula (@file{.odf}) file. +Convert a @LaTeX{} math snippet to an OpenDocument formula (@file{.odf}) file. @item M-x org-export-as-odf-and-open -Convert a @LaTeX{} math snippet to OpenDocument formula (@file{.odf}) file and -open the formula file with the system-registered application. +Convert a @LaTeX{} math snippet to an OpenDocument formula (@file{.odf}) file +and open the formula file with the system-registered application. @end table @cindex dvipng @@ -11720,10 +11965,10 @@ all the nodes. @table @kbd @orgcmd{C-c C-e j,org-export-as-taskjuggler} -Export as TaskJuggler file. +Export as a TaskJuggler file. @orgcmd{C-c C-e J,org-export-as-taskjuggler-and-open} -Export as TaskJuggler file and then open the file with TaskJugglerUI. +Export as a TaskJuggler file and then open the file with TaskJugglerUI. @end table @subsection Tasks @@ -11833,7 +12078,7 @@ The Freemind exporter was written by Lennart Borgman. @table @kbd @orgcmd{C-c C-e m,org-export-as-freemind} -Export as Freemind mind map. For an Org file @file{myfile.org}, the Freemind +Export as a Freemind mind map. For an Org file @file{myfile.org}, the Freemind file will be @file{myfile.mm}. @end table @@ -11847,7 +12092,7 @@ does not interpret any additional Org mode features. @table @kbd @orgcmd{C-c C-e x,org-export-as-xoxo} -Export as XOXO file. For an Org file @file{myfile.org}, the XOXO file will be +Export as an XOXO file. For an Org file @file{myfile.org}, the XOXO file will be @file{myfile.html}. @orgkey{C-c C-e v x} Export only the visible part of the document. @@ -12318,7 +12563,7 @@ publish it as @file{theindex.html}. @end multitable The file will be created when first publishing a project with the -@code{:makeindex} set. The file only contains a statement @code{#+include: +@code{:makeindex} set. The file only contains a statement @code{#+INCLUDE: "theindex.inc"}. You can then build around this include statement by adding a title, style information, etc. @@ -12352,7 +12597,7 @@ Publishing to a local directory is also much faster than to a remote one, so that you can afford more easily to republish entire projects. If you set @code{org-publish-use-timestamps-flag} to @code{nil}, you gain the main benefit of re-including any changed external files such as source example -files you might include with @code{#+INCLUDE}. The timestamp mechanism in +files you might include with @code{#+INCLUDE:}. The timestamp mechanism in Org is not smart enough to detect if included files have been modified. @node Sample configuration, Triggering publication, Uploading files, Publishing @@ -12709,7 +12954,7 @@ and/or the name of the evaluated code block. The default value of @code{org-babel-results-keyword}. By default, the evaluation facility is only enabled for Lisp code blocks -specified as @code{emacs-lisp}. However, source code blocks in many languages +specified as @code{emacs-lisp}. However, source code blocks in many languages can be evaluated within Org mode (see @ref{Languages} for a list of supported languages and @ref{Structure of code blocks} for information on the syntax used to define a code block). @@ -12723,8 +12968,8 @@ evaluation from the @kbd{C-c C-c} key binding.}. This will call the its results into the Org mode buffer. @cindex #+CALL -It is also possible to evaluate named code blocks from anywhere in an -Org mode buffer or an Org mode table. Live code blocks located in the current +It is also possible to evaluate named code blocks from anywhere in an Org +mode buffer or an Org mode table. Live code blocks located in the current Org mode buffer or in the ``Library of Babel'' (see @ref{Library of Babel}) can be executed. Named code blocks can be executed with a separate @code{#+CALL:} line or inline within a block of text. @@ -12826,7 +13071,7 @@ Code blocks in the following languages are supported. Language-specific documentation is available for some languages. If available, it can be found at -@uref{http://orgmode.org/worg/org-contrib/babel/languages}. +@uref{http://orgmode.org/worg/org-contrib/babel/languages.html}. The @code{org-babel-load-languages} controls which languages are enabled for evaluation (by default only @code{emacs-lisp} is enabled). This variable can @@ -13018,7 +13263,7 @@ Multi-line header arguments on an un-named code block: (message "data1:%S, data2:%S" data1 data2) #+END_SRC - #+results: + #+RESULTS: : data1:1, data2:2 @end example @@ -13030,7 +13275,7 @@ Multi-line header arguments on a named code block: (message "data:%S" data) #+END_SRC - #+results: named-block + #+RESULTS: named-block : data:2 @end example @@ -13065,6 +13310,7 @@ argument in lowercase letters. The following header arguments are defined: * results:: Specify the type of results and how they will be collected and handled * file:: Specify a path for file output +* file-desc:: Specify a description for file results * dir:: Specify the default (possibly remote) directory for code block execution * exports:: Export code and/or results @@ -13088,6 +13334,7 @@ argument in lowercase letters. The following header arguments are defined: * rownames:: Handle row names in tables * shebang:: Make tangled files executable * eval:: Limit evaluation of specific code blocks +* wrap:: Mark source block evaluation results @end menu Additional header arguments are defined on a language-specific basis, see @@ -13102,7 +13349,7 @@ syntax used to specify arguments is the same across all languages. In every case, variables require a default value when they are declared. The values passed to arguments can either be literal values, references, or -Emacs Lisp code (see @ref{var, Emacs Lisp evaluation of variables}). References +Emacs Lisp code (see @ref{var, Emacs Lisp evaluation of variables}). References include anything in the Org mode file that takes a @code{#+NAME:}, @code{#+TBLNAME:}, or @code{#+RESULTS:} line. This includes tables, lists, @code{#+BEGIN_EXAMPLE} blocks, other code blocks, and the results of other @@ -13141,7 +13388,7 @@ an Org mode table named with either a @code{#+NAME:} or @code{#+TBLNAME:} line (length table) #+END_SRC -#+results: table-length +#+RESULTS: table-length : 4 @end example @@ -13160,7 +13407,7 @@ carried through to the source code block) (print x) #+END_SRC -#+results: +#+RESULTS: | simple | list | @end example @@ -13173,7 +13420,7 @@ optionally followed by parentheses (* 2 length) #+END_SRC -#+results: +#+RESULTS: : 8 @end example @@ -13188,7 +13435,7 @@ code block name using standard function call syntax (* 2 input) #+END_SRC -#+results: double +#+RESULTS: double : 16 #+NAME: squared @@ -13196,7 +13443,7 @@ code block name using standard function call syntax (* input input) #+END_SRC -#+results: squared +#+RESULTS: squared : 4 @end example @@ -13215,7 +13462,7 @@ on two lines (concatenate 'string x " for you.") #+END_SRC -#+results: read-literal-example +#+RESULTS: read-literal-example : A literal example : on two lines for you. @@ -13257,7 +13504,7 @@ following example assigns the last cell of the first row the table data #+END_SRC -#+results: +#+RESULTS: : a @end example @@ -13278,7 +13525,7 @@ to @code{data}. data #+END_SRC -#+results: +#+RESULTS: | 2 | b | | 3 | c | | 4 | d | @@ -13300,7 +13547,7 @@ column is referenced. data #+END_SRC -#+results: +#+RESULTS: | 1 | 2 | 3 | 4 | @end example @@ -13320,7 +13567,7 @@ another by commas, as shown in the following example. data #+END_SRC -#+results: +#+RESULTS: | 11 | 14 | 17 | @end example @@ -13353,7 +13600,7 @@ Emacs Lisp, as shown in the following example. $data #+END_SRC -#+results: +#+RESULTS: : (a b c) @end example @@ -13414,15 +13661,19 @@ buffer as quoted text. E.g., @code{:results value verbatim}. @item @code{file} The results will be interpreted as the path to a file, and will be inserted into the Org mode buffer as a file link. E.g., @code{:results value file}. -@item @code{raw}, @code{org} +@item @code{raw} The results are interpreted as raw Org mode code and are inserted directly into the buffer. If the results look like a table they will be aligned as such by Org mode. E.g., @code{:results value raw}. +@item @code{org} +The results are will be enclosed in a @code{BEGIN_SRC org} block. +They are not comma-escaped by default but they will be if you hit @kbd{TAB} +in the block and/or if you export the file. E.g., @code{:results value org}. @item @code{html} -Results are assumed to be HTML and will be enclosed in a @code{begin_html} +Results are assumed to be HTML and will be enclosed in a @code{BEGIN_HTML} block. E.g., @code{:results value html}. @item @code{latex} -Results assumed to be @LaTeX{} and are enclosed in a @code{begin_latex} block. +Results assumed to be @LaTeX{} and are enclosed in a @code{BEGIN_LaTeX} block. E.g., @code{:results value latex}. @item @code{code} Result are assumed to be parsable code and are enclosed in a code block. @@ -13431,7 +13682,7 @@ E.g., @code{:results value code}. The result is converted to pretty-printed code and is enclosed in a code block. This option currently supports Emacs Lisp, Python, and Ruby. E.g., @code{:results value pp}. -@item @code{wrap} +@item @code{drawer} The result is wrapped in a RESULTS drawer. This can be useful for inserting @code{raw} or @code{org} syntax results in such a way that their extent is known and they can be automatically removed or replaced. @@ -13459,7 +13710,7 @@ be prepended to the existing results. Otherwise the new results will be inserted as with @code{replace}. @end itemize -@node file, dir, results, Specific header arguments +@node file, file-desc, results, Specific header arguments @subsubsection @code{:file} The header argument @code{:file} is used to specify an external file in which @@ -13475,7 +13726,16 @@ The argument to @code{:file} should be either a string specifying the path to a file, or a list of two strings in which case the first element of the list should be the path to a file and the second a description for the link. -@node dir, exports, file, Specific header arguments +@node file-desc, dir, file, Specific header arguments +@subsubsection @code{:file-desc} + +The value of the @code{:file-desc} header argument is used to provide a +description for file code block results which are inserted as Org mode links +(see @ref{Link format}). If the @code{:file-desc} header argument is given +with no value the link path will be placed in both the ``link'' and the +``description'' portion of the Org mode link. + +@node dir, exports, file-desc, Specific header arguments @subsubsection @code{:dir} and remote execution While the @code{:file} header argument can be used to specify the path to the @@ -13655,21 +13915,34 @@ interpreted language. @node noweb, noweb-ref, session, Specific header arguments @subsubsection @code{:noweb} -The @code{:noweb} header argument controls expansion of ``noweb'' style (see -@ref{Noweb reference syntax}) references in a code block. This header -argument can have one of three values: @code{yes}, @code{no}, or @code{tangle}. +The @code{:noweb} header argument controls expansion of ``noweb'' syntax +references (see @ref{Noweb reference syntax}) when the code block is +evaluated, tangled, or exported. The @code{:noweb} header argument can have +one of the five values: @code{no}, @code{yes}, @code{tangle}, or +@code{no-export} @code{strip-export}. @itemize @bullet -@item @code{yes} -All ``noweb'' syntax references in the body of the code block will be -expanded before the block is evaluated, tangled or exported. @item @code{no} -The default. No ``noweb'' syntax specific action is taken when the code -block is evaluated, tangled or exported. +The default. ``Noweb'' syntax references in the body of the code block will +not be expanded before the code block is evaluated, tangled or exported. +@item @code{yes} +``Noweb'' syntax references in the body of the code block will be +expanded before the code block is evaluated, tangled or exported. @item @code{tangle} -All ``noweb'' syntax references in the body of the code block will be -expanded before the block is tangled, however ``noweb'' references will not -be expanded when the block is evaluated or exported. +``Noweb'' syntax references in the body of the code block will be expanded +before the code block is tangled. However, ``noweb'' syntax references will +not be expanded when the code block is evaluated or exported. +@item @code{no-export} +``Noweb'' syntax references in the body of the code block will be expanded +before the block is evaluated or tangled. However, ``noweb'' syntax +references will not be expanded when the code block is exported. +@item @code{strip-export} +``Noweb'' syntax references in the body of the code block will be expanded +before the block is evaluated or tangled. However, ``noweb'' syntax +references will not be removed when the code block is exported. +@item @code{eval} +``Noweb'' syntax references in the body of the code block will only be +expanded before the block is evaluated. @end itemize @subsubheading Noweb prefix lines @@ -13760,7 +14033,7 @@ the results of evaluating code blocks. It can be used to avoid re-evaluating unchanged code blocks. Note that the @code{:cache} header argument will not attempt to cache results when the @code{:session} header argument is used, because the results of the code block execution may be stored in the session -outside of the Org-mode buffer. The @code{:cache} header argument can have +outside of the Org mode buffer. The @code{:cache} header argument can have one of two values: @code{yes} or @code{no}. @itemize @bullet @@ -13770,7 +14043,7 @@ every time it is called. @item @code{yes} Every time the code block is run a SHA1 hash of the code and arguments passed to the block will be generated. This hash is packed into the -@code{#+results:} line and will be checked on subsequent +@code{#+RESULTS:} line and will be checked on subsequent executions of the code block. If the code block has not changed since the last time it was evaluated, it will not be re-evaluated. @end itemize @@ -13787,7 +14060,7 @@ changed since it was last run. runif(1) #+END_SRC - #+results[a2a72cd647ad44515fab62e144796432793d68e1]: random + #+RESULTS[a2a72cd647ad44515fab62e144796432793d68e1]: random 0.4659510825295 #+NAME: caller @@ -13795,7 +14068,7 @@ changed since it was last run. x #+END_SRC - #+results[bec9c8724e397d5df3b696502df3ed7892fc4f5f]: caller + #+RESULTS[bec9c8724e397d5df3b696502df3ed7892fc4f5f]: caller 0.254227238707244 @end example @@ -13839,7 +14112,7 @@ default value yields the following results. return tab #+END_SRC -#+results: echo-table +#+RESULTS: echo-table | a | b | c | | d | e | f | | g | h | i | @@ -13861,7 +14134,7 @@ Leaves hlines in the table. Setting @code{:hlines yes} has this effect. return tab #+END_SRC -#+results: echo-table +#+RESULTS: echo-table | a | b | c | |---+---+---| | d | e | f | @@ -13899,7 +14172,7 @@ processing, then reapplied to the results. return [[val + '*' for val in row] for row in tab] #+END_SRC -#+results: echo-table-again +#+RESULTS: echo-table-again | a | |----| | b* | @@ -13942,7 +14215,7 @@ and is then reapplied to the results. return [[val + 10 for val in row] for row in tab] #+END_SRC -#+results: echo-table-once-again +#+RESULTS: echo-table-once-again | one | 11 | 12 | 13 | 14 | 15 | | two | 16 | 17 | 18 | 19 | 20 | @end example @@ -13960,7 +14233,7 @@ Setting the @code{:shebang} header argument to a string value first line of any tangled file holding the code block, and the file permissions of the tangled file are set to make it executable. -@node eval, , shebang, Specific header arguments +@node eval, wrap, shebang, Specific header arguments @subsubsection @code{:eval} The @code{:eval} header argument can be used to limit the evaluation of specific code blocks. The @code{:eval} header argument can be useful for @@ -13985,6 +14258,14 @@ If this header argument is not set then evaluation is determined by the value of the @code{org-confirm-babel-evaluate} variable see @ref{Code evaluation security}. +@node wrap, , eval, Specific header arguments +@subsubsection @code{:wrap} +The @code{:wrap} header argument is used to mark the results of source block +evaluation. The header argument can be passed a string that will be appended +to @code{#+BEGIN_} and @code{#+END_}, which will then be used to wrap the +results. If not string is specified then the results will be wrapped in a +@code{#+BEGIN/END_RESULTS} block. + @node Results of evaluation, Noweb reference syntax, Header arguments, Working With Source Code @section Results of evaluation @cindex code block, results of evaluation @@ -14054,7 +14335,7 @@ process. For example, compare the following two blocks: print "bye" #+END_SRC -#+results: +#+RESULTS: : hello : bye @end example @@ -14067,7 +14348,7 @@ In non-session mode, the `2' is not printed and does not appear. print "bye" #+END_SRC -#+results: +#+RESULTS: : hello : 2 : bye @@ -14112,7 +14393,7 @@ correct code is not broken in a language, such as Ruby, where syntactically valid in languages that you use, then please consider setting the default value. -Note: if noweb tangling is slow in large Org-mode files consider setting the +Note: if noweb tangling is slow in large Org mode files consider setting the @code{*org-babel-use-quick-and-dirty-noweb-expansion*} variable to true. This will result in faster noweb reference resolution at the expense of not correctly resolving inherited values of the @code{:noweb-ref} header @@ -14252,7 +14533,7 @@ done emacs -Q --batch -l $ORGINSTALL \ --eval "(progn (add-to-list 'load-path (expand-file-name \"~/src/org/lisp/\")) -(add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\")) +(add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\" t)) (require 'org)(require 'org-exp)(require 'ob)(require 'ob-tangle) (mapc (lambda (file) (find-file (expand-file-name file \"$DIR\")) @@ -14358,19 +14639,19 @@ keystrokes are typed on a line by itself. The following template selectors are currently supported. @multitable @columnfractions 0.1 0.9 -@item @kbd{s} @tab @code{#+begin_src ... #+end_src} -@item @kbd{e} @tab @code{#+begin_example ... #+end_example} -@item @kbd{q} @tab @code{#+begin_quote ... #+end_quote} -@item @kbd{v} @tab @code{#+begin_verse ... #+end_verse} -@item @kbd{c} @tab @code{#+begin_center ... #+end_center} -@item @kbd{l} @tab @code{#+begin_latex ... #+end_latex} -@item @kbd{L} @tab @code{#+latex:} -@item @kbd{h} @tab @code{#+begin_html ... #+end_html} -@item @kbd{H} @tab @code{#+html:} -@item @kbd{a} @tab @code{#+begin_ascii ... #+end_ascii} -@item @kbd{A} @tab @code{#+ascii:} -@item @kbd{i} @tab @code{#+index:} line -@item @kbd{I} @tab @code{#+include:} line +@item @kbd{s} @tab @code{#+BEGIN_SRC ... #+END_SRC} +@item @kbd{e} @tab @code{#+BEGIN_EXAMPLE ... #+END_EXAMPLE} +@item @kbd{q} @tab @code{#+BEGIN_QUOTE ... #+END_QUOTE} +@item @kbd{v} @tab @code{#+BEGIN_VERSE ... #+END_VERSE} +@item @kbd{c} @tab @code{#+BEGIN_CENTER ... #+END_CENTER} +@item @kbd{l} @tab @code{#+BEGIN_LaTeX ... #+END_LaTeX} +@item @kbd{L} @tab @code{#+LaTeX:} +@item @kbd{h} @tab @code{#+BEGIN_HTML ... #+END_HTML} +@item @kbd{H} @tab @code{#+HTML:} +@item @kbd{a} @tab @code{#+BEGIN_ASCII ... #+END_ASCII} +@item @kbd{A} @tab @code{#+ASCII:} +@item @kbd{i} @tab @code{#+INDEX:} line +@item @kbd{I} @tab @code{#+INCLUDE:} line @end multitable For example, on an empty line, typing "= will promote level-1 subtrees + containing other subtrees. The level-1 headline will be + commented out. You can revert to the previous state with =M-x + undo RET=. + +*** Org Clock + +**** New keybinding =C-c C-x C-z= for [[doc::org-clock-resolve][org-clock-resolve]] + +**** New keybinding =C-c C-x C-q= for [[doc::org-clock-cancel][org-clock-cancel]] + +**** New command [[doc::org-clock-in-last][org-clock-in-last]] to clock in the last clocked item + + This command is bound to =C-c C-x C-x= and will clock in the last + clocked entry, if any. + +**** =C-u M-x= [[doc::org-clock-out][org-clock-out]] =RET= now prompts for a state to switch to + +**** =S-M-= on a clock timestamps adjusts the previous/next clock + +**** New option [[doc::org-clock-continuously][org-clock-continuously]] + + When set to =nil=, clocking in a task will first try to find the + last clocked out task and restart from when that task was clocked + out. + + You can temporarily activate continuous clocking with =C-u C-u + C-u M-x= [[doc::org-clock-in][org-clock-in]] =RET= (three universal prefix arguments) + and =C-u C-u M-x= [[org-clock-in-last][org-clock-in-last]] =RET= (two universal prefix + arguments). + + +**** New option [[doc::org-clock-frame-title-format][org-clock-frame-title-format]] + + This option sets the value of =frame-title-format= when clocking + in. + +**** New options for controlling the clockreport display + + [[doc::org-clock-file-time-cell-format][org-clock-file-time-cell-format]]: Format string for the file time + cells in clockreport. + + [[doc::org-clock-total-time-cell-format][org-clock-total-time-cell-format]]: Format string for the total + time cells in clockreport. + + +**** New options for controlling the clock/timer display + + [[doc::org-clock-clocked-in-display][org-clock-clocked-in-display]]: control whether the current clock + is displayed in the mode line and/or frame title. + + [[doc::org-timer-display][org-timer-display]]: control whether the current timer is displayed + in the mode line and/or frame title. + + This allows the clock and timer to be displayed in the frame + title instead of, or as well as, the mode line. This is useful + for people with limited space in the mode line but with ample + space in the frame title. + +*** Org Appearance + +**** New option [[doc::org-custom-properties][org-custom-properties]] + + The visibility of properties listed in this options can be turn + on/off with [[doc::org-toggle-custom-properties-visibility][org-toggle-custom-properties-visibility]]. This might + be useful for properties used by third-part tools or that you + don't want to see temporarily. + +**** New command [[doc::org-redisplay-inline-images][org-redisplay-inline-images]] + + This will redisplay all images. It is bound to =C-c C-x C-M-v=. + +**** New entities in =org-entities.el= + + There are these new entities: + + : ("tilde" "\\~{}" nil "˜" "~" "~" "~") + : ("slash" "/" nil "/" "/" "/" "/") + : ("plus" "+" nil "+" "+" "+" "+") + : ("under" "\\_" nil "_" "_" "_" "_") + : ("equal" "=" nil "=" "=" "=" "=") + : ("asciicirc" "\\textasciicircum{}" nil "^" "^" "^" "^") + +**** New face =org-list-dt= for definition terms +**** New face =org-date-selected= for the selected calendar day +**** New face value for =org-document-title= + + The face is back to a normal height. + +*** Org Columns + +**** New speed command =:= to activate the column view +**** New special property =CLOCKSUM_T= to display today's clocked time + + You can use =CLOCKSUM_T= the same way you use =CLOCKSUM=. It + will display the time spent on tasks for today only. + +**** Use the =:COLUMNS:= property in columnview dynamic blocks + + If the =:COLUMNS:= is set in a subtree, the columnview dynamic + block will use its value as the column format. + +**** Consider inline tasks when computing a sum + +*** Org Dates and Time Stamps + +**** Enhanced [[doc::org-sparse-tree][org-sparse-tree]] + + =C-c /= can now check for time ranges. + + When checking for dates with =C-c /= it is useful to change the + type of dates that you are interested in. You can now do this + interactively with =c= after =C-c /= and/or by setting + [[doc::org-sparse-tree-default-date-type][org-sparse-tree-default-date-type]] to the default value you want. + +**** Support for hourly repeat cookies + + You can now use + + : SCHEDULED: <2012-08-20 lun. 08:00 +1h> + + if you want to add an hourly repeater to an entry. + +**** =C-u C-u C-c .= inserts a time-stamp with no prompt + +**** When (setq [[doc::org-read-date-prefer-future][org-read-date-prefer-future]] 'time), accept days in the prompt + + "8am Wed" and "Wed 8am" are now acceptable values when entering a + date from the prompt. If [[doc::org-read-date-prefer-future][org-read-date-prefer-future]] is set to + =time=, this will produce the expected prompt indication. + +**** New option [[doc::org-datetree-add-timestamp][org-datetree-add-timestamp]] + + When set to =non-nil=, datetree entries will also have a + timestamp. This is useful if you want to see these entries in a + sparse tree with =C-c /=. + +*** Org Capture + +**** New command [[doc::org-capture-string][org-capture-string]] + + M-x [[doc::org-capture-string][org-capture-string]] RET will prompt for a string and a capture + template. The string will be used as an annotation for the + template. This is useful when capturing in batch mode as it lets + you define the content of the template without being in Emacs. + +**** New option [[doc::org-capture-templates-contexts][org-capture-templates-contexts]] + + Setting this option allows you to define specific context where + capture templates should be available from. For example, when + set to this value + + #+BEGIN_SRC emacs-lisp + (setq org-capture-templates-contexts + '(("c" (in-mode . "message-mode")))) +#+END_SRC + + then the =c= capture template will only be available from + =message-mode= buffers. See the docstring and the manual for + more details on how to use this. + +**** New =%l= template to insert the literal link +**** New option [[doc::org-capture-bookmark][org-capture-bookmark]] + + Org used to automatically add a bookmark with capture a note. + You can now turn this on by setting [[doc::org-capture-bookmark][org-capture-bookmark]] to + =nil=. + +**** Expand =%= escape sequences into text entered for 'th =%^{PROMPT}= escape + + See the manual for more explanations. + +**** More control over empty lines + + You can use =:empty-lines-before= and =:empty-lines-after= to + control the insertion of empty lines. Check the manual for more + explanations. + +**** New hook [[doc::org-capture-prepare-finalize-hook][org-capture-prepare-finalize-hook]] + + This new hook runs before the finalization process starts. + +*** Org Export + +**** New functions =orgtbl-to-table.el= and =orgtbl-to-unicode= + + =orgtbl-to-table.el= convert the table to a =table.el= table, and + =orgtbl-to-unicode= will use =ascii-art-to-unicode.el= (when + available) to print beautiful tables. + +**** [[doc::org-table-export][org-table-export]] now a bit clever about the target format + + When you specify a file name like =table.csv=, [[doc::org-table-export][org-table-export]] + will now suggest =orgtbl-to-csv= the default method for exporting + the table. + +**** New option [[doc::org-export-date-timestamp-format][org-export-date-timestamp-format]] + + The option allows to set a time string format for Org timestamps + in the #+DATE option. + +**** LaTeX: New options for exporting table rules :tstart, :hline and :tend + + See [[doc::org-export-latex-tables-hline][org-export-latex-tables-hline]] and [[doc::org-export-latex-tables-tend][org-export-latex-tables-tend]]. + +**** LaTeX: You can now set =:hfmt= from =#+ATTR_LaTeX= +**** Beamer: Add support and keybinding for the =exampleblock= environment + + Add support for these languages in [[doc::org-export-language-setup][org-export-language-setup]]. + More languages are always welcome. + +**** Beamer: New option [[doc::org-beamer-inherited-properties][org-beamer-inherited-properties]] + + This option allows Beamer export to inherit some properties. + Thanks to Carsten for implementing this. + +**** ODT: Add support for ODT export in org-bbdb.el +**** ODT: Add support for indented tables (see [[http://orgmode.org/w/?p%3Dorg-mode.git%3Ba%3Dcommit%3Bh%3De9fd33][this commit]] for details) +**** ODT: Improve the conversion from ODT to other formats +**** ASCII: Swap the level-1/level-2 characters to underline the headlines +**** Support for Chinese, simplified Chinese, Russian, Ukrainian and Japanese +**** HTML: New option [[doc::org-export-html-date-format-string][org-export-html-date-format-string]] + + Format string to format the date and time in HTML export. Thanks + to Sébastien Vauban for this patch. + +*** Org Babel + +**** New =:results drawer= parameter + +=:results drawer= replaces =:results wrap=, which is deprecated but still +supported. + +**** =:results org= now put results in a =#+BEGIN_SRC org= block + +=:results org= used to put results in a =#+BEGIN_ORG= block but it now puts +results in a =#+BEGIN_SRC org= block, wich comma-escaped lines. + +=#+BEGIN_ORG= blocks are obsolete. + +**** Exporting =#+BEGIN_SRC org= blocks exports the code + +It used to exports the results of the code. + +*** Miscellaneous + +**** New menu entry for [[doc::org-refile][org-refile]] +**** Allow capturing to encrypted entries + +If you capture to an encrypted entry, it will be decrpyted before +inserting the template then re-encrypted after finalizing the capture. + +**** Inactive timestamps are now handled in tables + +Calc can do computation on active time-stamps like <2012-09-29 sat.>. +Inactive time-stamps in a table's cell are now internally deactivated so +that Calc formulas can operate on them. + +**** [[doc::org-table-number-regexp][org-table-number-regexp]] can now accept comma as decimal mark +**** Org allows a new property =APPT_WARNTIME= + + You can set it with the =W= speedy key or set it manually. When + set, exporting to iCalendar and [[doc::org-agenda-to-appt][org-agenda-to-appt]] will use the + value of this property as the number of minutes for the warning + alarm. + +**** New command [[doc::org-inc-effort][org-inc-effort]] + + This will increment the effort value. + + It is bound to =C-c C-x E= and to =E= as a speedy command. + +**** Attach: Add support for creating symbolic links + + =org-attach-method= now supports a new method =lns=, allowing to + attach symbolic links. + +**** Archive: you can now archive to a datetree + +**** New option [[doc::org-inlinetask-show-first-star][org-inlinetask-show-first-star]] + + =Non-nil= means display the first star of an inline task as + additional marker. When =nil=, the first star is not shown. + +**** New option [[doc::org-latex-preview-ltxpng-directory][org-latex-preview-ltxpng-directory]] + + This lets you define the path for the =ltxpng/= directory. + +**** You can now use imagemagick instead of dvipng to preview LaTeX fragments +**** You can now turn off [[doc::orgstruct++-mode][orgstruct++-mode]] safely +**** =C-u C-c C-c= on list items to add check boxes + + =C-u C-c C-c= will add an empty check box on a list item. + + When hit from the top of the list, it will add check boxes for + all top level list items. + +**** =org-list-ending-method= and =org-list-end-regexp= are now obsolete + + Fall back on using =org-list-end-re= only, which see. + +**** org-feed.el now expands =%(sexp)= templates +**** New option [[doc::org-protocol-data-separator][org-protocol-data-separator]] + +**** New option [[doc::org-ditaa-jar-option][org-ditaa-jar-option]] to specify the ditaa jar file + +**** New possible value for [[doc::org-loop-over-headlines-in-active-region][org-loop-over-headlines-in-active-region]] + + When [[doc::org-loop-over-headlines-in-active-region][org-loop-over-headlines-in-active-region]] is set to + =start-level=, the command will loop over the active region but + will only act upon entries that are of the same level than the + first headline in the region. + +**** New option [[doc::org-habit-show-all-today][org-habit-show-all-today]] + + When set to =t=, show all (even unscheduled) habits on today's + agenda. + +** Important bug fixes + +*** M-TAB on options keywords perform completion correctly again + + If you hit =M-TAB= on keywords like =#+TITLE=, Org will try to + perform completion with meaningful values. + +*** Add licenses to javascript embedded and external code snippets + + Embedded javascript code produced when exporting an Org file to + HTML is now licensed under GPLv3 (or later), and the copyright is + owned by the Free Software Foundation, Inc. + + The javascript code for embedding MathJax in the browser mentions + the MathJax copyright and the Apache 2.0 license. + + The javascript code for embedding =org-injo.js= in the browser + mentions the copyright of Sebastian Rose and the GPLv3 (or later) + license. + + =org-export-html-scripts= is now a variable, so that you can adapt + the code and the license to your needs. + + See http://www.gnu.org/philosophy/javascript-trap.html for + explanations on why these changes were necessary. + +* Version 7.8.11 + +** Incompatible changes + +*** Emacs 21 support has been dropped + + Do not use Org mode 7.xx with Emacs 21, use [[http://orgmode.org/org-6.36c.zip][version 6.36c]] instead. + +*** XEmacs support requires the XEmacs development version + + To use Org mode 7.xx with XEmacs, you need to run the developer + version of XEmacs. We were about to drop XEmacs support entirely, + but Michael Sperber stepped in and made changes to XEmacs that + made it easier to keep the support. Thanks to Michael for this + last-minute save. + +*** New keys for TODO sparse trees + + The key =C-c C-v= is now reserved for Org Babel action. TODO + sparse trees can still be made with =C-c / t= (all not-done + states) and =C-c / T= (specific states). + +*** The Agenda =org-agenda-ndays= is now obsolete + + The variable =org-agenda-ndays= is obsolete - please use + =org-agenda-span= instead. + + Thanks to Julien Danjou for this. + +*** Changes to the intended use of =org-export-latex-classes= + + So far this variable has been used to specify the complete header + of the LaTeX document, including all the =\usepackage= calls + necessary for the document. This setup makes it difficult to + maintain the list of packages that Org itself would like to call, + for example for the special symbol support it needs. + + First of all, you can *opt out of this change* in the following + way: You can say: /I want to have full control over headers, and I + will take responsibility to include the packages Org needs/. If + that is what you want, add this to your configuration and skip the + rest of this section (except maybe for the description of the + =[EXTRA]= place holder): + + #+begin_src emacs-lisp + (setq org-export-latex-default-packages-alist nil + org-export-latex-packages-alist nil) + #+end_src + + /Continue to read here if you want to go along with the modified + setup./ + + There are now two variables that should be used to list the LaTeX + packages that need to be included in all classes. The header + definition in =org-export-latex-classes= should then not contain + the corresponding =\usepackage= calls (see below). + + The two new variables are: + + 1. =org-export-latex-default-packages-alist= :: This is the + variable where Org-mode itself puts the packages it needs. + Normally you should not change this variable. The only + reason to change it anyway is when one of these packages + causes a conflict with another package you want to use. Then + you can remove that packages and hope that you are not using + Org-mode functionality that needs it. + + 2. =org-export-latex-packages-alist= :: This is the variable where + you can put the packages that you'd like to use across all + classes. + + The sequence how these customizations will show up in the LaTeX + document are: + + 1. Header from =org-export-latex-classes= + 2. =org-export-latex-default-packages-alist= + 3. =org-export-latex-packages-alist= + 4. Buffer-specific things set with =#+LaTeX_HEADER:= + + If you want more control about which segment is placed where, or + if you want, for a specific class, have full control over the + header and exclude some of the automatic building blocks, you can + put the following macro-like place holders into the header: + + #+begin_example + [DEFAULT-PACKAGES] \usepackage statements for default packages + [NO-DEFAULT-PACKAGES] do not include any of the default packages + [PACKAGES] \usepackage statements for packages + [NO-PACKAGES] do not include the packages + [EXTRA] the stuff from #+LaTeX_HEADER + [NO-EXTRA] do not include #+LaTeX_HEADER stuff + #+end_example + + If you have currently customized =org-export-latex-classes=, you + should revise that customization and remove any package calls that + are covered by =org-export-latex-default-packages-alist=. This + applies to the following packages: + + - inputenc + - fontenc + - fixltx2e + - graphicx + - longtable + - float + - wrapfig + - soul + - t1enc + - textcomp + - marvosym + - wasysym + - latexsym + - amssymb + - hyperref + + If one of these packages creates a conflict with another package + you are using, you can remove it from + =org-export-latex-default-packages-alist=. But then you risk that + some of the advertised export features of Org will not work + properly. + + You can also consider moving packages that you use in all classes + to =org-export-latex-packages-alist=. If necessary, put the place + holders so that the packages get loaded in the right sequence. As + said above, for backward compatibility, if you omit the place + holders, all the variables will dump their content at the end of + the header. + +*** The constant =org-html-entities= is obsolete + + Its content is now part of the new constant =org-entities=, which + is defined in the file org-entities.el. =org-html-entities= was + an internal variable, but it is possible that some users did write + code using it. + +*** =org-bbdb-anniversary-format-alist= has changed + + Please check the docstring and update your settings accordingly. + +*** Deleted =org-mode-p= + + This function has been deleted: please update your code. + +** Important new features + +*** New Org to ODT exporter + + Jambunathan's Org to ODT exporter is now part of Org. + + To use it, it `C-c C-e o' in an Org file. See the documentation + for more information on how to customize it. + +*** org-capture.el is now the default capture system + + This replaces the earlier system org-remember. The manual only + describes org-capture, but for people who prefer to continue to + use org-remember, we keep a static copy of the former manual + section [[http://orgmode.org/org-remember.pdf][chapter about remember]]. + + The new system has a technically cleaner implementation and more + possibilities for capturing different types of data. See + [[http://thread.gmane.org/gmane.emacs.orgmode/26441/focus%3D26441][Carsten's announcement]] for more details. + + To switch over to the new system: + + 1. Run + + : M-x org-capture-import-remember-templates RET + + to get a translated version of your remember templates into the + new variable =org-capture-templates=. This will "mostly" work, + but maybe not for all cases. At least it will give you a good + place to modify your templates. After running this command, + enter the customize buffer for this variable with + + : M-x customize-variable RET org-capture-templates RET + + and convince yourself that everything is OK. Then save the + customization. + + 2. Bind the command =org-capture= to a key, similar to what you did + with org-remember: + + : (define-key global-map "\C-cc" 'org-capture) + + If your fingers prefer =C-c r=, you can also use this key once + you have decided to move over completely to the new + implementation. During a test time, there is nothing wrong + with using both system in parallel. + +** New libraries + +*** New Org libraries +**** org-eshell.el (Konrad Hinsen) + + Implement links to eshell buffers. + +**** org-special-blocks (Carsten Dominik) + + This package generalizes the #+begin_foo and #+end_foo tokens. + + To use, put the following in your init file: + + #+BEGIN_EXAMPLE (require 'org-special-blocks) #+END_EXAMPLE -The tokens #+begin_center, #+begin_verse, etc. existed previously. This -package generalizes them (at least for the LaTeX and html exporters). When -a #+begin_foo token is encountered by the LaTeX exporter, it is expanded -into \begin{foo}. The text inside the environment is not protected, as -text inside environments generally is. When #+begin_foo is encountered by -the html exporter, a div with class foo is inserted into the HTML file. It -is up to the user to add this class to his or her stylesheet if this div is -to mean anything. + The tokens #+begin_center, #+begin_verse, etc. existed + previously. This package generalizes them (at least for the + LaTeX and html exporters). When a #+begin_foo token is + encountered by the LaTeX exporter, it is expanded + into \begin{foo}. The text inside the environment is not + protected, as text inside environments generally is. + When #+begin_foo is encountered by the html exporter, a div with + class foo is inserted into the HTML file. It is up to the user + to add this class to his or her stylesheet if this div is to mean + anything. -*** org-taskjuggler.el (Christian Egli) - :PROPERTIES: - :OrgVersion: 7.01 - :END: +**** org-taskjuggler.el (Christian Egli) - Christian Egli's /org-taskjuggler.el/ module is now part of Org. He - also wrote a [[http://orgmode.org/worg/org-tutorials/org-taskjuggler.php][tutorial]] for it. + Christian Egli's /org-taskjuggler.el/ module is now part of Org. + He also wrote a [[http://orgmode.org/worg/org-tutorials/org-taskjuggler.php][tutorial]] for it. -*** org-ctags.el (Paul Sexton) - :PROPERTIES: - :OrgVersion: 6.34 - :END: +**** org-ctags.el (Paul Sexton) - Targets like =<>= can now be found by Emacs' etag - functionality, and Org-mode links can be used to to link to etags, also - in non-Org-mode files. For details, see the file /org-ctags.el/. + Targets like =<>= can now be found by Emacs' etag + functionality, and Org-mode links can be used to to link to + etags, also in non-Org-mode files. For details, see the file + /org-ctags.el/. - This feature uses a new hook =org-open-link-functions= which will call - function to do something special with text links. + This feature uses a new hook =org-open-link-functions= which will + call function to do something special with text links. - Thanks to Paul Sexton for this contribution. + Thanks to Paul Sexton for this contribution. -*** org-docview.el (Jan Böcker) - :PROPERTIES: - :OrgVersion: 6.34 - :END: +**** org-docview.el (Jan Böcker) - This new module allows links to various file types using docview, where - Emacs displays images of document pages. Docview link types can point - to a specific page in a document, for example to page 131 of the - Org-mode manual: + This new module allows links to various file types using docview, where + Emacs displays images of document pages. Docview link types can point + to a specific page in a document, for example to page 131 of the + Org-mode manual: - : [[docview:~/.elisp/org/doc/org.pdf::131][Org-Mode Manual]] + : [[docview:~/.elisp/org/doc/org.pdf::131][Org-Mode Manual]] - Thanks to Jan Böcker for this contribution. + Thanks to Jan Böcker for this contribution. -** New Babel libraries +*** New Babel libraries - ob-picolisp.el (Thorsten Jolitz) - ob-fortran.el (Sergey Litvinov) @@ -275,674 +902,531 @@ to mean anything. - ob-lilypond.el (Martyn Jago) - ob-awk.el (Eric Schulte) -* Other new features and various enhancements +** Other new features and various enhancements -** Hyperlinks +*** Hyperlinks -*** Org-Bibtex -- major improvements - :PROPERTIES: - :OrgVersion: 7.6 - :END: +**** Org-Bibtex -- major improvements - Provides support for managing bibtex bibliographical references - data in headline properties. Each headline corresponds to a - single reference and the relevant bibliographic meta-data is - stored in headline properties, leaving the body of the headline - free to hold notes and comments. Org-bibtex is aware of all - standard bibtex reference types and fields. + Provides support for managing bibtex bibliographical references + data in headline properties. Each headline corresponds to a + single reference and the relevant bibliographic meta-data is + stored in headline properties, leaving the body of the headline + free to hold notes and comments. Org-bibtex is aware of all + standard bibtex reference types and fields. - The key new functions are + The key new functions are -- org-bibtex-check :: queries the user to flesh out all required - (and with prefix argument optional) bibtex fields available - for the specific reference =type= of the current headline. + - org-bibtex-check :: queries the user to flesh out all required + (and with prefix argument optional) bibtex fields available + for the specific reference =type= of the current headline. -- org-bibtex-create :: Create a new entry at the given level, - using org-bibtex-check to flesh out the relevant fields. + - org-bibtex-create :: Create a new entry at the given level, + using org-bibtex-check to flesh out the relevant fields. -- org-bibtex-yank :: Yank a bibtex entry on the kill ring as a - formatted Org-mode headline into the current buffer + - org-bibtex-yank :: Yank a bibtex entry on the kill ring as a + formatted Org-mode headline into the current buffer -- org-bibtex-export-to-kill-ring :: Export the current headline - to the kill ring as a formatted bibtex entry. + - org-bibtex-export-to-kill-ring :: Export the current headline + to the kill ring as a formatted bibtex entry. +**** org-gnus.el now allows link creation from messages + You can now create links from messages. This is particularily + useful when the user wants to stored messages that he sends, for + later check. Thanks to Ulf Stegemann for the patch. -*** org-gnus.el now allows link creation from messages - :PROPERTIES: - :OrgVersion: 7.5 - :END: +**** Modified link escaping - You can now create links from messages. This is particularly - useful when the user wants to stored messages that he sends, for - later check. Thanks to Ulf Stegemann for the patch. + David Maus worked on `org-link-escape'. See [[http://article.gmane.org/gmane.emacs.orgmode/37888][his message]]: + : Percent escaping is used in Org mode to escape certain characters + : in links that would either break the parser (e.g. square brackets + : in link target oder description) or are not allowed to appear in + : a particular link type (e.g. non-ascii characters in a http: + : link). + : + : With this change in place Org will apply percent escaping and + : unescaping more consistently especially for non-ascii characters. + : Additionally some of the outstanding bugs or glitches concerning + : percent escaped links are solved. + Thanks a lot to David for this work. -*** Modified link escaping - :PROPERTIES: - :OrgVersion: 7.5 - :END: +**** Make =org-store-link= point to directory in a dired buffer - David Maus worked on `org-link-escape'. See [[http://article.gmane.org/gmane.emacs.orgmode/37888][his message]]: + When, in a dired buffer, the cursor is not in a line listing a + file, `org-store-link' will store a link to the directory. -: Percent escaping is used in Org mode to escape certain characters -: in links that would either break the parser (e.g. square brackets -: in link target or description) or are not allowed to appear in -: a particular link type (e.g. non-ascii characters in a http: -: link). -: -: With this change in place Org will apply percent escaping and -: unescaping more consistently especially for non-ascii characters. -: Additionally some of the outstanding bugs or glitches concerning -: percent escaped links are solved. + Patch by Stephen Eglen. - Thanks a lot to David for this work. +**** Allow regexps in =org-file-apps= to capture link parameters + The way extension regexps in =org-file-apps= are handled has + changed. Instead of matching against the file name, the regexps + are now matched against the whole link, and you can use grouping + to extract link parameters which you can then use in a command + string to be executed. + For example, to allow linking to PDF files using the syntax + =file:/doc.pdf::=, you can add the following entry + to org-file-apps: -*** Make =org-store-link= point to directory in a dired buffer - :PROPERTIES: - :OrgVersion: 6.35 - :END: + #+begin_example + Extension: \.pdf::\([0-9]+\)\' + Command: evince "%s" -p %1 + #+end_example - When, in a dired buffer, the cursor is not in a line listing a - file, `org-store-link' will store a link to the directory. + Thanks to Jan Böcker for a patch to this effect. - Patch by Stephen Eglen. +*** Dates and time +**** Allow relative time when scheduling/adding a deadline + You can now use relative duration strings like "-2d" or "++3w" + when calling =org-schedule= or =org-deadline=: it will schedule + (or set the deadline for) the item respectively two days before + today and three weeks after the current timestamp, if any. -*** Allow regexps in =org-file-apps= to capture link parameters - :PROPERTIES: - :OrgVersion: 6.35 - :END: + You can use this programmatically: =(org-schedule nil "+2d")= + will work on the current entry. - The way extension regexps in =org-file-apps= are handled has - changed. Instead of matching against the file name, the regexps - are now matched against the whole link, and you can use grouping - to extract link parameters which you can then use in a command - string to be executed. + You can also use this while (bulk-)rescheduling and + (bulk-)resetting the deadline of (several) items from the agenda. - For example, to allow linking to PDF files using the syntax - =file:/doc.pdf::=, you can add the following entry to - org-file-apps: + Thanks to Memnon Anon for a heads up about this! - #+begin_example - Extension: \.pdf::\([0-9]+\)\' - Command: evince "%s" -p %1 - #+end_example +**** American-style dates are now understood by =org-read-date= - Thanks to Jan Böcker for a patch to this effect. + So when you are prompted for a date, you can now answer like this -** Dates and time + #+begin_example + 2/5/3 --> 2003-02-05 + 2/5 --> -02-05 + #+end_example -*** Allow relative time when scheduling/adding a deadline - :PROPERTIES: - :OrgVersion: 7.7 - :END: +*** Agenda - You can now use relative duration strings like "-2d" or "++3w" - when calling =org-schedule= or =org-deadline=: it will schedule - (or set the deadline for) the item respectively two days before - today and three weeks after the current timestamp, if any. +**** =org-agenda-custom-commands= has a default value - You can use this programmatically: =(org-schedule nil "+2d")= - will work on the current entry. + This option used to be `nil' by default. This now has a default + value, displaying an agenda and all TODOs. See the docstring for + details. Thanks to Carsten for this. - You can also use this while (bulk-)rescheduling and - (bulk-)resetting the deadline of (several) items from the agenda. +**** Improved filtering through =org-agenda-to-appt= - Thanks to Memnon Anon for a heads up about this! + The new function allows the user to refine the scope of entries + to pass to =org-agenda-get-day-entries= and allows to filter out + entries using a function. + Thanks to Peter Münster for raising a related issue and to + Tassilo Horn for this idea. Also thanks to Peter Münster for + [[git:68ffb7a7][fixing a small bug]] in the final implementation. +**** Allow ap/pm times in agenda time grid + Times in the agenda can now be displayed in am/pm format. See + the new variable =org-agenda-timegrid-use-ampm=. Thanks to + C. A. Webber for a patch to this effect. -*** American-style dates are now understood by =org-read-date= - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Agenda: Added a bulk "scattering" command - So when you are prompted for a date, you can now answer like this + =B S= in the agenda buffer will cause tasks to be rescheduled a + random number of days into the future, with 7 as the default. + This is useful if you've got a ton of tasks scheduled for today, + you realize you'll never deal with them all, and you just want + them to be distributed across the next N days. When called with + a prefix arg, rescheduling will avoid weekend days. - #+begin_example - 2/5/3 --> 2003-02-05 - 2/5 --> -02-05 - #+end_example + Thanks to John Wiegley for this. -** Agenda +*** Exporting -*** =org-agenda-custom-commands= has a default value - :PROPERTIES: - :OrgVersion: 7.8 - :END: +**** Simplification of org-export-html-preamble/postamble - This option used to be `nil' by default. This now has a default - value, displaying an agenda and all TODOs. See the docstring for - details. Thanks to Carsten for this. + When set to `t', export the preamble/postamble as usual, honoring + the =org-export-email/author/creator-info= variables. + When set to a formatting string, insert this string. See the + docstring of these variable for details about available + %-sequences. -*** Improved filtering through =org-agenda-to-appt= - :PROPERTIES: - :OrgVersion: 7.8 - :END: + You can set =:html-preamble= in publishing project in the same + way: `t' means to honor =:email/creator/author-info=, and a + formatting string will insert a string. - The new function allows the user to refine the scope of entries - to pass to =org-agenda-get-day-entries= and allows to filter out - entries using a function. +**** New exporters to Latin-1 and UTF-8 - Thanks to Peter Münster for raising a related issue and to - Tassilo Horn for this idea. Also thanks to Peter Münster for - [[git:68ffb7a7][fixing a small bug]] in the final implementation. + While Ulf Stegemann was going through the entities list to + improve the LaTeX export, he had the great idea to provide + representations for many of the entities in Latin-1, and for all + of them in UTF-8. This means that we can now export files rich + in special symbols to Latin-1 and to UTF-8 files. These new + exporters can be reached with the commands =C-c C-e n= and =C-c + C-e u=, respectively. + When there is no representation for a given symbol in the + targeted coding system, you can choose to keep the TeX-macro-like + representation, or to get an "explanatory" representation. For + example, =\simeq= could be represented as "[approx. equal to]". + Please use the variable =org-entities-ascii-explanatory= to state + your preference. +**** HTML export: Add class to outline containers using property -*** Allow ap/pm times in agenda time grid - :PROPERTIES: - :OrgVersion: 7.4 - :END: + The =HTML_CONTAINER_CLASS= property can now be used to add a + class name to the outline container of a node in HTML export. - Times in the agenda can now be displayed in am/pm format. See the new - variable =org-agenda-timegrid-use-ampm=. Thanks to C. A. Webber for - a patch to this effect. +**** Throw an error when creating an image from a LaTeX snippet fails + This behavior can be configured with the new option variable + =org-format-latex-signal-error=. +**** Support for creating BEAMER presentations from Org-mode documents -*** Agenda: Added a bulk "scattering" command - :PROPERTIES: - :OrgVersion: 7.4 - :END: + Org-mode documents or subtrees can now be converted directly in + to BEAMER presentation. Turning a tree into a simple + presentations is straight forward, and there is also quite some + support to make richer presentations as well. See the [[http://orgmode.org/manual/Beamer-class-export.html#Beamer-class-export][BEAMER + section]] in the manual for more details. - =B S= in the agenda buffer will cause tasks to be rescheduled a random - number of days into the future, with 7 as the default. This is useful - if you've got a ton of tasks scheduled for today, you realize you'll - never deal with them all, and you just want them to be distributed - across the next N days. When called with a prefix arg, rescheduling - will avoid weekend days. + Thanks to everyone who has contributed to the discussion about + BEAMER support and how it should work. This was a great example + for how this community can achieve a much better result than any + individual could. - Thanks to John Wiegley for this. +*** Refiling -** Exporting +**** Refile targets can now be cached -*** Simplification of org-export-html-preamble/postamble - :PROPERTIES: - :OrgVersion: 7.5 - :END: + You can turn on caching of refile targets by setting the variable + =org-refile-use-cache=. This should speed up refiling if you + have many eligible targets in many files. If you need to update + the cache because Org misses a newly created entry or still + offers a deleted one, press =C-0 C-c C-w=. - When set to `t', export the preamble/postamble as usual, honoring the - =org-export-email/author/creator-info= variables. +**** New logging support for refiling - When set to a formatting string, insert this string. See the docstring - of these variable for details about available %-sequences. + Whenever you refile an item, a time stamp and even a note can be + added to this entry. For details, see the new option + =org-log-refile=. - You can set =:html-preamble= in publishing project in the same way: `t' - means to honor =:email/creator/author-info=, and a formatting string - will insert a string. + Thanks to Charles Cave for this idea. -*** New exporters to Latin-1 and UTF-8 - :PROPERTIES: - :OrgVersion: 6.35 - :END: +*** Completion - While Ulf Stegemann was going through the entities list to improve the - LaTeX export, he had the great idea to provide representations for many - of the entities in Latin-1, and for all of them in UTF-8. This means - that we can now export files rich in special symbols to Latin-1 and to - UTF-8 files. These new exporters can be reached with the commands =C-c - C-e n= and =C-c C-e u=, respectively. +**** In-buffer completion is now done using John Wiegleys pcomplete.el - When there is no representation for a given symbol in the targeted - coding system, you can choose to keep the TeX-macro-like - representation, or to get an "explanatory" representation. For - example, =\simeq= could be represented as "[approx. equal to]". Please - use the variable =org-entities-ascii-explanatory= to state your - preference. + Thanks to John Wiegley for much of this code. -*** HTML export: Add class to outline containers using property - :PROPERTIES: - :OrgVersion: 6.35 - :END: +*** Tables - The =HTML_CONTAINER_CLASS= property can now be used to add a class name - to the outline container of a node in HTML export. +**** New command =org-table-transpose-table-at-point= -*** Throw an error when creating an image from a LaTeX snippet fails - :PROPERTIES: - :OrgVersion: 6.35 - :END: + See the docstring. This hack from Juan Pechiar is now part of + Org's core. Thanks to Juan! - This behavior can be configured with the new option variable - =org-format-latex-signal-error=. +**** Display field's coordinates when editing it with =C-c `= -*** Support for creating BEAMER presentations from Org-mode documents - :PROPERTIES: - :OrgVersion: 6.34 - :END: + When editing a field with =C-c `=, the field's coordinate will + the displayed in the buffer. - Org-mode documents or subtrees can now be converted directly in to - BEAMER presentation. Turning a tree into a simple presentations is - straight forward, and there is also quite some support to make richer - presentations as well. See the [[http://orgmode.org/manual/Beamer-class-export.html#Beamer-class-export][BEAMER section]] in the manual for more - details. + Thanks to Michael Brand for a patch to this effect. - Thanks to everyone who has contributed to the discussion about BEAMER - support and how it should work. This was a great example for how this - community can achieve a much better result than any individual could. +**** Spreadsheet computation of durations and time values -** Refiling + If you want to compute time values use the =T= flag, either in + Calc formulas or Elisp formulas: -*** Refile targets can now be cached - :PROPERTIES: - :OrgVersion: 7.01 - :END: + | Task 1 | Task 2 | Total | + |--------+--------+---------| + | 35:00 | 35:00 | 1:10:00 | + #+TBLFM: @2$3=$1+$2;T - You can turn on caching of refile targets by setting the variable - =org-refile-use-cache=. This should speed up refiling if you have many - eligible targets in many files. If you need to update the cache - because Org misses a newly created entry or still offers a deleted one, - press =C-0 C-c C-w=. + Values must be of the form =[HH:]MM:SS=, where hours are + optional. -*** New logging support for refiling - :PROPERTIES: - :OrgVersion: 6.35 - :END: + Thanks to Martin Halder, Eric Schulte and Carsten for code and + feedback on this. - Whenever you refile an item, a time stamp and even a note can be added - to this entry. For details, see the new option =org-log-refile=. +**** Implement formulas applying to field ranges - Thanks to Charles Cave for this idea. + Carsten implemented this field-ranges formulas. -** Completion + : A frequently requested feature for tables has been to be able to define + : row formulas in a way similar to column formulas. The patch below allows + : things like + : + : @3= + : @2$2..@5$7= + : @I$2..@II$4= + : + : as the left hand side for table formulas in order to write a formula that + : is valid for an entire column or for a rectangular section in a + : table. -*** In-buffer completion is now done using John Wiegley's pcomplete.el - :PROPERTIES: - :OrgVersion: 7.4 - :END: + Thanks a lot to Carsten for this. - Thanks to John Wiegley for much of this code. +**** Sending radio tables from org buffers is now allowed -** Tables + Org radio tables can no also be sent inside Org buffers. Also, + there is a new hook which get called after a table has been sent. -*** New command =org-table-transpose-table-at-point= - :PROPERTIES: - :OrgVersion: 7.8 - :END: + Thanks to Seweryn Kokot. - See the docstring. This hack from Juan Pechiar is now part of Org's - core. Thanks to Juan! +*** Lists -*** Display field's coordinates when editing it with =C-c `= - :PROPERTIES: - :OrgVersion: 7.7 - :END: +**** Improved handling of lists - When editing a field with =C-c `=, the field's coordinate will the - displayed in the buffer. + Nicolas Goaziou extended and improved the way Org handles lists. - Thanks to Michael Brand for a patch to this effect. + 1. Indentation of text determines again end of items in + lists. So, some text less indented than the previous item + doesn't close the whole list anymore, only all items more + indented than it. -*** Spreadsheet computation of durations and time values - :PROPERTIES: - :OrgVersion: 7.6 - :END: + 2. Alphabetical bullets are implemented, through the use of the + variable `org-alphabetical-lists'. This also adds alphabetical + counters like [@c] or [@W]. - If you want to compute time values use the =T= flag, either in Calc - formulas or Elisp formulas: + 3. Lists can now safely contain drawers, inline tasks, or various + blocks, themselves containing lists. Two variables are + controlling this: `org-list-forbidden-blocks', and + `org-list-export-context'. - | Task 1 | Task 2 | Total | - |--------+--------+---------| - | 35:00 | 35:00 | 1:10:00 | - #+TBLFM: @2$3=$1+$2;T + 4. Improve `newline-and-indent' (C-j): used in an item, it will + keep text from moving at column 0. This allows to split text + and make paragraphs and still not break the list. - Values must be of the form =[HH:]MM:SS=, where hours are optional. + 5. Improve `org-toggle-item' (C-c -): used on a region with + standard text, it will change the region into one item. With a + prefix argument, it will fallback to the previous behavior and + make every line in region an item. It permits to easily + integrate paragraphs inside a list. - Thanks to Martin Halder, Eric Schulte and Carsten for code and feedback - on this. + 6. `fill-paragraph' (M-q) now understands lists. It can freely be + used inside items, or on text just after a list, even with no + blank line around, without breaking list structure. -*** Implement formulas applying to field ranges - :PROPERTIES: - :OrgVersion: 7.5 - :END: + Thanks a lot to Nicolas for all this! - Carsten implemented this field-ranges formulas. +*** Inline display of linked images - : A frequently requested feature for tables has been to be able to define - : row formulas in a way similar to column formulas. The patch below allows - : things like - : - : @3= - : @2$2..@5$7= - : @I$2..@II$4= - : - : as the left hand side for table formulas in order to write a formula that - : is valid for an entire column or for a rectangular section in a - : table. + Images can now be displayed inline. The key C-c C-x C-v does + toggle the display of such images. Note that only image links + that have no description part will be inlined. - Thanks a lot to Carsten for this. +*** Implement offsets for ordered lists -*** Sending radio tables from org buffers is now allowed - :PROPERTIES: - :OrgVersion: 7.4 - :END: + If you want to start an ordered plain list with a number different + from 1, you can now do it like this: - Org radio tables can no also be sent inside Org buffers. Also, there - is a new hook which get called after a table has been sent. + : 1. [@start:12] will star a lit a number 12 - Thanks to Seweryn Kokot. +*** Babel: code block body expansion for table and preview -** Lists + In org-babel, code is "expanded" prior to evaluation. I.e. the + code that is actually evaluated comprises the code block contents, + augmented with the extra code which assigns the referenced data to + variables. It is now possible to preview expanded contents, and + also to expand code during during tangling. This expansion takes + into account all header arguments, and variables. -*** Improved handling of lists - :PROPERTIES: - :OrgVersion: 7.5 - :END: + A new keybinding `C-c M-b p' bound to `org-babel-expand-src-block' + can be used from inside of a source code block to preview its + expanded contents (which can be very useful for debugging). + tangling - Nicolas Goaziou extended and improved the way Org handles lists. + The expanded body can now be tangled, this includes variable + values which may be the results of other source-code blocks, or + stored in headline properties or tables. One possible use for this + is to allow those using org-babel for their emacs initialization + to store values (e.g. usernames, passwords, etc...) in headline + properties or in tables. - 1. Indentation of text determines again end of items in lists. So, some - text less indented than the previous item doesn't close the whole - list anymore, only all items more indented than it. + Org-babel now supports three new header arguments, and new default + behavior for handling horizontal lines in tables (hlines), column + names, and rownames across all languages. - 2. Alphabetical bullets are implemented, through the use of the - variable `org-alphabetical-lists'. This also adds alphabetical - counters like [@c] or [@W]. +*** Editing Convenience and Appearance - 3. Lists can now safely contain drawers, inline tasks, or various - blocks, themselves containing lists. Two variables are controlling - this: `org-list-forbidden-blocks', and `org-list-export-context'. +**** New command =org-copy-visible= (=C-c C-x v=) - 4. Improve `newline-and-indent' (C-j): used in an item, it will keep - text from moving at column 0. This allows to split text and make - paragraphs and still not break the list. + This command will copy the visible text in the region into the + kill ring. Thanks to Florian Beck for this function and to + Carsten for adding it to org.el and documenting it! - 5. Improve `org-toggle-item' (C-c -): used on a region with standard - text, it will change the region into one item. With a prefix - argument, it will fallback to the previous behavior and make every - line in region an item. It permits to easily integrate paragraphs - inside a list. +**** Make it possible to protect hidden subtrees from being killed by =C-k= - 6. `fill-paragraph' (M-q) now understands lists. It can freely be used - inside items, or on text just after a list, even with no blank line - around, without breaking list structure. + See the new variable =org-ctrl-k-protect-subtree=. This was a + request by Scott Otterson. - Thanks a lot to Nicolas for all this! +**** Implement pretty display of entities, sub-, and superscripts. -** Inline display of linked images - :PROPERTIES: - :OrgVersion: 6.36 - :END: - - Images can now be displayed inline. The key C-c C-x C-v does toggle the - display of such images. Note that only image links that have no - description part will be inlined. + The command =C-c C-x \= toggles the display of Org's special + entities like =\alpha= as pretty unicode characters. Also, sub + and superscripts are displayed in a pretty way (raised/lower + display, in a smaller font). If you want to exclude sub- and + superscripts, see the variable + =org-pretty-entities-include-sub-superscripts=. -** Implement offsets for ordered lists - :PROPERTIES: - :OrgVersion: 6.36 - :END: - - If you want to start an ordered plain list with a number different from - 1, you can now do it like this: - - : 1. [@start:12] will star a lit a number 12 + Thanks to Eric Schulte and Ulf Stegeman for making this possible. -** Babel: code block body expansion for table and preview - :PROPERTIES: - :OrgVersion: 6.36 - :END: - - In org-babel, code is "expanded" prior to evaluation. I.e. the code that - is actually evaluated comprises the code block contents, augmented with - the extra code which assigns the referenced data to variables. It is now - possible to preview expanded contents, and also to expand code during - during tangling. This expansion takes into account all header arguments, - and variables. - - A new key-binding `C-c M-b p' bound to `org-babel-expand-src-block' can - be used from inside of a source code block to preview its expanded - contents (which can be very useful for debugging). tangling - - The expanded body can now be tangled, this includes variable values - which may be the results of other source-code blocks, or stored in - headline properties or tables. One possible use for this is to allow - those using org-babel for their emacs initialization to store values - (e.g. usernames, passwords, etc...) in headline properties or in tables. - - Org-babel now supports three new header arguments, and new default - behavior for handling horizontal lines in tables (hlines), column names, - and rownames across all languages. - -** Editing Convenience and Appearance +**** New faces for title, date, author and email address lines -*** New command =org-copy-visible= (=C-c C-x v=) - :PROPERTIES: - :OrgVersion: 7.7 - :END: + The keywords in these lines are now dimmed out, and the title is + displayed in a larger font, and a special font is also used for + author, date, and email information. This is implemented by the + following new faces: - This command will copy the visible text in the region into the kill - ring. Thanks to Florian Beck for this function and to Carsten for - adding it to org.el and documenting it! + =org-document-title= + =org-document-info= + =org-document-info-keyword= -*** Make it possible to protect hidden subtrees from being killed by =C-k= - :PROPERTIES: - :OrgVersion: 7.01 - :END: + In addition, the variable =org-hidden-keywords= can be used to + make the corresponding keywords disappear. - See the new variable =org-ctrl-k-protect-subtree=. This was a request - by Scott Otterson. + Thanks to Dan Davison for this feature. -*** Implement pretty display of entities, sub-, and superscripts. - :PROPERTIES: - :OrgVersion: 7.01 - :END: +**** Simpler way to specify faces for tags and todo keywords - The command =C-c C-x \= toggles the display of Org's special entities - like =\alpha= as pretty unicode characters. Also, sub and superscripts - are displayed in a pretty way (raised/lower display, in a smaller - font). If you want to exclude sub- and superscripts, see the variable - =org-pretty-entities-include-sub-superscripts=. - - Thanks to Eric Schulte and Ulf Stegeman for making this possible. - -*** New faces for title, date, author and email address lines - :PROPERTIES: - :OrgVersion: 6.35 - :END: - - The keywords in these lines are now dimmed out, and the title is - displayed in a larger font, and a special font is also used for author, - date, and email information. This is implemented by the following new - faces: - - =org-document-title= - =org-document-info= - =org-document-info-keyword= - - In addition, the variable =org-hidden-keywords= can be used to make the - corresponding keywords disappear. + The variables =org-todo-keyword-faces=, =org-tag-faces=, and + =org-priority-faces= now accept simple color names as + specifications. The colors will be used as either foreground or + background color for the corresponding keyword. See also the + variable =org-faces-easy-properties=, which governs which face + property is affected by this setting. - Thanks to Dan Davison for this feature. - -*** Simpler way to specify faces for tags and todo keywords - :PROPERTIES: - :OrgVersion: 6.35 - :END: - - The variables =org-todo-keyword-faces=, =org-tag-faces=, and - =org-priority-faces= now accept simple color names as specifications. - The colors will be used as either foreground or background color for - the corresponding keyword. See also the variable - =org-faces-easy-properties=, which governs which face property is - affected by this setting. + This is really a great simplification for setting keyword faces. + The change is based on an idea and patch by Ryan Thompson. - This is really a great simplification for setting keyword faces. The - change is based on an idea and patch by Ryan Thompson. - -*** in tables now means fixed width, not maximum width - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** in tables now means fixed width, not maximum width - Requested by Michael Brand. + Requested by Michael Brand. -*** Better level cycling function - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Better level cycling function - =TAB= in an empty headline cycles the level of that headline through - likely states. Ryan Thompson implemented an improved version of this - function, which does not depend upon when exactly this command is used. - Thanks to Ryan for this improvement. + =TAB= in an empty headline cycles the level of that headline + through likely states. Ryan Thompson implemented an improved + version of this function, which does not depend upon when exactly + this command is used. Thanks to Ryan for this improvement. -*** Adaptive filling - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Adaptive filling - For paragraph text, =org-adaptive-fill-function= did not handle the - base case of regular text which needed to be filled. This is now - fixed. Among other things, it allows email-style ">" comments to be - filled correctly. + For paragraph text, =org-adaptive-fill-function= did not handle + the base case of regular text which needed to be filled. This is + now fixed. Among other things, it allows email-style ">" + comments to be filled correctly. - Thanks to Dan Hackney for this patch. + Thanks to Dan Hackney for this patch. -*** `org-reveal' (=C-c C-r=) also decrypts encrypted entries (org-crypt.el) - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** `org-reveal' (=C-c C-r=) also decrypts encrypted entries (org-crypt.el) - Thanks to Richard Riley for triggering this change. + Thanks to Richard Riley for triggering this change. -*** Better automatic letter selection for TODO keywords - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Better automatic letter selection for TODO keywords - When all first letters of keywords have been used, Org now assigns more - meaningful characters based on the keywords. + When all first letters of keywords have been used, Org now + assigns more meaningful characters based on the keywords. - Thanks to Mikael Fornius for this patch. + Thanks to Mikael Fornius for this patch. -** Clocking +*** Clocking -*** Clock: Allow synchronous update of timestamps in CLOCK log - :PROPERTIES: - :OrgVersion: 7.7 - :END: +**** Clock: Allow synchronous update of timestamps in CLOCK log - Using =S-M-= on CLOCK log timestamps will increase/decrease - the two timestamps on this line so that duration will keep the same. - Note that duration can still be slightly modified in case a timestamp - needs some rounding. + Using =S-M-= on CLOCK log timestamps will + increase/decrease the two timestamps on this line so that + duration will keep the same. Note that duration can still be + slightly modified in case a timestamp needs some rounding. - Thanks to Rainer Stengele for this idea. + Thanks to Rainer Stengele for this idea. -*** Localized clock tables - :PROPERTIES: - :OrgVersion: 7.5 - :END: +**** Localized clock tables - Clock tables now support a new new =:lang= parameter, allowing the user - to customize the localization of the table headers. See the variable - =org-clock-clocktable-language-setup= which controls available - translated strings. + Clock tables now support a new new =:lang= parameter, allowing + the user to customize the localization of the table headers. See + the variable =org-clock-clocktable-language-setup= which controls + available translated strings. -*** Show clock overruns in mode line - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Show clock overruns in mode line - When clocking an item with a planned effort, overrunning the planned - time is now made visible in the mode line, for example using the new - face =org-mode-line-clock-overrun=, or by adding an extra string given - by =org-task-overrun-text=. + When clocking an item with a planned effort, overrunning the + planned time is now made visible in the mode line, for example + using the new face =org-mode-line-clock-overrun=, or by adding an + extra string given by =org-task-overrun-text=. - Thanks to Richard Riley for a patch to this effect. + Thanks to Richard Riley for a patch to this effect. -*** Clock reports can now include the running, incomplete clock - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Clock reports can now include the running, incomplete clock - If you have a clock running, and the entry being clocked falls into the - scope when creating a clock table, the time so far spent can be added - to the total. This behavior depends on the setting of - =org-clock-report-include-clocking-task=. The default is =nil=. + If you have a clock running, and the entry being clocked falls + into the scope when creating a clock table, the time so far spent + can be added to the total. This behavior depends on the setting + of =org-clock-report-include-clocking-task=. The default is + =nil=. - Thanks to Bernt Hansen for this useful addition. + Thanks to Bernt Hansen for this useful addition. -** Misc +*** Misc -*** Improvements with inline tasks and indentation - :PROPERTIES: - :OrgVersion: 7.4 - :END: +**** Improvements with inline tasks and indentation - There is now a configurable way on how to export inline tasks. See the - new variable =org-inlinetask-export-templates=. + There is now a configurable way on how to export inline tasks. + See the new variable =org-inlinetask-export-templates=. - Thanks to Nicolas Goaziou for coding these changes. + Thanks to Nicolas Goaziou for coding these changes. -*** A property value of "nil" now means to unset a property - :PROPERTIES: - :OrgVersion: 7.01 - :END: +**** A property value of "nil" now means to unset a property - This can be useful in particular with property inheritance, if some - upper level has the property, and some grandchild of it would like to - have the default settings (i.e. not overruled by a property) back. + This can be useful in particular with property inheritance, if + some upper level has the property, and some grandchild of it + would like to have the default settings (i.e. not overruled by a + property) back. - Thanks to Robert Goldman and Bernt Hansen for suggesting this change. + Thanks to Robert Goldman and Bernt Hansen for suggesting this + change. -*** New helper functions in org-table.el - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** New helper functions in org-table.el - There are new functions to access and write to a specific table field. - This is for hackers, and maybe for the org-babel people. + There are new functions to access and write to a specific table field. + This is for hackers, and maybe for the org-babel people. - #+begin_example - org-table-get - org-table-put - org-table-current-line - org-table-goto-line - #+end_example + #+begin_example + org-table-get + org-table-put + org-table-current-line + org-table-goto-line + #+end_example -*** Archiving: Allow to reverse order in target node - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Archiving: Allow to reverse order in target node - The new option =org-archive-reversed-order= allows to have archived - entries inserted in a last-on-top fashion in the target node. + The new option =org-archive-reversed-order= allows to have + archived entries inserted in a last-on-top fashion in the target + node. - This was requested by Tom. + This was requested by Tom. -*** Org-reveal: Double prefix arg shows the entire subtree of the parent - :PROPERTIES: - :OrgVersion: 6.35 - :END: +**** Org-reveal: Double prefix arg shows the entire subtree of the parent - This can help to get out of an inconsistent state produced for example - by viewing from the agenda. + This can help to get out of an inconsistent state produced for + example by viewing from the agenda. - This was a request by Matt Lundin. + This was a request by Matt Lundin. * License -This file is part of GNU Emacs. + 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 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. + 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 . + You should have received a copy of the GNU General Public License + along with GNU Emacs. If not, see . diff --git a/etc/org/OrgOdtContentTemplate.xml b/etc/org/OrgOdtContentTemplate.xml index cd7ff0e1564..55e1b787066 100644 --- a/etc/org/OrgOdtContentTemplate.xml +++ b/etc/org/OrgOdtContentTemplate.xml @@ -256,6 +256,7 @@ + diff --git a/etc/org/OrgOdtStyles.xml b/etc/org/OrgOdtStyles.xml index 84125c96d8a..5dfcfa83890 100644 --- a/etc/org/OrgOdtStyles.xml +++ b/etc/org/OrgOdtStyles.xml @@ -319,6 +319,11 @@ + + + + + diff --git a/etc/refcards/orgcard.pdf b/etc/refcards/orgcard.pdf index 2b474bf4e93dc94b194ea088c0d00bc92354f963..2f0044184438d5a0050adc8e8794fb1aced0b6c6 100644 GIT binary patch delta 45052 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 delta 45111 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 + + * org-html.el (org-export-html-preprocess) + (org-export-html-format-image): Use + `org-latex-preview-ltxpng-directory'. + + * org-odt.el (org-export-odt-do-preprocess-latex-fragments): + Ditto. + + * org.el (org-latex-preview-ltxpng-directory): New option. + (org-preview-latex-fragment): Store LaTeX preview images in + `org-latex-preview-ltxpng-directory'. + +2012-09-30 Achim Gratz + + * ob-R.el (org-babel-R-initiate-session): Protect against use of + unbound variable `ess-ask-for-ess-directory´. The default for this + variable is true, so act accordingly if it is found unbound. + + * ob-R.el: Remove initialization with `nil´ from + `ess-ask-for-ess-directory´ and `ess-local-process-name´. Remove + second declaration for `ess-local-process-name´. + + * org-id.el: Do not use (random t), we just want a new random + number, not a re-seeding of the PRNG for which (random t) doesn't + provide enough entropy anyway. Even if (random) would always + produce the same sequence, the other components going into the MD5 + hash ensure that the result will be unique. + + * org-gnus.el: Add a missing require for gnus-util. + + * org-compat.el: Rename utils to make throughout. + + * org.el: Move check for outline-mode-keymap after (require + 'outline). + + * org-element.el: New file. Do not (require 'org). + + * org-agenda.el: Remove duplicate requires. + + * org.el (org-mode-map): Add keybindings to + `org-element-transpose' and `org-narrow-to-element'. + (org-metaup): Fall back on `org-element-drag-backward'. + (org-metadown): Fall back on `org-element-drag-forward'. Also + move chunks of declarations and require statements to get rid of + compiler warnings. + + * org-exp-blocks.el (org): Don't require org. Add declarations. + + * org-clock.el (org): Don't require org. + + * ob-exp.el (org-list-forbidden-blocks): Add declarations. + + * ob.el (org-babel-exeext): New defconst to hold extension for + executables or nil if none. Should be ".exe" for both Windows and + Cygwin. + + * ob-C.el (org-babel-C-execute): Use org-babel-exeext when + constructing the target file name for the compiled executable. + + * ob-fortran.el (org-babel-execute:fortran): Add org-babel-exeext + when constructing the target file name for the compiled + executable. + + * org-version.el: New file. + + * org-compat.el (org-check-version): New macro. Check if + org-version.el exists and provide autoloads to that. Otherwise + check if org-fixup.el exists and use it to provide definitions. + Finally if nothing worked, complain about a botched installation + and provide fallback definitions. + + * org.el: Use org-check-version. + + * org.el: Fix a subtle error resulting in version functions + sometimes not being defined and byte-compiling failing. Always + compile in fallback definitions into org.elc -- org-fixup either + provides re-definitions at compile-time or checks org-version.el + and then the git work tree when run uncompiled. So the fallback + definitions will only come into effect when org-fixup is not + available. + + * org.el (org-version): Make org-version more robust, e.g. when + byte-compiling single files with 'make compile-dirty'. + + * org.el (org-reload): Revert an undesirable change in org-reload. + Do not prepend org-dir to babel-files, which prevents the files + from being found in load-path. + + * org.el (org-version): Add optional parameters 'full and 'message + to optionally return the full version string and echo to message + area in non-interactive calls. + + * org.el (org-submit-bug-report): Add optional parameter 'full to + call of (org-version) so that the bug report has all version + information. + + * org.el (org-reload): Simplify file-re (orgtbl-*.el files do not + exist anymore). Keep org-*.el at the end of the files list. + Explicitely load org-version.el (since it doesn't provide feature + 'org-version) at the very end, but ignore errors when it doesn't + exist. Add parameters 'full and 'message to the call of + (org-version) so that after reload the full version information is + displayed in the message area again. + + * org-agenda.el: Replace with-no-warnings with org-no-warnings + (defined in org-macs.el). + + * org-bbdb.el: Replace with-no-warnings with org-no-warnings + (defined in org-macs.el). + + * org-clock.el: Replace with-no-warnings with org-no-warnings + (defined in org-macs.el). + + * org.el: Replace with-no-warnings with org-no-warnings (defined + in org-macs.el). + + * org.el: Add with-not-warnings around call of (org-fixup). + + * org-compat.el (org-find-library-dir): Rename + org-find-library-name (misleading) and implement with a function + that exists identically in Emacs/XEmacs. + + * org-exp-blocks.el: Change calls to org-find-library-dir. + + * org.el: change calls to org-find-library-dir. Make require for + noutline fail silently because it is missing from XEmacs. + + * org.el (org-version): Use functions instead of global variables + to get the version strings and remove the defvaralias to + org-version. Warn when encountering a mixed installation (org and + org-install.el should be found in the same directory). + + * org.el: Add with-no-warning to defvar for two unprefixed global + variables from calendar.el (there's nothing else we can do inside + org until it is fixed in calendar.el). + + * org.el: Require find-func and remove declare-function for + find-library-name, otherwise autoloaded org-version doesn't show + all info correctly. + + * org.el (org-version): Show the full path to org-install.el in + the version string to avoid confusion if multiple installations + exist or a previously loaded org-install.el has already defined a + version string that is now out of date. + + * org.el (org-version): Remove determination of version + information, show "N/A" if the information is not provided via + org-install.el. + + * org.el (org-git-version): Placeholder for recording the Git + version of org during install + + * org.el (org-version): Initialize local git-version with + placeholder and fall through using it when org is not installed in + a Git repository + +2012-09-30 Adam Spiers (tiny change) + + * org-html.el: Add hyperlink to http://orgmode.org/ from export + footer. + + * org-clock.el (org-clock-modify-effort-estimate): Display a + message when no clock is currently active. + +2012-09-30 Andrew Hyatt (tiny change) + + * org-archive.el (org-archive-subtree): Allow archiving to a + datetree. + + * org.el (org-archive-location): Ditto. + +2012-09-30 Bastien Guerry + + * ob-io.el: New file. + + * ob-scala.el: New file. + + * org.el (org-url-hexify-p, org-doi-server-url) + (org-latex-preview-ltxpng-directory, org-custom-properties) + (org-sparse-tree-default-date-type): Add :version "24.3". + + * org-agenda.el (org-agenda-sticky) + (org-agenda-custom-commands-contexts): Ditto. + + * org-capture.el (org-capture-bookmark) + (org-capture-templates-contexts) (org-capture-use-agenda-date): + Ditto. + + * org-latex.el (org-export-latex-hyperref-options-format) + (org-export-latex-link-with-unknown-path-format): Ditto. + + * org-id.el (org-id-link-to-org-use-id): Ditto. + + * org-datetree.el (org-datetree-add-timestamp): Ditto. + + * org.el (org-make-link-description-function): Enhance docstring. + (org-insert-link): Fall back on interactive prompt when + `org-make-link-description-function' fails. + + * org-agenda.el (org-todo-list): Fix redoing of todo agenda when + `org-agenda-sticky' is non-nil. + + * org-agenda.el (org-agenda-quit): Delete last indirect buffer. + (org-agenda-pre-follow-window-conf): New variable. + (org-agenda-tree-to-indirect-buffer): Fix bug: don't split agenda + window when there an indirect buffer is already displayed. + + * org-agenda.el (org-agenda-manipulate-query) + (org-agenda-goto-date, org-agenda-goto-today) + (org-agenda-find-same-or-today-or-agenda, ) + (org-agenda-later, org-agenda-change-time-span) + (org-agenda-change-all-lines) + (org-agenda-execute-calendar-command) + (org-agenda-goto-calendar, org-agenda-convert-date): Make sure to + get a property from (1- (point-max)), not (point-max)). + + * ob-dot.el (org-babel-execute:dot): Throw an error when there is + no :file parameter. + + * org-table.el (org-table-eval-formula): Convert time-stamps to + inactive time-stamp so that Calc can handle them correctly. + + * org-table.el (org-table-fix-formulas): Warn with a message when + formulas have been updated. + + * org-publish.el (org-publish-cache-ctime-of-src): Delete the + base-dir argument and use (file-name-directory file) to get the + file's directory. + (org-publish-update-timestamp) + (org-publish-cache-file-needs-publishing): Call + `org-publish-cache-ctime-of-src' with only one argument. + + * org.el (org-follow-timestamp-link): Fix bug when using sticky + agenda. Add a docstring. + + * org-agenda.el (org-agenda-sticky): Don't use a function to set. + Add a :version string. + + * org.el (org-priority): Use a new argument to show priority + instead of setting it. + (org-show-priority): New function to show priority both in normal + Org buffers and in Org Agenda buffers. + (org-speed-commands-default): Use "," as a speed command for + setting priority. + + * org-agenda.el (org-agenda-mode-map): Bind `org-agenda-priority' + to `C-c ,' as it was before. + (org-agenda-show-priority): Delete. + (org-agenda-priority): Use a new argument to show priority instead + of setting it. + + * org.el (org-font-lock-hook, org-set-font-lock-defaults): Add a + docstring. + (org-display-inline-remove-overlay): Rename from + `org-display-inline-modification-hook'. + (org-speed-command-activate): Rename from + `org-speed-command-default-hook'. + (org-babel-speed-command-hook): Rename from + `org-babel-speed-command-activate'. + + * org-agenda.el (org-agenda-update-agenda-type): Rename from + `org-agenda-post-command-hook'. + (org-agenda-mode): Use the new name. + (org-agenda-post-command-hook): Define as obsolete function. + + * org-lparse.el (org-lparse): Temporarily activate the hooks + needed for the ODT conversion. + (org-lparse-preprocess-after-blockquote): Rename from + `org-lparse-preprocess-after-blockquote-hook'. + (org-lparse-strip-experimental-blocks-maybe): Rename from + `org-lparse-strip-experimental-blocks-maybe'. + (org-lparse-preprocess-after-blockquote-hook) + (org-lparse-strip-experimental-blocks-maybe-hook): Define as + obsolete functions. + + * ob.el (org-babel-insert-result): Comma-escape results inserted + with ":results org". + + * org-src.el (org-edit-src-code, org-edit-src-exit): Fix bug about + saving the source editing window with the default value for + `org-src-window-setup' (i.e. 'reorganize-frame). + + * org-src.el (org-src-font-lock-fontify-block): Fix bug: don't + fontify the last character. + + * org.el (org-open-at-point): Don't follow timestamp within + bracket links. + + * org-capture.el (org-capture-templates): Fix typo in docstring. + + * org-agenda.el (org-agenda-skip): Skip information retrieved from + a source block. + + * ob.el (org-babel-common-header-args-w-values) + (org-babel-insert-result): Reintroduce ":results org" but using + "#+BEGIN_SRC org", not "#+BEGIN_ORG". + + * ob.el (org-babel-common-header-args-w-values): Remove "org" the + list of predefined values for the ":results" parameter. + + * ob.el (org-babel-insert-result): Remove support for ":results + org". + + * ob.el (org-babel-common-header-args-w-values) + (org-babel-insert-result): Deprecate ":results wrap" in favor of + ":results drawer". + + * org-crypt.el (org-at-encrypted-entry-p): Fix bug when the check + happens before the first headline. + + * org-capture.el (org-at-encrypted-entry-p) + (org-encrypt-entry, org-decrypt-entry): Declare. + (org-capture-set-target-location): Check whether `org-crypt' has + been loaded. + + * org-agenda.el (org-agenda-todo-custom-ignore-p): Fix typo in + docstring. + + * org-capture.el (org-capture-finalize): Maybe re-encrypt the + target headline if it was decrypted. + (org-capture-set-target-location): Maybe decrypt the target + headline. + + * org-crypt.el (org-at-encrypted-entry-p): New function. + + * org.el (org-options-keywords): Add "STYLE:". + + * org-agenda.el (org-agenda-ndays): Don't make an alias, as + `org-agenda-span' is defined separately. + + * org.el (org-in-subtree-not-table-p): New utility function for + building the menu. + (org-org-menu): Add an item for refiling. Check more contexts + when activating items. + (org-tree-to-indirect-buffer): Use `org-up-heading-safe'. + + * org-agenda.el (org-agenda-tree-to-indirect-buffer) + (org-agenda-do-tree-to-indirect-buffer): Use argument `arg'. + + * org-capture.el (org-capture-set-target-location): Set a correct + time value when storing a note in a datetree and prompting the + user for a date. + + * org-capture.el (org-capture-mode): Fix bug: don't run the mode's + hook twice. + + * org-agenda.el (org-agenda-menu-two-column) + (org-finalize-agenda-hook, org-agenda-ndays): Use + `define-obsolete-variable-alias' instead of + `make-obsolete-variable'. + + * org.el (org-link-to-org-use-id): Move to org-id.el. + + * org-id.el (org-id-link-to-org-use-id): Rename from + `org-link-to-org-use-id'. Use `nil' as the default value. + (org-link-to-org-use-id): Alias and define as obsolete. + + * org-agenda.el (org-search-view, org-agenda-get-todos) + (org-agenda-get-timestamps, org-agenda-get-blocks): Use the dotime + parameter of `org-agenda-format-item' so that 'time-up and + 'time-down agenda sorting strategies are handled correctly. + + * org-capture.el (org-capture-fill-template): Fix checking of + protected template entries. + + * org.el (org-cycle-global-at-bob): Fix typo in docstring. + + * org.el (org-insert-drawer): Deactivate the mark before trying to + indent the :END: of the drawer. + + * org-agenda.el (org-agenda-export-html-style): Default to nil as + any string value will replace the htmlize style. + + * org.el (org-cycle-hook): Fix tiny typo in docstring. + + * org.el (org-time-string-to-time) + (org-time-string-to-seconds, org-end-of-subtree): Add a dosctring. + + * org-freemind.el (org-freemind-write-node): Enhance links + conversion in nodes. + + * org-freemind.el (org-freemind-write-node): Convert links in + nodes. + + * org.el (org-link-to-org-use-id, org-directory) + (org-default-notes-file, org-reverse-note-order) + (org-extend-today-until, org-finish-function) + (org-store-link-functions): Use "capture" instead of "remember" in + docstrings. Also use the `org-capture' group when it makes sense. + + * org-agenda.el (org-agenda-tree-to-indirect-buffer): Find the + correct agenda buffer. Don't split the agenda window when the + indirect buffer is displayed in another frame. + + * org.el (org-mode): Try to set the org-hide face correctly. + + * org-exp.el (org-export): Set the mark correctly when exporting a + subtree. + + * org-agenda.el (org-agenda-get-restriction-and-command): Fix the + display of the number of commands for block agendas. + + * org-agenda.el (org-agenda-before-write-hook) + (org-agenda-add-entry-text-maxlines): Enhance phrasing. + (org-agenda-finalize-hook, org-agenda-mode-hook): Tell that the + buffer is writable when the hook is called. + (org-agenda-finalize): Allow org-agenda-finalize-hook to modify + the buffer. + + * org-agenda.el (org-habit-show-all-today): Only use defvar to + silent the byte-compiler. + (org-agenda-get-scheduled): Check whether some org-habit.el + options have been defined. + + * org-capture.el (org-capture-entry): New variable. + (org-capture-string, org-capture): Use it to possibly skip the + interactive prompt for a capture template. + + * org.el (org-activate-plain-links): Don't try to check if we are + in a bracket link already. + + * org.el (org-read-date-analyze): Fix bug introduced in commit + cc5f9f: adding a time should not prevent relative answers to be + parsed correctly. + + * org-agenda.el (org-agenda-bulk-action): Always read the date + through `org-read-date'. When possible, use the date at point as + the default date. + + * org-agenda.el (org-agenda-bulk-action): Fix bug when + bulk-shifting timestamps. + + * org.el (org-version): New constant. + + * org-compat.el (org-random): New compatibility function. + + * org-id.el (org-id-uuid): Use it. + + * org-capture.el (org-capture-use-agenda-date): New option. + (org-capture): Use it. + + * org-agenda.el (org-agenda-capture): New command. + (org-agenda-mode-map): Bind it to `k'. + (org-agenda-menu): Add it to the menu. + + * org-capture.el (org-capture): Update docstring. + + * org-capture.el (org-capture): When called from an agenda buffer, + use the cursor date at the default date. + + * org-agenda.el (org-agenda-bulk-action): Use the let-bound + `entries' instead the variable. + + * org-agenda.el (org-agenda-bulk-action): Fix bug: don't remove + persistent marks too early. + + * org-agenda.el (org-agenda-bulk-action): Possibly use the day at + point to reset the scheduled or deadline cookie. On date headers, + use it without prompting the user. On an item, use the item's + date as the default prompt for `org-read-date'. + + * org.el (org-read-date): Docstring fix. + + * org-agenda.el (org-agenda-bulk-action): Reorder possible actions + in the message. + + * org-agenda.el (org-agenda-action, org-agenda-do-action): Delete. + (org-agenda-mode-map): Delete related keys. + + * org-agenda.el (org-agenda-menu): Fix a keybinding. + + * org-colview.el (org-columns-goto-top-level): Correctly move the + marker `org-columns-top-level-marker'. + (org-agenda-columns): Don't set + `org-agenda-overriding-columns-format' as a buffer variable, as we + only need it dynamically. + (org-agenda-colview-summarize): Fix a bug in returning the match + string. + + * org-agenda.el (org-agenda-span-to-ndays): Make the second + argument `starting-day' optional. + (org-agenda-goto-date): Keep parameters of custom agendas. + + * org-agenda.el (org-agenda-list): Allow setting the agenda buffer + name through a temporary variable. + (org-agenda-buffer-tmp-name): New variable to temporary store the + agenda buffer name. + + * org-agenda.el (org-agenda-goto-date): Fix behavior when using + sticky agendas. + + * org-agenda.el (org-diary): Don't check whether there is an + agenda buffer when trying to compile the prefix format. + (org-compile-prefix-format): Check if there is an agenda buffer. + If not, use the current buffer. + + * org-agenda.el (org-agenda-get-day-entries): Set the agenda + buffer inconditionnally. + + * ob.el (org-babel-named-src-block-regexp-for-name): Generate a + more general regexp. + + * ob.el (org-babel-where-is-src-block-head): Find a src block head + correctly when #+header(s) is before #+name. + + * org-agenda.el (org-agenda-finalize-hook) + (org-agenda-finalize, org-agenda-finalize-entries): Rename from + org-finalize-agenda-*. + (org-agenda-run-series, org-agenda-finalize, org-timeline) + (org-agenda-list, org-search-view, org-todo-list) + (org-tags-view, org-diary, org-agenda-finalize-entries) + (org-agenda-change-all-lines): Use the new names. + + * org-agenda.el (org-agenda-local-vars): Remove + ̀org-agenda-last-arguments' from the list of local variables. + (org-agenda-mode-map): `g' does the same than `r' in buffers with + only one agenda view, but its behavior differs when there are + several views. In manually appended agendas (with `A'), `g' + displays only the agenda under the point. With multiple agenda + blocks, `g' reinitializes the view by discarding any temporary + changes (e.g. with ̀f' or `w'), while ̀r' keeps those temporary + changes for the agenda view under the point. + (org-agenda-run-series, org-agenda-redo): Implement the above + changes. + (org-agenda-mark-header-line): Don't set useless properties. + (org-agenda-list, org-todo-only, org-search-view) + (org-todo-list, org-tags-view, org-agenda-list-stuck-projects) + (org-agenda-manipulate-query, org-agenda-goto-today) + (org-agenda-later, org-agenda-change-time-span): Use text + properties for storing the last command and the last arguments for + each agenda block. + (org-unhighlight-once): Delete. + + * org-agenda.el (org-agenda-append-agenda): Fit agenda window to + buffer. + + * org-agenda.el (org-agenda-append-agenda): Bugfix: correctly + check whether we are in org-agenda-mode. + + * org-agenda.el (org-agenda-pre-window-conf): Rename from + `org-pre-agenda-window-conf'. + (org-agenda-local-vars, org-agenda-prepare-window) + (org-agenda-Quit, org-agenda-quit): Use the new name. + + * org-agenda.el (org-keys, org-match): New variable, dynamically + scoped in `org-agenda'. + (org-agenda, org-agenda-list, org-search-view, org-todo-list) + (org-tags-view): Use the new variables. + (org-batch-store-agenda-views): Let-bind `match'. + + * org-agenda.el (org-search-view, org-todo-list) + (org-tags-view): Do not let `org-agenda-sticky' prevent the use of + these functions programmatically. Also use the sticky agenda + function correctly. + + * org-agenda.el (org-agenda): Set `org-agenda-buffer-name' + correctly with sticky agendas and non-custom commands. + + * org-agenda.el (org-agenda-fit-window-to-buffer): Rename from + `org-fit-agenda-window'. + (org-agenda-run-series, org-agenda-prepare, org-agenda-list) + (org-search-view, org-todo-list, org-tags-view): Use the new name. + + * org-agenda.el (org-agenda-prepare): Let `throw' display an + error. + + * org-agenda.el (org-agenda-list): Fix bug: don't throw an error + when called from programs as (org-agenda-list). + + * org-agenda.el (org-todo-list): Make arg optional. + + * org.el (org-agenda-prepare-buffers): Rename from + `org-prepare-agenda-buffers'. + (org-match-sparse-tree, org-map-entries): Use the new names. + + * org-agenda.el (org-agenda-prepare-window): Rename from + `org-prepare-agenda-window'. + (org-agenda-prepare): Rename from `org-prepare-agenda'. + (org-agenda-run-series, org-agenda-prepare, org-timeline) + (org-agenda-list, org-search-view, org-todo-list) + (org-tags-view, org-agenda-list-stuck-projects, org-diary) + (org-agenda-to-appt): Use the new names. + + * org-mobile.el (org-mobile-create-index-file): Ditto. + + * org-icalendar.el (org-export-icalendar): Ditto. + + * org-clock.el (org-dblock-write:clocktable) + (org-dblock-write:clocktable): Ditto. + + * org2rem.el (org2rem): Ditto. + + * org-agenda.el (org-agenda): In sticky agendas, use the current + command's match to set the buffer name. This gives more + information to the user and allows to distinguish various agendas + triggered by the same key. + (org-batch-store-agenda-views): Handle the new sticky agenda + buffer name. + + * org-agenda.el (org-agenda) + (org-agenda-get-restriction-and-command): Use `S' as a key for + searching words in TODO-only entries. + + * org-agenda.el (org-prepare-agenda): Fit agenda window when + displaying a sticky agenda. + + * org-table.el (org-table-number-regexp): Allow the user to set it + to a new regexp, which allows commas as decimal mark. The default + is to not use this setting, but the one before commit 7ff8c1, + which has ben reverted. + + * org-agenda.el (org-agenda-overriding-cmd) + (org-agenda-multi-current-cmd) + (org-agenda-multi-overriding-arguments): New variables. + (org-agenda-run-series): `org-agenda-overriding-arguments' + defaults to the last agenda block arguments, so don't use it + globally. + (org-agenda-mark-header-line): Add properties needed so that + `org-agenda-overriding-arguments', `org-agenda-current-span' and + `org-agenda-last-arguments' can be set to their correct contextual + value. + (org-agenda-multi-back-to-pos): New variable. + (org-agenda-later): Retrieve `org-agenda-current-span' and + `org-agenda-overriding-arguments' from text properties. Also + handle numeric span. + (org-agenda-later, org-agenda-change-time-span): Set + `org-agenda-overriding-cmd' so that we to take overriding + arguments into account for this command only. + + * org-agenda.el (org-agenda-kill, org-agenda-archive-with): Fix + bug when called with a non-nil value of `org-agenda-stick'. + + * org-agenda.el (org-agenda-refile): Fix bug when refiling an + entry from a sticky agenda. + + * org-agenda.el (org-prepare-agenda-window): Use + `org-pre-agenda-window-conf' if already set. + (org-agenda-Quit): Set `org-pre-agenda-window-conf' to nil when + quitting. + (org-agenda-quit): Ditto. + + * org-capture.el (org-capture-fill-template): Protect the text + used for replacement from being further replaced. + + * org.el (org-contextualize-validate-key): Fix the check against a + function. + + * org.el (org-contextualize-keys): Rename from + `org-contextualize-agenda-or-capture'. Fix normalization to + handle empty key replacement string. + (org-contextualize-validate-key): Rename from + `org-contexts-validate'. Allow checking against a custom + function. + + * org-agenda.el (org-agenda-custom-commands-contexts): Update. + (org-agenda): Use `org-contextualize-keys'. + + * org-capture.el (org-capture-templates-contexts): Ditto. + + * org.el (org-contextualize-agenda-or-capture): Normalize + contexts. + + * org.el (org-contextualize-agenda-or-capture): Handle key + replacement depending on the contexts. + + * org-capture.el (org-capture-templates-contexts): Allow to use + the context as a way to replace one capture template by another + one. + + * org-agenda.el (org-agenda-custom-commands-contexts): Allow to + use the context as a way to replace one agenda custom command by + another one. + + * org.el (org-contextualize-agenda-or-capture) + (org-rule-validate): New functions, implement context filtering + for agenda commands and capture templates. + + * org-agenda.el (org-agenda-custom-commands-contexts): New option. + (org-agenda): Use it. + + * org-capture.el (org-capture-templates-contexts): New option. + (org-capture-select-template): Use it. + + * org.el (org-beginning-of-defun, org-end-of-defun): Delete. + (org-mode): Set `beginning-of-defun-function' and + `end-of-defun-function' directly. + + * org.el (org-insert-link): Fix bug: include links abbreviations + when completing. + + * org-icalendar.el (org-icalendar-print-entries): Fix bug: when + `org-icalendar-use-plain-timestamp' is nil, scheduled and deadline + items should not be ignored. + + * org.el (org-ds-keyword-length, org-make-tags-matcher): Docstring + clean-up. + + * org-freemind.el (org-freemind-convert-links-from-org): Replace + literally to prevent errors when replacing with string containing + backslashes. + + * org-pcomplete.el (org-thing-at-point): Allow to match (and then + complete) a "thing" containing dashes. + + * org-table.el (org-table-toggle-coordinate-overlays): Better + message when interactively toggling. + + * org-table.el (org-table-number-regexp): Update the docstring to + show an example of a decimal number using the comma as a + separation mark. + + * org-agenda.el (org-prepare-agenda): Minor code clean-up. + (org-agenda-filter-by-category): Filtering must be turned off only + when a category filter has been set and this filter is not empty. + + * org-agenda.el (org-search-view, org-agenda-get-todos) + (org-agenda-get-timestamps, org-agenda-get-sexps) + (org-agenda-get-progress, org-agenda-get-deadlines) + (org-agenda-get-scheduled, org-agenda-get-blocks): Use + `category-pos' instead of `org-category-pos'. + + * ob-fortran.el (org-babel-fortran-transform-list): Rename from + `ob-fortran-transform-list'. + (org-babel-fortran-var-to-fortran): Use the new function's name. + + * ob-calc.el (org-babel-calc-maybe-resolve-var): Rename from + `ob-calc-maybe-resolve-var'. + (org-babel-execute:calc): Use the new function's name. + + * org-jsinfo.el (org-infojs-template): Add a license. + (org-infojs-handle-options): Replace all template elements. + + * org-html.el (org-export-html-scripts): Add a license. + (org-export-html-mathjax-config): Replace all template elements. + (org-export-html-mathjax-template): Add a license. + (org-export-as-html): Minor code clean-up. + + * org.el (org-options-keywords): Add "#+MATHJAX" and + "#+INFOJS_OPT" to the list of keywords for completion. + + * org.el (org-src-prevent-auto-filling): Remove unused and useless + option. + + * org.el (org-element-at-point): Autoload. + (org-element-up): Remove useless declaration. + (org-fill-context-prefix, org-fill-paragraph) + (org-mark-element, org-narrow-to-element) + (org-transpose-element, org-unindent-buffer): Do not require + org-element. + + * org.el (org-fill-paragraph): Require org-element. + + * org-agenda.el (org-agenda-persistent-marks): Minor docstring + enhancement. + + * org.el (org-create-math-formula): Use the compatibility function + `org-region-active-p'. + + * org-odt.el (org-export-as-odf): Ditto. + + * ob.el (org-babel-demarcate-block): Ditto. + + * org.el (org-mark-subtree): Maybe call `org-mark-element' + interactively. + (org-mark-element): Only mark further elements when called + interactively. + + * org.el (org-mark-element, org-narrow-to-element) + (org-transpose-element): Require org-element. + + * org-agenda.el (org-agenda-get-timestamps) + (org-agenda-get-sexps, org-agenda-get-deadlines) + (org-agenda-get-scheduled): Add the 'warntime as a text property, + getting its value from the APPT_WARNTIME property. + (org-agenda-to-appt): Use the 'warntime text property. + + * org-capture.el (org-capture-place-table-line): Fix bug. + + * org.el (org-activate-plain-links): Don't activate a plain link + when it is part of a bracketed link, unless bracketed links are + not enlisted in `org-activate-links'. + (org-open-at-point): Don't consider the text immediately after a + bracketed link is part of a plain link. + + * org.el (org-compute-latex-and-specials-regexp) + (org-paste-subtree, org-sort-entries, org-store-link) + (org-open-at-point, org-file-remote-p, org-add-log-setup) + (org-set-tags-to, org-fast-tag-selection) + (org-diary-sexp-entry): Ditto. + + * org-agenda.el (org-agenda-get-blocks, org-cmp-priority) + (org-cmp-effort, org-cmp-todo-state, org-cmp-alpha) + (org-cmp-tag, org-cmp-time): Remove useless (t nil) sexps at the + end of (cond ...) constructs. + + * org-mobile.el (org-mobile-create-index-file): Ditto. + + * org-lparse.el (org-lparse-format-table-row): Ditto. + + * org-list.el (org-sort-list): Ditto. + + * org-id.el (org-id-get): Ditto. + + * org-html.el (org-export-html-preprocess): Ditto. + + * org-exp.el (org-default-export-plist) + (org-table-clean-before-export): Ditto. + + * org.el (org-options-keywords): Add "TODO". + (org-make-options-regexp): Make the hashtag mandatory for options + and don't allow whitespaces between the hashtag and the plus sign. + + * org.el (org-refresh-category-properties) + (org-find-dblock, org-dblock-start-re, org-dblock-end-re): Allow + lowercase "#+category" and "#+begin:" dynamic blocks. + + * org.el (org-context): Use case-folding when trying to match + clocktables and source blocks contexts. + + * org-clock.el (org-clock-put-overlay): Put the overlay on the + whole headline, not only on the last character. This fixes a bug + with overlays on headlines ending with a bracketed link. + + * org-html.el (org-export-as-html): Make sure we always process a + string. + + * org-exp.el (org-export-cleanup-toc-line): Always return a + string. + + * org.el (org-fontify-meta-lines-and-blocks-1): Correctly handle + metalines with #+results[...]:. + + * org-exp.el (org-export-handle-metalines): Rename from + `org-export-handle-table-metalines'. Now also handle source block + metalines. + (org-export-res/src-name-cleanup): Delete. + (org-export-preprocess-string): Use `org-export-handle-metalines'. + Don't use `org-export-res/src-name-cleanup' anymore. + + * org-html.el (org-format-org-table-html): Don't include the + caption tag for empty captions in HTML export. Keep it in the + DocBook export so that it produces valid DocBook XML. + + * org.el (org-read-date-analyze): Allow both "8am Wed" and "Wed + 8am" to be parsed correctly with respect to possible values of + `org-read-date-prefer-future'. + (org-read-date-prefer-future): Update docstring to remove the + restriction about inserting only the time. The user can now + insert the time and the day. + + * org-icalendar.el (org-icalendar-print-entries): Rename from + `org-print-icalendar-entries'. + (org-icalendar-start-file): Rename from + `org-start-icalendar-file'. + (org-icalendar-finish-file): Rename from + `org-finish-icalendar-file'. + (org-icalendar-ts-to-string): Rename from `org-ical-ts-to-string'. + (org-export-icalendar): Use the correct functions. + + * ob-ref.el (org-babel-ref-index-list): Fix bug introduced by + commit e85479. + + * org.el (org-fill-context-prefix): Require org-element. + (org-timestamp-change): Fix bug by saving excursion when adjusting + another clock. + + * org.el (org-read-date-prefer-future): Fix docstring formatting. + (org-read-date-analyze): Fix the interpretation of + `org-read-date-prefer-future'. + + * org-agenda.el (org-agenda-menu-two-column): Rename to + `org-agenda-menu-two-columns'. + + * ob.el (org-babel-sha1-hash, org-babel-noweb-p): Replace + `org-labels' by `let*'. + + * org-bibtex.el (org-bibtex-headline): Ditto. + + * org-compat.el: Delete `org-labels'. + + * ob.el (org-babel-get-src-block-info) + (org-babel-check-src-block, org-babel-current-result-hash) + (org-babel-parse-src-block-match, org-babel-read-link) + (org-babel-insert-result, org-babel-clean-text-properties): Use + ̀org-no-properties' instead of `org-babel-clean-text-properties'. + (org-babel-clean-text-properties): Delete redundant function + `org-babel-clean-text-properties'. + + * ob-tangle.el (org-babel-tangle-collect-blocks) + (org-babel-tangle-comment-links): Ditto. + + * ob-table.el (sbe): Ditto. + + * ob-lob.el (org-babel-lob-get-info) + (org-babel-lob-execute): Ditto. + + * ob-exp.el (org-babel-exp-non-block-elements): Ditto. + + * org-macs.el (org-no-properties): Allow a new parameter + `restricted' to restrict the properties removal to those in + `org-rm-props'. The default is now to remove all properties. + + * org-compat.el (org-substring-no-properties): Remove unused + defun. + + * org-remember.el (org-remember-apply-template): Remove redundant + removal of text properties. + (org-remember-apply-template): Use `org-no-properties'. + + * org-capture.el (org-capture-fill-template): Remove redundant + removal of text properties. + (org-capture-fill-template): Use `org-no-properties'. + + * org-gnus.el (org-gnus-open, org-gnus-follow-link): Use + `org-no-properties'. + + * org-colview.el (org-columns-display-here): Ditto. + + * org-table.el (org-table-eval-formula): Ditto. + + * org.el (org-entry-properties): Ditto. + + * org-icalendar.el (org-print-icalendar-entries): Fix bug about + handling `alarm-time'. + + * ob-R.el (org-babel-edit-prep:R): Don't set the session. + + * org.el (org-store-log-note): Only skip comments starting with "# + " when storing a note. + + * org.el (org-custom-properties): New option. + (org-custom-properties-overlays): New variable. + (org-toggle-custom-properties-visibility): New command to toggle + the visibility of custom properties. + (org-check-before-invisible-edit): Also prevent errors when trying + to edit invisible properties. + + * org-datetree.el (org-datetree-add-timestamp): New option. + (org-datetree-insert-line): Use it. + + * org.el (org-fill-template): Fix bug when filling template for a + key associated to the nil value. + + * org-agenda.el (org-diary): Fix tiny typo. + + * org.el (message-in-body-p): Move declaration up to fix compiler + warning. + + * org.el (org-fill-context-prefix): Fix auto-filling in + `message-mode'. + + * org.el (org-fill-paragraph): Correctly fill paragraph in + message-mode. + (org-indent-line): Correctly indent according to mode when + `orgstruct++-mode' is on. + (orgstruct++-mode): Add `fill-prefix' to the variable temporarily + stored in `org-fb-vars'. + + * org.el (org-fill-paragraph): Make a command. Fix bug about + filling message headers and citations. + + * org.el (org-redisplay-inline-images): New command. + (org-mode-map): Bind it to C-c C-x C-M-v. + + * org-colview.el (org-columns-get-format-and-top-level): Fix bug. + (org-columns-get-format): Fix compiler warning. + + * org-feed.el: Add declarations. + + * org-agenda.el (org-agenda-get-sexps): Use `org-get-tags-at' to + allow tag inheritance. + + * org-capture.el (org-capture): Fix bug introduced by commit + 1737d3. + + * org-publish.el (org-publish-needed-p) + (org-publish-update-timestamp, org-publish-file) + (org-publish-cache-file-needs-publishing): New argument + `base-dir'. + (org-publish-cache-ctime-of-src): Use the new argument to make + sure we find the file according to :base-directory. + + * org-capture.el (org-capture-string): New command to prompt for + the interactive text interactively. This can also be used in + Elisp programs to use ̀org-capture' with some initial text. + (org-capture-initial): New variable to store the initial text. + (org-capture): Use `org-capture-initial'. + + * org.el (org-emph-re): Tiny docstring formatting fix. + + * org-compat.el (org-labels): Remove. + + * org-bibtex.el (org-bibtex-headline): Don't use `org-labels'. + + * ob.el (org-babel-sha1-hash, org-babel-noweb-p): Ditto. + + * org.el (org-emph-re): Tiny formatting fix. + + * org.el (orgstruct-setup): Require `org-element'. + + * org.el (org-store-link, org-open-at-point): New link type + "help". + + * org-compat.el (org-flet): Remove alias. + + * ob.el (org-babel-edit-distance, org-babel-sha1-hash) + (org-babel-get-rownames, org-babel-insert-result) + (org-babel-merge-params) + (org-babel-expand-noweb-references): Don't use `org-flet'. Also + indent some functions correctly. + + * ob.el (org-babel-execute-src-block) + (org-babel-join-splits-near-ch, org-babel-format-result) + (org-babel-examplize-region): Don't use `org-flet'. + (org-babel-tramp-handle-call-process-region): Fix typo. + + * ob-awk.el (org-babel-awk-var-to-awk): Don't use `org-flet'. + + * ob-sh.el (org-babel-sh-var-to-string): Ditto. + + * ob-tangle.el (org-babel-tangle, org-babel-spec-to-string): Don't + use `org-flet'. + + * org-pcomplete.el (org-compat): Require. + + * ob-tangle.el (org-babel-load-file): Don't use `org-flet'. + + * org-bibtex.el (org-bibtex-write): Use let*. + + * org-plot.el (org-plot/gnuplot-script): Don't use `org-flet'. + + * org-bibtex.el (org-bibtex-headline, org-bibtex-fleshout) + (org-bibtex-read, org-bibtex-write): Don't use `org-flet'. + + * org-clock.el (org-clock-cancel): Use `org-looking-back'. + + * org-pcomplete.el (org-thing-at-point): Ditto. + + * org.el (org-timestamp-change): Ditto. + + * org-mouse.el (org-mouse-timestamp-today) + (org-mouse-set-priority, org-mouse-popup-global-menu) + (org-mouse-context-menu): Don't use ̀org-flet'. + + * org.el (org-priority): Fix docstring. + + * org-publish.el (org-publish-write-cache-file) + (org-publish-initialize-cache) + (org-publish-cache-file-needs-publishing) + (org-publish-cache-get): Small code clean-up. + + * org-publish.el (org-publish-cache-ctime-of-src): Simplify. + + * org-agenda.el (org-agenda-get-sexps): Add a 'tags property for + agenda entries created from sexps. + + * org-capture.el (org-capture-templates): Docstring clean up. + (org-capture-place-entry, org-capture-place-item) + (org-capture-place-plain-text, org-capture-place-table-line): + Ensure to always position the point according to %?. + + * org-table.el (org-table-convert-refs-to-rc): Fix bug when + converting remote table references. + + * org-agenda.el (org-agenda-switch-to): Run hooks in + ̀org-agenda-after-show-hook'. + + * ob-ref.el (org-babel-ref-index-list): Use let* and rename the + variable `length' to `lgth'. + + * org-plot.el (org-plot/gnuplot-to-grid-data): Don't use + ̀org-flet'. + + * org-exp.el (org-export-format-source-code-or-example): Ditto. + + * org-exp-blocks.el (org-export-blocks-preprocess): Ditto. + + * ob.el (org-babel-view-src-block-info) + (org-babel-execute-src-block, org-babel-edit-distance) + (org-babel-switch-to-session-with-code) + (org-babel-balanced-split, org-babel-insert-result): Ditto. + + * ob-ref.el (org-babel-ref-index-list): Ditto. + + * ob-python.el (org-babel-python-evaluate-session): Ditto. + + * ob-lob.el (org-babel-lob-get-info): Ditto. + + * ob-gnuplot.el (org-babel-expand-body:gnuplot): Ditto. + + * ob-exp.el (org-babel-exp-do-export): Ditto. + + * org-table.el (orgtbl-to-generic): Fix docstring. + + * org-clock.el (org-clock-in): Call `org-clock-out' with the new + argument `switch-to-state' set to nil. Fix docstring. + (org-clock-in-last): Prompt for a todo state to switch to when + called with three universal prefix arguments. Don't display a + message when the clock is already running. Update docstring. + (org-clock-out): New argument `switch-to-state'. When this + argument is non-nil, prompt for a state to switch the clocked out + task to, overriding `org-clock-out-switch-to-state'. + + * org.el (org-entry-get): Don't use `org-flet'. + + * org.el (org-forward-heading-same-level): Rename from + `org-forward-same-level'. + (org-backward-heading-same-level): Rename from + `org-backward-same-level'. + + * org.el (org-forward-element): Rename from `org-element-forward'. + (org-backward-element): Rename from `org-element-backward'. + (org-up-element): Rename from `org-element-up'. + (org-down-element): Rename from `org-element-down'. + (org-drag-element-backward): Rename from + `org-element-drag-backward'. + (org-drag-element-forward): Rename from + `org-element-drag-forward'. + (org-mark-element): Rename from `org-element-mark-element'. + (org-transpose-element): Rename from `org-element-transpose'. + (org-unindent-buffer): Rename from `org-element-unindent-buffer'. + (org-mode-map): Update the names of a commands. Remove useless + declarations. + + * org-element.el (org-element-forward, org-element-backward) + (org-element-up, org-element-down) + (org-element-drag-backward, org-element-drag-forward) + (org-element-mark-element, org-narrow-to-element) + (org-element-transpose, org-element-unindent-buffer): Move to + org.el. + + * org.el (org-forward-same-level): Fix typo in docstring. + + * org-agenda.el (org-agenda-mode-map): Bind + `org-agenda-show-priority' to `C-c,' instead of `P'. + (org-agenda-next-item, org-agenda-previous-item): New commands to + move by one item down/up in the agenda. + (org-agenda-mode-map): Bind `org-agenda-next-item' and + `org-agenda-previous-item' to `N' and `P' respectively. + + * org-rmail.el (org-rmail-store-link, org-rmail-follow-link): + Toggle headers when necessary. + + * org-element.el (org-narrow-to-element): Autoload. + + * org.el (org-mode-map): Use `M-h' for `org-element-mark-element'. + (org-mark-subtree): Allow a numeric prefix argument to move up + into the hierarchy of headlines. + + * org-element.el (org-element-up, org-element-down): Autoload. + + * org.el: Declare functions and don't require org-element. + + * org-element.el (org-element-at-point, org-element-forward) + (org-element-backward, org-element-drag-backward) + (org-element-drag-forward, org-element-mark-element) + (org-element-transpose, org-element-unindent-buffer): Autoload. + Require 'org and remove all declarations. + + * org.el (org-outline-regexp-bol, org-heading-regexp): Use + variables instead of constants. + + * org-archive.el (org-datetree-find-date-create): Declare. + + * org.el (org-open-at-point): Only set + `clean-buffer-list-kill-buffer-names' when the feature 'midnight + has been loaded. + + * org-icalendar.el (org-print-icalendar-entries): Let + APPT_WARNTIME take precedence over ̀org-icalendar-alarm-time'. + + * org.el (org-special-properties): New special property + CLOCKSUM_T. + (org-entry-properties): Handle the new special property. + + * org-colview.el (org-columns): Handle a new special property + CLOCKSUM_T. + (org-agenda-colview-summarize, org-agenda-colview-compute): Ditto. + + * org-clock.el (org-clock-sum-today): New function. + (org-clock-sum): New argument PROPNAME to set a custom text + property instead of :org-clock-minutes. + + * org-agenda.el (org-agenda-check-type): Throw a more appropriate + error message when no agenda is currently being displayed. + + * org.el (org-get-property-block): Find blocks before the first + headline. + (org-entry-properties): Minor code cleanup. + (org-entry-get, org-entry-get-with-inheritance): Get property + before the first headline. + + * org-mobile.el (org-mobile-create-index-file): Use `files-alist'. + + * org.el (org-make-link): Delete. + (org-store-link, org-insert-link) + (org-file-complete-link): Don't use `org-make-link'. + + * org-wl.el (org-wl-store-link-folder) + (org-wl-store-link-message): Ditto. + + * org-vm.el (org-vm-store-link): Ditto. + + * org-rmail.el (org-rmail-store-link): Ditto. + + * org-mhe.el (org-mhe-store-link): Ditto. + + * org-mew.el (org-mew-store-link): Ditto. + + * org-irc.el (org-irc-erc-store-link): Ditto. + + * org-info.el (org-info-store-link): Ditto. + + * org-id.el (org-id-store-link): Ditto. + + * org-gnus.el (org-gnus-group-link, org-gnus-article-link): Ditto. + + * org-eshell.el (org-eshell-store-link): Ditto. + + * org-bbdb.el (org-bbdb-store-link): Ditto. + + * org.el (org-url-hexify-p): New option. When non-nil (the + default), hexify URLs when creating a link. + + * org.el (org-insert-link): Make sure point is at the beginning of + the buffer. + + * org.el (clean-buffer-list-kill-buffer-names): Declare. + (org-open-at-point): Allow opening multiple shell links by + creating a new output buffer for each shell process. The new + buffer is added to `clean-buffer-list-kill-buffer-names'. + + * org-mobile.el (org-mobile-create-index-file): Use + `org-global-tags-completion-table' instead of + `org-tag-alist-for-agenda' to get the tags for the index file. + + * org.el (org-global-tags-completion-table): Fix typo in + docstring. + + * org.el (org-link-to-org-use-id): Use `org-capture' instead of + `org-remember' in the docstring. + (org-link-fontify-links-to-this-file): New function to fontify + links to the current buffer in `org-stored-links'. + (org-store-link): Small code simplification. + (org-link-prettify): Enclose literal links into <...> instead of + [[...]]. + (org-insert-link): Use `org-link-fontify-links-to-this-file'. + Also allow completion over links' descriptions, as well as links + destinations. When the user uses the description for completion, + don't prompt again for a description. + + * org-capture.el (org-capture-templates): Fix docstring by adding + Gnus to the list of mail clients. + + * org.el (org-log-repeat): Enhance docstring. + + * org.el (org-mode-map): Don't bind C- and C- to + `org-element-backward/forward' as these functions stops when there + is no element of the same type before/after point. It is useful + to navigate with `forward/backward-paragraph' with no stop in most + cases. + + * org-capture.el (org-capture-templates): New template %l to + insert the literal link pointing at the current buffer. + + * org.el (org-todo-keywords): Ditto. + + * org.el (org-fill-paragraph): Falls back on + `message-fill-paragraph' if required in `message-mode'. + + * org-pcomplete.el (pcomplete/org-mode/file-option/x): New macro. + (pcomplete/org-mode/file-option/options) + (pcomplete/org-mode/file-option/title) + (pcomplete/org-mode/file-option/author) + (pcomplete/org-mode/file-option/email) + (pcomplete/org-mode/file-option/date): Use the new macro to offer + completion over default values for #+OPTIONS, #+TITLE, #+AUTHOR, + #+EMAIL and #+DATE. + + * org-agenda.el (org-agenda-write): Fix bug when writing agenda to + an external file while `org-agenda-sticky' is non-nil. + + * org.el (org-speed-commands-default): New speedy command to + quickly add the :APPT_WARNTIME: property. + + * org-agenda.el (org-agenda-to-appt): Use the :APPT_WARNTIME: + property to override `appt-message-warning-time' when adding an + appointment from an entry. + + * org.el (org-version): Improve docstring. + (org-self-insert-cluster-for-undo): The default value should be + nil for Emacs >=24.1. See bug#11774. + + * org.el (org-fontify-meta-lines-and-blocks-1): Fix previous + commit. + + * org.el (org-options-keywords): New constant. + (org-additional-option-like-keywords): Remove duplicates with + keywords in the new constant. + (org-additional-option-like-keywords-for-flyspell): Use the new + constant. + (org-mode-flyspell-verify): Exclude keywords from the new + constant. + + * org-pcomplete.el (pcomplete/org-mode/file-option): Use + `org-options-keywords'. + + * org.el (org-toggle-heading): Bugfix: use + `org-element-mark-element' instead of `org-mark-list'. + + * org-list.el (org-mark-list): Delete. + + * org.el: Update a few keybindings. + + * org-element.el (org-element-down): Throw an error when the + element has no content. + + * org-table.el (orgtbl-radio-table-templates): Add a template for + org-mode. + (orgtbl-to-orgtbl): Complete and align the table created with + orgtbl-to-orgtbl, in case the user use the function for radio + tables. + (orgtbl-to-table.el): New function to export a table to another + one using the table.el format. + (orgtbl-to-unicode): New function to export a table using unicode + characters. + + * org-exp.el (org-export-language-setup): Use "Sommaire" for the + french translation of "Table of contents", to avoid a possible bug + when exporting to ODT. + + * org.el (org-additional-option-like-keywords): Add keywords. + (org-additional-option-like-keywords-for-flyspell): New constant + to use with flyspell. + (org-mode-flyspell-verify): Use the dedicated constant and don't + check `org-startup-options'. + + * org-agenda.el (org-batch-store-agenda-views): Use the sticky + agenda buffer name, if required. + (org-agenda-write): New parameter `agenda-bufname' to allow + setting the agenda buffer name. + + * org.el (org-mode-map): Add keybindings for + `org-element-forward', `org-element-backward', `org-element-up' + and `org-element-down'. + + * org.el (org-auto-fill-function): Don't call `do-auto-fill' + within (org-let org-fb-vars ...) as `do-auto-fill' should do the + right thing whether orgstruct++-mode is turned on or off. + + * org.el (org-sparse-tree-default-date-type): New option. + (org-ts-type): New variable. + (org-sparse-tree): New argument `type'. Use the new option + `org-sparse-tree-default-date-type' as the default value for + `type'. Fix docstring. + (org-re-timestamp): New function. + (org-check-before-date, org-check-after-date) + (org-check-dates-range): Use `org-ts-type' and `org-re-timestamp' + to tell compute the date regexp. + + * org.el (orgstruct++-mode, org-get-local-variables): Also set + `normal-auto-fill-function' when turning on/off orgstruct++-mode. + + * org-agenda.el (org-agenda-start-with-log-mode): Add relevant + customization types. + + * org-faces.el (org-document-title): Use the normal height. + + * org-clock.el (org-x11idle-exists-p): New variable. + (org-user-idle-seconds): Use it. + + * org.el (org-mode-map): Rebind `org-insert-all-links' to `C-c + C-M-l'. + + * org.el (org-insert-all-links): New command. + (org-insert-link): `org-keep-stored-link-after-insertion' is now + checked when the link to insert has been defined, regardless on + how it has been defined. Also don't read the description + interactively when the `default-description' parameter was given. + (org-mode-map): Bind `org-insert-all-links' to `C-c C-L'. + + * org.el (org-inc-effort): New command to increment the effort + property. + (org-set-effort): Use it. + (org-mode-map): Bind it to `C-c C-x E'. + (org-speed-commands-default): Use `E' as a speed command for it. + + * org.el (org-re-property-keyword): New function. + (org-entry-put): Use it to fix a bug with respect to setting the + value of a property when a property line with no value already + exists. + + * org.el (org-timestamp-change): Adjust clock in other org files + correctly. + + * org-clock.el (org-user-idle-seconds): Simplify. + + * org.el (org-mode-map): Bind `org-resolve-clocks' to `C-c C-x + C-z'. + + * org.el (org-mode-map): Add keybindings to + `org-element-transpose' and `org-narrow-to-element'. + (org-metaup): Fall back on `org-element-drag-backward'. + (org-metadown): Fall back on `org-element-drag-forward'. Also + move chunks of declarations and require statements to get rid of + compiler warnings. + + * org-exp-blocks.el (org): Don't require org. Add declarations. + + * org-clock.el (org): Don't require org. + + * ob-exp.el (org-list-forbidden-blocks): Add declarations. + + * org.el (org-timestamp-change): Don't use the `position'. + + * org.el (org-clock-history, org-clock-adjust-closest): New + variables. + (org-timestamp-change): Maybe adjust the next or previous clock in + `org-clock-history'. + (org-shiftmetaup, org-shiftmetadown): On clock logs, update the + timestamp at point and adjust the next or previous clock in + `org-clock-history', when possible. + + * org-clock.el (org-clock-in): Set the marker for + `org-clock-history' at a safer position. + + * org-timer.el (org-timer-pause-or-continue, org-timer-stop): + Autoload. + + * org-mobile.el (org-mobile-post-pull-hook): Fix docstring. + + * org.el (org-indent-line): Fix indentation of a property line + starting at the beginning of a line. + + * org-odt.el (org-odt-cleanup-xml-buffers): Use the new alias. + + * org-compat.el: Alias `org-condition-case-unless-debug' to + `condition-case-unless-debug' or `condition-case-no-debug'. + + * org.el (org-todo-keywords): Ditto. + + * org.el (org-use-fast-todo-selection): Reformat docstring. + + * org.el (org-flag-drawer): Add a docstring. + (org-mode-map): Bind ̀org-clock-cancel' to "C-cC-xC-q" and + `org-clock-in-last' to "C-cC-xC-x". This fixes a bug in the + previous keybinding for `org-clock-in-last', which would override + the one for `org-clock-in'. + + * org-clock.el (org-clock-in-last): Prevent errors when there is + no clocking history. + (org-clock-cancel): Fix bug when checking against a clock log in a + folded drawer. + + * org.el (org-link-expand-abbrev): Implement "%(my-function)" as a + new specifier. Update the docstring. + + * org.el (org-startup-options): Fix docstring formatting. + + * org.el (org-use-sub-superscripts): Fix typo in docstring. + + * org.el (org-refile): Fix bug: prevent looping when calling + `org-set-tags' internally. + + * org.el (org-mode-map): Add `C-c C-x C-I' as a keybinding for + `org-clock-in-last'. + + * org-clock.el (org-clock-continuously): New option. + (org-clock-in): Three universal prefix arguments set + `org-clock-continuously' to `t' temporarily. + (org-clock-in-last): Fix call to `org-clock-select-task' and + support continuous clocking. + (org-clock-out-time): New variable. + (org-clock-out): Set `org-clock-out-time' when clocking out. + Small docstring rewriting. + (org-clock-remove-empty-clock-drawer): Fix "invalid search bound" + bug when trying to delete empty logbook drawer. + (org-clock-cancel): If the clock log is gone, send a warning + instead of deleting the region that is supposed to contain it. + + * org.el (org-move-line-down, org-move-line-up): Remove. + (org-metaup, org-metadown): When the region is active, move it + up/down by one line, with no regard to the context. + + * org-odt.el (org-odt-cleanup-xml-buffers): Use the new alias. + + * org-compat.el: Alias `org-condition-case-unless-debug' to + `condition-case-unless-debug' or `condition-case-no-debug'. + + * org-pcomplete.el (org-thing-at-point): Ignore trailing + whitespaces while looking-back at properties. + + * org.el (org-mode): Set `indent-region-function'. + (org-indent-region): New function. + (org-fill-paragraph): When in a src block, use `indent-region' to + indent the whole source code instead of falling back on + `fill-paragraph', as this function messes up the code. + + * org-src.el (org-edit-src-code): Fix docstring formatting. + + * ob.el (org-babel-do-key-sequence-in-edit-buffer): Ditto. + + * org.el (org-mode, org-add-log-setup) + (org-get-property-block, org-entry-put) + (org-property-next-allowed-value, org-return) + (org-indent-line): Rename `org-indent-line-function' to + `org-indent-line'. + + * org-timer.el (org-timer-item): Ditto. + + * org-table.el (org-table-store-formulas): Ditto. + + * org-clock.el (org-clock-in, org-clock-find-position): Ditto. + + * org-src.el (org-src-font-lock-fontify-block) + (org-src-strip-leading-and-trailing-blank-lines) + (org-src-ask-before-returning-to-edit-buffer) + (org-edit-src-code, org-edit-src-continue) + (org-edit-fixed-width-region) + (org-src-do-key-sequence-at-code-block) + (org-src-font-lock-fontify-block, org-src-fontify-buffer): Fix + typos in docstrings. + + * org-docbook.el (org-export-docbook-emphasis-alist): Fix typo: + use "format string" instead of "formatting string". + + * org-latex.el (org-export-latex-emphasis-alist) + (org-export-latex-title-command, org-export-latex-tables): Ditto. + + * org-html.el (org-export-html-postamble): Ditto. + + * org-latex.el (org-export-latex-hyperref-options-format): New + option. + (org-export-latex-make-header): Use it. + + * ob.el (org-babel-confirm-evaluate): Prevent errors when + `org-current-export-file' is void. + + * org-table.el (org-table-export): Use the file name extension to + suggest the right conversion format. Also amend the docstring. + + * org.el (org-speed-commands-default): Two new speed commands. + Use `:' for `org-columns' and ̀#' for `org-toggle-comment'. + + * org.el (org-time-stamp): With two universal arguments, insert an + active timestamp with the current time without prompting the user. + + * org-clock.el (org-clock-in-last): New command. + + * org-clock.el (org-clock-in): Fix typo in docstring. + + * org-mobile.el (org-mobile-edit): Fix reference to a free + variable. + + * org.el (org-doi-server-url): Update :group. + + * ob-lob.el (org-babel-lob-execute): Fix reference to non-existent + variable. + + * org.el (org-doi-server-url): New option. + (org-open-at-point): Use it. + + * org.el (org-at-comment-p): New function. + (org-toggle-heading): Use `org-at-comment-p' to skip comments. + + * org-html.el (org-export-as-html): Add links to the Org mode and + GNU Emacs websites When :html-postamble is set to 't. + + * org-export.el (org-export-creator-string): Add links to the Org + mode and GNU Emacs websites. + + * org-special-blocks.el + (org-special-blocks-convert-html-special-cookies): Prevent errors + by first checking `org-line' is not nil. + + * org-clock.el (org-clock-string-limit) + (org-clock-modeline-total, org-clock-task-overrun-text) + (org-clock-mode-line-entry): Doc fix, "modeline" -> "mode line". + + * org.el (org-at-timestamp-p): Set ̀org-ts-what' to 'after when the + point is right after the timestamp. `org-at-timestamp-p' still + returns `t' in this case, as this is more practical. + (org-return): Check against ̀org-ts-what' to verify that point is + really within the timestamp (if any). + + * org.el (org-return): Follow time-stamp links when point is an a + time-stamp. + + * org-capture.el (org-capture-bookmark): New option. + (org-capture-finalize): Use it. + + * org-publish.el (org-publish-cache-file-needs-publishing): Make + the column mandatory after #+include:. + + * org-exp.el (org-export-handle-include-files): Ditto. + + * org-bibtex.el (org-bibtex-entries): Rename from + (org-bibtex-read, org-bibtex-write): Use the new name. + + * org-exp.el (org-export-handle-include-files): Allow to use + #+include with no column. + + * org-publish.el (org-publish-cache-file-needs-publishing): Make + quotes mandatory around the file name and allow spaces in it. + + * org-html.el (org-export-as-html): Add link to Org's and Emacs's + websites. + + * org-latex.el + (org-export-latex-link-with-unknown-path-format): New option. + (org-export-latex-links): Use it. + + * org-agenda.el (org-agenda-get-timestamps): Remove any active + timestamp from the headline text, not only those for the current + date. + + * org.el (org-set-tags): Allow setting tags for headlines in the + region when `org-loop-over-headlines-in-active-region' is non-nil. + + * org.el (org-allow-promoting-top-level-subtree): New option to + allow promoting a top-level subtree. + (org-called-with-limited-levels): New variable, dynamically bound + within the `org-with-limited-levels' macro. + (org-promote): Use the new option to allow promoting a top-level + subtree. + + * org-macs.el (org-with-limited-levels): Let-bind + `org-called-interactively-p' to t. + + * org.el (org-create-formula-image-with-dvipng) + (org-create-formula-image-with-imagemagick): Make sure a file + exists before trying to delete it. + + * org.el (org-scan-tags): Correctly match TODO keywords. + + * org-agenda.el (org-agenda-bulk-action): Fix bug: use + `org-agenda-bulk-unmark-all'. + + * org.el (orgstruct++-mode): Fix docstring. + (org-fill-paragraph): Use the 'justify parameter when falling back + on `fill-paragraph'. + + * org.el (org-indent-line-function): Use `org-let' instead of + `orgstruct++-ignore-org-filling'. + (org-fill-paragraph, org-auto-fill-function): Ditto. + + * org-macs.el (orgstruct++-ignore-org-filling): Delete. + + * org-table.el (org-table-time-string-to-seconds): Return the + empty string if provided. + (org-table-eval-formula): When assigning a duration string, handle + it correctly -- i.e. don't make any computation on it, except the + one to insert it using the correct duration format. + + * org.el (org-indent-line-function): Fix bug. + + * org-clock.el (org-frame-title-format-backup): New variable to + store the value of `frame-title-format' before `org-clock' might + replace it by `org-clock-frame-title-format'. + (org-clock-frame-title-format): New option. + (org-frame-title-string): Delete. + (org-clock-update-mode-line): Minor code reformatting. + (org-clock-in, org-clock-out, org-clock-cancel): Use + `org-clock-frame-title-format'. + + * org-clock.el (org-clock-get-clock-string): Add a space. + + * org-list.el (org-mark-list): Return an error when there is no + list at point. + + * org.el (org-toggle-heading): Allow `C-u C-c *' to mark the list + at point before converting items to headings. With a simple + universal-argument, set `current-prefix-arg' to 1, otherwise keep + the numeric value. + + * org-agenda.el (org-agenda-view-mode-dispatch): Make the message + more readable. + + * org-agenda.el (org-agenda-mode-map): New keybinding ̀*' to mark + all entries for bulk action. + (org-agenda-menu): New menu item for marking all entries. + (org-agenda-bulk-mark-all): New function to mark all entries. + (org-agenda-bulk-mark-regexp): Minor docstring fix. + (org-agenda-bulk-unmark): With a prefix argument, unmark all. + Also send a better message. + (org-agenda-bulk-remove-all-marks): Rename to + `org-agenda-bulk-unmark-all'. Check against + `org-agenda-bulk-marked-entries' before trying to unmark entries. + Minor docstring fix. + (org-agenda-bulk-unmark-all): Renamed from + ̀org-agenda-bulk-remove-all-marks'. + + * org-agenda.el (org-agenda-bulk-mark-char): New option. + (org-agenda-bulk-mark): Use the new option. + + * org.el (org-src-prevent-auto-filling): New option to prevent + auto-filling in src blocks. This defaults to nil to avoid people + being surprised that no auto-fill occurs in Org buffers where they + use `auto-fill-mode'. + (org-auto-fill-function): Use the new option. + + * org.el (org-properties-postprocess-alist): Better customization + type. + (org-set-property): Fix the check against + `org-properties-postprocess-alist'. + + * org-macs.el (orgstruct++-ignore-org-filling): Set + `def-edebug-spec' correctly. + + * org-colview.el (org-columns-string-to-number): When computing + the values for the colview, match durations and convert them to + HH:MM values. + + * org.el (org-duration-string-to-minutes): Match non-round + numbers. Add a new optional parameter to allow returning the + output as a string. + + * org.el (org-auto-fill-fallback-function) + (org-indent-line-fallback-function) + (org-fill-paragraph-fallback-function) + (org-auto-fill-fallback-function) + (org-indent-line-fallback-function) + (org-fill-paragraph-fallback-function): Remove. + (org-fb-vars): New buffer-local variable. + (orgstruct++-mode): Use the fallback variable `org-fb-vars' to + store, use and restore variables if needed. + (org-fill-paragraph): Ignore `orgstruct++-mode' filling variables + when needed. + (org-auto-fill-function, org-indent-line-function): Ditto. + + * org-macs.el (orgstruct++-ignore-org-filling): New macro. + + * org-exp-block.el: Use `org-find-library-name' instead of + `find-library-name'. + + * org-compat.el (org-find-library-name): Convert into a macro to + avoid compilation of a function from XEmacs in Emacs and vice + versa. + + * org-table.el (org-table-store-formulas): Fix typo. + (org-table-maybe-eval-formula): Fix the regexp to only match + formulas, which never end with the `=' character. If the field + only contain this character, don't eval either. + + * org.el (org-set-property): Perform the correct check against + `org-properties-postprocess-alist'. + + * org-bbdb.el (org-bbdb-anniversary-format-alist): Update the + customization type. + (name): Suppress (defvar 'name) as name is not eval'ed when + setting `org-bbdb-anniversary-format-alist'. + + * org.el (org-version): When called non-interactively, insert the + short version string, otherwise send a message with the complete + version string. + + * org-odt.el (org-odt-update-meta-file): Use (org-version) and + delegate checking whether `org-version' is known as a variable + there. + + * org-html.el (org-export-as-html): Use (org-version). + + * org-docbook.el (org-export-as-docbook): Ditto. + + * org-latex.el (org-export-latex-make-header): Ditto. + + * org-clock.el (org-clocktable-write-default): Temporarily disable + `delete-active-region' so that we don't accidently delete an + active region when exporting a subtree/region. + + * org-clock.el (org-program-exists): Remove. + (org-show-notification, org-clock-play-sound): Use + `executable-find' instead of `org-program-exists'. + + * org-agenda.el (org-diary): Prevent failure from + `org-compile-prefix-format' when there is no agenda buffer. + + * org-agenda.el (org-agenda-mode): Replace obsolete variable + `buffer-substring-filters'. + + * org-indent.el (org-indent-mode): Ditto. + + * org-compat.el (org-find-library-name): Silent the byte-compiler + about a warning related to XEmacs support. + + * org-special-blocks.el + (org-special-blocks-convert-html-special-cookies): Use `org-line' + instead of `line'. + + * org-html.el (org-html-handle-links, org-export-as-html) + (org-format-org-table-html, org-format-table-table-html) + (org-html-export-list-line): Use `org-line' instead of `line' as + the free variable name. + + * org-latex.el (org-export-latex-tables): Let-bind `hfmt'. + + * org-faces.el (org-list-dt): New face. + + * org.el (org-set-font-lock-defaults): Use `org-list-dt' as the + face for definition terms in definition lists. + + * org.el (org-fill-paragraph): Pass the `justify' argument to + `org-fill-paragraph-fallback-function'. + + * org.el (org-eval-in-calendar): Fix docstring to mention the + KEEPDATE parameter. + + * org.el (org-refresh-category-properties): Let-bind + `inhibit-read-only' to t. + + * org.el (org-auto-fill-fallback-function) + (org-indent-line-fallback-function) + (org-fill-paragraph-fallback-function): New variables to store + some fall-back functions when turning `orgstruct++-mode' on. + (orgstruct++-mode): Set the new variables. + (org-indent-line-function, org-fill-paragraph) + (org-auto-fill-function): Use them. + + * org.el (org-read-date): Bugfix: call `org-eval-in-calendar' with + the 'keepdate parameter set to t when setting the cursor type. + + * org-agenda.el (org-agenda-persistent-marks): New option to keep + marks after a bulk action. The option defaults to nil. + (org-agenda-bulk-action): Use the new option. + + * org-capture.el (org-capture-fill-template): Use %\n instead of + %n as a template element to be replaced with the nth prompted + string. + (org-capture-templates): Update docstring. + + * org.el (org-goto): Fix docstring and document what C-u does. + + * org-publish.el (org-publish-cache-file-needs-publishing): Use + (case-fold-search t) when looking for #+INCLUDE:. + + * org.el: Use (case-fold-search t). + (org-edit-special, org-ctrl-c-ctrl-c): Ditto. + + * org-table.el: + (org-table-store-formulas, org-table-get-stored-formulas) + (org-table-fix-formulas, org-table-edit-formulas) + (org-old-auto-fill-inhibit-regexp, orgtbl-ctrl-c-ctrl-c) + (orgtbl-toggle-comment, org-table-get-remote-range): Ditto. + + * org-footnote.el: + (org-footnote-goto-local-insertion-point): Ditto. + + * org-exp.el: Ditto. + + * org-colview.el: + (org-dblock-write:columnview, org-dblock-write:columnview): Ditto. + + * org-clock.el (org-clocktable-write-default): Ditto. + + * org-capture.el (org-capture-place-table-line): Ditto. + + * ob.el (org-babel-data-names, org-babel-goto-named-src-block) + (org-babel-src-block-names) + (org-babel-where-is-src-block-result, org-babel-result-end) + (org-babel-where-is-src-block-head) + (org-babel-find-named-result, org-babel-result-names): Ditto. + + * org-table.el (orgtbl-send-table): Escape special characters. + Introduce a new parameter :no-escape to prevent escaping. + + * org-agenda.el (org-toggle-sticky-agenda): Only shout a message + when called interactively. + (org-agenda-get-restriction-and-command): Call + `org-toggle-sticky-agenda' interactively. + + * org-agenda.el (org-agenda-top-category-filter): New variable for + storing the current top-category filter. + (org-agenda-redo): Apply a top-category filter, if any. + (org-agenda-filter-by-top-category) + (org-agenda-filter-top-category-apply): Set + `org-agenda-top-category-filter' to the right value. + + * org-clock.el (org-clock-out, org-clock-cancel) + (org-clock-in): Don't modify `frame-title-format' if it is a + string. + + * org-latex.el (org-export-latex-special-chars): Fix bug when + escaping special characters in a table. + + * org.el (org-read-date): Set cursor-type to nil in the calendar. + + * org-faces.el (org-date-selected): Use inverse video. Don't + explicitely set bold to nil as it causes `customize-face' to show + the weight property and thus encourage the user to change it. + Warn in the docstring that using bold might cause problems when + displaying the calendar. + + * org-id.el (org-id-update-id-locations): New parameter to silent + `org-id-find'. + (org-id-find): Use the new parameter. + + * org.el (org-show-hierarchy-above, org-cycle) + (org-global-cycle, org-files-list, org-store-link) + (org-link-search, org-open-file, org-display-outline-path) + (org-refile-get-location, org-update-all-dblocks) + (org-change-tag-in-region, org-entry-properties) + (org-save-all-org-buffers, org-revert-all-org-buffers) + (org-buffer-list, org-cdlatex-mode) + (org-install-agenda-files-menu, org-end-of-subtree) + (org-speedbar-set-agenda-restriction): Use (derived-mode-p + 'org-mode) instead of (eq major-mode 'org-mode). + + * org-timer.el (org-timer-set-timer): Ditto. + + * org-table.el (orgtbl-mode, org-table-align, orgtbl-mode): Ditto. + + * org-src.el (org-edit-src-exit, org-edit-src-code) + (org-edit-fixed-width-region, org-edit-src-exit): Ditto. + + * org-remember.el (org-remember-handler): Ditto. + + * org-mouse.el (dnd-open-file, org-mouse-insert-item): Ditto. + + * org-macs.el (org-get-limited-outline-regexp): Ditto. + + * org-lparse.el (org-replace-region-by): Ditto. + + * org-latex.el (org-latex-to-pdf-process) + (org-replace-region-by-latex): Ditto. + + * org-indent.el (org-indent-indent-buffer): Ditto. + + * org-id.el (org-id-store-link, org-id-update-id-locations) + (org-id-store-link): Ditto. + + * org-html.el (org-export-html-preprocess) + (org-replace-region-by-html): Ditto. + + * org-footnote.el (org-footnote-normalize) + (org-footnote-goto-definition) + (org-footnote-create-definition, org-footnote-normalize): Ditto. + + * org-docbook.el (org-replace-region-by-docbook): Ditto. + + * org-ctags.el (find-tag): Ditto. + + * org-colview.el (org-columns-redo) + (org-columns-display-here, org-columns-edit-value) + (org-columns-redo): Ditto. + + * org-capture.el (org-capture-insert-template-here) + (org-capture, org-capture-finalize) + (org-capture-set-target-location) + (org-capture-insert-template-here): Ditto. + + * org-ascii.el (org-replace-region-by-ascii): Ditto. + + * org-archive.el (org-archive-subtree): Ditto. + + * org-agenda.el (org-agenda) + (org-agenda-get-restriction-and-command) + (org-agenda-get-some-entry-text, org-search-view) + (org-tags-view, org-agenda-get-day-entries) + (org-agenda-format-item, org-agenda-goto, org-agenda-kill) + (org-agenda-archive-with, org-agenda-switch-to): Ditto. + + * org.el (org-repeat-re) + (org-clone-subtree-with-time-shift, org-auto-repeat-maybe) + (org-deadline, org-schedule, org-matcher-time) + (org-time-stamp, org-read-date, org-read-date-get-relative) + (org-display-custom-time, org-get-wdays) + (org-time-string-to-absolute, org-closest-date) + (org-timestamp-change): Allow to set hourly repeat cookie. Send + an error when an hourly repeat cookie is set and no hour is + specified in the timestamp. + + * org-icalendar.el (org-print-icalendar-entries): Handle hourly + repeat cookies. + + * org-clock.el (org-program-exists): Fix docstring. + + * org-clock.el (org-clock-file-time-cell-format): New option. + (org-clocktable-write-default): Use it. + + * org-faces.el (org-date-selected): New face. + + * org.el (org-date-ovl): Use `org-date-selected'. + + * org.el (org-mode): Don't use `buffer-face-mode' by default. + + * org-agenda.el (org-agenda-mode-map): Bind `^' to + `org-agenda-filter-by-top-category'. + + * org-ascii.el (org-export-ascii-underline): Change the default + underlining characters for headlines of level 1 and 2. Also + introduce \. as the underline character for headlines of level 5. + + * org-table.el (org-table-recalculate-buffer-tables) + (org-table-iterate-buffer-tables): Add autoload cookie. + + * org.el (org-table-map-tables): Exclude tables in src and example + blocks. + + * org.el (org-fill-paragraph): Leave scheduled/deadline lines + untouched when filling an adjacent paragraph. + + * org-html.el (org-export-html-preamble-format) + (org-export-html-postamble-format): Improve the docstring. + + * org.el (org-todo): Fix regression: rename `state' to + `org-state'. + + * org-clock.el (org-show-notification): Use `fboundp' instead of + `featurep' and the additional `require'. + + * org-clock.el (org-clock-in-prepare-hook): New option to format + the total time cells. + (org-clocktable-write-default): Use the new option. + + * org.el (org-open-at-point): Allow to open the agenda from an + active or inactive timestamp in a headline. + + * org-html.el (org-export-html-date-format-string): Make a + defcustom. + + * org-latex.el (org-export-as-latex): Fix TeX-master declaration. + +2012-09-30 Carsten Dominik + + * org-table.el (org-table-expand-lhs-ranges): Allow hline + references to be expanded correctly in LHS of formulas. + + * org-beamer.el (org-beamer-inherited-properties): New option. + (org-beamer-after-initial-vars): Use new option to look for + inherited properties. + + * org.el (org-ts-regexp0): Allow time stamps without name of day. + + * org-agenda.el (org-toggle-sticky-agenda): + (org-agenda-sticky): Improve :set property. + + * org-agenda.el (org-agenda-local-vars): Clean up the variable + list. + (org-agenda-get-restriction-and-command): Add a key for toggling + sticky agenda views. + + * org-agenda.el (org-agenda-local-vars): Final decisions about + global/local + + * org-agenda.el (org-agenda-force-single-file): Variable removed. + (org-prepare-agenda-window): Store pre-agenda window config + locally. + (org-timeline): Introduce a scoped version of + `org-agenda-show-log'. + (org-agenda-list): Introduce a scoped version of + `org-agenda-show-log'. + (org-agenda-get-progress): Use the scoped version of + `org-agenda-show-log'. + (org-agenda-local-vars): Write the analysis result as a comment - + to be cleaned up in the next iteration. + + * org-agenda.el (org-toggle-sticky-agenda): Kill all agenda + buffers when toggling sticky-agendas. + (org-agenda-get-restriction-and-command): Add `C-c a C-k' as a key + to explicitly kill all agenda buffers. + (org-agenda-run-series): Remove any old agenda markers in the + buffer that is going to take the new block agenda. + (org-prepare-agenda): Reset markers before erasing the buffer anc + running `org-agenda-mode', because after that hte local variable + `org-agenda-markers' will have gone away. + (org-agenda-Quit): + (org-finalize-agenda): Install the marker resetter into the + `kill-buffer-hook'. + (org-agenda-save-markers-for-cut-and-paste): Look for markers in + all agenda buffers. + (org-agenda-kill-all-agenda-buffers): New function. + +2012-09-30 Chris Gray + + * org-html.el (org-export-as-html): Remove the check for body-only + in the code for generating tables of contents. + +2012-09-30 Christoph Dittmann (tiny change) + + * org-beamer.el (org-beamer-auto-fragile-frames): Make + [fragile] work with overlay specifications. + +2012-09-30 Christophe Junke (tiny change) + + * org-agenda.el (org-agenda-list): Ensures that the list returned + by `org-agenda-add-time-grid-maybe' is appended to ̀rtnall' before + checking if the latter is emtpy. + +2012-09-30 Christophe Junke (tiny change) + + * org-agenda.el (org-agenda-list): Ensure that the list returned + by `org-agenda-add-time-grid-maybe' is appended to `rtnall' before + checking if the latter is emtpy. + +2012-09-30 Christophe Rhodes (tiny change) + + * org-latex.el (org-export-latex-tables): Support setting the + :hfmt parameter from #+ATTR_LaTeX. + +2012-09-30 Daniel Dehennin (tiny change) + + * org-exp.el (org-export-handle-include-files) + (org-get-file-contents): Handle new parameter :addlevel. + +2012-09-30 Dave Abrahams (tiny change) + + * org.el (org-link-prettify): New function to prettify links while + displaying them with `org-insert-link'. + (org-insert-link): Use the new function. + +2012-09-30 David Maus + + * org-exp.el (org-export-language-setup): Use numeric character + entities for proper rendering of non-UTF8 documents. + + * org-exp.el (org-export-language-setup): Add japanese + translation. + +2012-09-30 Eric Schulte + + * ob-sh.el (org-babel-sh-evaluate): Don't could 0-length shebangs. + + * ob.el (org-babel-insert-result): Replace key sequence with + function call. Use a more informative flag to the local function. + (org-add-protective-commas): Declare a new external function. + + * org-src.el (org-add-protective-commas): This should be its own + function. + (org-edit-src-exit): Use the new function. + + * org-compat.el (org-labels): Remove. + + * org-bibtex.el (org-bibtex-headline): Don't use `org-labels'. + + * ob.el (org-babel-sha1-hash, org-babel-noweb-p): Ditto. + + * ob.el (org-babel-string-read): Don't automatically evaluate code + block results which look like elisp. + (org-babel-import-elisp-from-file): Raise a warning message when + the process of reading code block results raises an error. + + * ob-tangle.el (org-babel-with-temp-filebuffer): Don't execute + macro argument multiple times. + + * org.el (org-compat): Require org-compat before we first use one + of its functions (a macro actually). + + * ob-comint.el (org-babel-comint-with-output): Don't name the + filter function, but rather pass through the anonymous lambda + directly. + + * org.el (org-babel-load-languages): Common lisp should be + mentioned as a supported babel language. + + * org-clock.el (org-clock-special-range): "concat 'string" -> + "concat" + (org-clocktable-shift): "concat 'string" -> "concat" + + * org-bibtex.el (org-bibtex-headline): Replacing org-flet with + org-labels. + + * ob-calc.el (org-babel-execute:calc): Strip single quotes from + calc internal representations. + + * org-clock.el (org-clock-special-range): Replacing cl concatenate + with concat. + (org-clocktable-shift): Replacing cl concatenate with concat. + + * ob.el (org-babel-edit-distance): Remove use of map at runtime. + + * org-compat.el (org-flet): Compatibility function now that flet + has been removed from cl-macs. + (org-labels): Compatibility function now that labels has been + removed from cl-macs. + + * ob-R.el (org-compat): Require org-compat. + + * ob-comint.el: Require org-compat. + + * ob-exp.el (org-babel-exp-do-export): Switch to compatibility + function. + + * ob-gnuplot.el (org-babel-expand-body:gnuplot): Switch to + compatibility function. + + * ob-lob.el (org-babel-lob-get-info): Switch to compatibility + function. + (org-babel-lob-execute): Switch to compatibility function. + + * ob-python.el (org-babel-python-evaluate-session): Switch to + compatibility function. + + * ob-ref.el (org-babel-ref-index-list): Switch to compatibility + function. + + * ob-sh.el (org-babel-sh-var-to-string): Switch to compatibility + function. + + * ob-tangle.el (org-babel-load-file): Switch to compatibility + function. + (org-babel-tangle): Switch to compatibility function. + (org-babel-spec-to-string): Switch to compatibility function. + + * ob.el (org-babel-view-src-block-info): Switch to compatibility + function. + (org-babel-execute-src-block): Switch to compatibility function. + (org-babel-edit-distance): Switch to compatibility function. + (org-babel-switch-to-session-with-code): Switch to compatibility + function. + (org-babel-sha1-hash): Switch to compatibility function. + (org-babel-balanced-split): Switch to compatibility function. + (org-babel-join-splits-near-ch): Switch to compatibility function. + (org-babel-get-rownames): Switch to compatibility function. + (org-babel-format-result): Switch to compatibility function. + (org-babel-insert-result): Switch to compatibility function. + (org-babel-examplize-region): Switch to compatibility function. + (org-babel-merge-params): Switch to compatibility function. + (org-babel-noweb-p): Switch to compatibility function. + (org-babel-expand-noweb-references): Switch to compatibility + function. + + * org-bibtex.el (org-bibtex-headline): Switch to compatibility + function. + (org-bibtex-fleshout): Switch to compatibility function. + (org-bibtex-read): Switch to compatibility function. + (org-bibtex-write): Switch to compatibility function. + + * org-exp-blocks.el (org-export-blocks-preprocess): Switch to + compatibility function. + + * org-exp.el (org-export-format-source-code-or-example): Switch to + compatibility function. + + * org-macs.el (org-called-interactively-p): Indentation fix. + + * org-mouse.el (org-mouse-timestamp-today): Switch to + compatibility function. + (org-mouse-set-priority): Switch to compatibility function. + (org-mouse-popup-global-menu): Switch to compatibility function. + (org-mouse-context-menu): Switch to compatibility function. + + * org-plot.el (org-plot/gnuplot-to-grid-data): Switch to + compatibility function. + (org-plot/gnuplot-script): Switch to compatibility function. + + * org.el (org-entry-get): Switch to compatibility function. + (org-fill-paragraph): Switch to compatibility function. + (org-auto-fill-function): Switch to compatibility function. + + * ob-lob.el (org-babel-lob-execute): Only try to insert extant + hashes. + + * ob-R.el (org-babel-R-command): From a defvar to a defcustom. + + * ob.el (org-babel-set-current-result-hash): Change the hash of + the results for the current code block. + (org-babel-current-result-hash): Fix documentation. + + * ob-lob.el (org-babel-lob-execute): Don't re-execute the called + function if the current call line hash matches that in its + results. + + * ob-R.el (org-babel-R-assign-elisp): Can't assume every entry in + a table is a sequence. + + * ob-R.el (org-babel-R-assign-elisp): Clean up the code + implementing reads of irregular data into R. + + * ob.el (org-babel-header-arg-expand): In new buffers + (char-before) may return nil so use equal rather than =. + + * ob-R.el (org-babel-header-args:R): Adding values. + + * ob-clojure.el (org-babel-header-args:clojure): Adding values. + + * ob-lisp.el (org-babel-header-args:lisp): Adding values. + + * ob-sql.el (org-babel-header-args:sql): Adding values. + + * ob-sqlite.el (org-babel-header-args:sqlite): Adding values. + + * ob.el (org-babel-combine-header-arg-lists): Combine lists of + arguments and values. + (org-babel-insert-header-arg): Use new combined header argument + lists. + (org-babel-header-arg-expand): Add support for completing-read + insertion of header arguments after ":" + (org-babel-enter-header-arg-w-completion): Completing read + insertion of header arguments + (org-tab-first-hook): Adding header argument completion. + (org-babel-params-from-properties): Combining header argument + lists. + + * ob-exp.el (org-babel-exp-results): Ensure noweb expanded body is + used on export. + + * ob.el (org-babel-result-to-file): New optional description + argument. + (org-babel-insert-result): Moved description logic to another + function. + + * ob.el (org-babel-insert-result): Change name of filelinkdescr to + file-desc. + (org-babel-common-header-args-w-values): Change name of + filelinkdescr to file-desc. + + * ob-C.el (org-babel-C-execute): Add .exe to the end of compiled C + files on windows. + + * ob-exp.el (org-babel-exp-code): Escape all lines when exporting + Org-mode blocks. + + * ob.el (org-babel-parse-src-block-match): Make use of the new + language argument to org-babel-strip-protective-commas. + (org-babel-parse-inline-src-block-match): Make use of the new + language argument to org-babel-strip-protective-commas. + (org-babel-strip-protective-commas): Now accepts a language + argument. + +2012-09-30 Fabrice Niessen (tiny change) + + * org-agenda.el (org-agenda-write-buffer-name): Remove the test + for the presence of is required, if not present the variable will be ignored." +you can \"misuse\" it to also add other text to the header." :group 'org-agenda-export :group 'org-export-html :type 'string) @@ -228,9 +235,9 @@ you can \"misuse\" it to also add other text to the header. However, :type 'boolean) (defgroup org-agenda-custom-commands nil - "Options concerning agenda views in Org-mode." - :tag "Org Agenda Custom Commands" - :group 'org-agenda) + "Options concerning agenda views in Org-mode." + :tag "Org Agenda Custom Commands" + :group 'org-agenda) (defconst org-sorting-choice '(choice @@ -247,116 +254,118 @@ you can \"misuse\" it to also add other text to the header. However, ;; Keep custom values for `org-agenda-filter-preset' compatible with ;; the new variable `org-agenda-tag-filter-preset'. -(defvaralias 'org-agenda-filter-preset 'org-agenda-tag-filter-preset) +(if (fboundp 'defvaralias) + (defvaralias 'org-agenda-filter-preset 'org-agenda-tag-filter-preset) + (defvaralias 'org-agenda-filter 'org-agenda-tag-filter)) (defconst org-agenda-custom-commands-local-options - `(repeat :tag "Local settings for this command. Remember to quote values" + `(repeat :tag "Local settings for this command. Remember to quote values" (choice :tag "Setting" - (list :tag "Heading for this block" - (const org-agenda-overriding-header) - (string :tag "Headline")) - (list :tag "Files to be searched" - (const org-agenda-files) - (list - (const :format "" quote) - (repeat (file)))) - (list :tag "Sorting strategy" - (const org-agenda-sorting-strategy) - (list - (const :format "" quote) - (repeat - ,org-sorting-choice))) - (list :tag "Prefix format" - (const org-agenda-prefix-format :value " %-12:c%?-12t% s") - (string)) - (list :tag "Number of days in agenda" - (const org-agenda-span) - (choice (const :tag "Day" 'day) - (const :tag "Week" 'week) - (const :tag "Month" 'month) - (const :tag "Year" 'year) - (integer :tag "Custom"))) - (list :tag "Fixed starting date" - (const org-agenda-start-day) - (string :value "2007-11-01")) - (list :tag "Start on day of week" - (const org-agenda-start-on-weekday) - (choice :value 1 - (const :tag "Today" nil) - (integer :tag "Weekday No."))) - (list :tag "Include data from diary" - (const org-agenda-include-diary) - (boolean)) - (list :tag "Deadline Warning days" - (const org-deadline-warning-days) - (integer :value 1)) - (list :tag "Category filter preset" - (const org-agenda-category-filter-preset) - (list - (const :format "" quote) - (repeat - (string :tag "+category or -category")))) - (list :tag "Tags filter preset" - (const org-agenda-tag-filter-preset) - (list - (const :format "" quote) - (repeat - (string :tag "+tag or -tag")))) - (list :tag "Set daily/weekly entry types" - (const org-agenda-entry-types) - (list - (const :format "" quote) - (set :greedy t :value (:deadline :scheduled :timestamp :sexp) - (const :deadline) - (const :scheduled) - (const :timestamp) - (const :sexp)))) - (list :tag "Standard skipping condition" - :value (org-agenda-skip-function '(org-agenda-skip-entry-if)) - (const org-agenda-skip-function) - (list - (const :format "" quote) - (list - (choice - :tag "Skipping range" - (const :tag "Skip entry" org-agenda-skip-entry-if) - (const :tag "Skip subtree" org-agenda-skip-subtree-if)) - (repeat :inline t :tag "Conditions for skipping" - (choice - :tag "Condition type" - (list :tag "Regexp matches" :inline t (const :format "" 'regexp) (regexp)) - (list :tag "Regexp does not match" :inline t (const :format "" 'notregexp) (regexp)) - (list :tag "TODO state is" :inline t - (const 'todo) + (list :tag "Heading for this block" + (const org-agenda-overriding-header) + (string :tag "Headline")) + (list :tag "Files to be searched" + (const org-agenda-files) + (list + (const :format "" quote) + (repeat (file)))) + (list :tag "Sorting strategy" + (const org-agenda-sorting-strategy) + (list + (const :format "" quote) + (repeat + ,org-sorting-choice))) + (list :tag "Prefix format" + (const org-agenda-prefix-format :value " %-12:c%?-12t% s") + (string)) + (list :tag "Number of days in agenda" + (const org-agenda-span) + (choice (const :tag "Day" 'day) + (const :tag "Week" 'week) + (const :tag "Month" 'month) + (const :tag "Year" 'year) + (integer :tag "Custom"))) + (list :tag "Fixed starting date" + (const org-agenda-start-day) + (string :value "2007-11-01")) + (list :tag "Start on day of week" + (const org-agenda-start-on-weekday) + (choice :value 1 + (const :tag "Today" nil) + (integer :tag "Weekday No."))) + (list :tag "Include data from diary" + (const org-agenda-include-diary) + (boolean)) + (list :tag "Deadline Warning days" + (const org-deadline-warning-days) + (integer :value 1)) + (list :tag "Category filter preset" + (const org-agenda-category-filter-preset) + (list + (const :format "" quote) + (repeat + (string :tag "+category or -category")))) + (list :tag "Tags filter preset" + (const org-agenda-tag-filter-preset) + (list + (const :format "" quote) + (repeat + (string :tag "+tag or -tag")))) + (list :tag "Set daily/weekly entry types" + (const org-agenda-entry-types) + (list + (const :format "" quote) + (set :greedy t :value (:deadline :scheduled :timestamp :sexp) + (const :deadline) + (const :scheduled) + (const :timestamp) + (const :sexp)))) + (list :tag "Standard skipping condition" + :value (org-agenda-skip-function '(org-agenda-skip-entry-if)) + (const org-agenda-skip-function) + (list + (const :format "" quote) + (list + (choice + :tag "Skipping range" + (const :tag "Skip entry" org-agenda-skip-entry-if) + (const :tag "Skip subtree" org-agenda-skip-subtree-if)) + (repeat :inline t :tag "Conditions for skipping" (choice - (const :tag "any not-done state" 'todo) - (const :tag "any done state" 'done) - (const :tag "any state" 'any) - (list :tag "Keyword list" - (const :format "" quote) - (repeat (string :tag "Keyword"))))) - (list :tag "TODO state is not" :inline t - (const 'nottodo) - (choice - (const :tag "any not-done state" 'todo) - (const :tag "any done state" 'done) - (const :tag "any state" 'any) - (list :tag "Keyword list" - (const :format "" quote) - (repeat (string :tag "Keyword"))))) - (const :tag "scheduled" 'scheduled) - (const :tag "not scheduled" 'notscheduled) - (const :tag "deadline" 'deadline) - (const :tag "no deadline" 'notdeadline) - (const :tag "timestamp" 'timestamp) - (const :tag "no timestamp" 'nottimestamp)))))) - (list :tag "Non-standard skipping condition" - :value (org-agenda-skip-function) - (const org-agenda-skip-function) - (sexp :tag "Function or form (quoted!)")) - (list :tag "Any variable" - (variable :tag "Variable") - (sexp :tag "Value (sexp)")))) + :tag "Condition type" + (list :tag "Regexp matches" :inline t (const :format "" 'regexp) (regexp)) + (list :tag "Regexp does not match" :inline t (const :format "" 'notregexp) (regexp)) + (list :tag "TODO state is" :inline t + (const 'todo) + (choice + (const :tag "any not-done state" 'todo) + (const :tag "any done state" 'done) + (const :tag "any state" 'any) + (list :tag "Keyword list" + (const :format "" quote) + (repeat (string :tag "Keyword"))))) + (list :tag "TODO state is not" :inline t + (const 'nottodo) + (choice + (const :tag "any not-done state" 'todo) + (const :tag "any done state" 'done) + (const :tag "any state" 'any) + (list :tag "Keyword list" + (const :format "" quote) + (repeat (string :tag "Keyword"))))) + (const :tag "scheduled" 'scheduled) + (const :tag "not scheduled" 'notscheduled) + (const :tag "deadline" 'deadline) + (const :tag "no deadline" 'notdeadline) + (const :tag "timestamp" 'timestamp) + (const :tag "no timestamp" 'nottimestamp)))))) + (list :tag "Non-standard skipping condition" + :value (org-agenda-skip-function) + (const org-agenda-skip-function) + (sexp :tag "Function or form (quoted!)")) + (list :tag "Any variable" + (variable :tag "Variable") + (sexp :tag "Value (sexp)")))) "Selection of examples for agenda command settings. This will be spliced into the custom type of `org-agenda-custom-commands'.") @@ -434,69 +443,69 @@ should provide a description for the prefix, like :group 'org-agenda-custom-commands :type `(repeat (choice :value ("x" "Describe command here" tags "" nil) - (list :tag "Single command" - (string :tag "Access Key(s) ") - (option (string :tag "Description")) - (choice - (const :tag "Agenda" agenda) - (const :tag "TODO list" alltodo) - (const :tag "Search words" search) - (const :tag "Stuck projects" stuck) - (const :tag "Tags/Property match (all agenda files)" tags) - (const :tag "Tags/Property match of TODO entries (all agenda files)" tags-todo) - (const :tag "TODO keyword search (all agenda files)" todo) - (const :tag "Tags sparse tree (current buffer)" tags-tree) - (const :tag "TODO keyword tree (current buffer)" todo-tree) - (const :tag "Occur tree (current buffer)" occur-tree) - (sexp :tag "Other, user-defined function")) - (string :tag "Match (only for some commands)") - ,org-agenda-custom-commands-local-options - (option (repeat :tag "Export" (file :tag "Export to")))) - (list :tag "Command series, all agenda files" - (string :tag "Access Key(s)") - (string :tag "Description ") - (repeat :tag "Component" - (choice - (list :tag "Agenda" - (const :format "" agenda) - (const :tag "" :format "" "") - ,org-agenda-custom-commands-local-options) - (list :tag "TODO list (all keywords)" - (const :format "" alltodo) - (const :tag "" :format "" "") - ,org-agenda-custom-commands-local-options) - (list :tag "Search words" - (const :format "" search) - (string :tag "Match") - ,org-agenda-custom-commands-local-options) - (list :tag "Stuck projects" - (const :format "" stuck) - (const :tag "" :format "" "") - ,org-agenda-custom-commands-local-options) - (list :tag "Tags search" - (const :format "" tags) - (string :tag "Match") - ,org-agenda-custom-commands-local-options) - (list :tag "Tags search, TODO entries only" - (const :format "" tags-todo) - (string :tag "Match") - ,org-agenda-custom-commands-local-options) - (list :tag "TODO keyword search" - (const :format "" todo) - (string :tag "Match") - ,org-agenda-custom-commands-local-options) - (list :tag "Other, user-defined function" - (symbol :tag "function") - (string :tag "Match") - ,org-agenda-custom-commands-local-options))) + (list :tag "Single command" + (string :tag "Access Key(s) ") + (option (string :tag "Description")) + (choice + (const :tag "Agenda" agenda) + (const :tag "TODO list" alltodo) + (const :tag "Search words" search) + (const :tag "Stuck projects" stuck) + (const :tag "Tags/Property match (all agenda files)" tags) + (const :tag "Tags/Property match of TODO entries (all agenda files)" tags-todo) + (const :tag "TODO keyword search (all agenda files)" todo) + (const :tag "Tags sparse tree (current buffer)" tags-tree) + (const :tag "TODO keyword tree (current buffer)" todo-tree) + (const :tag "Occur tree (current buffer)" occur-tree) + (sexp :tag "Other, user-defined function")) + (string :tag "Match (only for some commands)") + ,org-agenda-custom-commands-local-options + (option (repeat :tag "Export" (file :tag "Export to")))) + (list :tag "Command series, all agenda files" + (string :tag "Access Key(s)") + (string :tag "Description ") + (repeat :tag "Component" + (choice + (list :tag "Agenda" + (const :format "" agenda) + (const :tag "" :format "" "") + ,org-agenda-custom-commands-local-options) + (list :tag "TODO list (all keywords)" + (const :format "" alltodo) + (const :tag "" :format "" "") + ,org-agenda-custom-commands-local-options) + (list :tag "Search words" + (const :format "" search) + (string :tag "Match") + ,org-agenda-custom-commands-local-options) + (list :tag "Stuck projects" + (const :format "" stuck) + (const :tag "" :format "" "") + ,org-agenda-custom-commands-local-options) + (list :tag "Tags search" + (const :format "" tags) + (string :tag "Match") + ,org-agenda-custom-commands-local-options) + (list :tag "Tags search, TODO entries only" + (const :format "" tags-todo) + (string :tag "Match") + ,org-agenda-custom-commands-local-options) + (list :tag "TODO keyword search" + (const :format "" todo) + (string :tag "Match") + ,org-agenda-custom-commands-local-options) + (list :tag "Other, user-defined function" + (symbol :tag "function") + (string :tag "Match") + ,org-agenda-custom-commands-local-options))) - (repeat :tag "Settings for entire command set" - (list (variable :tag "Any variable") - (sexp :tag "Value"))) - (option (repeat :tag "Export" (file :tag "Export to")))) - (cons :tag "Prefix key documentation" - (string :tag "Access Key(s)") - (string :tag "Description "))))) + (repeat :tag "Settings for entire command set" + (list (variable :tag "Any variable") + (sexp :tag "Value"))) + (option (repeat :tag "Export" (file :tag "Export to")))) + (cons :tag "Prefix key documentation" + (string :tag "Access Key(s)") + (string :tag "Description "))))) (defcustom org-agenda-query-register ?o "The register holding the current query string. @@ -550,9 +559,9 @@ this one will be used." (const :tag "equal" "="))) (defgroup org-agenda-skip nil - "Options concerning skipping parts of agenda files." - :tag "Org Agenda Skip" - :group 'org-agenda) + "Options concerning skipping parts of agenda files." + :tag "Org Agenda Skip" + :group 'org-agenda) (defcustom org-agenda-skip-function-global nil "Function to be called at each match during agenda construction. @@ -636,11 +645,11 @@ all Don't show any entries with a timestamp in the global todo list. The idea behind this is that by setting a timestamp, you have already \"taken care\" of this item. -This variable can also have an integer as a value. If positive (N), -todos with a timestamp N or more days in the future will be ignored. If +This variable can also have an integer as a value. If positive (N), +todos with a timestamp N or more days in the future will be ignored. If negative (-N), todos with a timestamp N or more days in the past will be -ignored. If 0, todos with a timestamp either today or in the future will -be ignored. For example, a value of -1 will exclude todos with a +ignored. If 0, todos with a timestamp either today or in the future will +be ignored. For example, a value of -1 will exclude todos with a timestamp in the past (yesterday or earlier), while a value of 7 will exclude todos with a timestamp a week or more in the future. @@ -674,7 +683,7 @@ all Don't show any scheduled entries in the global todo list. t Same as `all', for backward compatibility. -This variable can also have an integer as a value. See +This variable can also have an integer as a value. See `org-agenda-todo-ignore-timestamp' for more details. See also `org-agenda-todo-ignore-with-date'. @@ -715,7 +724,7 @@ all Ignore all TODO entries that do have a deadline. t Same as `near', for backward compatibility. -This variable can also have an integer as a value. See +This variable can also have an integer as a value. See `org-agenda-todo-ignore-timestamp' for more details. See also `org-agenda-todo-ignore-with-date'. @@ -774,6 +783,21 @@ but not scheduled today." (const :tag "Always" t) (const :tag "Not when scheduled today" not-today))) +(defcustom org-agenda-skip-timestamp-if-deadline-is-shown nil + "Non-nil means skip timestamp line if same entry shows because of deadline. +In the agenda of today, an entry can show up multiple times +because it has both a plain timestamp and has a nearby deadline. +When this variable is t, then only the deadline is shown and the +fact that the entry has a timestamp for or including today is not +shown. When this variable is nil, the entry will be shown +several times." + :group 'org-agenda-skip + :group 'org-agenda-daily/weekly + :version "24.1" + :type '(choice + (const :tag "Never" nil) + (const :tag "Always" t))) + (defcustom org-agenda-skip-deadline-if-done nil "Non-nil means don't show deadlines when the corresponding item is done. When nil, the deadline is still shown and should give you a happy feeling. @@ -799,7 +823,7 @@ because you will take care of it on the day when scheduled." :group 'org-agenda-daily/weekly :version "24.1" :type '(choice - (const :tag "Always show prewarning" nil) + (const :tag "Alwas show prewarning" nil) (const :tag "Remove prewarning if entry is scheduled" t) (integer :tag "Restart prewarning N days before deadline"))) @@ -860,12 +884,14 @@ N days, just insert a special line indicating the size of the gap." When nil, the matcher string is not shown, but is put into the help-echo property so than moving the mouse over the command shows it. Setting it to nil is good if matcher strings are very long and/or if -you want to use two-column display (see `org-agenda-menu-two-column')." +you want to use two-columns display (see `org-agenda-menu-two-columns')." :group 'org-agenda :version "24.1" :type 'boolean) -(defcustom org-agenda-menu-two-column nil +(define-obsolete-variable-alias 'org-agenda-menu-two-column 'org-agenda-menu-two-columns "24.3") + +(defcustom org-agenda-menu-two-columns nil "Non-nil means, use two columns to show custom commands in the dispatcher. If you use this, you probably want to set `org-agenda-menu-show-matcher' to nil." @@ -873,8 +899,14 @@ to nil." :version "24.1" :type 'boolean) -(defcustom org-finalize-agenda-hook nil - "Hook run just before displaying an agenda buffer." +(define-obsolete-variable-alias 'org-finalize-agenda-hook 'org-agenda-finalize-hook "24.3") +(defcustom org-agenda-finalize-hook nil + "Hook run just before displaying an agenda buffer. +The buffer is still writable when the hook is called. + +You can modify some of the buffer substrings but you should be +extra careful not to modify the text properties of the agenda +headlines as the agenda display heavily relies on them." :group 'org-agenda-startup :type 'hook) @@ -932,7 +964,8 @@ have been removed when this is called, as will any matches for regular expressions listed in `org-agenda-entry-text-exclude-regexps'.") (defvar org-agenda-include-inactive-timestamps nil - "Non-nil means include inactive time stamps in agenda and timeline.") + "Non-nil means include inactive time stamps in agenda and timeline. +Dynamically scoped.") (defgroup org-agenda-windows nil "Options concerning the windows used by the Agenda in Org Mode." @@ -975,11 +1008,11 @@ option will be ignored." :type 'boolean) (defcustom org-agenda-ndays nil - "Number of days to include in overview display. + "Number of days to include in overview display. Should be 1 or 7. Obsolete, see `org-agenda-span'." - :group 'org-agenda-daily/weekly - :type 'integer) + :group 'org-agenda-daily/weekly + :type 'integer) (make-obsolete-variable 'org-agenda-ndays 'org-agenda-span "24.1") @@ -1202,10 +1235,18 @@ agenda display." :type 'boolean) (defcustom org-agenda-start-with-log-mode nil - "The initial value of log-mode in a newly created agenda window." + "The initial value of log-mode in a newly created agenda window. +See `org-agenda-log-mode' and `org-agenda-log-mode-items' for further +explanations on the possible values." :group 'org-agenda-startup :group 'org-agenda-daily/weekly - :type 'boolean) + :type '(choice (const :tag "Don't show log items" nil) + (const :tag "Show only log items" 'only) + (const :tag "Show all possible log items" 'clockcheck) + (repeat :tag "Choose among possible values for `org-agenda-log-mode-items'" + (choice (const :tag "Show closed log items" 'closed) + (const :tag "Show clocked log items" 'clock) + (const :tag "Show all logged state changes" 'state))))) (defcustom org-agenda-start-with-clockreport-mode nil "The initial value of clockreport-mode in a newly created agenda window." @@ -1501,8 +1542,10 @@ Custom commands can set this variable in the options section." :group 'org-agenda-line-format) (defvar org-prefix-format-compiled nil - "The compiled version of the most recently used prefix format. -See the variable `org-agenda-prefix-format'.") + "The compiled prefix format and associated variables. +This is a list where first element is a list of variable bindings, and second +element is the compiled format expression. See the variable +`org-agenda-prefix-format'.") (defcustom org-agenda-todo-keyword-format "%-1s" "Format for the TODO keyword in agenda lines. @@ -1511,6 +1554,16 @@ to occupy a fixed space in the agenda display." :group 'org-agenda-line-format :type 'string) +(defcustom org-agenda-diary-sexp-prefix nil + "A regexp that matches part of a diary sexp entry +which should be treated as scheduling/deadline information in +`org-agenda'. + +For example, you can use this to extract the `diary-remind-message' from +`diary-remind' entries." + :group 'org-agenda-line-format + :type '(choice (const :tag "None" nil) (regexp :tag "Regexp"))) + (defcustom org-agenda-timerange-leaders '("" "(%d/%d): ") "Text preceding timerange entries in the agenda view. This is a list with two strings. The first applies when the range @@ -1659,7 +1712,7 @@ determines if it is a foreground or a background color." (defcustom org-agenda-day-face-function nil "Function called to determine what face should be used to display a day. -The only argument passed to that function is the day. It should +The only argument passed to that function is the day. It should returns a face, or nil if does not want to specify a face and let the normal rules apply." :group 'org-agenda-line-format @@ -1762,10 +1815,6 @@ Note that functions in this alist don't need to be quoted." :version "24.1" :group 'org-agenda) -(eval-when-compile - (require 'cl)) -(require 'org) - (defmacro org-agenda-with-point-at-orig-entry (string &rest body) "Execute BODY with point at location given by `org-hd-marker' property. If STRING is non-nil, the text property will be fetched from position 0 @@ -1789,7 +1838,7 @@ works you probably want to add it to `org-agenda-custom-commands' for good." (setcdr ass (cdr entry)) (push entry org-agenda-custom-commands)))) -;;; Define the Org-agenda-mode +;;; Define the org-agenda-mode (defvar org-agenda-mode-map (make-sparse-keymap) "Keymap for `org-agenda-mode'.") @@ -1797,7 +1846,7 @@ works you probably want to add it to `org-agenda-custom-commands' for good." (defvaralias 'org-agenda-keymap 'org-agenda-mode-map)) (defvar org-agenda-menu) ; defined later in this file. -(defvar org-agenda-restrict) ; defined later in this file. +(defvar org-agenda-restrict nil) ; defined later in this file. (defvar org-agenda-follow-mode nil) (defvar org-agenda-entry-text-mode nil) (defvar org-agenda-clockreport-mode nil) @@ -1805,10 +1854,76 @@ works you probably want to add it to `org-agenda-custom-commands' for good." (defvar org-agenda-redo-command nil) (defvar org-agenda-query-string nil) (defvar org-agenda-mode-hook nil - "Hook for `org-agenda-mode', run after the mode is turned on.") + "Hook run after `org-agenda-mode' is turned on. +The buffer is still writable when this hook is called.") (defvar org-agenda-type nil) (defvar org-agenda-force-single-file nil) -(defvar org-agenda-bulk-marked-entries) ;; Defined further down in this file +(defvar org-agenda-bulk-marked-entries nil + "List of markers that refer to marked entries in the agenda.") + +;;; Multiple agenda buffers support + +(defcustom org-agenda-sticky nil + "Non-nil means agenda q key will bury agenda buffers. +Agenda commands will then show existing buffer instead of generating new ones. +When nil, `q' will kill the single agenda buffer." + :group 'org-agenda + :version "24.3" + :type 'boolean) + +;;;###autoload +(defun org-toggle-sticky-agenda (&optional arg) + "Toggle `org-agenda-sticky'." + (interactive "P") + (let ((new-value (if arg + (> (prefix-numeric-value arg) 0) + (not org-agenda-sticky)))) + (if (equal new-value org-agenda-sticky) + (and (org-called-interactively-p 'interactive) + (message "Sticky agenda was already %s" + (if org-agenda-sticky "enabled" "disabled"))) + (setq org-agenda-sticky new-value) + (org-agenda-kill-all-agenda-buffers) + (and (org-called-interactively-p 'interactive) + (message "Sticky agenda was %s" + (if org-agenda-sticky "enabled" "disabled")))))) + +(defvar org-agenda-buffer nil + "Agenda buffer currently being generated.") + +(defvar org-agenda-last-prefix-arg nil) +(defvar org-agenda-this-buffer-name nil) +(defvar org-agenda-doing-sticky-redo nil) +(defvar org-agenda-this-buffer-is-sticky nil) + +(defconst org-agenda-local-vars + '(org-agenda-this-buffer-name + org-agenda-undo-list + org-agenda-pending-undo-list + org-agenda-follow-mode + org-agenda-entry-text-mode + org-agenda-clockreport-mode + org-agenda-show-log + org-agenda-redo-command + org-agenda-query-string + org-agenda-type + org-agenda-bulk-marked-entries + org-agenda-undo-has-started-in + org-agenda-info + org-agenda-tag-filter-overlays + org-agenda-cat-filter-overlays + org-agenda-pre-window-conf + org-agenda-columns-active + org-agenda-tag-filter + org-agenda-category-filter + org-agenda-markers + org-agenda-last-search-view-search-was-boolean + org-agenda-filtered-by-category + org-agenda-filter-form + org-agenda-show-window + org-agenda-cycle-counter + org-agenda-last-prefix-arg) + "Variables that must be local in agenda buffers to allow multiple buffers.") (defun org-agenda-mode () "Mode for time-sorted view on action items in Org-mode files. @@ -1817,7 +1932,30 @@ The following commands are available: \\{org-agenda-mode-map}" (interactive) - (kill-all-local-variables) + (cond (org-agenda-doing-sticky-redo + ;; Refreshing sticky agenda-buffer + ;; + ;; Preserve the value of `org-agenda-local-vars' variables, + ;; while letting `kill-all-local-variables' kill the rest + (let ((save (buffer-local-variables))) + (kill-all-local-variables) + (mapc 'make-local-variable org-agenda-local-vars) + (dolist (elem save) + (let ((var (car elem)) + (val (cdr elem))) + (when (and val + (member var org-agenda-local-vars)) + (set var val))))) + (set (make-local-variable 'org-agenda-this-buffer-is-sticky) t)) + (org-agenda-sticky + ;; Creating a sticky Agenda buffer for the first time + (kill-all-local-variables) + (mapc 'make-local-variable org-agenda-local-vars) + (set (make-local-variable 'org-agenda-this-buffer-is-sticky) t)) + (t + ;; Creating a non-sticky agenda buffer + (kill-all-local-variables) + (set (make-local-variable 'org-agenda-this-buffer-is-sticky) nil))) (setq org-agenda-undo-list nil org-agenda-pending-undo-list nil org-agenda-bulk-marked-entries nil) @@ -1829,14 +1967,13 @@ The following commands are available: (easy-menu-add org-agenda-menu) (if org-startup-truncated (setq truncate-lines t)) (org-set-local 'line-move-visual nil) - (org-add-hook 'post-command-hook 'org-agenda-post-command-hook nil 'local) + (org-add-hook 'post-command-hook 'org-agenda-update-agenda-type nil 'local) (org-add-hook 'pre-command-hook 'org-unhighlight nil 'local) ;; Make sure properties are removed when copying text - (when (boundp 'buffer-substring-filters) - (org-set-local 'buffer-substring-filters - (cons (lambda (x) - (set-text-properties 0 (length x) nil x) x) - buffer-substring-filters))) + (make-local-variable 'filter-buffer-substring-functions) + (add-hook 'filter-buffer-substring-functions + (lambda (fun start end delete) + (substring-no-properties (funcall fun start end delete)))) (unless org-agenda-keep-modes (setq org-agenda-follow-mode org-agenda-start-with-follow-mode org-agenda-entry-text-mode org-agenda-start-with-entry-text-mode @@ -1868,11 +2005,13 @@ The following commands are available: (org-defkey org-agenda-mode-map "\C-k" 'org-agenda-kill) (org-defkey org-agenda-mode-map "\C-c\C-w" 'org-agenda-refile) (org-defkey org-agenda-mode-map "m" 'org-agenda-bulk-mark) +(org-defkey org-agenda-mode-map "*" 'org-agenda-bulk-mark-all) (org-defkey org-agenda-mode-map "%" 'org-agenda-bulk-mark-regexp) (org-defkey org-agenda-mode-map "u" 'org-agenda-bulk-unmark) -(org-defkey org-agenda-mode-map "U" 'org-agenda-bulk-remove-all-marks) -(org-defkey org-agenda-mode-map "A" 'org-agenda-append-agenda) +(org-defkey org-agenda-mode-map "U" 'org-agenda-bulk-unmark-all) (org-defkey org-agenda-mode-map "B" 'org-agenda-bulk-action) +(org-defkey org-agenda-mode-map "k" 'org-agenda-capture) +(org-defkey org-agenda-mode-map "A" 'org-agenda-append-agenda) (org-defkey org-agenda-mode-map "\C-c\C-x!" 'org-reload) (org-defkey org-agenda-mode-map "\C-c\C-x\C-a" 'org-agenda-archive-default) (org-defkey org-agenda-mode-map "\C-c\C-xa" 'org-agenda-toggle-archive-tag) @@ -1901,8 +2040,6 @@ The following commands are available: (org-defkey org-agenda-mode-map "y" 'org-agenda-year-view) (org-defkey org-agenda-mode-map "\C-c\C-z" 'org-agenda-add-note) (org-defkey org-agenda-mode-map "z" 'org-agenda-add-note) -(org-defkey org-agenda-mode-map "k" 'org-agenda-action) -(org-defkey org-agenda-mode-map "\C-c\C-x\C-k" 'org-agenda-action) (org-defkey org-agenda-mode-map [(shift right)] 'org-agenda-do-date-later) (org-defkey org-agenda-mode-map [(shift left)] 'org-agenda-do-date-earlier) (org-defkey org-agenda-mode-map [?\C-c ?\C-x (right)] 'org-agenda-do-date-later) @@ -1913,7 +2050,7 @@ The following commands are available: (org-defkey org-agenda-mode-map "\C-c\C-d" 'org-agenda-deadline) (let ((l '(1 2 3 4 5 6 7 8 9 0))) (while l (org-defkey org-agenda-mode-map - (int-to-string (pop l)) 'digit-argument))) + (int-to-string (pop l)) 'digit-argument))) (org-defkey org-agenda-mode-map "F" 'org-agenda-follow-mode) (org-defkey org-agenda-mode-map "R" 'org-agenda-clockreport-mode) @@ -1924,21 +2061,23 @@ The following commands are available: (org-defkey org-agenda-mode-map "!" 'org-agenda-toggle-deadlines) (org-defkey org-agenda-mode-map "G" 'org-agenda-toggle-time-grid) (org-defkey org-agenda-mode-map "r" 'org-agenda-redo) -(org-defkey org-agenda-mode-map "g" 'org-agenda-redo) +(org-defkey org-agenda-mode-map "g" (lambda () (interactive) (org-agenda-redo t))) (org-defkey org-agenda-mode-map "e" 'org-agenda-set-effort) (org-defkey org-agenda-mode-map "\C-c\C-xe" 'org-agenda-set-effort) (org-defkey org-agenda-mode-map "\C-c\C-x\C-e" 'org-clock-modify-effort-estimate) (org-defkey org-agenda-mode-map "\C-c\C-xp" 'org-agenda-set-property) (org-defkey org-agenda-mode-map "q" 'org-agenda-quit) +(org-defkey org-agenda-mode-map "Q" 'org-agenda-Quit) (org-defkey org-agenda-mode-map "x" 'org-agenda-exit) (org-defkey org-agenda-mode-map "\C-x\C-w" 'org-agenda-write) (org-defkey org-agenda-mode-map "\C-x\C-s" 'org-save-all-org-buffers) (org-defkey org-agenda-mode-map "s" 'org-save-all-org-buffers) -(org-defkey org-agenda-mode-map "P" 'org-agenda-show-priority) (org-defkey org-agenda-mode-map "T" 'org-agenda-show-tags) (org-defkey org-agenda-mode-map "n" 'org-agenda-next-line) (org-defkey org-agenda-mode-map "p" 'org-agenda-previous-line) +(org-defkey org-agenda-mode-map "N" 'org-agenda-next-item) +(org-defkey org-agenda-mode-map "P" 'org-agenda-previous-item) (substitute-key-definition 'next-line 'org-agenda-next-line org-agenda-mode-map global-map) (substitute-key-definition 'previous-line 'org-agenda-previous-line @@ -1946,8 +2085,8 @@ The following commands are available: (org-defkey org-agenda-mode-map "\C-c\C-a" 'org-attach) (org-defkey org-agenda-mode-map "\C-c\C-n" 'org-agenda-next-date-line) (org-defkey org-agenda-mode-map "\C-c\C-p" 'org-agenda-previous-date-line) -(org-defkey org-agenda-mode-map "," 'org-agenda-priority) (org-defkey org-agenda-mode-map "\C-c," 'org-agenda-priority) +(org-defkey org-agenda-mode-map "," 'org-agenda-priority) (org-defkey org-agenda-mode-map "i" 'org-agenda-diary-entry) (org-defkey org-agenda-mode-map "c" 'org-agenda-goto-calendar) (org-defkey org-agenda-mode-map "C" 'org-agenda-convert-date) @@ -1981,6 +2120,7 @@ The following commands are available: (org-defkey org-agenda-mode-map "/" 'org-agenda-filter-by-tag) (org-defkey org-agenda-mode-map "\\" 'org-agenda-filter-by-tag-refine) (org-defkey org-agenda-mode-map "<" 'org-agenda-filter-by-category) +(org-defkey org-agenda-mode-map "^" 'org-agenda-filter-by-top-category) (org-defkey org-agenda-mode-map ";" 'org-timer-set-timer) (define-key org-agenda-mode-map "?" 'org-agenda-show-the-flagging-note) (org-defkey org-agenda-mode-map "\C-c\C-x\C-mg" 'org-mobile-pull) @@ -2034,7 +2174,7 @@ The following commands are available: ["Show some entry text" org-agenda-entry-text-mode :style toggle :selected org-agenda-entry-text-mode :active t] - "--" + "--" ["Show Logbook entries" org-agenda-log-mode :style toggle :selected org-agenda-show-log :active (org-agenda-check-type nil 'agenda 'timeline) @@ -2054,9 +2194,10 @@ The following commands are available: ["Show original entry" org-agenda-show t] ["Go To (other window)" org-agenda-goto t] ["Go To (this window)" org-agenda-switch-to t] + ["Capture with cursor date" org-agenda-capture t] ["Follow Mode" org-agenda-follow-mode :style toggle :selected org-agenda-follow-mode :active t] -; ["Tree to indirect frame" org-agenda-tree-to-indirect-buffer t] + ;; ["Tree to indirect frame" org-agenda-tree-to-indirect-buffer t] "--" ("TODO" ["Cycle TODO" org-agenda-todo t] @@ -2075,10 +2216,11 @@ The following commands are available: ["Delete subtree" org-agenda-kill t]) ("Bulk action" ["Mark entry" org-agenda-bulk-mark t] + ["Mark all" org-agenda-bulk-mark-all t] ["Mark matching regexp" org-agenda-bulk-mark-regexp t] ["Unmark entry" org-agenda-bulk-unmark t] - ["Unmark all entries" org-agenda-bulk-remove-all-marks :active t :keys "C-u s"]) - ["Act on all marked" org-agenda-bulk-action t] + ["Unmark all entries" org-agenda-bulk-unmark-all :active t :keys "U"]) + ["Act on all marked" org-agenda-bulk-action t] "--" ("Tags and Properties" ["Show all Tags" org-agenda-show-tags t] @@ -2090,11 +2232,6 @@ The following commands are available: ["Schedule" org-agenda-schedule t] ["Set Deadline" org-agenda-deadline t] "--" - ["Mark item" org-agenda-action :active t :keys "k m"] - ["Show mark item" org-agenda-action :active t :keys "k v"] - ["Schedule marked item" org-agenda-action :active t :keys "k s"] - ["Set Deadline for marked item" org-agenda-action :active t :keys "k d"] - "--" ["Change Date +1 day" org-agenda-date-later (org-agenda-check-type nil 'agenda 'timeline)] ["Change Date -1 day" org-agenda-date-earlier (org-agenda-check-type nil 'agenda 'timeline)] ["Change Time +1 hour" org-agenda-do-date-later :active (org-agenda-check-type nil 'agenda 'timeline) :keys "C-u S-right"] @@ -2115,7 +2252,7 @@ The following commands are available: ["Set Priority" org-agenda-priority t] ["Increase Priority" org-agenda-priority-up t] ["Decrease Priority" org-agenda-priority-down t] - ["Show Priority" org-agenda-show-priority t]) + ["Show Priority" org-show-priority t]) ("Calendar/Diary" ["New Diary Entry" org-agenda-diary-entry (org-agenda-check-type nil 'agenda 'timeline)] ["Goto Calendar" org-agenda-goto-calendar (org-agenda-check-type nil 'agenda 'timeline)] @@ -2144,12 +2281,8 @@ The following commands are available: (defvar org-agenda-allow-remote-undo t "Non-nil means allow remote undo from the agenda buffer.") -(defvar org-agenda-undo-list nil - "List of undoable operations in the agenda since last refresh.") (defvar org-agenda-undo-has-started-in nil "Buffers that have already seen `undo-start' in the current undo sequence.") -(defvar org-agenda-pending-undo-list nil - "In a series of undo commands, this is the list of remaining undo items.") (defun org-agenda-undo () "Undo a remote editing step in the agenda. @@ -2193,14 +2326,60 @@ that have been changed along." ;;; Agenda dispatch -(defvar org-agenda-restrict nil) (defvar org-agenda-restrict-begin (make-marker)) (defvar org-agenda-restrict-end (make-marker)) (defvar org-agenda-last-dispatch-buffer nil) (defvar org-agenda-overriding-restriction nil) +(defcustom org-agenda-custom-commands-contexts nil + "Alist of custom agenda keys and contextual rules. + +For example, if you have a custom agenda command \"p\" and you +want this command to be accessible only from plain text files, +use this: + + '((\"p\" (in-file . \"\\.txt\"))) + +Here are the available contexts definitions: + + in-file: command displayed only in matching files + in-mode: command displayed only in matching modes + not-in-file: command not displayed in matching files + not-in-mode: command not displayed in matching modes + [function]: a custom function taking no argument + +If you define several checks, the agenda command will be +accessible if there is at least one valid check. + +You can also bind a key to another agenda custom command +depending on contextual rules. + + '((\"p\" \"q\" (in-file . \"\\.txt\"))) + +Here it means: in .txt files, use \"p\" as the key for the +agenda command otherwise associated with \"q\". (The command +originally associated with \"q\" is not displayed to avoid +duplicates.)" + :version "24.3" + :group 'org-agenda-custom-commands + :type '(repeat (list :tag "Rule" + (string :tag " Agenda key") + (string :tag "Replace by command") + (repeat :tag "Available when" + (choice + (cons :tag "Condition" + (choice + (const :tag "In file" in-file) + (const :tag "Not in file" not-in-file) + (const :tag "In mode" in-mode) + (const :tag "Not in mode" not-in-mode)) + (regexp)) + (function :tag "Custom function")))))) + +(defvar org-keys nil) +(defvar org-match nil) ;;;###autoload -(defun org-agenda (&optional arg keys restriction) +(defun org-agenda (&optional arg org-keys restriction) "Dispatch agenda commands to collect entries to the agenda buffer. Prompts for a command to execute. Any prefix arg will be passed on to the selected command. The default selections are: @@ -2215,6 +2394,7 @@ M Like `m', but select only TODO entries, no ordinary headlines. L Create a timeline for the current buffer. e Export views to associated files. s Search entries for keywords. +S Search entries for keywords, only with TODO keywords. / Multi occur across all agenda files and also files listed in `org-agenda-text-search-extra-files'. < Restrict agenda commands to buffer, subtree, or region. @@ -2236,6 +2416,7 @@ Pressing `<' twice means to restrict to the current subtree or region (interactive "P") (catch 'exit (let* ((prefix-descriptions nil) + (org-agenda-buffer-name org-agenda-buffer-name) (org-agenda-window-setup (if (equal (buffer-name) org-agenda-buffer-name) 'current-window @@ -2253,9 +2434,12 @@ Pressing `<' twice means to restrict to the current subtree or region ((not (nth 1 x)) (cons (car x) (cons "" (cddr x)))) (t (cons (car x) (cons "" (cdr x)))))) org-agenda-custom-commands))) + (org-agenda-custom-commands + (org-contextualize-keys + org-agenda-custom-commands org-agenda-custom-commands-contexts)) (buf (current-buffer)) (bfn (buffer-file-name (buffer-base-buffer))) - entry key type match lprops ans) + entry key type org-match lprops ans) ;; Turn off restriction unless there is an overriding one, (unless org-agenda-overriding-restriction (unless (org-bound-and-true-p org-agenda-keep-restricted-file-list) @@ -2270,10 +2454,16 @@ Pressing `<' twice means to restrict to the current subtree or region (put 'org-agenda-redo-command 'last-args nil) ;; Remember where this call originated (setq org-agenda-last-dispatch-buffer (current-buffer)) - (unless keys + (unless org-keys (setq ans (org-agenda-get-restriction-and-command prefix-descriptions) - keys (car ans) + org-keys (car ans) restriction (cdr ans))) + ;; If we have sticky agenda buffers, set a name for the buffer, + ;; depending on the invoking keys. The user may still set this + ;; as a command option, which will overwrite what we do here. + (if org-agenda-sticky + (setq org-agenda-buffer-name + (format "*Org Agenda(%s)*" org-keys))) ;; Establish the restriction, if any (when (and (not org-agenda-overriding-restriction) restriction) (put 'org-agenda-files 'org-restrict (list bfn)) @@ -2292,11 +2482,15 @@ Pressing `<' twice means to restrict to the current subtree or region ;; For example the todo list should not need it (but does...) (cond - ((setq entry (assoc keys org-agenda-custom-commands)) + ((setq entry (assoc org-keys org-agenda-custom-commands)) (if (or (symbolp (nth 2 entry)) (functionp (nth 2 entry))) (progn - (setq type (nth 2 entry) match (eval (nth 3 entry)) + (setq type (nth 2 entry) org-match (eval (nth 3 entry)) lprops (nth 4 entry)) + (if org-agenda-sticky + (setq org-agenda-buffer-name + (or (and (stringp org-match) (format "*Org Agenda(%s:%s)*" org-keys org-match)) + (format "*Org Agenda(%s)*" org-keys)))) (put 'org-agenda-redo-command 'org-lprops lprops) (cond ((eq type 'agenda) @@ -2304,44 +2498,45 @@ Pressing `<' twice means to restrict to the current subtree or region ((eq type 'alltodo) (org-let lprops '(org-todo-list current-prefix-arg))) ((eq type 'search) - (org-let lprops '(org-search-view current-prefix-arg match nil))) + (org-let lprops '(org-search-view current-prefix-arg org-match nil))) ((eq type 'stuck) (org-let lprops '(org-agenda-list-stuck-projects current-prefix-arg))) ((eq type 'tags) - (org-let lprops '(org-tags-view current-prefix-arg match))) + (org-let lprops '(org-tags-view current-prefix-arg org-match))) ((eq type 'tags-todo) - (org-let lprops '(org-tags-view '(4) match))) + (org-let lprops '(org-tags-view '(4) org-match))) ((eq type 'todo) - (org-let lprops '(org-todo-list match))) + (org-let lprops '(org-todo-list org-match))) ((eq type 'tags-tree) (org-check-for-org-mode) - (org-let lprops '(org-match-sparse-tree current-prefix-arg match))) + (org-let lprops '(org-match-sparse-tree current-prefix-arg org-match))) ((eq type 'todo-tree) (org-check-for-org-mode) (org-let lprops '(org-occur (concat "^" org-outline-regexp "[ \t]*" - (regexp-quote match) "\\>")))) + (regexp-quote org-match) "\\>")))) ((eq type 'occur-tree) (org-check-for-org-mode) - (org-let lprops '(org-occur match))) + (org-let lprops '(org-occur org-match))) ((functionp type) - (org-let lprops '(funcall type match))) + (org-let lprops '(funcall type org-match))) ((fboundp type) - (org-let lprops '(funcall type match))) + (org-let lprops '(funcall type org-match))) (t (error "Invalid custom agenda command type %s" type)))) (org-agenda-run-series (nth 1 entry) (cddr entry)))) - ((equal keys "C") + ((equal org-keys "C") (setq org-agenda-custom-commands org-agenda-custom-commands-orig) (customize-variable 'org-agenda-custom-commands)) - ((equal keys "a") (call-interactively 'org-agenda-list)) - ((equal keys "s") (call-interactively 'org-search-view)) - ((equal keys "t") (call-interactively 'org-todo-list)) - ((equal keys "T") (org-call-with-arg 'org-todo-list (or arg '(4)))) - ((equal keys "m") (call-interactively 'org-tags-view)) - ((equal keys "M") (org-call-with-arg 'org-tags-view (or arg '(4)))) - ((equal keys "e") (call-interactively 'org-store-agenda-views)) - ((equal keys "?") (org-tags-view nil "+FLAGGED") + ((equal org-keys "a") (call-interactively 'org-agenda-list)) + ((equal org-keys "s") (call-interactively 'org-search-view)) + ((equal org-keys "S") (org-call-with-arg 'org-search-view (or arg '(4)))) + ((equal org-keys "t") (call-interactively 'org-todo-list)) + ((equal org-keys "T") (org-call-with-arg 'org-todo-list (or arg '(4)))) + ((equal org-keys "m") (call-interactively 'org-tags-view)) + ((equal org-keys "M") (org-call-with-arg 'org-tags-view (or arg '(4)))) + ((equal org-keys "e") (call-interactively 'org-store-agenda-views)) + ((equal org-keys "?") (org-tags-view nil "+FLAGGED") (org-add-hook 'post-command-hook (lambda () @@ -2357,15 +2552,15 @@ Pressing `<' twice means to restrict to the current subtree or region (copy-sequence note)) nil 'face 'org-warning))))))) t t)) - ((equal keys "L") - (unless (eq major-mode 'org-mode) + ((equal org-keys "L") + (unless (derived-mode-p 'org-mode) (error "This is not an Org-mode file")) (unless restriction (put 'org-agenda-files 'org-restrict (list bfn)) (org-call-with-arg 'org-timeline arg))) - ((equal keys "#") (call-interactively 'org-agenda-list-stuck-projects)) - ((equal keys "/") (call-interactively 'org-occur-in-agenda-files)) - ((equal keys "!") (customize-variable 'org-stuck-projects)) + ((equal org-keys "#") (call-interactively 'org-agenda-list-stuck-projects)) + ((equal org-keys "/") (call-interactively 'org-occur-in-agenda-files)) + ((equal org-keys "!") (customize-variable 'org-stuck-projects)) (t (error "Invalid agenda key")))))) (defun org-agenda-append-agenda () @@ -2373,11 +2568,13 @@ Pressing `<' twice means to restrict to the current subtree or region This function allows interactive building of block agendas. Agenda views are separated by `org-agenda-block-separator'." (interactive) - (unless (string= (buffer-name) org-agenda-buffer-name) + (unless (derived-mode-p 'org-agenda-mode) (error "Can only append from within agenda buffer")) (let ((org-agenda-multi t)) (org-agenda) - (widen))) + (widen) + (org-agenda-finalize) + (org-agenda-fit-window-to-buffer))) (defun org-agenda-normalize-custom-commands (cmds) (delq nil @@ -2393,7 +2590,7 @@ Agenda views are separated by `org-agenda-block-separator'." "The user interface for selecting an agenda command." (catch 'exit (let* ((bfn (buffer-file-name (buffer-base-buffer))) - (restrict-ok (and bfn (eq major-mode 'org-mode))) + (restrict-ok (and bfn (derived-mode-p 'org-mode))) (region-p (org-region-active-p)) (custom org-agenda-custom-commands) (selstring "") @@ -2406,15 +2603,15 @@ Agenda views are separated by `org-agenda-block-separator'." (erase-buffer) (insert (eval-when-compile (let ((header -" -Press key for an agenda command: < Buffer, subtree/region restriction + "Press key for an agenda command: < Buffer, subtree/region restriction -------------------------------- > Remove restriction a Agenda for current week or day e Export agenda views t List of all TODO entries T Entries with special TODO kwd m Match a TAGS/PROP/TODO query M Like m, but only TODO entries +s Search for keywords S Like s, but only TODO entries L Timeline for current buffer # List stuck projects (!=configure) -s Search for keywords C Configure custom agenda commands -/ Multi-occur ? Find :FLAGGED: entries +/ Multi-occur C Configure custom agenda commands +? Find :FLAGGED: entries * Toggle sticky agenda views ") (start 0)) (while (string-match @@ -2474,13 +2671,12 @@ s Search for keywords C Configure custom agenda commands ((stringp match) (setq match (copy-sequence match)) (org-add-props match nil 'face 'org-warning)) - (match - (format "set of %d commands" (length match))) - (t "")))) + ((listp type) + (format "set of %d commands" (length type)))))) (if (org-string-nw-p match) (add-text-properties 0 (length line) (list 'help-echo - (concat "Matcher: "match)) line))) + (concat "Matcher: " match)) line))) (push line lines))) (setq lines (nreverse lines)) (when prefixes @@ -2497,7 +2693,7 @@ s Search for keywords C Configure custom agenda commands prefixes)) ;; Check if we should display in two columns - (if org-agenda-menu-two-column + (if org-agenda-menu-two-columns (progn (setq n (length lines) n1 (+ (/ n 2) (mod n 2)) @@ -2547,6 +2743,9 @@ s Search for keywords C Configure custom agenda commands nil (cons (substring (car x) 1) (cdr x)))) custom)))) + ((eq c ?*) + (call-interactively 'org-toggle-sticky-agenda) + (sit-for 2)) ((and (not restrict-ok) (memq c '(?1 ?0 ?<))) (message "Restriction is only possible in Org-mode buffers") (ding) (sit-for 1)) @@ -2568,7 +2767,7 @@ s Search for keywords C Configure custom agenda commands ((eq c ?>) (org-agenda-remove-restriction-lock 'noupdate) (setq restriction nil)) - ((and (equal selstring "") (memq c '(?s ?a ?t ?m ?L ?C ?e ?T ?M ?# ?! ?/ ??))) + ((and (equal selstring "") (memq c '(?s ?S ?a ?t ?m ?L ?C ?e ?T ?M ?# ?! ?/ ??))) (throw 'exit (cons (setq selstring (char-to-string c)) restriction))) ((and (> (length selstring) 0) (eq c ?\d)) (delete-window) @@ -2577,55 +2776,72 @@ s Search for keywords C Configure custom agenda commands ((equal c ?q) (error "Abort")) (t (error "Invalid key %c" c)))))))) -(defvar org-agenda-overriding-arguments nil) ; dynamically scoped parameter -(defvar org-agenda-last-arguments nil - "The arguments of the previous call to `org-agenda'.") +(defun org-agenda-fit-window-to-buffer () + "Fit the window to the buffer size." + (and (memq org-agenda-window-setup '(reorganize-frame)) + (fboundp 'fit-window-to-buffer) + (org-fit-window-to-buffer + nil + (floor (* (frame-height) (cdr org-agenda-window-frame-fractions))) + (floor (* (frame-height) (car org-agenda-window-frame-fractions)))))) + +(defvar org-cmd nil) +(defvar org-agenda-overriding-cmd nil) +(defvar org-agenda-overriding-arguments nil) +(defvar org-agenda-overriding-cmd-arguments nil) (defun org-agenda-run-series (name series) - (org-let (nth 1 series) '(org-prepare-agenda name)) + (org-let (nth 1 series) '(org-agenda-prepare name)) + ;; We need to reset agenda markers here, because when constructing a + ;; block agenda, the individual blocks do not do that. + (org-agenda-reset-markers) (let* ((org-agenda-multi t) (redo (list 'org-agenda-run-series name (list 'quote series))) - (org-agenda-overriding-arguments - (or org-agenda-overriding-arguments - (unless (null (delq nil (get 'org-agenda-redo-command 'last-args))) - (get 'org-agenda-redo-command 'last-args)))) (cmds (car series)) (gprops (nth 1 series)) match ;; The byte compiler incorrectly complains about this. Keep it! - cmd type lprops) - (while (setq cmd (pop cmds)) - (setq type (car cmd) match (eval (nth 1 cmd)) lprops (nth 2 cmd)) - (cond - ((eq type 'agenda) - (org-let2 gprops lprops - '(call-interactively 'org-agenda-list))) - ((eq type 'alltodo) - (org-let2 gprops lprops - '(call-interactively 'org-todo-list))) - ((eq type 'search) - (org-let2 gprops lprops - '(org-search-view current-prefix-arg match nil))) - ((eq type 'stuck) - (org-let2 gprops lprops - '(call-interactively 'org-agenda-list-stuck-projects))) - ((eq type 'tags) - (org-let2 gprops lprops - '(org-tags-view current-prefix-arg match))) - ((eq type 'tags-todo) - (org-let2 gprops lprops - '(org-tags-view '(4) match))) - ((eq type 'todo) - (org-let2 gprops lprops - '(org-todo-list match))) - ((fboundp type) - (org-let2 gprops lprops - '(funcall type match))) - (t (error "Invalid type in command series")))) + org-cmd type lprops) + (while (setq org-cmd (pop cmds)) + (setq type (car org-cmd) + match (eval (nth 1 org-cmd)) + lprops (nth 2 org-cmd)) + (let ((org-agenda-overriding-arguments + (if (eq org-agenda-overriding-cmd org-cmd) + (or org-agenda-overriding-arguments + org-agenda-overriding-cmd-arguments)))) + (cond + ((eq type 'agenda) + (org-let2 gprops lprops + '(call-interactively 'org-agenda-list))) + ((eq type 'alltodo) + (org-let2 gprops lprops + '(call-interactively 'org-todo-list))) + ((eq type 'search) + (org-let2 gprops lprops + '(org-search-view current-prefix-arg match nil))) + ((eq type 'stuck) + (org-let2 gprops lprops + '(call-interactively 'org-agenda-list-stuck-projects))) + ((eq type 'tags) + (org-let2 gprops lprops + '(org-tags-view current-prefix-arg match))) + ((eq type 'tags-todo) + (org-let2 gprops lprops + '(org-tags-view '(4) match))) + ((eq type 'todo) + (org-let2 gprops lprops + '(org-todo-list match))) + ((fboundp type) + (org-let2 gprops lprops + '(funcall type match))) + (t (error "Invalid type in command series"))))) (widen) + (let ((inhibit-read-only t)) + (add-text-properties (point-min) (point-max) + `(org-serie t org-serie-redo-cmd ,redo))) (setq org-agenda-redo-command redo) - (put 'org-agenda-redo-command 'last-args org-agenda-last-arguments) (goto-char (point-min))) - (org-fit-agenda-window) - (org-let (nth 1 series) '(org-finalize-agenda))) + (org-agenda-fit-window-to-buffer) + (org-let (nth 1 series) '(org-agenda-finalize))) ;;;###autoload (defmacro org-batch-agenda (cmd-key &rest parameters) @@ -2743,7 +2959,6 @@ This ensures the export commands can easily use it." (setq res (replace-match ";" t t res))) (org-trim res))) - ;;;###autoload (defun org-store-agenda-views (&rest parameters) (interactive) @@ -2756,11 +2971,18 @@ This ensures the export commands can easily use it." (pop-up-frames nil) (dir default-directory) (pars (org-make-parameter-alist parameters)) - cmd thiscmdkey files opts cmd-or-set) + cmd thiscmdkey thiscmdcmd match files opts cmd-or-set bufname) (save-window-excursion (while cmds (setq cmd (pop cmds) thiscmdkey (car cmd) + thiscmdcmd (cdr cmd) + match (nth 2 thiscmdcmd) + bufname (if org-agenda-sticky + (or (and (stringp match) + (format "*Org Agenda(%s:%s)*" thiscmdkey match)) + (format "*Org Agenda(%s)*" thiscmdkey)) + org-agenda-buffer-name) cmd-or-set (nth 2 cmd) opts (nth (if (listp cmd-or-set) 3 4) cmd) files (nth (if (listp cmd-or-set) 4 5) cmd)) @@ -2769,15 +2991,17 @@ This ensures the export commands can easily use it." (org-eval-in-environment (append org-agenda-exporter-settings opts pars) (org-agenda nil thiscmdkey)) - (set-buffer org-agenda-buffer-name) + (set-buffer bufname) (while files (org-eval-in-environment (append org-agenda-exporter-settings opts pars) - (org-agenda-write (expand-file-name (pop files) dir) nil t))) - (and (get-buffer org-agenda-buffer-name) - (kill-buffer org-agenda-buffer-name))))))) + (org-agenda-write (expand-file-name (pop files) dir) nil t bufname))) + (and (get-buffer bufname) + (kill-buffer bufname))))))) (def-edebug-spec org-batch-store-agenda-views (&rest sexp)) +(defvar org-agenda-current-span nil + "The current span used in the agenda view.") ; local variable in the agenda buffer (defun org-agenda-mark-header-line (pos) "Mark the line at POS as an agenda structure header." (save-excursion @@ -2788,9 +3012,9 @@ This ensures the export commands can easily use it." (put-text-property (point-at-bol) (point-at-eol) 'org-agenda-title-append org-agenda-title-append)))) -(defvar org-mobile-creating-agendas) +(defvar org-mobile-creating-agendas) ; defined in org-mobile.el (defvar org-agenda-write-buffer-name "Agenda View") -(defun org-agenda-write (file &optional open nosettings) +(defun org-agenda-write (file &optional open nosettings agenda-bufname) "Write the current buffer (an agenda view) as a file. Depending on the extension of the file name, plain text (.txt), HTML (.html or .htm) or Postscript (.ps) is produced. @@ -2801,7 +3025,8 @@ With prefix argument OPEN, open the new file immediately. If NOSETTINGS is given, do not scope the settings of `org-agenda-exporter-settings' into the export commands. This is used when the settings have already been scoped and we do not wish to overrule other, -higher priority settings." +higher priority settings. +If AGENDA-BUFFER-NAME, use this as the buffer name for the agenda to write." (interactive "FWrite agenda to file: \nP") (if (not (file-writable-p file)) (error "Cannot write agenda to file %s" file)) @@ -2828,9 +3053,7 @@ higher priority settings." ((string-match "\\.html?\\'" file) (require 'htmlize) (set-buffer (htmlize-buffer (current-buffer))) - - (when (and org-agenda-export-html-style - (string-match "\n")) "\n" "\n")) @@ -520,14 +519,15 @@ DRAWERS-REGEXP are converted to freemind notes." (list node-res note-res)))) (defun org-freemind-write-node (mm-buffer drawers-regexp - num-left-nodes base-level - current-level next-level this-m2 - this-node-end - this-children-visible - next-node-start - next-has-some-visible-child) + num-left-nodes base-level + current-level next-level this-m2 + this-node-end + this-children-visible + next-node-start + next-has-some-visible-child) (let* (this-icons this-bg-color + this-m2-link this-m2-escaped this-rich-node this-rich-note @@ -560,6 +560,10 @@ DRAWERS-REGEXP are converted to freemind notes." (add-to-list 'this-icons "full-7")) )))) (setq this-m2 (org-trim this-m2)) + (when (string-match org-bracket-link-analytic-regexp this-m2) + (setq this-m2-link (concat "link=\"" (match-string 1 this-m2) + (match-string 3 this-m2) "\" ") + this-m2 (replace-match "\\5" nil nil this-m2 0))) (setq this-m2-escaped (org-freemind-escape-str-from-org this-m2)) (let ((node-notes (org-freemind-org-text-to-freemind-subnode/note this-m2-escaped @@ -569,7 +573,8 @@ DRAWERS-REGEXP are converted to freemind notes." (setq this-rich-node (nth 0 node-notes)) (setq this-rich-note (nth 1 node-notes))) (with-current-buffer mm-buffer - (insert " next-level current-level) (unless (or this-children-visible @@ -784,15 +789,15 @@ Otherwise give an error say the file exists." ;;; (unless (if node-at-line-last ;;; (>= (point) node-at-line-last) ;;; nil) - ;; Write last node: - (setq this-m2 next-m2) - (setq current-level next-level) - (setq next-node-start (if node-at-line-last - (1+ node-at-line-last) - (point-max))) - (setq num-left-nodes (org-freemind-write-node mm-buffer drawers-regexp num-left-nodes base-level current-level next-level this-m2 this-node-end this-children-visible next-node-start next-has-some-visible-child)) - (with-current-buffer mm-buffer (insert "\n")) - ;) + ;; Write last node: + (setq this-m2 next-m2) + (setq current-level next-level) + (setq next-node-start (if node-at-line-last + (1+ node-at-line-last) + (point-max))) + (setq num-left-nodes (org-freemind-write-node mm-buffer drawers-regexp num-left-nodes base-level current-level next-level this-m2 this-node-end this-children-visible next-node-start next-has-some-visible-child)) + (with-current-buffer mm-buffer (insert "\n")) + ;) ) (with-current-buffer mm-buffer (while (> current-level base-level) @@ -1032,7 +1037,7 @@ PATH should be a list of steps, where each step has the form (let* ((child-attr-list (cadr child)) (step-attr-copy (copy-sequence step-attr-list))) (dolist (child-attr child-attr-list) - ;; Compare attr names: + ;; Compare attr names: (when (org-freemind-symbols= (caar step-attr-copy) (car child-attr)) ;; Compare values: (let ((step-val (cdar step-attr-copy)) @@ -1066,12 +1071,12 @@ PATH should be a list of steps, where each step has the form (defun org-freemind-test-get-tree-text () (let ((node '(p nil "\n" - (a - ((href . "link")) - "text") - "\n" - (b nil "hej") - "\n"))) + (a + ((href . "link")) + "text") + "\n" + (b nil "hej") + "\n"))) (org-freemind-get-tree-text node))) ;; (org-freemind-test-get-tree-text) @@ -1085,11 +1090,9 @@ PATH should be a list of steps, where each step has the form ;;(a (setq is-link t) ) ((h1 h2 h3 h4 h5 h6 p) ;;(setq ntxt (concat "\n" ntxt)) - (setq lf-after 2) - ) + (setq lf-after 2)) (br - (setq lf-after 1) - ) + (setq lf-after 1)) (t (cond ((stringp n) @@ -1106,8 +1109,7 @@ PATH should be a list of steps, where each step has the form (let ((att (car att-val)) (val (cdr att-val))) (when (eq att 'href) - (setq link val))))) - ))))) + (setq link val)))))))))) (if lf-after (setq ntxt (concat ntxt (make-string lf-after ?\n))) (setq ntxt (concat ntxt " "))) @@ -1184,7 +1186,7 @@ PATH should be a list of steps, where each step has the form (org-freemind-node-to-org child (1+ level) skip-levels))))) ;; Fix-me: put back special things, like drawers that are stored in -;; the notes. Should maybe all notes contents be put in drawers? +;; the notes. Should maybe all notes contents be put in drawers? ;;;###autoload (defun org-freemind-to-org-mode (mm-file org-file) "Convert FreeMind file MM-FILE to `org-mode' file ORG-FILE." diff --git a/lisp/org/org-gnus.el b/lisp/org/org-gnus.el index 5b855c291f0..77f9c0b8a7f 100644 --- a/lisp/org/org-gnus.el +++ b/lisp/org/org-gnus.el @@ -32,6 +32,7 @@ ;;; Code: (require 'org) +(require 'gnus-util) (eval-when-compile (require 'gnus-sum)) ;; Declare external functions and variables @@ -100,11 +101,11 @@ If `org-store-link' was called with a prefix arg the meaning of (if (and (string-match "^nntp" group) ;; Only for nntp groups (org-xor current-prefix-arg org-gnus-prefer-web-links)) - (org-make-link (if (string-match "gmane" unprefixed-group) - "http://news.gmane.org/" - "http://groups.google.com/group/") - unprefixed-group) - (org-make-link "gnus:" group)))) + (concat (if (string-match "gmane" unprefixed-group) + "http://news.gmane.org/" + "http://groups.google.com/group/") + unprefixed-group) + (concat "gnus:" group)))) (defun org-gnus-article-link (group newsgroups message-id x-no-archive) "Create a link to a Gnus article. @@ -125,7 +126,7 @@ If `org-store-link' was called with a prefix arg the meaning of "http://mid.gmane.org/%s" "http://groups.google.com/groups/search?as_umsgid=%s") (org-fixup-message-id-for-http message-id)) - (org-make-link "gnus:" group "#" message-id))) + (concat "gnus:" group "#" message-id))) (defun org-gnus-store-link () "Store a link to a Gnus folder or message." @@ -206,7 +207,7 @@ If `org-store-link' was called with a prefix arg the meaning of desc link newsgroup xarchive) ; those are always nil for gcc (and (not gcc) - (error "Can not create link: No Gcc header found.")) + (error "Can not create link: No Gcc header found")) (org-store-link-props :type "gnus" :from from :subject subject :message-id id :group gcc :to to) (setq desc (org-email-link-description) @@ -233,9 +234,9 @@ If `org-store-link' was called with a prefix arg the meaning of (setq group (match-string 1 path) article (match-string 3 path)) (when group - (setq group (org-substring-no-properties group))) + (setq group (org-no-properties group))) (when article - (setq article (org-substring-no-properties article))) + (setq article (org-no-properties article))) (org-gnus-follow-link group article))) (defun org-gnus-follow-link (&optional group article) @@ -244,9 +245,9 @@ If `org-store-link' was called with a prefix arg the meaning of (funcall (cdr (assq 'gnus org-link-frame-setup))) (if gnus-other-frame-object (select-frame gnus-other-frame-object)) (when group - (setq group (org-substring-no-properties group))) + (setq group (org-no-properties group))) (when article - (setq article (org-substring-no-properties article))) + (setq article (org-no-properties article))) (cond ((and group article) (gnus-activate-group group) (condition-case nil @@ -272,7 +273,7 @@ If `org-store-link' was called with a prefix arg the meaning of ;; stop on integer overflows (> articles 0)) (setq group-opened (gnus-group-read-group - articles nil group) + articles t group) articles (if (< articles 16) (1+ articles) (* articles 2)))) diff --git a/lisp/org/org-habit.el b/lisp/org/org-habit.el index 6b4776662e2..5b68ac32265 100644 --- a/lisp/org/org-habit.el +++ b/lisp/org/org-habit.el @@ -67,6 +67,12 @@ relative to the current effective date." :group 'org-habit :type 'boolean) +(defcustom org-habit-show-all-today nil + "If non-nil, will show the consistency graph of all habits on +today's agenda, even if they are not scheduled." + :group 'org-habit + :type 'boolean) + (defcustom org-habit-today-glyph ?! "Glyph character used to identify today." :group 'org-habit diff --git a/lisp/org/org-html.el b/lisp/org/org-html.el index 5cecc44a2df..79b028638a1 100644 --- a/lisp/org/org-html.el +++ b/lisp/org/org-html.el @@ -98,8 +98,32 @@ not be modified." :group 'org-export-html :type 'boolean) -(defconst org-export-html-scripts -"" -"Basic JavaScript that is needed by HTML files produced by Org-mode.") + "Basic JavaScript that is needed by HTML files produced by Org-mode.") (defconst org-export-html-style-default -"