1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-24 10:38:38 +00:00

Merge from emacs-24; up to 2012-12-23T02:41:17Z!rgm@gnu.org

This commit is contained in:
Glenn Morris 2013-02-27 22:30:48 -08:00
commit 929aeac608
26 changed files with 618 additions and 357 deletions

View File

@ -1,3 +1,7 @@
2013-02-28 Bastien Guerry <bzg@gnu.org>
* xresources.texi (GTK resources): Fix broken link.
2013-02-25 Eli Zaretskii <eliz@gnu.org>
* files.texi (Interlocking): Don't refer to symlinks as the

View File

@ -507,7 +507,7 @@ those are governed by normal X resources (@pxref{Resources}).
The following sections describe how to customize GTK+ resources for
Emacs. For details about GTK+ resources, see the GTK+ API document at
@uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}.
@uref{http://developer.gnome.org/gtk2/stable/gtk2-Resource-Files.html}.
In GTK+ version 3, GTK+ resources have been replaced by a completely
different system. The appearance of GTK+ widgets is now determined by

View File

@ -1,3 +1,7 @@
2013-02-28 Bastien Guerry <bzg@gnu.org>
* variables.texi (File Local Variables): Fix reference.
2013-02-24 Eli Zaretskii <eliz@gnu.org>
* files.texi (Magic File Names): Improve wording and indexing.

View File

@ -1556,7 +1556,7 @@ an ordinary evaluated argument.
A file can specify local variable values; Emacs uses these to create
buffer-local bindings for those variables in the buffer visiting that
file. @xref{File variables, , Local Variables in Files, emacs, The
file. @xref{File Variables, , Local Variables in Files, emacs, The
GNU Emacs Manual}, for basic information about file-local variables.
This section describes the functions and variables that affect how
file-local variables are processed.

View File

@ -1,3 +1,15 @@
2013-02-28 Bastien Guerry <bzg@gnu.org>
* org.texi (Visibility cycling): Suggest to set
`org-agenda-inhibit-startup' to nil if user wants the startup
visibility settings to be honored in any circumstances.
(Progress logging, Checkboxes): Fix typos.
2013-02-28 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (top) [xxx, yyy, trampfn]: Provide two versions of
the macros, for Texinfo 4.13 and 5.0.
2013-02-24 Michael Albinus <michael.albinus@gmx.de>
Port Tramp documentation to Texinfo 5.0.

View File

@ -2,7 +2,7 @@
@c %**start of header
@setfilename ../../info/org
@settitle The Org Manual
@set VERSION 7.9.3e (GNU Emacs 24.3)
@set VERSION 7.9.3f (GNU Emacs 24.3)
@c Use proper quote and backtick for code sections in PDF output
@c Cf. Texinfo manual 14.2
@ -1296,6 +1296,7 @@ Copy the @i{visible} text in the region into the kill ring.
@end table
@vindex org-startup-folded
@vindex org-agenda-inhibit-startup
@cindex @code{overview}, STARTUP keyword
@cindex @code{content}, STARTUP keyword
@cindex @code{showall}, STARTUP keyword
@ -1314,6 +1315,10 @@ buffer:
#+STARTUP: showeverything
@end example
The startup visibility options are ignored when the file is open for the
first time during the agenda generation: if you want the agenda to honor
the startup visibility, set @code{org-agenda-inhibit-startup} to nil.
@cindex property, VISIBILITY
@noindent
Furthermore, any entries with a @samp{VISIBILITY} property (@pxref{Properties
@ -2439,7 +2444,7 @@ You may reference a rectangular range of fields by specifying two field
references connected by two dots @samp{..}. If both fields are in the
current row, you may simply use @samp{$2..$7}, but if at least one field
is in a different row, you need to use the general @code{@@row$column}
format at least for the first field (i.e., the reference must start with
format at least for the first field (i.e the reference must start with
@samp{@@} in order to be interpreted correctly). Examples:
@example
@ -4075,7 +4080,7 @@ module @file{org-depend.el}.
Org mode can automatically record a timestamp and possibly a note when
you mark a TODO item as DONE, or even each time you change the state of
a TODO item. This system is highly configurable, settings can be on a
a TODO item. This system is highly configurable; settings can be on a
per-keyword basis and can be localized to a file or even a subtree. For
information on how to clock working time for a task, see @ref{Clocking
work time}.
@ -4431,7 +4436,7 @@ lists. But you can allow it by modifying @code{org-list-automatic-rules}
accordingly.} (@pxref{Plain lists}) can be made into a checkbox by starting
it with the string @samp{[ ]}. This feature is similar to TODO items
(@pxref{TODO Items}), but is more lightweight. Checkboxes are not included
into the global TODO list, so they are often great to split a task into a
in the global TODO list, so they are often great to split a task into a
number of simple steps. Or you can use them in a shopping list. To toggle a
checkbox, use @kbd{C-c C-c}, or use the mouse (thanks to Piotr Zielinski's
@file{org-mouse.el}).

View File

@ -20,6 +20,11 @@
@c xxx and yyy are auxiliary macros in order to omit leading and
@c trailing whitespace. Not very elegant, but I don't know it better.
@c There are subtle differences between texinfo 4.13 and 5.0. We must
@c declare two versions of the macro. This will be improved, hopefully.
@c Texinfo 5.0.
@ifset txicommandconditionals
@macro xxx {one}
@set \one\
@end macro
@ -38,6 +43,26 @@
@yyy{\user\,@@}@c
\host\@value{postfix}\localname\
@end macro
@end ifset
@c Texinfo 4.13.
@ifclear txicommandconditionals
@macro xxx {one}@c
@set \one\@c
@end macro
@macro yyy {one, two}@c
@xxx{x\one\}@c
@ifclear x@c
\one\@w{}\two\@c
@end ifclear
@clear x\one\@c
@end macro
@macro trampfn {method, user, host, localname}@c
@value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c
@end macro
@end ifclear
@copying
Copyright @copyright{} 1999--2013 Free Software Foundation, Inc.
@ -3892,3 +3917,4 @@ for @value{emacsothername}.
@c * Use `filename' resp. `file name' consistently.
@c * Use `host' resp. `machine' consistently.
@c * Consistent small or capitalized words especially in menus.
@c * Make a unique declaration of @trampfn.

View File

@ -829,6 +829,63 @@ See the variable `calendar-month-header'.
*** The calendars produced by cal-html include holidays.
Customize `cal-html-holidays' to change this.
** CEDET
*** The major modes from the parser generators "Bovine" and "Wisent"
are now properly integrated in Emacs. The file suffixes ".by" and ".wy"
are in `auto-mode-alist', and the corresponding manuals are included.
*** EDE
**** Menu support for the "Configuration" feature. This allows users to
choose the active configuration (such as debug or install) from the menu.
**** New command `ede-set' to interactively set project-local variables.
**** Support for compiling, debugging, and running in "generic" projects.
**** Autoconf editing support for M4 macros with complex arguments.
**** Compilation support for the "linux" project type.
**** "simple" projects have been removed; use "generic" projects instead.
*** Semantic
**** Support for parsing #include statements inside a namespace in C/C++.
**** Improved support for 'extern "C"' declarations in C/C++.
**** The ability to ignore more common special C/C++ preprocessor symbols,
such as '__nonnull' and '__asm'. Add '__cplusplus' macro when parsing C++.
If available, include cdefs.h as an additional source of preprocessor symbols.
**** Improved C/C++ function pointer parsing.
**** In Python, support for converting imports to include file names.
**** Ability to dynamically determine the Python load path.
**** Support for the Python 'WITH' and 'AT' keywords.
**** Improved tooltip completion.
*** SRecode
**** The SRecode manual is now included.
**** Tag generation supports constructor/destructor settings and system
include differentiation.
**** Addition of 'Framework' support: Frameworks are specified when a
particular kind of library (such as Android) is needed in a common language
mode (like Java).
**** Support for nested templates and let variables override based on priority.
**** Support for merging tables from multiple related modes, such as
default -> c++ -> arduino.
** Compile has a new option `compilation-always-kill'.
** Customize
@ -1168,6 +1225,25 @@ accessed via the new `timer--psecs' accessor.
*** Last-modified time stamps in undo lists now are of the form
(t HI-SECS LO-SECS USECS PSECS) instead of (t HI-SECS . LO-SECS).
** EIEIO
*** Improved security when handling persistent objects:
**** `eieio-persistent-read' now features optional arguments for specifying
the class to load, as well as a flag stating whether subclasses are allowed;
if provided, other classes will be rejected by the reader. For
compatibility with existing code, if the class is omitted only a
warning is issued.
**** New specialized reader for pulling in classes and signaling errors
without evaluation of suspicious code.
**** All slots that contain objects must have a :type. Slots with lists
of objects must use a new type predicate for a list of an object type.
*** Support for `find-function' and similar utilities, through the addition
of filename support to generated symbols.
** 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

View File

@ -1,3 +1,7 @@
2013-02-28 Glenn Morris <rgm@gnu.org>
* textmodes/paragraphs.el (mark-paragraph): Doc fix.
2013-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
* doc-view.el: Preserve h&v scroll across C-c C-c C-c C-c.

View File

@ -1,3 +1,73 @@
2013-02-28 Achim Gratz <Stromeko@Stromeko.DE>
* org.el (org-org-menu): Use correct key "C-u C-c C-x !" to do
org-reload uncompiled in the menu.
2013-02-28 Bastien Guerry <bzg@gnu.org>
* org-indent.el (org-indent-add-properties): Bugfix: prevent
negative value for `added-ind-per-lvl'.
* org.el (org-mode): Add `org-fix-ellipsis-at-bol' to
`isearch-mode-end-hook' so that any isearch fixes the problem with
ellipsis on the first line.
(org-fix-ellipsis-at-bol): New defsubst.
(org-show-context, org-isearch-end): Use it.
* org.el (org-show-context): Remove useless catch.
Make sure the top of the window is a visible headline.
(org-activate-plain-links): Remove unused catch.
* org-macs.el (org-get-alist-option): Return nil, not (nil),
so that `org-show-context' DTRT.
* org.el (org-imenu-get-tree): Fix bug when matching against empty
headlines.
* org.el (org-overview): Stay on current line.
(org-map-entries): Fix docstring.
(org-at-clock-log-p): Delete.
* org-clock.el (org-at-clock-log-p): Move here.
* org.el (org-tsr-regexp-both): Don't activate dates in links.
(org-activate-dates): Change match boundaries according to the new
value of `org-tsr-regexp-both'.
* org-agenda.el (org-agenda-to-appt): Fix typos.
* org-agenda.el (org-agenda-local-vars): Don't include
`org-agenda-show-window' as it needs to be checked outside of the
agenda window.
* org.el (org-set-tags-command): Fix bug when setting tags for
multiple headlines in an active region.
* org-mobile.el (org-mobile-edit): DTRT when inserting a heading
in an invisible region.
* org.el (org-insert-heading-respect-content): Add docstring.
New `invisible-ok' parameter.
(org-insert-todo-heading-respect-content): Add docstring.
* ob-tangle.el (org-babel-tangle-collect-blocks):
Bugfix: remove code references from blocks.
* org-agenda.el (org-agenda-schedule, org-agenda-deadline):
Cosmetic changes.
(org-agenda-show-new-time): Fix bug when displaying a temporary
overlay with the scheduled/deadline information.
* org.el (org-fill-paragraph-with-timestamp-nobreak-p): New function.
(org-setup-filling): Use it to prevent breaking a timestamp when
filling a paragraph.
* org-id.el (org-id-get-with-outline-path-completion): Fix docstring.
2013-02-28 Tim Burt <tcburt@rochester.rr.com> (tiny change)
* org-datetree.el (org-datetree-find-year-create):
Match headlines with tags.
2013-02-07 Bastien Guerry <bzg@gnu.org>
* org-agenda.el (org-agenda-get-deadlines)

View File

@ -371,6 +371,10 @@ code blocks by language."
(unless (and language (not (string= language src-lang)))
(let* ((info (org-babel-get-src-block-info))
(params (nth 2 info))
(extra (nth 3 info))
(cref-fmt (or (and (string-match "-l \"\\(.+\\)\"" extra)
(match-string 1 extra))
org-coderef-label-format))
(link ((lambda (link)
(and (string-match org-bracket-link-regexp link)
(match-string 1 link)))
@ -388,6 +392,11 @@ code blocks by language."
((lambda (body) ;; run the tangle-body-hook
(with-temp-buffer
(insert body)
(when (string-match "-r" extra)
(goto-char (point-min))
(while (re-search-forward
(replace-regexp-in-string "%s" ".+" cref-fmt) nil t)
(replace-match "")))
(run-hooks 'org-babel-tangle-body-hook)
(buffer-string)))
((lambda (body) ;; expand the body in language specific manner

View File

@ -1934,11 +1934,6 @@ When nil, `q' will kill the single agenda buffer."
(message "Sticky agenda was %s"
(if org-agenda-sticky "enabled" "disabled"))))))
(autoload 'org-toggle-sticky-agenda "org-agenda" "\
Toggle `org-agenda-sticky'.
\(fn &optional ARG)" t nil)
(defvar org-agenda-buffer nil
"Agenda buffer currently being generated.")
@ -1971,7 +1966,6 @@ Toggle `org-agenda-sticky'.
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.")
@ -2615,43 +2609,6 @@ Pressing `<' twice means to restrict to the current subtree or region
((equal org-keys "!") (customize-variable 'org-stuck-projects))
(t (error "Invalid agenda key"))))))
(autoload 'org-agenda "org-agenda" "\
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:
a Call `org-agenda-list' to display the agenda for current day or week.
t Call `org-todo-list' to display the global todo list.
T Call `org-todo-list' to display the global todo list, select only
entries with a specific TODO keyword (the user gets a prompt).
m Call `org-tags-view' to display headlines with tags matching
a condition (the user is prompted for the condition).
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.
Press several times to get the desired effect.
> Remove a previous restriction.
# List \"stuck\" projects.
! Configure what \"stuck\" means.
C Configure custom agenda commands.
More commands can be added by configuring the variable
`org-agenda-custom-commands'. In particular, specific tags and TODO keyword
searches can be pre-defined in this way.
If the current buffer is in Org-mode and visiting a file, you can also
first press `<' once to indicate that the agenda should be temporarily
\(until the next use of \\[org-agenda]) restricted to the current file.
Pressing `<' twice means to restrict to the current subtree or region
\(if active).
\(fn &optional ARG ORG-KEYS RESTRICTION)" t nil)
(defun org-agenda-append-agenda ()
"Append another agenda view to the current one.
This function allows interactive building of block agendas.
@ -2947,17 +2904,6 @@ before running the agenda command."
(set-buffer org-agenda-buffer-name)
(princ (buffer-string)))
(autoload 'org-batch-agenda "org-agenda" "\
Run an agenda command in batch mode and send the result to STDOUT.
If CMD-KEY is a string of length 1, it is used as a key in
`org-agenda-custom-commands' and triggers this command. If it is a
longer string it is used as a tags/todo match string.
Parameters are alternating variable names and values that will be bound
before running the agenda command.
\(fn CMD-KEY &rest PARAMETERS)" nil t)
(def-edebug-spec org-batch-agenda (form &rest sexp))
(defvar org-agenda-info nil)
;;;###autoload
@ -3015,44 +2961,6 @@ agenda-day The day in the agenda where this is listed"
","))
(princ "\n")))))
(autoload 'org-batch-agenda-csv "org-agenda" "\
Run an agenda command in batch mode and send the result to STDOUT.
If CMD-KEY is a string of length 1, it is used as a key in
`org-agenda-custom-commands' and triggers this command. If it is a
longer string it is used as a tags/todo match string.
Parameters are alternating variable names and values that will be bound
before running the agenda command.
The output gives a line for each selected agenda item. Each
item is a list of comma-separated values, like this:
category,head,type,todo,tags,date,time,extra,priority-l,priority-n
category The category of the item
head The headline, without TODO kwd, TAGS and PRIORITY
type The type of the agenda entry, can be
todo selected in TODO match
tagsmatch selected in tags match
diary imported from diary
deadline a deadline on given date
scheduled scheduled on given date
timestamp entry has timestamp on given date
closed entry was closed on given date
upcoming-deadline warning about deadline
past-scheduled forwarded scheduled item
block entry has date block including g. date
todo The todo keyword, if any
tags All tags including inherited ones, separated by colons
date The relevant date, like 2007-2-14
time The time, like 15:00-16:50
extra Sting with extra planning info
priority-l The priority letter if any was given
priority-n The computed numerical priority
agenda-day The day in the agenda where this is listed
\(fn CMD-KEY &rest PARAMETERS)" nil t)
(def-edebug-spec org-batch-agenda-csv (form &rest sexp))
(defun org-fix-agenda-info (props)
"Make sure all properties on an agenda item have a canonical form.
This ensures the export commands can easily use it."
@ -3100,11 +3008,6 @@ This ensures the export commands can easily use it."
(interactive)
(eval (list 'org-batch-store-agenda-views)))
(autoload 'org-store-agenda-views "org-agenda" "\
\(fn &rest PARAMETERS)" t nil)
;;;###autoload
(defmacro org-batch-store-agenda-views (&rest parameters)
"Run all custom agenda commands that have a file argument."
@ -3140,12 +3043,6 @@ This ensures the export commands can easily use it."
(and (get-buffer bufname)
(kill-buffer bufname)))))))
(autoload 'org-batch-store-agenda-views "org-agenda" "\
Run all custom agenda commands that have a file argument.
\(fn &rest PARAMETERS)" nil t)
(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)
@ -4204,20 +4101,6 @@ given in `org-agenda-start-on-weekday'."
(setq buffer-read-only t)
(message ""))))
(autoload 'org-agenda-list "org-agenda" "\
Produce a daily/weekly view from all files in variable `org-agenda-files'.
The view will be for the current day or week, but from the overview buffer
you will be able to go to other days/weeks.
With a numeric prefix argument in an interactive call, the agenda will
span ARG days. Lisp programs should instead specify SPAN to change
the number of days. SPAN defaults to `org-agenda-span'.
START-DAY defaults to TODAY, or to the most recent match for the weekday
given in `org-agenda-start-on-weekday'.
\(fn &optional ARG START-DAY SPAN)" t nil)
(defun org-agenda-ndays-to-span (n)
"Return a span symbol for a span of N days, or N if none matches."
(cond ((symbolp n) n)
@ -4527,52 +4410,6 @@ in `org-agenda-text-search-extra-files'."
(org-agenda-finalize)
(setq buffer-read-only t))))
(autoload 'org-search-view "org-agenda" "\
Show all entries that contain a phrase or words or regular expressions.
With optional prefix argument TODO-ONLY, only consider entries that are
TODO entries. The argument STRING can be used to pass a default search
string into this function. If EDIT-AT is non-nil, it means that the
user should get a chance to edit this string, with cursor at position
EDIT-AT.
The search string can be viewed either as a phrase that should be found as
is, or it can be broken into a number of snippets, each of which must match
in a Boolean way to select an entry. The default depends on the variable
`org-agenda-search-view-always-boolean'.
Even if this is turned off (the default) you can always switch to
Boolean search dynamically by preceding the first word with \"+\" or \"-\".
The default is a direct search of the whole phrase, where each space in
the search string can expand to an arbitrary amount of whitespace,
including newlines.
If using a Boolean search, the search string is split on whitespace and
each snippet is searched separately, with logical AND to select an entry.
Words prefixed with a minus must *not* occur in the entry. Words without
a prefix or prefixed with a plus must occur in the entry. Matching is
case-insensitive. Words are enclosed by word delimiters (i.e. they must
match whole words, not parts of a word) if
`org-agenda-search-view-force-full-words' is set (default is nil).
Boolean search snippets enclosed by curly braces are interpreted as
regular expressions that must or (when preceded with \"-\") must not
match in the entry. Snippets enclosed into double quotes will be taken
as a whole, to include whitespace.
- If the search string starts with an asterisk, search only in headlines.
- If (possibly after the leading star) the search string starts with an
exclamation mark, this also means to look at TODO entries only, an effect
that can also be achieved with a prefix argument.
- If (possibly after star and exclamation mark) the search string starts
with a colon, this will mean that the (non-regexp) snippets of the
Boolean search must match as full words.
This command searches the agenda files, and in addition the files listed
in `org-agenda-text-search-extra-files'.
\(fn &optional TODO-ONLY STRING EDIT-AT)" t nil)
;;; Agenda TODO list
(defvar org-select-this-todo-keyword nil)
@ -4663,15 +4500,6 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(org-agenda-finalize)
(setq buffer-read-only t))))
(autoload 'org-todo-list "org-agenda" "\
Show all (not done) TODO entries from all agenda file in a single list.
The prefix arg can be used to select a specific TODO keyword and limit
the list to these. When using \\[universal-argument], you will be prompted
for a keyword. A numeric prefix directly selects the Nth keyword in
`org-todo-keywords-1'.
\(fn &optional ARG)" t nil)
;;; Agenda tags match
;;;###autoload
@ -4757,12 +4585,6 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
(org-agenda-finalize)
(setq buffer-read-only t))))
(autoload 'org-tags-view "org-agenda" "\
Show all headlines for all `org-agenda-files' matching a TAGS criterion.
The prefix arg TODO-ONLY limits the search to TODO entries.
\(fn &optional TODO-ONLY MATCH)" t nil)
;;; Agenda Finding stuck projects
(defvar org-agenda-skip-regexp nil
@ -4991,14 +4813,6 @@ of what a project is and how to check if it stuck, customize the variable
(setq org-agenda-redo-command
`(org-agenda-list-stuck-projects ,current-prefix-arg)))))
(autoload 'org-agenda-list-stuck-projects "org-agenda" "\
Create agenda view for projects that are stuck.
Stuck projects are project that have no next actions. For the definitions
of what a project is and how to check if it stuck, customize the variable
`org-stuck-projects'.
\(fn &rest IGNORE)" t nil)
;;; Diary integration
(defvar org-disable-agenda-to-diary nil) ;Dynamically-scoped param.
@ -5177,35 +4991,6 @@ function from a program - use `org-agenda-get-day-entries' instead."
(if results
(concat (org-agenda-finalize-entries results) "\n"))))
(autoload 'org-diary "org-agenda" "\
Return diary information from org files.
This function can be used in a \"sexp\" diary entry in the Emacs calendar.
It accesses org files and extracts information from those files to be
listed in the diary. The function accepts arguments specifying what
items should be listed. For a list of arguments allowed here, see the
variable `org-agenda-entry-types'.
The call in the diary file should look like this:
&%%(org-diary) ~/path/to/some/orgfile.org
Use a separate line for each org file to check. Or, if you omit the file name,
all files listed in `org-agenda-files' will be checked automatically:
&%%(org-diary)
If you don't give any arguments (as in the example above), the default
arguments (:deadline :scheduled :timestamp :sexp) are used.
So the example above may also be written as
&%%(org-diary :deadline :timestamp :sexp :scheduled)
The function expects the lisp variables `entry' and `date' to be provided
by the caller, because this is how the calendar works. Don't use this
function from a program - use `org-agenda-get-day-entries' instead.
\(fn &rest ARGS)" nil nil)
;;; Agenda entry finders
(defun org-agenda-get-day-entries (file date &rest args)
@ -5401,11 +5186,6 @@ This function is invoked if `org-agenda-todo-ignore-deadlines',
(match-string 1) org-agenda-todo-ignore-timestamp))
(t))))))))))
(autoload 'org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item "org-agenda" "\
Do we have a reason to ignore this TODO entry because it has a time stamp?
\(fn &optional END)" nil nil)
(defun org-agenda-get-timestamps (&optional deadline-results)
"Return the date stamp information for agenda display."
(let* ((props (list 'face 'org-agenda-calendar-event
@ -8686,9 +8466,8 @@ Called with a universal prefix arg, show the priority instead of setting it."
(defun org-agenda-show-new-time (marker stamp &optional prefix)
"Show new date stamp via text properties."
;; We use text properties to make this undoable
(let ((inhibit-read-only t)
(buffer-invisibility-spec))
(setq stamp (concat " " prefix " => " stamp))
(let ((inhibit-read-only t))
(setq stamp (concat prefix " => " stamp " "))
(save-excursion
(goto-char (point-max))
(while (not (bobp))
@ -8750,7 +8529,7 @@ ARG is passed through to `org-schedule'."
(widen)
(goto-char pos)
(setq ts (org-schedule arg time)))
(org-agenda-show-new-time marker ts "S"))
(org-agenda-show-new-time marker ts " S"))
(message "%s" ts)))
(defun org-agenda-deadline (arg &optional time)
@ -8770,7 +8549,7 @@ ARG is passed through to `org-deadline'."
(widen)
(goto-char pos)
(setq ts (org-deadline arg time)))
(org-agenda-show-new-time marker ts "D"))
(org-agenda-show-new-time marker ts " D"))
(message "%s" ts)))
(defun org-agenda-clock-in (&optional arg)
@ -9131,12 +8910,6 @@ This is a command that has to be installed in `calendar-mode-map'."
(calendar-cursor-to-date))
nil))
(autoload 'org-calendar-goto-agenda "org-agenda" "\
Compute the Org-mode agenda for the calendar date displayed at the cursor.
This is a command that has to be installed in `calendar-mode-map'.
\(fn)" t nil)
(defun org-agenda-convert-date ()
(interactive)
(org-agenda-check-type t 'agenda 'timeline)
@ -9519,7 +9292,7 @@ By default `org-agenda-to-appt' will use :deadline, :scheduled
and :timestamp entries. See the docstring of `org-diary' for
details and examples.
If an entry as a APPT_WARNTIME property, its value will be used
If an entry has a APPT_WARNTIME property, its value will be used
to override `appt-message-warning-time'."
(interactive "P")
(if refresh (setq appt-time-msg-list nil))
@ -9579,40 +9352,6 @@ to override `appt-message-warning-time'."
(message "No event to add")
(message "Added %d event%s for today" cnt (if (> cnt 1) "s" "")))))
(autoload 'org-agenda-to-appt "org-agenda" "\
Activate appointments found in `org-agenda-files'.
With a \\[universal-argument] prefix, refresh the list of
appointments.
If FILTER is t, interactively prompt the user for a regular
expression, and filter out entries that don't match it.
If FILTER is a string, use this string as a regular expression
for filtering entries out.
If FILTER is a function, filter out entries against which
calling the function returns nil. This function takes one
argument: an entry from `org-agenda-get-day-entries'.
FILTER can also be an alist with the car of each cell being
either 'headline or 'category. For example:
'((headline \"IMPORTANT\")
(category \"Work\"))
will only add headlines containing IMPORTANT or headlines
belonging to the \"Work\" category.
ARGS are symbols indicating what kind of entries to consider.
By default `org-agenda-to-appt' will use :deadline, :scheduled
and :timestamp entries. See the docstring of `org-diary' for
details and examples.
If an entry as a APPT_WARNTIME property, its value will be used
to override `appt-message-warning-time'.
\(fn &optional REFRESH FILTER &rest ARGS)" t nil)
(defun org-agenda-todayp (date)
"Does DATE mean today, when considering `org-extend-today-until'?"
(let ((today (org-today))

View File

@ -1545,12 +1545,6 @@ to, overriding the existing value of `org-clock-out-switch-to-state'."
(org-remove-empty-drawer-at clock-drawer (point))
(forward-line 1))))))
(defun org-at-clock-log-p nil
"Is the cursor on the clock log line?"
(save-excursion
(move-beginning-of-line 1)
(looking-at "^[ \t]*CLOCK:")))
(defun org-clock-timestamps-up nil
"Increase CLOCK timestamps at cursor."
(interactive)

View File

@ -72,7 +72,7 @@ tree can be found."
(goto-char (prog1 (point) (widen))))))
(defun org-datetree-find-year-create (year)
(let ((re "^\\*+[ \t]+\\([12][0-9][0-9][0-9]\\)\\s-*$")
(let ((re "^\\*+[ \t]+\\([12][0-9]\\{3\\}\\)\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:\\)?\\s-*$\\)")
match)
(goto-char (point-min))
(while (and (setq match (re-search-forward re nil t))

View File

@ -49,7 +49,7 @@
(declare-function image-mode-window-get "ext:image-mode"
(prop &optional winprops))
(autoload 'doc-view-goto-page "doc-view")
(org-autoload "doc-view" '(doc-view-goto-page))
(org-add-link-type "docview" 'org-docview-open)
(add-hook 'org-store-link-functions 'org-docview-store-link)

View File

@ -259,11 +259,11 @@ In any case, the ID of the entry is returned."
id)))))
(defun org-id-get-with-outline-path-completion (&optional targets)
"Use outline-path-completion to retrieve the ID of an entry.
TARGETS may be a setting for `org-refile-targets' to define the eligible
headlines. When omitted, all headlines in all agenda files are
eligible.
It returns the ID of the entry. If necessary, the ID is created."
"Use `outline-path-completion' to retrieve the ID of an entry.
TARGETS may be a setting for `org-refile-targets' to define
eligible headlines. When omitted, all headlines in the current
file are eligible. This function returns the ID of the entry.
If necessary, the ID is created."
(let* ((org-refile-targets (or targets '((nil . (:maxlevel . 10)))))
(org-refile-use-outline-path
(if (caar org-refile-targets) 'file t))

View File

@ -328,7 +328,7 @@ stopped."
;; inline task or not.
(let* ((case-fold-search t)
(limited-re (org-get-limited-outline-regexp))
(added-ind-per-lvl (1- org-indent-indentation-per-level))
(added-ind-per-lvl (abs (1- org-indent-indentation-per-level)))
(pf (save-excursion
(and (ignore-errors (let ((outline-regexp limited-re))
(org-back-to-heading t)))

View File

@ -263,7 +263,8 @@ in `org-rm-props'."
(cond ((eq key t) t)
((eq option t) t)
((assoc key option) (cdr (assoc key option)))
(t (cdr (assq 'default option)))))
(t (let ((r (cdr (assq 'default option))))
(if (listp r) (delq nil r) r)))))
(defsubst org-check-external-command (cmd &optional use no-error)
"Check if external program CMD for USE exists, error if not.

View File

@ -1064,7 +1064,7 @@ be returned that indicates what went wrong."
(if (org-on-heading-p) ; if false we are in top-level of file
(progn
(end-of-line 1)
(org-insert-heading-respect-content)
(org-insert-heading-respect-content t)
(org-demote))
(beginning-of-line)
(insert "* "))

View File

@ -5,13 +5,13 @@
(defun org-release ()
"The release version of org-mode.
Inserted by installing org-mode or when a release is made."
(let ((org-release "7.9.3e"))
(let ((org-release "7.9.3f"))
org-release))
;;;###autoload
(defun org-git-version ()
"The Git version of org-mode.
Inserted by installing org-mode or when a release is made."
(let ((org-git-version "7.9.3e-3-gb07a9b"))
(let ((org-git-version "release_7.9.3f-17-g7524ef"))
org-git-version))
;;;###autoload
(defvar org-odt-data-dir "/usr/share/emacs/etc/org"

View File

@ -114,7 +114,6 @@ Stars are put in group 1 and the trimmed body in group 2.")
(declare-function org-inlinetask-outline-regexp "org-inlinetask" ())
(declare-function org-inlinetask-toggle-visibility "org-inlinetask" ())
(declare-function org-pop-to-buffer-same-window "org-compat" (&optional buffer-or-name norecord label))
(declare-function org-at-clock-log-p "org-clock" ())
(declare-function org-clock-timestamps-up "org-clock" ())
(declare-function org-clock-timestamps-down "org-clock" ())
(declare-function org-clock-sum-current-item "org-clock" (&optional tstart))
@ -467,7 +466,11 @@ the following lines anywhere in the buffer:
#+STARTUP: fold (or `overview', this is equivalent)
#+STARTUP: nofold (or `showall', this is equivalent)
#+STARTUP: content
#+STARTUP: showeverything"
#+STARTUP: showeverything
By default, this option is ignored when Org opens agenda files
for the first time. If you want the agenda to honor the startup
option, set `org-agenda-inhibit-startup' to nil."
:group 'org-startup
:type '(choice
(const :tag "nofold: show all" nil)
@ -3913,6 +3916,7 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
(save-excursion
(goto-char (org-table-begin 'any))
(looking-at org-table1-hline-regexp))))
(defun org-table-recognize-table.el ()
"If there is a table.el table nearby, recognize it and move into it."
(if org-table-tab-recognizes-table.el
@ -3948,7 +3952,6 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
nil))
(defvar org-table-clean-did-remove-column nil)
(defun org-table-map-tables (function &optional quietly)
"Apply FUNCTION to the start of all tables in the buffer."
(save-excursion
@ -4969,7 +4972,8 @@ The following commands are available:
(org-add-hook 'isearch-mode-end-hook 'org-isearch-end 'append 'local)
;; Emacs 22 deals with this through a special variable
(org-set-local 'outline-isearch-open-invisible-function
(lambda (&rest ignore) (org-show-context 'isearch))))
(lambda (&rest ignore) (org-show-context 'isearch)))
(org-add-hook 'isearch-mode-end-hook 'org-fix-ellipsis-at-bol 'append 'local))
;; Setup the pcomplete hooks
(set (make-local-variable 'pcomplete-command-completion-function)
@ -5008,6 +5012,8 @@ The following commands are available:
(put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify)
(defsubst org-fix-ellipsis-at-bol ()
(save-excursion (goto-char (window-start)) (recenter 0)))
(defun org-find-invisible-foreground ()
(let ((candidates (remove
@ -5205,8 +5211,9 @@ on a string that terminates immediately after the date.")
(defconst org-tsr-regexp (concat org-ts-regexp "\\(--?-?"
org-ts-regexp "\\)?")
"Regular expression matching a time stamp or time stamp range.")
(defconst org-tsr-regexp-both (concat org-ts-regexp-both "\\(--?-?"
org-ts-regexp-both "\\)?")
(defconst org-tsr-regexp-both
(concat org-ts-regexp-both "\\(--?-?"
org-ts-regexp-both "\\)?")
"Regular expression matching a time stamp or time stamp range.
The time stamps may be either active or inactive.")
@ -5298,21 +5305,20 @@ will be prompted for."
(defun org-activate-plain-links (limit)
"Run through the buffer and add overlays to links."
(catch 'exit
(let (f)
(when (and (re-search-forward (concat org-plain-link-re) limit t)
(not (org-in-src-block-p)))
(org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
(setq f (get-text-property (match-beginning 0) 'face))
(unless (or (org-in-src-block-p)
(eq f 'org-tag)
(and (listp f) (memq 'org-tag f)))
(add-text-properties (match-beginning 0) (match-end 0)
(list 'mouse-face 'highlight
'face 'org-link
'keymap org-mouse-map))
(org-rear-nonsticky-at (match-end 0)))
t))))
(let (f)
(when (and (re-search-forward (concat org-plain-link-re) limit t)
(not (org-in-src-block-p)))
(org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
(setq f (get-text-property (match-beginning 0) 'face))
(unless (or (org-in-src-block-p)
(eq f 'org-tag)
(and (listp f) (memq 'org-tag f)))
(add-text-properties (match-beginning 0) (match-end 0)
(list 'mouse-face 'highlight
'face 'org-link
'keymap org-mouse-map))
(org-rear-nonsticky-at (match-end 0)))
t)))
(defun org-activate-code (limit)
(if (re-search-forward "^[ \t]*\\(:\\(?: .*\\|$\\)\n?\\)" limit t)
@ -5510,7 +5516,8 @@ by a #."
(defun org-activate-dates (limit)
"Run through the buffer and add overlays to dates."
(if (re-search-forward org-tsr-regexp-both limit t)
(if (and (re-search-forward org-tsr-regexp-both limit t)
(not (equal (char-before (match-beginning 0)) 91)))
(progn
(org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
(add-text-properties (match-beginning 0) (match-end 0)
@ -6431,13 +6438,16 @@ of the first headline in the buffer. This is important, because if the
first headline is not level one, then (hide-sublevels 1) gives confusing
results."
(interactive)
(let ((level (save-excursion
(let ((l (org-current-line))
(level (save-excursion
(goto-char (point-min))
(if (re-search-forward (concat "^" outline-regexp) nil t)
(progn
(goto-char (match-beginning 0))
(funcall outline-level))))))
(and level (hide-sublevels level))))
(and level (hide-sublevels level))
(recenter '(4))
(org-goto-line l)))
(defun org-content (&optional arg)
"Show all headlines in the buffer, like a table of contents.
@ -7231,12 +7241,14 @@ This is a list with the following elements:
(org-move-subtree-down)
(end-of-line 1))
(defun org-insert-heading-respect-content ()
(interactive)
(defun org-insert-heading-respect-content (invisible-ok)
"Insert heading with `org-insert-heading-respect-content' set to t."
(interactive "P")
(let ((org-insert-heading-respect-content t))
(org-insert-heading t)))
(org-insert-heading t invisible-ok)))
(defun org-insert-todo-heading-respect-content (&optional force-state)
"Insert TODO heading with `org-insert-heading-respect-content' set to t."
(interactive "P")
(let ((org-insert-heading-respect-content t))
(org-insert-todo-heading force-state t)))
@ -12835,27 +12847,27 @@ How much context is shown depends upon the variables
(following-p (org-get-alist-option org-show-following-heading key))
(entry-p (org-get-alist-option org-show-entry-below key))
(siblings-p (org-get-alist-option org-show-siblings key)))
(catch 'exit
;; Show heading or entry text
(if (and heading-p (not entry-p))
(org-flag-heading nil) ; only show the heading
(and (or entry-p (outline-invisible-p) (org-invisible-p2))
(org-show-hidden-entry))) ; show entire entry
(when following-p
;; Show next sibling, or heading below text
(save-excursion
(and (if heading-p (org-goto-sibling) (outline-next-heading))
(org-flag-heading nil))))
(when siblings-p (org-show-siblings))
(when hierarchy-p
;; show all higher headings, possibly with siblings
(save-excursion
(while (and (condition-case nil
(progn (org-up-heading-all 1) t)
(error nil))
(not (bobp)))
(org-flag-heading nil)
(when siblings-p (org-show-siblings))))))))
;; Show heading or entry text
(if (and heading-p (not entry-p))
(org-flag-heading nil) ; only show the heading
(and (or entry-p (outline-invisible-p) (org-invisible-p2))
(org-show-hidden-entry))) ; show entire entry
(when following-p
;; Show next sibling, or heading below text
(save-excursion
(and (if heading-p (org-goto-sibling) (outline-next-heading))
(org-flag-heading nil))))
(when siblings-p (org-show-siblings))
(when hierarchy-p
;; show all higher headings, possibly with siblings
(save-excursion
(while (and (condition-case nil
(progn (org-up-heading-all 1) t)
(error nil))
(not (bobp)))
(org-flag-heading nil)
(when siblings-p (org-show-siblings)))))
(org-fix-ellipsis-at-bol)))
(defvar org-reveal-start-hook nil
"Hook run before revealing a location.")
@ -13597,7 +13609,9 @@ If ONOFF is `on' or `off', don't toggle but set to this state."
(if (or (org-at-heading-p) (and arg (org-before-first-heading-p)))
(org-set-tags arg just-align)
(save-excursion
(org-back-to-heading t)
(unless (and (org-region-active-p)
org-loop-over-headlines-in-active-region)
(org-back-to-heading t))
(org-set-tags arg just-align))))
(defun org-set-tags-to (data)
@ -14101,13 +14115,13 @@ agenda-with-archives
The remaining args are treated as settings for the skipping facilities of
the scanner. The following items can be given here:
archive skip trees with the archive tag.
archive skip trees with the archive tag
comment skip trees with the COMMENT keyword
function or Emacs Lisp form:
will be used as value for `org-agenda-skip-function', so whenever
the function returns t, FUNC will not be called for that
entry and search will continue from the point where the
function leaves it.
will be used as value for `org-agenda-skip-function', so
whenever the function returns a position, FUNC will not be
called for that entry and search will continue from the
position returned
If your function needs to retrieve the tags including inherited tags
at the *current* entry, you can use the value of the variable
@ -16401,6 +16415,12 @@ With prefix ARG, change that many days."
(message "Timestamp is now %sactive"
(if (equal (char-after beg) ?<) "" "in")))))
(defun org-at-clock-log-p nil
"Is the cursor on the clock log line?"
(save-excursion
(move-beginning-of-line 1)
(looking-at "^[ \t]*CLOCK:")))
(defvar org-clock-history) ; defined in org-clock.el
(defvar org-clock-adjust-closest nil) ; defined in org-clock.el
(defun org-timestamp-change (n &optional what updown)
@ -18737,8 +18757,7 @@ this function returns t, nil otherwise."
(throw 'exit t))))
nil))))
(autoload 'org-element-at-point "org-element")
(autoload 'org-element-type "org-element")
(org-autoload "org-element" '(org-element-at-point org-element-type))
(declare-function org-element-at-point "org-element" (&optional keep-trail))
(declare-function org-element-type "org-element" (element))
@ -19840,7 +19859,7 @@ See the individual commands for more information."
("Refresh/Reload"
["Refresh setup current buffer" org-mode-restart t]
["Reload Org (after update)" org-reload t]
["Reload Org uncompiled" (org-reload t) :active t :keys "C-u C-c C-x r"])
["Reload Org uncompiled" (org-reload t) :active t :keys "C-u C-c C-x !"])
))
(defun org-info (&optional node)
@ -20970,7 +20989,8 @@ hierarchy of headlines by UP levels before marking the subtree."
(org-uniquify
(append fill-nobreak-predicate
'(org-fill-paragraph-separate-nobreak-p
org-fill-line-break-nobreak-p)))))
org-fill-line-break-nobreak-p
org-fill-paragraph-with-timestamp-nobreak-p)))))
(org-set-local 'fill-paragraph-function 'org-fill-paragraph)
(org-set-local 'auto-fill-inhibit-regexp nil)
(org-set-local 'adaptive-fill-function 'org-adaptive-fill-function)
@ -20989,6 +21009,11 @@ hierarchy of headlines by UP levels before marking the subtree."
(skip-chars-backward "\\\\")
(looking-at "\\\\\\\\\\($\\|[^\\\\]\\)")))
(defun org-fill-paragraph-with-timestamp-nobreak-p ()
"Non-nil when a line break at point would insert a new item."
(and (org-at-timestamp-p t)
(not (looking-at org-ts-regexp-both))))
(declare-function message-in-body-p "message" ())
(defvar org-element--affiliated-re) ; From org-element.el
(defvar orgtbl-line-start-regexp) ; From org-table.el
@ -22159,7 +22184,8 @@ Show the heading too, if it is currently invisible."
isearch-mode-end-hook-quit)
;; Only when the isearch was not quitted.
(org-add-hook 'post-command-hook 'org-isearch-post-command
'append 'local)))))
'append 'local)))
(org-fix-ellipsis-at-bol)))
(defun org-isearch-post-command ()
"Remove self from hook, and show context."
@ -22190,7 +22216,7 @@ Show the heading too, if it is currently invisible."
(re (concat "^" (org-get-limited-outline-regexp)))
(subs (make-vector (1+ n) nil))
(last-level 0)
m level head)
m level head0 head)
(save-excursion
(save-restriction
(widen)
@ -22198,9 +22224,9 @@ Show the heading too, if it is currently invisible."
(while (re-search-backward re nil t)
(setq level (org-reduced-level (funcall outline-level)))
(when (and (<= level n)
(looking-at org-complex-heading-regexp))
(setq head (org-link-display-format
(org-match-string-no-properties 4))
(looking-at org-complex-heading-regexp)
(setq head0 (org-match-string-no-properties 4)))
(setq head (org-link-display-format head0)
m (org-imenu-new-marker))
(org-add-props head nil 'org-imenu-marker m 'org-imenu t)
(if (>= level last-level)

View File

@ -379,8 +379,8 @@ the number of paragraphs marked equals ARG.
If ARG is negative, point is put at end of this paragraph, mark is put
at beginning of this or a previous paragraph.
Interactively, if this command is repeated
or (in Transient Mark mode) if the mark is active,
Interactively (or if ALLOW-EXTEND is non-nil), if this command is
repeated or (in Transient Mark mode) if the mark is active,
it marks the next ARG paragraphs after the ones already marked."
(interactive "p\np")
(unless arg (setq arg 1))

View File

@ -1,3 +1,8 @@
2013-02-28 Eli Zaretskii <eliz@gnu.org>
* w32.c (sys_open): Don't reset the flags for FD in fd_info[].
(Bug#13546).
2013-02-27 Eli Zaretskii <eliz@gnu.org>
* filelock.c (create_lock_file) [WINDOWSNT]: Use _sopen with

View File

@ -3411,8 +3411,6 @@ sys_open (const char * path, int oflag, int mode)
res = _open (mpath, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode);
if (res < 0)
res = _open (mpath, oflag | _O_NOINHERIT, mode);
if (res >= 0 && res < MAXDESC)
fd_info[res].flags = 0;
return res;
}

View File

@ -1,3 +1,22 @@
2013-02-28 Fabián Ezequiel Gallina <fgallina@cuca>
* automated/python-tests.el (python-tests-with-temp-buffer): Doc fix.
(python-tests-with-temp-file): New macro.
(python-tests-shell-interpreter): New var.
(python-shell-get-process-name-1)
(python-shell-internal-get-process-name-1)
(python-shell-parse-command-1)
(python-shell-calculate-process-environment-1)
(python-shell-calculate-process-environment-2)
(python-shell-calculate-process-environment-3)
(python-shell-calculate-exec-path-1)
(python-shell-calculate-exec-path-2)
(python-shell-make-comint-1)
(python-shell-make-comint-2)
(python-shell-get-process-1)
(python-shell-get-or-create-process-1)
(python-shell-internal-get-or-create-process-1): New tests.
2013-02-21 Fabián Ezequiel Gallina <fgallina@cuca>
* automated/python-tests.el: New file.

View File

@ -34,6 +34,21 @@ always located at the beginning of buffer."
(goto-char (point-min))
,@body))
(defmacro python-tests-with-temp-file (contents &rest body)
"Create a `python-mode' enabled file with CONTENTS.
BODY is code to be executed within the temp buffer. Point is
always located at the beginning of buffer."
(declare (indent 1) (debug t))
`(let* ((temp-file (concat (make-temp-file "python-tests") ".py"))
(buffer (find-file-noselect temp-file)))
(unwind-protect
(with-current-buffer buffer
(python-mode)
(insert ,contents)
(goto-char (point-min))
,@body)
(and buffer (kill-buffer buffer)))))
(defun python-tests-look-at (string &optional num restore-point)
"Move point at beginning of STRING in the current buffer.
Optional argument NUM defaults to 1 and is an integer indicating
@ -1161,6 +1176,260 @@ def f():
;;; Shell integration
(defvar python-tests-shell-interpreter "python")
(ert-deftest python-shell-get-process-name-1 ()
"Check process name calculation on different scenarios."
(python-tests-with-temp-buffer
""
(should (string= (python-shell-get-process-name nil)
python-shell-buffer-name))
;; When the `current-buffer' doesn't have `buffer-file-name', even
;; if dedicated flag is non-nil should not include its name.
(should (string= (python-shell-get-process-name t)
python-shell-buffer-name)))
(python-tests-with-temp-file
""
;; `buffer-file-name' is non-nil but the dedicated flag is nil and
;; should be respected.
(should (string= (python-shell-get-process-name nil)
python-shell-buffer-name))
(should (string=
(python-shell-get-process-name t)
(format "%s[%s]" python-shell-buffer-name buffer-file-name)))))
(ert-deftest python-shell-internal-get-process-name-1 ()
"Check the internal process name is config-unique."
(let* ((python-shell-interpreter python-tests-shell-interpreter)
(python-shell-interpreter-args "")
(python-shell-prompt-regexp ">>> ")
(python-shell-prompt-block-regexp "[.][.][.] ")
(python-shell-setup-codes "")
(python-shell-process-environment "")
(python-shell-extra-pythonpaths "")
(python-shell-exec-path "")
(python-shell-virtualenv-path "")
(expected (python-tests-with-temp-buffer
"" (python-shell-internal-get-process-name))))
;; Same configurations should match.
(should
(string= expected
(python-tests-with-temp-buffer
"" (python-shell-internal-get-process-name))))
(let ((python-shell-interpreter-args "-B"))
;; A minimal change should generate different names.
(should
(not (string=
expected
(python-tests-with-temp-buffer
"" (python-shell-internal-get-process-name))))))))
(ert-deftest python-shell-parse-command-1 ()
"Check the command to execute is calculated correctly.
Using `python-shell-interpreter' and
`python-shell-interpreter-args'."
:expected-result (if (executable-find python-tests-shell-interpreter)
:passed
:failed)
(let ((python-shell-interpreter (executable-find
python-tests-shell-interpreter))
(python-shell-interpreter-args "-B"))
(should (string=
(format "%s %s"
python-shell-interpreter
python-shell-interpreter-args)
(python-shell-parse-command)))))
(ert-deftest python-shell-calculate-process-environment-1 ()
"Test `python-shell-process-environment' modification."
(let* ((original-process-environment process-environment)
(python-shell-process-environment
'("TESTVAR1=value1" "TESTVAR2=value2"))
(process-environment
(python-shell-calculate-process-environment)))
(should (equal (getenv "TESTVAR1") "value1"))
(should (equal (getenv "TESTVAR2") "value2"))))
(ert-deftest python-shell-calculate-process-environment-2 ()
"Test `python-shell-extra-pythonpaths' modification."
(let* ((original-process-environment process-environment)
(original-pythonpath (getenv "PYTHONPATH"))
(paths '("path1" "path2"))
(python-shell-extra-pythonpaths paths)
(process-environment
(python-shell-calculate-process-environment)))
(should (equal (getenv "PYTHONPATH")
(concat
(mapconcat 'identity paths path-separator)
path-separator original-pythonpath)))))
(ert-deftest python-shell-calculate-process-environment-3 ()
"Test `python-shell-virtualenv-path' modification."
(let* ((original-process-environment process-environment)
(original-path (or (getenv "PATH") ""))
(python-shell-virtualenv-path
(directory-file-name user-emacs-directory))
(process-environment
(python-shell-calculate-process-environment)))
(should (not (getenv "PYTHONHOME")))
(should (string= (getenv "VIRTUAL_ENV") python-shell-virtualenv-path))
(should (equal (getenv "PATH")
(format "%s/bin%s%s"
python-shell-virtualenv-path
path-separator original-path)))))
(ert-deftest python-shell-calculate-exec-path-1 ()
"Test `python-shell-exec-path' modification."
(let* ((original-exec-path exec-path)
(python-shell-exec-path '("path1" "path2"))
(exec-path (python-shell-calculate-exec-path)))
(should (equal
exec-path
(append python-shell-exec-path
original-exec-path)))))
(ert-deftest python-shell-calculate-exec-path-2 ()
"Test `python-shell-exec-path' modification."
(let* ((original-exec-path exec-path)
(python-shell-virtualenv-path
(directory-file-name user-emacs-directory))
(exec-path (python-shell-calculate-exec-path)))
(should (equal
exec-path
(append (cons
(format "%s/bin" python-shell-virtualenv-path)
original-exec-path))))))
(ert-deftest python-shell-make-comint-1 ()
"Check comint creation for global shell buffer."
:expected-result (if (executable-find python-tests-shell-interpreter)
:passed
:failed)
(let* ((python-shell-interpreter
(executable-find python-tests-shell-interpreter))
(proc-name (python-shell-get-process-name nil))
(shell-buffer
(python-tests-with-temp-buffer
"" (python-shell-make-comint
(python-shell-parse-command) proc-name)))
(process (get-buffer-process shell-buffer)))
(unwind-protect
(progn
(set-process-query-on-exit-flag process nil)
(should (process-live-p process))
(with-current-buffer shell-buffer
(should (eq major-mode 'inferior-python-mode))
(should (string= (buffer-name) (format "*%s*" proc-name)))))
(kill-buffer shell-buffer))))
(ert-deftest python-shell-make-comint-2 ()
"Check comint creation for internal shell buffer."
:expected-result (if (executable-find python-tests-shell-interpreter)
:passed
:failed)
(let* ((python-shell-interpreter
(executable-find python-tests-shell-interpreter))
(proc-name (python-shell-internal-get-process-name))
(shell-buffer
(python-tests-with-temp-buffer
"" (python-shell-make-comint
(python-shell-parse-command) proc-name nil t)))
(process (get-buffer-process shell-buffer)))
(unwind-protect
(progn
(set-process-query-on-exit-flag process nil)
(should (process-live-p process))
(with-current-buffer shell-buffer
(should (eq major-mode 'inferior-python-mode))
(should (string= (buffer-name) (format " *%s*" proc-name)))))
(kill-buffer shell-buffer))))
(ert-deftest python-shell-get-process-1 ()
"Check dedicated shell process preference over global."
:expected-result (if (executable-find python-tests-shell-interpreter)
:passed
:failed)
(python-tests-with-temp-file
""
(let* ((python-shell-interpreter
(executable-find python-tests-shell-interpreter))
(global-proc-name (python-shell-get-process-name nil))
(dedicated-proc-name (python-shell-get-process-name t))
(global-shell-buffer
(python-shell-make-comint
(python-shell-parse-command) global-proc-name))
(dedicated-shell-buffer
(python-shell-make-comint
(python-shell-parse-command) dedicated-proc-name))
(global-process (get-buffer-process global-shell-buffer))
(dedicated-process (get-buffer-process dedicated-shell-buffer)))
(unwind-protect
(progn
(set-process-query-on-exit-flag global-process nil)
(set-process-query-on-exit-flag dedicated-process nil)
;; Prefer dedicated if global also exists.
(should (equal (python-shell-get-process) dedicated-process))
(kill-buffer dedicated-shell-buffer)
;; If there's only global, use it.
(should (equal (python-shell-get-process) global-process))
(kill-buffer global-shell-buffer)
;; No buffer available.
(should (not (python-shell-get-process))))
(ignore-errors (kill-buffer global-shell-buffer))
(ignore-errors (kill-buffer dedicated-shell-buffer))))))
(ert-deftest python-shell-get-or-create-process-1 ()
"Check shell process creation fallback."
:expected-result :failed
(python-tests-with-temp-file
""
;; XXX: Break early until we can skip stuff. We need to mimic
;; user interaction because `python-shell-get-or-create-process'
;; asks for all arguments interactively when a shell process
;; doesn't exist.
(should nil)
(let* ((python-shell-interpreter
(executable-find python-tests-shell-interpreter))
(use-dialog-box)
(dedicated-process-name (python-shell-get-process-name t))
(dedicated-process (python-shell-get-or-create-process))
(dedicated-shell-buffer (process-buffer dedicated-process)))
(unwind-protect
(progn
(set-process-query-on-exit-flag dedicated-process nil)
;; Prefer dedicated if not buffer exist.
(should (equal (process-name dedicated-process)
dedicated-process-name))
(kill-buffer dedicated-shell-buffer)
;; No buffer available.
(should (not (python-shell-get-process))))
(ignore-errors (kill-buffer dedicated-shell-buffer))))))
(ert-deftest python-shell-internal-get-or-create-process-1 ()
"Check internal shell process creation fallback."
:expected-result (if (executable-find python-tests-shell-interpreter)
:passed
:failed)
(python-tests-with-temp-file
""
(should (not (process-live-p (python-shell-internal-get-process-name))))
(let* ((python-shell-interpreter
(executable-find python-tests-shell-interpreter))
(internal-process-name (python-shell-internal-get-process-name))
(internal-process (python-shell-internal-get-or-create-process))
(internal-shell-buffer (process-buffer internal-process)))
(unwind-protect
(progn
(set-process-query-on-exit-flag internal-process nil)
(should (equal (process-name internal-process)
internal-process-name))
(should (equal internal-process
(python-shell-internal-get-or-create-process)))
;; No user buffer available.
(should (not (python-shell-get-process)))
(kill-buffer internal-shell-buffer))
(ignore-errors (kill-buffer internal-shell-buffer))))))
;;; Shell completion