Merge from emacs-24; up to 2012-12-19T13:01:16Z!michael.albinus@gmx.de

This commit is contained in:
Paul Eggert 2013-02-14 22:35:54 -08:00
commit 648e5523fb
13 changed files with 204 additions and 85 deletions

View file

@ -1,3 +1,8 @@
2013-02-15 Paul Eggert <eggert@cs.ucla.edu>
Fix AIX port (Bug#13650).
* configure.ac (DATA_START, DATA_SEG_BITS): Set to 0x20000000 on AIX.
2013-02-12 Eli Zaretskii <eliz@gnu.org>
* lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/memrchr.$(O).

View file

@ -3750,6 +3750,11 @@ case $opsys in
AC_DEFINE(DATA_START, [({ extern int data_start; (char *) &data_start; })])
;;
aix*)
dnl This works with 32-bit executables; Emacs doesn't support 64-bit.
AC_DEFINE(DATA_START, [0x20000000])
AC_DEFINE(DATA_SEG_BITS, [0x20000000])
;;
hpux*)
dnl The data segment on this machine always starts at address 0x40000000.
AC_DEFINE(DATA_START, [0x40000000])

View file

@ -1,3 +1,7 @@
2013-02-14 Glenn Morris <rgm@gnu.org>
* modes.texi (Basic Major Modes): 'z' no longer bound in special-mode.
2013-02-13 Glenn Morris <rgm@gnu.org>
* objects.texi (Char-Table Type): Add footnote about #^^.

View file

