diff options
-rw-r--r-- | lisp/ChangeLog | 42 | ||||
-rw-r--r-- | lisp/emacs-lisp/package.el | 38 | ||||
-rw-r--r-- | lisp/progmodes/gud.el | 21 | ||||
-rw-r--r-- | lisp/progmodes/python.el | 8 | ||||
-rw-r--r-- | lisp/startup.el | 2 | ||||
-rw-r--r-- | lisp/subr.el | 5 | ||||
-rw-r--r-- | lisp/tar-mode.el | 9 | ||||
-rw-r--r-- | lisp/tutorial.el | 6 | ||||
-rw-r--r-- | src/ChangeLog | 22 | ||||
-rw-r--r-- | src/conf_post.h | 4 | ||||
-rw-r--r-- | src/dispnew.c | 16 | ||||
-rw-r--r-- | src/eval.c | 2 | ||||
-rw-r--r-- | src/xdisp.c | 4 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/automated/python-tests.el | 14 | ||||
-rw-r--r-- | test/indent/scheme.scm | 9 |
16 files changed, 150 insertions, 57 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3edfdad0cf0..29fec987a2e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,47 @@ 2014-09-03 Stefan Monnier <monnier@iro.umontreal.ca> + * emacs-lisp/package.el (package-generate-description-file): + Properly quote the arguments (bug#18332). Change second arg. + (package--alist-to-plist-args): Rename from package--alist-to-plist and + quote the elements. + (package--make-autoloads-and-stuff): Fix the test for pre-existence of + the *-pkg.el file. Adjust to new calling convention of + package-generate-description-file. + + * progmodes/gud.el (gud-gdb-completion-at-point): Add hack (bug#18282). + (gud-gdb-completions): Remove obsolete workaround. + +2014-09-03 Eli Zaretskii <eliz@gnu.org> + + * subr.el (posn-col-row): Revert the change from commit + 2010-11-13T21:07:58Z!eliz@gnu.org, which + was inadvertently merged from emacs-23 release branch in 2010-11-18T03:54:14Z!monnier@iro.umontreal.ca + monnier@iro.umontreal.ca-20101118035414-yvlg7k7dk4k4l3q, and + introduced an off-by-one error in the reported row when there is a + header line. (Bug#18384) + +2014-09-03 Fabián Ezequiel Gallina <fgallina@gnu.org> + + * progmodes/python.el (python-indent-post-self-insert-function): + Avoid electric colon at beginning-of-defun. (Bug#18228) + +2014-09-03 Glenn Morris <rgm@gnu.org> + + * tutorial.el (tutorial--display-changes): + Fix 2014-08-01 change. (Bug#18382) + +2014-09-03 Ken Brown <kbrown@cornell.edu> + + * startup.el (fancy-splash-frame): Extend the fix for Bug#16014 to + the Cygwin-w32 build. (Bug#18347) + +2014-09-03 Glenn Morris <rgm@gnu.org> + + * tar-mode.el (tar--extract, tar-extract): + Avoid permanently disabling undo in extracted buffers. (Bug#18344) + +2014-09-03 Stefan Monnier <monnier@iro.umontreal.ca> + * progmodes/sh-script.el (sh-font-lock-quoted-subshell): Try to better handle multiline elements (bug#18380). diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 4d7ed8f121c..1649ee0ea1a 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -689,11 +689,9 @@ untar into a directory named DIR; otherwise, signal an error." (error "Package does not untar cleanly into directory %s/" dir))))) (tar-untar-buffer)) -(defun package-generate-description-file (pkg-desc pkg-dir) +(defun package-generate-description-file (pkg-desc pkg-file) "Create the foo-pkg.el file for single-file packages." - (let* ((name (package-desc-name pkg-desc)) - (pkg-file (expand-file-name (package--description-file pkg-dir) - pkg-dir))) + (let* ((name (package-desc-name pkg-desc))) (let ((print-level nil) (print-quoted t) (print-length nil)) @@ -714,25 +712,20 @@ untar into a directory named DIR; otherwise, signal an error." (list (car elt) (package-version-join (cadr elt)))) requires)))) - (let ((alist (package-desc-extras pkg-desc)) - flat) - (while alist - (let* ((pair (pop alist)) - (key (car pair)) - (val (cdr pair))) - ;; Don't bother ‘quote’ing ‘key’; it is always a keyword. - (push key flat) - (push (if (and (not (consp val)) - (or (keywordp val) - (not (symbolp val)) - (memq val '(nil t)))) - val - `',val) - flat))) - (nreverse flat)))) + (package--alist-to-plist-args + (package-desc-extras pkg-desc)))) "\n") nil pkg-file nil 'silent)))) +(defun package--alist-to-plist-args (alist) + (mapcar (lambda (x) + (if (and (not (consp x)) + (or (keywordp x) + (not (symbolp x)) + (memq x '(nil t)))) + x `',x)) + (apply #'nconc + (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) (defun package-unpack (pkg-desc) "Install the contents of the current buffer as a package." (let* ((name (package-desc-name pkg-desc)) @@ -764,9 +757,10 @@ untar into a directory named DIR; otherwise, signal an error." (defun package--make-autoloads-and-stuff (pkg-desc pkg-dir) "Generate autoloads, description file, etc.. for PKG-DESC installed at PKG-DIR." (package-generate-autoloads (package-desc-name pkg-desc) pkg-dir) - (let ((desc-file (package--description-file pkg-dir))) + (let ((desc-file (expand-file-name (package--description-file pkg-dir) + pkg-dir))) (unless (file-exists-p desc-file) - (package-generate-description-file pkg-desc pkg-dir))) + (package-generate-description-file pkg-desc desc-file))) ;; FIXME: Create foo.info and dir file from foo.texi? ) diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el index 09085f71d62..a2e015fd287 100644 --- a/lisp/progmodes/gud.el +++ b/lisp/progmodes/gud.el @@ -810,18 +810,6 @@ CONTEXT is the text before COMMAND on the line." (current-buffer) ;; From string-match above. (length context)))) - ;; `gud-gdb-run-command-fetch-lines' has some nasty side-effects on the - ;; buffer (via `gud-delete-prompt-marker'): it removes the prompt and then - ;; re-adds it later, thus messing up markers and overlays along the way. - ;; This is a problem for completion-in-region which uses an overlay to - ;; create a field. - ;; So we restore completion-in-region's field if needed. - ;; FIXME: change gud-gdb-run-command-fetch-lines so it doesn't modify the - ;; buffer at all. - (when (/= start (- (point) (field-beginning))) - (dolist (ol (overlays-at (1- (point)))) - (when (eq (overlay-get ol 'field) 'completion) - (move-overlay ol (- (point) start) (overlay-end ol))))) ;; Protect against old versions of GDB. (and complete-list (string-match "^Undefined command: \"complete\"" (car complete-list)) @@ -860,7 +848,14 @@ CONTEXT is the text before COMMAND on the line." (save-excursion (skip-chars-backward "^ " (comint-line-beginning-position)) (point)))) - (list start end + ;; FIXME: `gud-gdb-run-command-fetch-lines' has some nasty side-effects on + ;; the buffer (via `gud-delete-prompt-marker'): it removes the prompt and + ;; then re-adds it later, thus messing up markers and overlays along the + ;; way (bug#18282). + ;; We use an "insert-before" marker for `start', since it's typically right + ;; after the prompt, which works around the problem, but is a hack (and + ;; comes with other downsides, e.g. if completion adds text at `start'). + (list (copy-marker start t) end (completion-table-dynamic (apply-partially gud-gdb-completion-function (buffer-substring (comint-line-beginning-position) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index f12486d0acb..dc38966bcaf 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1162,9 +1162,15 @@ the line will be re-indented automatically if needed." ((and (eq ?: last-command-event) (memq ?: electric-indent-chars) (not current-prefix-arg) + ;; Trigger electric colon only at end of line (eolp) + ;; Avoid re-indenting on extra colon (not (equal ?: (char-before (1- (point))))) - (not (python-syntax-comment-or-string-p))) + (not (python-syntax-comment-or-string-p)) + ;; Never re-indent at beginning of defun + (not (save-excursion + (python-nav-beginning-of-statement) + (python-info-looking-at-beginning-of-defun)))) (python-indent-line))))) diff --git a/lisp/startup.el b/lisp/startup.el index bb55080d67e..c46200a050d 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -1797,7 +1797,7 @@ we put it on this frame." (let (chosen-frame) ;; MS-Windows needs this to have a chance to make the initial ;; frame visible. - (if (eq system-type 'windows-nt) + (if (eq (window-system) 'w32) (sit-for 0 t)) (dolist (frame (append (frame-list) (list (selected-frame)))) (if (and (frame-visible-p frame) diff --git a/lisp/subr.el b/lisp/subr.el index c168cf5fdb2..d085095f372 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1156,10 +1156,7 @@ and `event-end' functions." ((null spacing) (setq spacing 0))) (cons (/ (car pair) (frame-char-width frame)) - (- (/ (cdr pair) (+ (frame-char-height frame) spacing)) - (if (null (with-current-buffer (window-buffer window) - header-line-format)) - 0 1)))))))) + (/ (cdr pair) (+ (frame-char-height frame) spacing)))))))) (defun posn-actual-col-row (position) "Return the actual column and row in POSITION, measured in characters. diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el index 66118d3e288..129314cbcee 100644 --- a/lisp/tar-mode.el +++ b/lisp/tar-mode.el @@ -800,8 +800,6 @@ tar-file's buffer." tarname ")")) (buffer (generate-new-buffer bufname))) - (with-current-buffer buffer - (setq buffer-undo-list t)) (with-current-buffer tar-data-buffer (let (coding) (narrow-to-region start end) @@ -829,7 +827,11 @@ tar-file's buffer." (with-current-buffer buffer (set-buffer-multibyte nil))) (widen) - (decode-coding-region start end coding buffer))) + (with-current-buffer buffer + (setq buffer-undo-list t)) + (decode-coding-region start end coding buffer) + (with-current-buffer buffer + (setq buffer-undo-list nil)))) buffer)) (defun tar-extract (&optional other-window-p) @@ -869,7 +871,6 @@ tar-file's buffer." (with-current-buffer tar-buffer default-directory)) (set-buffer-modified-p nil) - (setq buffer-undo-list t) (normal-mode) ; pick a mode. (set (make-local-variable 'tar-superior-buffer) tar-buffer) (set (make-local-variable 'tar-superior-descriptor) descriptor) diff --git a/lisp/tutorial.el b/lisp/tutorial.el index f6d4cb053ec..fcb840fcfed 100644 --- a/lisp/tutorial.el +++ b/lisp/tutorial.el @@ -209,10 +209,10 @@ LEFT and RIGHT are the elements to compare." (symbol-name cx))))))) (defconst tutorial--default-keys - ;; On window system, `suspend-emacs' is replaced in the default - ;; keymap + ;; On window system, `suspend-emacs' is replaced in the default keymap. (let* ((suspend-emacs 'suspend-frame) (default-keys + ;; The first few are not mentioned but are basic: `((ESC-prefix [27]) (Control-X-prefix [?\C-x]) (mode-specific-command-prefix [?\C-c]) @@ -552,7 +552,7 @@ with some explanatory links." ;; binding because the Hebrew tutorial uses directional ;; controls and Hebrew character maqaf, the Hebrew hyphen, ;; immediately before the binding string. - (concat "\\([[:space:]]\\|[[:punct:]]\\)\\(" + (concat "\\(?:[[:space:]]\\|[[:punct:]]\\)\\(" (mapconcat (lambda (kdf) (regexp-quote (tutorial--key-description (nth 1 kdf)))) diff --git a/src/ChangeLog b/src/ChangeLog index fbe5f597d9c..cfafd9d8fa3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,25 @@ +2014-09-03 Eli Zaretskii <eliz@gnu.org> + + * dispnew.c (buffer_posn_from_coords): Fix an off-by-one error in + the reported row in the case of a window with a header line, by + improving on the fix committed in 2011-10-08T10:58:50Z!eliz@gnu.org + eliz@gnu.org-20111008105850-ht4tvsayohvr1kjc. (Bug#18384) + +2014-09-03 Paul Eggert <eggert@cs.ucla.edu> + + * eval.c (internal_lisp_condition_case): Don't overrun the stack + when configured --with-wide-int on typical 32-bit platforms. + +2014-09-03 Eli Zaretskii <eliz@gnu.org> + + * xdisp.c (display_and_set_cursor): Call erase_phys_cursor also + when HPOS is negative, for the benefit of R2L glyph rows whose + newline overflows into the fringe. + +2014-09-03 Ken Brown <kbrown@cornell.edu> + + * conf_post.h (strnicmp) [CYGWIN && HAVE_NTGUI]: Define. (Bug#18366) + 2014-09-02 Paul Eggert <eggert@cs.ucla.edu> Minor cleanup of recent strlen-avoiding patch. diff --git a/src/conf_post.h b/src/conf_post.h index 35d9e6d1385..8667e2554cd 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -193,6 +193,10 @@ extern void _DebPrint (const char *fmt, ...); #if defined CYGWIN && defined HAVE_NTGUI # define NTGUI_UNICODE /* Cygwin runs only on UNICODE-supporting systems */ # define _WIN32_WINNT 0x500 /* Win2k */ +/* The following was in /usr/include/string.h prior to Cygwin 1.7.33. */ +#ifndef strnicmp +#define strnicmp strncasecmp +#endif #endif #ifdef emacs /* Don't do this for lib-src. */ diff --git a/src/dispnew.c b/src/dispnew.c index 43ffca7c181..73b6253e124 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -5121,7 +5121,7 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p #ifdef HAVE_WINDOW_SYSTEM struct image *img = 0; #endif - int x0, x1, to_x; + int x0, x1, to_x, it_vpos; void *itdata = NULL; /* We used to set current_buffer directly here, but that does the @@ -5130,11 +5130,6 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p itdata = bidi_shelve_cache (); CLIP_TEXT_POS_FROM_MARKER (startp, w->start); start_display (&it, w, startp); - /* start_display takes into account the header-line row, but IT's - vpos still counts from the glyph row that includes the window's - start position. Adjust for a possible header-line row. */ - it.vpos += WINDOW_WANTS_HEADER_LINE_P (w); - x0 = *x; /* First, move to the beginning of the row corresponding to *Y. We @@ -5204,8 +5199,13 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p } #endif - if (it.vpos < w->current_matrix->nrows - && (row = MATRIX_ROW (w->current_matrix, it.vpos), + /* IT's vpos counts from the glyph row that includes the window's + start position, i.e. it excludes the header-line row, but + MATRIX_ROW includes the header-line row. Adjust for a possible + header-line row. */ + it_vpos = it.vpos + WINDOW_WANTS_MODELINE_P (w); + if (it_vpos < w->current_matrix->nrows + && (row = MATRIX_ROW (w->current_matrix, it_vpos), row->enabled_p)) { if (it.hpos < row->used[TEXT_AREA]) diff --git a/src/eval.c b/src/eval.c index 4b2e256a722..02fc3426f83 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1273,7 +1273,7 @@ internal_lisp_condition_case (volatile Lisp_Object var, Lisp_Object bodyform, { /* The first clause is the one that should be checked first, so it should be added to handlerlist last. So we build in `clauses' a table that contains `handlers' but in reverse order. */ - Lisp_Object *clauses = alloca (clausenb * sizeof (Lisp_Object *)); + Lisp_Object *clauses = alloca (clausenb * sizeof *clauses); Lisp_Object *volatile clauses_volatile = clauses; int i = clausenb; for (val = handlers; CONSP (val); val = XCDR (val)) diff --git a/src/xdisp.c b/src/xdisp.c index 4383c497d7a..93eea2c2b34 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -27513,6 +27513,10 @@ display_and_set_cursor (struct window *w, bool on, && (!on || w->phys_cursor.x != x || w->phys_cursor.y != y + /* HPOS can be negative in R2L rows whose + exact_window_width_line_p flag is set (i.e. their newline + would "overflow into the fringe"). */ + || hpos < 0 || new_cursor_type != w->phys_cursor_type || ((new_cursor_type == BAR_CURSOR || new_cursor_type == HBAR_CURSOR) && new_cursor_width != w->phys_cursor_width))) diff --git a/test/ChangeLog b/test/ChangeLog index 70c2af66194..5b7142845e7 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2014-09-03 Fabián Ezequiel Gallina <fgallina@gnu.org> + + * automated/python-tests.el (python-indent-electric-colon-1): + New test. (Bug#18228) + 2014-08-29 Dmitry Antipov <dmantipov@yandex.ru> * automated/fns-tests.el (fns-tests-sort): New test. diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el index 47dfa4b64ed..39195fd7086 100644 --- a/test/automated/python-tests.el +++ b/test/automated/python-tests.el @@ -711,6 +711,20 @@ if a: (should (= (python-indent-calculate-indentation) 0)) (should (equal (python-indent-calculate-levels) '(0))))) +(ert-deftest python-indent-electric-colon-1 () + "Test indentation case from Bug#18228." + (python-tests-with-temp-buffer + " +def a(): + pass + +def b() +" + (python-tests-look-at "def b()") + (goto-char (line-end-position)) + (python-tests-self-insert ":") + (should (= (current-indentation) 0)))) + ;;; Navigation diff --git a/test/indent/scheme.scm b/test/indent/scheme.scm new file mode 100644 index 00000000000..84d0f6d8786 --- /dev/null +++ b/test/indent/scheme.scm @@ -0,0 +1,9 @@ +#!/usr/bin/scheme is this a comment? + +;; This one is a comment +(a) +#| and this one as #|well|# as this! |# +(b) +(cons #;(this is a + comment) + head tail) |