@ -905,9 +905,8 @@ modes derived from Special mode are given a @code{mode-class} property
of @code{special} (@pxref{Major Mode Conventions}).
Special mode sets the buffer to read-only. Its keymap defines several
common bindings, including @kbd{q} for @code{quit-window}, @kbd{z} for
@code{kill-this-buffer}, and @kbd{g} for @code{revert-buffer}
(@pxref{Reverting}).
common bindings, including @kbd{q} for @code{quit-window} and @kbd{g}
for @code{revert-buffer} (@pxref{Reverting}).
An example of a major mode derived from Special mode is Buffer Menu
mode, which is used by the @file{*Buffer List*} buffer. @xref{List

View file

@ -1,3 +1,30 @@
2013-02-15 Michael Albinus <michael.albinus@gmx.de>
* emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
2013-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
* net/goto-addr.el (goto-address-fontify): Add start and end args.
(goto-address-fontify-region): Use them instead of narrowing, so
syntax-ppss has access to the whole buffer.
2013-02-15 Fabián Ezequiel Gallina <fgallina@cuca>
* progmodes/python.el: Explain how to restore "cc-mode"-like
forward-sexp movement in header documentation (Bug#13642).
(python-nav--forward-sexp): Behave like emacs-lisp-mode in
comments and strings (GH bug 114).
2013-02-15 Fabián Ezequiel Gallina <fgallina@cuca>
* progmodes/python.el (python-info-current-defun): Fix current
defun detection (Bug#13618).
2013-02-15 Chong Yidong <cyd@gnu.org>
* xml.el (xml-parse-string): Fix typo in handling of bad character
references.
2013-02-15 Glenn Morris <rgm@gnu.org>
* play/fortune.el (fortune-compile): Simplify and fix previous change.

View file

@ -132,13 +132,14 @@ BODY contains code to execute each time the mode is enabled or disabled.
:require SYM Same as in `defcustom'.
:variable PLACE The location to use instead of the variable MODE to store
the state of the mode. This can be simply a different
named variable, or more generally anything that can be used
with the CL macro `setf'. PLACE can also be of the form
\(GET . SET), where GET is an expression that returns the
current state, and SET is a function that takes one argument,
the new state, and sets it. If you specify a :variable,
this function does not define a MODE variable (nor any of
the terms used in :variable).
named variable, or a generalized variable.
PLACE can also be of the form \(GET . SET), where GET is
an expression that returns the current state, and SET is
a function that takes one argument, the new state, and
sets it. If you specify a :variable, this function does
not define a MODE variable (nor any of the terms used
in :variable).
:after-hook A single lisp form which is evaluated after the mode hooks
have been run. It should not be quoted.

View file

@ -156,18 +156,19 @@ A value of t means there is no limit--fontify regardless of the size."
(defvar goto-address-prog-mode)
(defun goto-address-fontify ()
(defun goto-address-fontify (&optional start end)
"Fontify the URLs and e-mail addresses in the current buffer.
This function implements `goto-address-highlight-p'
and `goto-address-fontify-p'."
;; Clean up from any previous go.
(goto-address-unfontify (point-min) (point-max))
(goto-address-unfontify (or start (point-min)) (or end (point-max)))
(save-excursion
(let ((inhibit-point-motion-hooks t))
(goto-char (point-min))
(goto-char (or start (point-min)))
(when (or (eq t goto-address-fontify-maximum-size)
(< (- (point-max) (point)) goto-address-fontify-maximum-size))
(while (re-search-forward goto-address-url-regexp nil t)
(< (- (or end (point-max)) (point))
goto-address-fontify-maximum-size))
(while (re-search-forward goto-address-url-regexp end t)
(let* ((s (match-beginning 0))
(e (match-end 0))
this-overlay)
@ -187,8 +188,8 @@ and `goto-address-fontify-p'."
(overlay-put this-overlay
'keymap goto-address-highlight-keymap)
(overlay-put this-overlay 'goto-address t))))
(goto-char (point-min))
(while (re-search-forward goto-address-mail-regexp nil t)
(goto-char (or start (point-min)))
(while (re-search-forward goto-address-mail-regexp end t)
(let* ((s (match-beginning 0))
(e (match-end 0))
this-overlay)
@ -212,11 +213,9 @@ and `goto-address-fontify-p'."
(defun goto-address-fontify-region (start end)
"Fontify URLs and e-mail addresses in the given region."
(save-excursion
(save-restriction
(let ((beg-line (progn (goto-char start) (line-beginning-position)))
(end-line (progn (goto-char end) (line-end-position))))
(narrow-to-region beg-line end-line)
(goto-address-fontify)))))
(let ((beg-line (progn (goto-char start) (line-beginning-position)))
(end-line (progn (goto-char end) (line-end-position))))
(goto-address-fontify beg-line end-line))))
;; code to find and goto addresses; much of this has been blatantly
;; snarfed from browse-url.el

View file

@ -54,8 +54,13 @@
;; `python-nav-beginning-of-statement', `python-nav-end-of-statement',
;; `python-nav-beginning-of-block' and `python-nav-end-of-block' are
;; included but no bound to any key. At last but not least the
;; specialized `python-nav-forward-sexp' allows easy
;; navigation between code blocks.
;; specialized `python-nav-forward-sexp' allows easy navigation
;; between code blocks. If you prefer `cc-mode'-like `forward-sexp'
;; movement, setting `forward-sexp-function' to nil is enough, You can
;; do that using the `python-mode-hook':
;; (add-hook 'python-mode-hook
;; (lambda () (setq forward-sexp-function nil)))
;; Shell interaction: is provided and allows you to execute easily any
;; block of code of your current buffer in an inferior Python process.
@ -1349,13 +1354,10 @@ backwards."
're-search-backward))
(context-type (python-syntax-context-type)))
(cond
((eq context-type 'string)
((memq context-type '(string comment))
;; Inside of a string, get out of it.
(while (and (funcall re-search-fn "[\"']" nil t)
(python-syntax-context 'string))))
((eq context-type 'comment)
;; Inside of a comment, just move forward.
(python-util-forward-comment dir))
(let ((forward-sexp-function))
(forward-sexp dir)))
((or (eq context-type 'paren)
(and forward-p (looking-at (python-rx open-paren)))
(and (not forward-p)
@ -1378,16 +1380,16 @@ backwards."
(save-excursion
(python-nav-lisp-forward-sexp-safe dir)
(point)))
(next-sexp-context
(save-excursion
(goto-char next-sexp-pos)
(cond
((python-info-beginning-of-block-p) 'block-start)
((python-info-end-of-block-p) 'block-end)
((python-info-beginning-of-statement-p) 'statement-start)
((python-info-end-of-statement-p) 'statement-end)
((python-info-statement-starts-block-p) 'starts-block)
((python-info-statement-ends-block-p) 'ends-block)))))
(next-sexp-context
(save-excursion
(goto-char next-sexp-pos)
(cond
((python-info-beginning-of-block-p) 'block-start)
((python-info-end-of-block-p) 'block-end)
((python-info-beginning-of-statement-p) 'statement-start)
((python-info-end-of-statement-p) 'statement-end)
((python-info-statement-starts-block-p) 'starts-block)
((python-info-statement-ends-block-p) 'ends-block)))))
(if forward-p
(cond ((and (not (eobp))
(python-info-current-line-empty-p))
@ -1411,8 +1413,8 @@ backwards."
(t (goto-char next-sexp-pos)))
(cond ((and (not (bobp))
(python-info-current-line-empty-p))
(python-util-forward-comment dir)
(python-nav--forward-sexp dir))
(python-util-forward-comment dir)
(python-nav--forward-sexp dir))
((eq context 'block-end)
(python-nav-beginning-of-block))
((eq context 'statement-end)
@ -2946,40 +2948,61 @@ Optional argument INCLUDE-TYPE indicates to include the type of the defun.
This function is compatible to be used as
`add-log-current-defun-function' since it returns nil if point is
not inside a defun."
(save-restriction
(widen)
(save-excursion
(end-of-line 1)
(let ((names)
(starting-indentation
(save-excursion
(and
(python-nav-beginning-of-defun 1)
;; This extra number is just for checking code
;; against indentation to work well on first run.
(+ (current-indentation) 4))))
(starting-point (point)))
;; Check point is inside a defun.
(when (and starting-indentation
(< starting-point
(save-restriction
(widen)
(save-excursion
(end-of-line 1)
(let ((names)
(starting-indentation (current-indentation))
(starting-pos (point))
(first-run t)
(last-indent)
(type))
(catch 'exit
(while (python-nav-beginning-of-defun 1)
(when (and
(or (not last-indent)
(< (current-indentation) last-indent))
(or
(and first-run
(save-excursion
(python-nav-end-of-defun)
(point))))
(catch 'exit
(while (python-nav-beginning-of-defun 1)
(when (< (current-indentation) starting-indentation)
(setq starting-indentation (current-indentation))
(setq names
(cons
(if (not include-type)
(match-string-no-properties 1)
(mapconcat 'identity
(split-string
(match-string-no-properties 0)) " "))
names)))
(and (= (current-indentation) 0) (throw 'exit t)))))
(and names
(mapconcat (lambda (string) string) names "."))))))
;; If this is the first run, we may add
;; the current defun at point.
(setq first-run nil)
(goto-char starting-pos)
(python-nav-beginning-of-statement)
(beginning-of-line 1)
(looking-at-p
python-nav-beginning-of-defun-regexp)))
(< starting-pos
(save-excursion
(let ((min-indent
(+ (current-indentation)
python-indent-offset)))
(if (< starting-indentation min-indent)
;; If the starting indentation is not
;; within the min defun indent make the
;; check fail.
starting-pos
;; Else go to the end of defun and add
;; up the current indentation to the
;; ending position.
(python-nav-end-of-defun)
(+ (point)
(if (>= (current-indentation) min-indent)
(1+ (current-indentation))
0))))))))
(setq last-indent (current-indentation))
(if (or (not include-type) type)
(setq names (cons (match-string-no-properties 1) names))
(let ((match (split-string (match-string-no-properties 0))))
(setq type (car match))
(setq names (cons (cadr match) names)))))
;; Stop searching ASAP.
(and (= (current-indentation) 0) (throw 'exit t))))
(and names
(concat (and type (format "%s " type))
(mapconcat 'identity names ".")))))))
(defun python-info-current-symbol (&optional replace-self)
"Return current symbol using dotty syntax.

View file

@ -611,7 +611,7 @@ references."
xml-validating-parser
(error "XML: (Validity) Invalid character reference `%s'"
(match-string 0)))
(replace-match (or (string val) xml-undefined-entity) t t))
(replace-match (if val (string val) xml-undefined-entity) t t))
;; For an entity reference, search again from the start of
;; the replaced text, since the replacement can contain
;; entity or character references, or markup.
@ -620,7 +620,7 @@ references."
(and (null val)
xml-validating-parser
(error "XML: (Validity) Undefined entity `%s'" ref))
(replace-match (cdr val) t t)
(replace-match (or (cdr val) xml-undefined-entity) t t)
(goto-char (match-beginning 0)))
;; Check for XML bombs.
(and xml-entity-expansion-limit

View file

@ -1,3 +1,23 @@
2013-02-15 Paul Eggert <eggert@cs.ucla.edu>
Fix AIX port (Bug#13650).
* lisp.h (XPNTR) [!USE_LSB_TAG && DATA_SEG_BITS]:
Fix bug introduced in 2012-07-27 change. DATA_SEG_BITS, if set,
was #undeffed earlier, so it cannot be used as a macro here.
Use the constant and not the macro.
2013-02-15 Eli Zaretskii <eliz@gnu.org>
* w32proc.c (new_child): If no vacant slots are found in
child_procs[], make another pass looking for slots whose process
has exited or died. (Bug#13546)
* w32.c (sys_pipe): When failing due to file descriptors above
MAXDESC, set errno to EMFILE.
(_sys_read_ahead): Update cp->status when failing to read serial
communications input, so that the status doesn't stay at
STATUS_READ_IN_PROGRESS. (Bug#13546)
2013-02-14 Jan Djärv <jan.h.d@swipnet.se>
* gtkutil.c (tb_size_cb): New function.

View file

@ -505,13 +505,9 @@ static EMACS_INT const VALMASK
(XIL ((EMACS_INT) ((EMACS_UINT) (type) << VALBITS) \
+ ((intptr_t) (ptr) & VALMASK)))
#if DATA_SEG_BITS
/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers
which were stored in a Lisp_Object. */
#define XPNTR(a) ((uintptr_t) ((XLI (a) & VALMASK)) | DATA_SEG_BITS))
#else
#define XPNTR(a) ((uintptr_t) (XLI (a) & VALMASK))
#endif
#endif /* not USE_LSB_TAG */

View file

@ -6800,6 +6800,7 @@ sys_pipe (int * phandles)
{
_close (phandles[0]);
_close (phandles[1]);
errno = EMFILE;
rc = -1;
}
else
@ -6873,19 +6874,31 @@ _sys_read_ahead (int fd)
/* Configure timeouts for blocking read. */
if (!GetCommTimeouts (hnd, &ct))
return STATUS_READ_ERROR;
{
cp->status = STATUS_READ_ERROR;
return STATUS_READ_ERROR;
}
ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 0;
if (!SetCommTimeouts (hnd, &ct))
return STATUS_READ_ERROR;
{
cp->status = STATUS_READ_ERROR;
return STATUS_READ_ERROR;
}
if (!ReadFile (hnd, &cp->chr, sizeof (char), (DWORD*) &rc, ovl))
{
if (GetLastError () != ERROR_IO_PENDING)
return STATUS_READ_ERROR;
{
cp->status = STATUS_READ_ERROR;
return STATUS_READ_ERROR;
}
if (!GetOverlappedResult (hnd, ovl, (DWORD*) &rc, TRUE))
return STATUS_READ_ERROR;
{
cp->status = STATUS_READ_ERROR;
return STATUS_READ_ERROR;
}
}
}
else if (fd_info[fd].flags & FILE_SOCKET)

View file

@ -802,6 +802,33 @@ new_child (void)
for (cp = child_procs + (child_proc_count-1); cp >= child_procs; cp--)
if (!CHILD_ACTIVE (cp) && cp->procinfo.hProcess == NULL)
goto Initialize;
if (child_proc_count == MAX_CHILDREN)
{
DebPrint (("new_child: No vacant slots, looking for dead processes\n"));
for (cp = child_procs + (child_proc_count-1); cp >= child_procs; cp--)
if (!CHILD_ACTIVE (cp) && cp->procinfo.hProcess)
{
DWORD status = 0;
if (!GetExitCodeProcess (cp->procinfo.hProcess, &status))
{
DebPrint (("new_child.GetExitCodeProcess: error %lu for PID %lu\n",
GetLastError (), cp->procinfo.dwProcessId));
status = STILL_ACTIVE;
}
if (status != STILL_ACTIVE
|| WaitForSingleObject (cp->procinfo.hProcess, 0) == WAIT_OBJECT_0)
{
DebPrint (("new_child: Freeing slot of dead process %d\n",
cp->procinfo.dwProcessId));
CloseHandle (cp->procinfo.hProcess);
cp->procinfo.hProcess = NULL;
CloseHandle (cp->procinfo.hThread);
cp->procinfo.hThread = NULL;
goto Initialize;
}
}
}
if (child_proc_count == MAX_CHILDREN)
return NULL;
cp = &child_procs[child_proc_count++];