Now on revision 111199. ------------------------------------------------------------ revno: 111199 committer: Daniel Colascione branch nick: trunk timestamp: Tue 2012-12-11 19:26:52 -0800 message: 2012-12-12 Daniel Colascione * unexcw.c (fixup_executable): use posix_fallocate to ensure that the dumped Emacs is not a sparse file, greatly improving Cygwin "make bootstrap" performance. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2012-12-11 18:09:55 +0000 +++ src/ChangeLog 2012-12-12 03:26:52 +0000 @@ -1,3 +1,9 @@ +2012-12-12 Daniel Colascione + + * unexcw.c (fixup_executable): use posix_fallocate to ensure that + the dumped Emacs is not a sparse file, greatly improving Cygwin + "make bootstrap" performance. + 2012-12-11 Michael Albinus * inotify.c (inotify_callback): Generate an Emacs event for every === modified file 'src/unexcw.c' --- src/unexcw.c 2012-10-08 12:53:18 +0000 +++ src/unexcw.c 2012-12-12 03:26:52 +0000 @@ -183,6 +183,19 @@ exe_header->file_optional_header.FileAlignment * exe_header->file_optional_header.FileAlignment; + /* Make sure the generated bootstrap binary isn't + * sparse. NT doesn't use a file cache for sparse + * executables, so if we bootstrap Emacs using a sparse + * bootstrap-emacs.exe, bootstrap takes about twenty + * times longer than it would otherwise. */ + + ret = posix_fallocate (fd, + ( exe_header->section_header[i].s_scnptr + + exe_header->section_header[i].s_size ), + 1); + + assert (ret != -1); + ret = lseek (fd, (long) (exe_header->section_header[i].s_scnptr + ------------------------------------------------------------ revno: 111198 fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13115 author: Jonas Bernoulli committer: Stefan Monnier branch nick: trunk timestamp: Tue 2012-12-11 21:16:05 -0500 message: * lisp/emacs-lisp/eieio.el: Prettier object pretty-printing. (eieio-override-prin1): Don't quote kewords and booleans. (object-write) : Don't put closing parens on new line, avoid needless empty lines, align values that are objects with the slot keyword (instead of beginning on the same line). (eieio-list-prin1): Align value with slot keyword; increase eieio-print-depth before printing members of the list. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-11 18:52:31 +0000 +++ lisp/ChangeLog 2012-12-12 02:16:05 +0000 @@ -1,3 +1,13 @@ +2012-12-12 Jonas Bernoulli + + * lisp/emacs-lisp/eieio.el: Prettier object pretty-printing (bug#13115). + (eieio-override-prin1): Don't quote kewords and booleans. + (object-write) : Don't put closing parens + on new line, avoid needless empty lines, align values that are objects + with the slot keyword (instead of beginning on the same line). + (eieio-list-prin1): Align value with slot keyword; increase + eieio-print-depth before printing members of the list. + 2012-12-11 Stefan Monnier * mail/emacsbug.el (report-emacs-bug): Move the intangible text to === modified file 'lisp/emacs-lisp/eieio.el' --- lisp/emacs-lisp/eieio.el 2012-10-25 20:13:16 +0000 +++ lisp/emacs-lisp/eieio.el 2012-12-12 02:16:05 +0000 @@ -2850,28 +2850,36 @@ (v (eieio-oref this (car publa))) ) (unless (or (not i) (equal v (car publd))) + (unless (bolp) + (princ "\n")) (princ (make-string (* eieio-print-depth 2) ? )) (princ (symbol-name i)) - (princ " ") (if (car publp) ;; Use our public printer - (funcall (car publp) v) + (progn + (princ " ") + (funcall (car publp) v)) ;; Use our generic override prin1 function. - (eieio-override-prin1 v)) - (princ "\n")))) + (princ (if (or (eieio-object-p v) + (eieio-object-p (car-safe v))) + "\n" " ")) + (eieio-override-prin1 v))))) (setq publa (cdr publa) publd (cdr publd) - publp (cdr publp))) - (princ (make-string (* eieio-print-depth 2) ? ))) - (princ ")\n"))) + publp (cdr publp)))) + (princ ")") + (when (= eieio-print-depth 0) + (princ "\n")))) (defun eieio-override-prin1 (thing) "Perform a `prin1' on THING taking advantage of object knowledge." (cond ((eieio-object-p thing) (object-write thing)) - ((listp thing) + ((consp thing) (eieio-list-prin1 thing)) ((class-p thing) (princ (class-name thing))) + ((or (keywordp thing) (booleanp thing)) + (prin1 thing)) ((symbolp thing) (princ (concat "'" (symbol-name thing)))) (t (prin1 thing)))) @@ -2882,16 +2890,16 @@ (progn (princ "'") (prin1 list)) - (princ "(list ") - (if (eieio-object-p (car list)) (princ "\n ")) - (while list - (if (eieio-object-p (car list)) - (object-write (car list)) - (princ "'") - (prin1 (car list))) - (princ " ") - (setq list (cdr list))) (princ (make-string (* eieio-print-depth 2) ? )) + (princ "(list") + (let ((eieio-print-depth (1+ eieio-print-depth))) + (while list + (princ "\n") + (if (eieio-object-p (car list)) + (object-write (car list)) + (princ (make-string (* eieio-print-depth 2) ? )) + (eieio-override-prin1 (car list))) + (setq list (cdr list)))) (princ ")"))) ------------------------------------------------------------ revno: 111197 committer: Stefan Monnier branch nick: trunk timestamp: Tue 2012-12-11 13:52:31 -0500 message: * lisp/mail/emacsbug.el (report-emacs-bug): Move the intangible text to a display text-property. (report-emacs-bug-hook): Don't bother deleting it any more. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-11 18:51:27 +0000 +++ lisp/ChangeLog 2012-12-11 18:52:31 +0000 @@ -1,5 +1,9 @@ 2012-12-11 Stefan Monnier + * mail/emacsbug.el (report-emacs-bug): Move the intangible text to + a display text-property. + (report-emacs-bug-hook): Don't bother deleting it any more. + * hilit-chg.el (highlight-save-buffer-state): Delete. Use with-silent-modifications instead. (hilit-chg-set-face-on-change): Only fixup the text that's modified. === modified file 'lisp/mail/emacsbug.el' --- lisp/mail/emacsbug.el 2012-11-10 23:19:43 +0000 +++ lisp/mail/emacsbug.el 2012-12-11 18:52:31 +0000 @@ -156,11 +156,6 @@ (when (string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version) (setq topic (concat (match-string 1 emacs-version) "; " topic)))) (let ((from-buffer (current-buffer)) - ;; Put these properties on semantically-void text. - ;; report-emacs-bug-hook deletes these regions before sending. - (prompt-properties '(field emacsbug-prompt - intangible but-helpful - rear-nonsticky t)) (can-insert-mail (or (report-emacs-bug-can-use-xdg-email) (report-emacs-bug-can-use-osx-open))) user-point message-end-point) @@ -190,7 +185,7 @@ (insert (format "The report will be sent to %s.\n\n" report-emacs-bug-address)) (insert "This bug report will be sent to the ") - (insert-button + (insert-text-button "Bug-GNU-Emacs" 'face 'link 'help-echo (concat "mouse-2, RET: Follow this link") @@ -198,7 +193,7 @@ (browse-url "http://lists.gnu.org/archive/html/bug-gnu-emacs/")) 'follow-link t) (insert " mailing list\nand the GNU bug tracker at ") - (insert-button + (insert-text-button "debbugs.gnu.org" 'face 'link 'help-echo (concat "mouse-2, RET: Follow this link") @@ -216,11 +211,10 @@ (insert "Please describe exactly what actions triggered the bug, and\n" "the precise symptoms of the bug. If you can, give a recipe\n" "starting from `emacs -Q':\n\n") - (add-text-properties (save-excursion - (rfc822-goto-eoh) - (line-beginning-position 2)) - (point) - prompt-properties) + (let ((txt (delete-and-extract-region + (save-excursion (rfc822-goto-eoh) (line-beginning-position 2)) + (point)))) + (insert (propertize "\n" 'display txt))) (setq user-point (point)) (insert "\n\n") @@ -232,7 +226,8 @@ (if (file-readable-p debug-file) (insert "For information about debugging Emacs, please read the file\n" debug-file ".\n"))) - (add-text-properties (1+ user-point) (point) prompt-properties) + (let ((txt (delete-and-extract-region (1+ user-point) (point)))) + (insert (propertize "\n" 'display txt))) (insert "\n\nIn " (emacs-version) "\n") (if (stringp emacs-bzr-version) @@ -430,14 +425,7 @@ from)) (not (yes-or-no-p (format "Is `%s' really your email address? " from))) - (error "Please edit the From address and try again")))) - ;; Delete the uninteresting text that was just to help fill out the report. - (rfc822-goto-eoh) - (forward-line 1) - (let ((pos (1- (point)))) - (while (setq pos (text-property-any pos (point-max) - 'field 'emacsbug-prompt)) - (delete-region pos (field-end (1+ pos))))))) + (error "Please edit the From address and try again")))))) (provide 'emacsbug) ------------------------------------------------------------ revno: 111196 committer: Stefan Monnier branch nick: trunk timestamp: Tue 2012-12-11 13:51:27 -0500 message: * lisp/hilit-chg.el (highlight-save-buffer-state): Delete. Use with-silent-modifications instead. (hilit-chg-set-face-on-change): Only fixup the text that's modified. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-11 18:49:25 +0000 +++ lisp/ChangeLog 2012-12-11 18:51:27 +0000 @@ -1,5 +1,9 @@ 2012-12-11 Stefan Monnier + * hilit-chg.el (highlight-save-buffer-state): Delete. + Use with-silent-modifications instead. + (hilit-chg-set-face-on-change): Only fixup the text that's modified. + * button.el: Handle buttons in display text-properties. (button--area-button-p, button--area-button-string): Use (STRING . STRING-POS) representation instead of just STRING. === modified file 'lisp/hilit-chg.el' --- lisp/hilit-chg.el 2012-12-07 05:00:04 +0000 +++ lisp/hilit-chg.el 2012-12-11 18:51:27 +0000 @@ -523,28 +523,12 @@ (remove-overlays beg end 'hilit-chg t) (hilit-chg-display-changes beg end)) -;; Inspired by font-lock. Something like this should be moved to subr.el. -(defmacro highlight-save-buffer-state (&rest body) - "Bind variables according to VARLIST and eval BODY restoring buffer state." - (declare (indent 0) (debug t)) - (let ((modified (make-symbol "modified"))) - `(let* ((,modified (buffer-modified-p)) - (inhibit-modification-hooks t) - deactivate-mark - ;; So we don't check the file's mtime. - buffer-file-name - buffer-file-truename) - (progn - ,@body) - (unless ,modified - (restore-buffer-modified-p nil))))) - ;;;###autoload (defun highlight-changes-remove-highlight (beg end) "Remove the change face from the region between BEG and END. This allows you to manually remove highlighting from uninteresting changes." (interactive "r") - (highlight-save-buffer-state + (with-silent-modifications (remove-text-properties beg end '(hilit-chg nil)) (hilit-chg-fixup beg end))) @@ -568,40 +552,40 @@ (if (and highlight-changes-mode highlight-changes-visible-mode) (hilit-chg-fixup beg end)) - (highlight-save-buffer-state - (if (and (= beg end) (> leng-before 0)) - ;; deletion - (progn - ;; The eolp and bolp tests are a kludge! But they prevent - ;; rather nasty looking displays when deleting text at the end - ;; of line, such as normal corrections as one is typing and - ;; immediately makes a correction, and when deleting first - ;; character of a line. - ;; (if (= leng-before 1) - ;; (if (eolp) - ;; (setq beg-decr 0 end-incr 0) - ;; (if (bolp) - ;; (setq beg-decr 0)))) - ;; (setq beg (max (- beg beg-decr) (point-min))) - (setq end (min (+ end end-incr) (point-max))) - (setq type 'hilit-chg-delete)) - ;; Not a deletion. - ;; Most of the time the following is not necessary, but - ;; if the current text was marked as a deletion then - ;; the old overlay is still in effect. So if the user adds some - ;; text where she earlier deleted text, we have to remove the - ;; deletion marking, and replace it explicitly with a `changed' - ;; marking, otherwise its highlighting would disappear. - (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete) - (save-restriction - (widen) - (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg) - (if highlight-changes-visible-mode - (hilit-chg-fixup beg (+ end 1)))))) - (unless no-property-change - (put-text-property beg end 'hilit-chg type)) - (if (or highlight-changes-visible-mode no-property-change) - (hilit-chg-make-ov type beg end))))))) + (with-silent-modifications + (if (and (= beg end) (> leng-before 0)) + ;; deletion + (progn + ;; The eolp and bolp tests are a kludge! But they prevent + ;; rather nasty looking displays when deleting text at the end + ;; of line, such as normal corrections as one is typing and + ;; immediately makes a correction, and when deleting first + ;; character of a line. + ;; (if (= leng-before 1) + ;; (if (eolp) + ;; (setq beg-decr 0 end-incr 0) + ;; (if (bolp) + ;; (setq beg-decr 0)))) + ;; (setq beg (max (- beg beg-decr) (point-min))) + (setq end (min (+ end end-incr) (point-max))) + (setq type 'hilit-chg-delete)) + ;; Not a deletion. + ;; Most of the time the following is not necessary, but + ;; if the current text was marked as a deletion then + ;; the old overlay is still in effect. So if the user adds some + ;; text where she earlier deleted text, we have to remove the + ;; deletion marking, and replace it explicitly with a `changed' + ;; marking, otherwise its highlighting would disappear. + (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete) + (save-restriction + (widen) + (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg) + (if highlight-changes-visible-mode + (hilit-chg-fixup end (+ end 1)))))) + (unless no-property-change + (put-text-property beg end 'hilit-chg type)) + (if (or highlight-changes-visible-mode no-property-change) + (hilit-chg-make-ov type beg end))))))) (defun hilit-chg-update () "Update a buffer's highlight changes when visibility changed." @@ -635,7 +619,7 @@ (message "Cannot remove highlighting from read-only mode buffer %s" (buffer-name)) (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t) - (highlight-save-buffer-state + (with-silent-modifications (hilit-chg-hide-changes) (hilit-chg-map-changes (lambda (_prop start stop) ------------------------------------------------------------ revno: 111195 committer: Stefan Monnier branch nick: trunk timestamp: Tue 2012-12-11 13:49:25 -0500 message: * lisp/button.el: Handle buttons in display text-properties. (button--area-button-p, button--area-button-string): Use (STRING . STRING-POS) representation instead of just STRING. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-11 07:49:06 +0000 +++ lisp/ChangeLog 2012-12-11 18:49:25 +0000 @@ -1,3 +1,9 @@ +2012-12-11 Stefan Monnier + + * button.el: Handle buttons in display text-properties. + (button--area-button-p, button--area-button-string): + Use (STRING . STRING-POS) representation instead of just STRING. + 2012-12-11 Eli Zaretskii * makefile.w32-in (compile4-SH): Fix a typo that caused term === modified file 'lisp/button.el' --- lisp/button.el 2012-12-06 20:10:36 +0000 +++ lisp/button.el 2012-12-11 18:49:25 +0000 @@ -192,7 +192,8 @@ (cond ((overlayp button) (overlay-get button prop)) ((button--area-button-p button) - (get-text-property 0 prop (button--area-button-string button))) + (get-text-property (cdr button) + prop (button--area-button-string button))) (t ; Must be a text-property button. (get-text-property button prop)))) @@ -257,11 +258,11 @@ "Return t if BUTTON has button-type TYPE, or one of TYPE's subtypes." (button-type-subtype-p (button-get button 'type) type)) -(defalias 'button--area-button-p 'stringp +(defun button--area-button-p (b) (stringp (car-safe b)) "Return non-nil if BUTTON is an area button. Such area buttons are used for buttons in the mode-line and header-line.") -(defalias 'button--area-button-string 'identity +(defalias 'button--area-button-string #'car "Return area button BUTTON's button-string.") ;; Creating overlay buttons @@ -444,9 +445,9 @@ ;; POS is a mouse event; switch to the proper window/buffer (let ((posn (event-start pos))) (with-current-buffer (window-buffer (posn-window posn)) - (if (posn-area posn) - ;; mode-line or header-line event - (button-activate (car (posn-string posn)) t) + (if (posn-string posn) + ;; mode-line, header-line, or display string event. + (button-activate (posn-string posn) t) (push-button (posn-point posn)) t))) ;; POS is just normal position (let ((button (button-at (or pos (point))))) ------------------------------------------------------------ revno: 111194 fixes bug: http://debbugs.gnu.org/13040 committer: Paul Eggert branch nick: trunk timestamp: Tue 2012-12-11 10:18:13 -0800 message: Merge from gnulib for 'inline', incorporating: 2012-12-11 extern-inline: avoid incompatibility with Darwin Libc * m4/extern-inline.m4: Update from gnulib. diff: === modified file 'ChangeLog' --- ChangeLog 2012-12-11 02:06:53 +0000 +++ ChangeLog 2012-12-11 18:18:13 +0000 @@ -1,3 +1,9 @@ +2012-12-11 Paul Eggert + + Merge from gnulib for 'inline' (Bug#13040), incorporating: + 2012-12-11 extern-inline: avoid incompatibility with Darwin Libc + * m4/extern-inline.m4: Update from gnulib. + 2012-12-11 Juanma Barranquero * lib/makefile.w32-in (SIG2STR_H): New macro. === modified file 'm4/extern-inline.m4' --- m4/extern-inline.m4 2012-11-30 18:25:59 +0000 +++ m4/extern-inline.m4 2012-12-11 18:18:13 +0000 @@ -16,13 +16,19 @@ when FOO is an inline function in the header; see . _GL_INLINE_HEADER_END contains useful stuff to put - in the same include file, after uses of _GL_INLINE. */ -#if (__GNUC__ \ - ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ - : 199901L <= __STDC_VERSION__) + in the same include file, after uses of _GL_INLINE. + + Suppress the use of extern inline on Apple's platforms, + as Libc-825.25 (2012-09-19) is incompatible with it; see + . + Perhaps Apple will fix this some day. */ +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : 199901L <= __STDC_VERSION__) \ + && !defined __APPLE__) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline -#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__ # if __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) @@ -31,8 +37,8 @@ # endif # define _GL_EXTERN_INLINE extern #else -# define _GL_INLINE static -# define _GL_EXTERN_INLINE static +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) ------------------------------------------------------------ revno: 111193 committer: Paul Eggert branch nick: trunk timestamp: Tue 2012-12-11 10:09:55 -0800 message: Spelling fixes. diff: === modified file 'doc/lispref/ChangeLog' --- doc/lispref/ChangeLog 2012-12-11 00:13:44 +0000 +++ doc/lispref/ChangeLog 2012-12-11 18:09:55 +0000 @@ -6,7 +6,7 @@ 2012-12-10 Stefan Monnier - * control.texi (Pattern maching case statement): New node. + * control.texi (Pattern matching case statement): New node. * customize.texi (Variable Definitions): Mention the default :group for defcustoms (bug#13093). === modified file 'doc/lispref/control.texi' --- doc/lispref/control.texi 2012-12-09 15:36:46 +0000 +++ doc/lispref/control.texi 2012-12-11 18:09:55 +0000 @@ -286,11 +286,11 @@ @end example @menu -* Pattern maching case statement:: +* Pattern matching case statement:: @end menu -@node Pattern maching case statement -@subsection Pattern maching case statement +@node Pattern matching case statement +@subsection Pattern matching case statement @cindex pcase @cindex pattern matching === modified file 'src/ChangeLog' --- src/ChangeLog 2012-12-11 16:29:13 +0000 +++ src/ChangeLog 2012-12-11 18:09:55 +0000 @@ -1710,7 +1710,7 @@ 2012-10-19 Stefan Monnier - * fns.c (Fnreverse): Include the problem element when signalling an + * fns.c (Fnreverse): Include the problem element when signaling an error (bug#12677). 2012-10-18 Jan Djärv === modified file 'src/w32notify.c' --- src/w32notify.c 2012-12-10 12:38:49 +0000 +++ src/w32notify.c 2012-12-11 18:09:55 +0000 @@ -217,7 +217,7 @@ /* We've been called because the main thread told us to issue CancelIo on the directory we watch, and watch_end did so. The directory handle is already closed. We should clean up - and exit, signalling to the thread worker routine not to + and exit, signaling to the thread worker routine not to issue another call to ReadDirectoryChangesW. Note that we don't free the dirwatch object itself nor the memory consumed by its buffers; this is done by the main thread in ------------------------------------------------------------ revno: 111192 committer: Michael Albinus + + * inotify.c (inotify_callback): Generate an Emacs event for every + incoming inotify event. + 2012-12-11 Eli Zaretskii * xdisp.c (handle_face_prop): Fix logic of computing === modified file 'src/inotify.c' --- src/inotify.c 2012-12-11 08:24:09 +0000 +++ src/inotify.c 2012-12-11 16:29:13 +0000 @@ -172,7 +172,6 @@ EVENT_INIT (event); event.kind = FILE_NOTIFY_EVENT; - event.arg = Qnil; i = 0; while (i < (size_t)n) @@ -187,14 +186,14 @@ /* If event was removed automatically: Drop it from watch list. */ if (ev->mask & IN_IGNORED) watch_list = Fdelete (watch_object, watch_list); + + if (!NILP (event.arg)) + kbd_buffer_store_event (&event); } i += sizeof (*ev) + ev->len; } - if (!NILP (event.arg)) - kbd_buffer_store_event (&event); - xfree (buffer); } ------------------------------------------------------------ revno: 111191 fixes bug: http://debbugs.gnu.org/13011 committer: Eli Zaretskii branch nick: trunk timestamp: Tue 2012-12-11 14:22:35 +0200 message: Fix part of bug #13011 with display of lines that have a box face. src/xdisp.c (handle_face_prop): Fix logic of computing it->start_of_box_run_p. (append_space_for_newline): If the glyph row is R2L, reset the iterator's end_of_box_run_p flag before prepending the space glyph. (extend_face_to_end_of_line): If the glyph row is R2L, reset the iterator's start_of_box_run_p flag before prepending the stretch. (append_glyph, produce_image_glyph, append_composite_glyph) (append_stretch_glyph, append_glyphless_glyph): Reverse the left_box_line_p and right_box_line_p flags of the glyph for R2L glyph rows. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2012-12-11 09:51:12 +0000 +++ src/ChangeLog 2012-12-11 12:22:35 +0000 @@ -1,3 +1,16 @@ +2012-12-11 Eli Zaretskii + + * xdisp.c (handle_face_prop): Fix logic of computing + it->start_of_box_run_p. + (append_space_for_newline): If the glyph row is R2L, reset the + iterator's end_of_box_run_p flag before prepending the space glyph. + (extend_face_to_end_of_line): If the glyph row is R2L, reset the + iterator's start_of_box_run_p flag before prepending the stretch. + (append_glyph, produce_image_glyph, append_composite_glyph) + (append_stretch_glyph, append_glyphless_glyph): Reverse the + left_box_line_p and right_box_line_p flags of the glyph for R2L + glyph rows. (Bug#13011) + 2012-12-11 Dmitry Antipov * buffer.c (Fset_buffer_multibyte): Do not force redisplay === modified file 'src/xdisp.c' --- src/xdisp.c 2012-12-11 06:08:53 +0000 +++ src/xdisp.c 2012-12-11 12:22:35 +0000 @@ -3755,18 +3755,26 @@ if (new_face_id != it->face_id) { struct face *new_face = FACE_FROM_ID (it->f, new_face_id); - - /* If new face has a box but old face has not, this is - the start of a run of characters with box, i.e. it has - a shadow on the left side. The value of face_id of the - iterator will be -1 if this is the initial call that gets - the face. In this case, we have to look in front of IT's - position and see whether there is a face != new_face_id. */ - it->start_of_box_run_p - = (new_face->box != FACE_NO_BOX - && (it->face_id >= 0 - || IT_CHARPOS (*it) == BEG - || new_face_id != face_before_it_pos (it))); + /* If it->face_id is -1, old_face below will be NULL, see + the definition of FACE_FROM_ID. This will happen if this + is the initial call that gets the face. */ + struct face *old_face = FACE_FROM_ID (it->f, it->face_id); + + /* If the value of face_id of the iterator is -1, we have to + look in front of IT's position and see whether there is a + face there that's different from new_face_id. */ + if (!old_face && IT_CHARPOS (*it) > BEG) + { + int prev_face_id = face_before_it_pos (it); + + old_face = FACE_FROM_ID (it->f, prev_face_id); + } + + /* If the new face has a box, but the old face does not, + this is the start of a run of characters with box face, + i.e. this character has a shadow on the left side. */ + it->start_of_box_run_p = (new_face->box != FACE_NO_BOX + && (old_face == NULL || !old_face->box)); it->face_box_p = new_face->box != FACE_NO_BOX; } } @@ -18613,6 +18621,7 @@ int saved_char_to_display = it->char_to_display; int saved_x = it->current_x; int saved_face_id = it->face_id; + int saved_box_end = it->end_of_box_run_p; struct text_pos saved_pos; Lisp_Object saved_object; struct face *face; @@ -18634,6 +18643,16 @@ it->face_id = it->saved_face_id; face = FACE_FROM_ID (it->f, it->face_id); it->face_id = FACE_FOR_CHAR (it->f, face, 0, -1, Qnil); + /* In R2L rows, we will prepend a stretch glyph that will + have the end_of_box_run_p flag set for it, so there's no + need for the appended newline glyph to have that flag + set. */ + if (it->glyph_row->reversed_p + /* But if the appended newline glyph goes all the way to + the end of the row, there will be no stretch glyph, + so leave the box flag set. */ + && saved_x + FRAME_COLUMN_WIDTH (it->f) < it->last_visible_x) + it->end_of_box_run_p = 0; PRODUCE_GLYPHS (it); @@ -18647,6 +18666,7 @@ it->len = saved_len; it->c = saved_c; it->char_to_display = saved_char_to_display; + it->end_of_box_run_p = saved_box_end; return 1; } } @@ -18736,7 +18756,7 @@ struct glyph *g; int row_width, stretch_ascent, stretch_width; struct text_pos saved_pos; - int saved_face_id, saved_avoid_cursor; + int saved_face_id, saved_avoid_cursor, saved_box_start; for (row_width = 0, g = row_start; g < row_end; g++) row_width += g->pixel_width; @@ -18751,6 +18771,7 @@ saved_avoid_cursor = it->avoid_cursor_p; it->avoid_cursor_p = 1; saved_face_id = it->face_id; + saved_box_start = it->start_of_box_run_p; /* The last row's stretch glyph should get the default face, to avoid painting the rest of the window with the region face, if the region ends at ZV. */ @@ -18758,11 +18779,13 @@ it->face_id = default_face->id; else it->face_id = face->id; + it->start_of_box_run_p = 0; append_stretch_glyph (it, make_number (0), stretch_width, it->ascent + it->descent, stretch_ascent); it->position = saved_pos; it->avoid_cursor_p = saved_avoid_cursor; it->face_id = saved_face_id; + it->start_of_box_run_p = saved_box_start; } } #endif /* HAVE_WINDOW_SYSTEM */ @@ -23742,8 +23765,18 @@ glyph->type = CHAR_GLYPH; glyph->avoid_cursor_p = it->avoid_cursor_p; glyph->multibyte_p = it->multibyte_p; - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + if (it->glyph_row->reversed_p && area == TEXT_AREA) + { + /* In R2L rows, the left and the right box edges need to be + drawn in reverse direction. */ + glyph->right_box_line_p = it->start_of_box_run_p; + glyph->left_box_line_p = it->end_of_box_run_p; + } + else + { + glyph->left_box_line_p = it->start_of_box_run_p; + glyph->right_box_line_p = it->end_of_box_run_p; + } glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent || it->phys_descent > it->descent); glyph->glyph_not_available_p = it->glyph_not_available_p; @@ -23817,8 +23850,18 @@ } glyph->avoid_cursor_p = it->avoid_cursor_p; glyph->multibyte_p = it->multibyte_p; - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + if (it->glyph_row->reversed_p && area == TEXT_AREA) + { + /* In R2L rows, the left and the right box edges need to be + drawn in reverse direction. */ + glyph->right_box_line_p = it->start_of_box_run_p; + glyph->left_box_line_p = it->end_of_box_run_p; + } + else + { + glyph->left_box_line_p = it->start_of_box_run_p; + glyph->right_box_line_p = it->end_of_box_run_p; + } glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent || it->phys_descent > it->descent); glyph->padding_p = 0; @@ -23995,8 +24038,18 @@ glyph->type = IMAGE_GLYPH; glyph->avoid_cursor_p = it->avoid_cursor_p; glyph->multibyte_p = it->multibyte_p; - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + if (it->glyph_row->reversed_p && area == TEXT_AREA) + { + /* In R2L rows, the left and the right box edges need to be + drawn in reverse direction. */ + glyph->right_box_line_p = it->start_of_box_run_p; + glyph->left_box_line_p = it->end_of_box_run_p; + } + else + { + glyph->left_box_line_p = it->start_of_box_run_p; + glyph->right_box_line_p = it->end_of_box_run_p; + } glyph->overlaps_vertically_p = 0; glyph->padding_p = 0; glyph->glyph_not_available_p = 0; @@ -24055,8 +24108,18 @@ glyph->type = STRETCH_GLYPH; glyph->avoid_cursor_p = it->avoid_cursor_p; glyph->multibyte_p = it->multibyte_p; - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + if (it->glyph_row->reversed_p && area == TEXT_AREA) + { + /* In R2L rows, the left and the right box edges need to be + drawn in reverse direction. */ + glyph->right_box_line_p = it->start_of_box_run_p; + glyph->left_box_line_p = it->end_of_box_run_p; + } + else + { + glyph->left_box_line_p = it->start_of_box_run_p; + glyph->right_box_line_p = it->end_of_box_run_p; + } glyph->overlaps_vertically_p = 0; glyph->padding_p = 0; glyph->glyph_not_available_p = 0; @@ -24508,8 +24571,18 @@ glyph->slice.glyphless.lower_yoff = lower_yoff; glyph->avoid_cursor_p = it->avoid_cursor_p; glyph->multibyte_p = it->multibyte_p; - glyph->left_box_line_p = it->start_of_box_run_p; - glyph->right_box_line_p = it->end_of_box_run_p; + if (it->glyph_row->reversed_p && area == TEXT_AREA) + { + /* In R2L rows, the left and the right box edges need to be + drawn in reverse direction. */ + glyph->right_box_line_p = it->start_of_box_run_p; + glyph->left_box_line_p = it->end_of_box_run_p; + } + else + { + glyph->left_box_line_p = it->start_of_box_run_p; + glyph->right_box_line_p = it->end_of_box_run_p; + } glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent || it->phys_descent > it->descent); glyph->padding_p = 0; ------------------------------------------------------------ revno: 111190 committer: Glenn Morris branch nick: trunk timestamp: Tue 2012-12-11 06:17:38 -0500 message: Auto-commit of generated files. diff: === modified file 'autogen/Makefile.in' --- autogen/Makefile.in 2012-12-09 11:19:04 +0000 +++ autogen/Makefile.in 2012-12-11 11:17:38 +0000 @@ -775,6 +775,8 @@ VMLIMIT_OBJ = @VMLIMIT_OBJ@ W32_LIBS = @W32_LIBS@ W32_OBJ = @W32_OBJ@ +W32_RES = @W32_RES@ +W32_RES_LINK = @W32_RES_LINK@ WARN_CFLAGS = @WARN_CFLAGS@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WERROR_CFLAGS = @WERROR_CFLAGS@ @@ -782,6 +784,7 @@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOW_SYSTEM_OBJ = @WINDOW_SYSTEM_OBJ@ +WINDRES = @WINDRES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XFT_CFLAGS = @XFT_CFLAGS@ XFT_LIBS = @XFT_LIBS@ === modified file 'autogen/config.in' --- autogen/config.in 2012-12-09 11:19:04 +0000 +++ autogen/config.in 2012-12-11 11:17:38 +0000 @@ -518,6 +518,9 @@ /* Define to 1 if you have inet sockets. */ #undef HAVE_INET_SOCKETS +/* Define to 1 to use inotify. */ +#undef HAVE_INOTIFY + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -913,6 +916,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_INOTIFY_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INTTYPES_H === modified file 'autogen/configure' --- autogen/configure 2012-12-09 11:19:04 +0000 +++ autogen/configure 2012-12-11 11:17:38 +0000 @@ -1226,8 +1226,11 @@ VMLIMIT_OBJ GMALLOC_OBJ HAVE_XSERVER +W32_RES_LINK +W32_RES W32_LIBS W32_OBJ +WINDRES LIB_STANDARD NS_OBJC_OBJ NS_OBJ @@ -1393,6 +1396,7 @@ with_gsettings with_selinux with_gnutls +with_inotify with_makeinfo with_compress_info with_pkg_config_prog @@ -2115,6 +2119,7 @@ --without-gsettings don't compile with GSettings support --without-selinux don't compile with SELinux support --without-gnutls don't use -lgnutls for SSL/TLS support + --without-inotify don't compile with inotify (file-watch) support --without-makeinfo don't require makeinfo for building manuals --without-compress-info don't compress the installed Info pages --with-pkg-config-prog=FILENAME @@ -4177,6 +4182,14 @@ fi +# Check whether --with-inotify was given. +if test "${with_inotify+set}" = set; then : + withval=$with_inotify; +else + with_inotify=$with_features +fi + + ## For the times when you want to build Emacs but don't have ## a suitable makeinfo, and can live without the manuals. @@ -9683,6 +9696,8 @@ HAVE_W32=no W32_OBJ= W32_LIBS= +W32_RES= +W32_RES_LINK= if test "${with_w32}" != no; then if test "${opsys}" != "cygwin"; then as_fn_error "Using w32 with an autotools build is only supported for Cygwin." "$LINENO" 5 @@ -9699,14 +9714,112 @@ $as_echo "#define HAVE_NTGUI 1" >>confdefs.h + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINDRES"; then + ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WINDRES="${ac_tool_prefix}windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WINDRES=$ac_cv_prog_WINDRES +if test -n "$WINDRES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_WINDRES"; then + ac_ct_WINDRES=$WINDRES + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_WINDRES"; then + ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_WINDRES="windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES +if test -n "$ac_ct_WINDRES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 +$as_echo "$ac_ct_WINDRES" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_WINDRES" = x; then + WINDRES="as_fn_error "No resource compiler found." "$LINENO" 5" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + WINDRES=$ac_ct_WINDRES + fi +else + WINDRES="$ac_cv_prog_WINDRES" +fi + W32_OBJ="w32fns.o w32menu.o w32reg.o w32font.o w32term.o" W32_OBJ="$W32_OBJ w32xfns.o w32select.o w32uniscribe.o" W32_LIBS="$W32_LIBS -lkernel32 -luser32 -lgdi32 -lole32 -lcomdlg32" W32_LIBS="$W32_LIBS -lusp10 -lcomctl32 -lwinspool" + W32_RES="emacs.res" + # Tell the linker that emacs.res is an object (which we compile from + # the rc file), not a linker script. + W32_RES_LINK="-Wl,-bpe-i386 -Wl,emacs.res" fi + + if test "${HAVE_W32}" = "yes"; then window_system=w32 with_xft=no @@ -11349,6 +11462,33 @@ +if test "${with_inotify}" = "yes"; then + for ac_header in sys/inotify.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_inotify_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_INOTIFY_H 1 +_ACEOF + +fi + +done + + if test "$ac_cv_header_sys_inotify_h" = yes ; then + ac_fn_c_check_func "$LINENO" "inotify_init1" "ac_cv_func_inotify_init1" +if test "x$ac_cv_func_inotify_init1" = x""yes; then : + +fi + + fi +fi +if test "$ac_cv_func_inotify_init1" = yes; then + +$as_echo "#define HAVE_INOTIFY 1" >>confdefs.h + +fi + HAVE_XAW3D=no LUCID_LIBW= if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then ------------------------------------------------------------ revno: 111189 committer: Dmitry Antipov branch nick: trunk timestamp: Tue 2012-12-11 13:51:12 +0400 message: * buffer.c (Fset_buffer_multibyte): Do not force redisplay if changed buffer is not shown in a window. * insdel.c (prepare_to_modify_buffer): Likewise. * window.c (replace_buffer_in_windows_safely): Do nothing if buffer is not shown in a window. (Fforce_window_update): Likewise if string or buffer argument is passed. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2012-12-11 08:24:09 +0000 +++ src/ChangeLog 2012-12-11 09:51:12 +0000 @@ -1,3 +1,13 @@ +2012-12-11 Dmitry Antipov + + * buffer.c (Fset_buffer_multibyte): Do not force redisplay + if changed buffer is not shown in a window. + * insdel.c (prepare_to_modify_buffer): Likewise. + * window.c (replace_buffer_in_windows_safely): Do nothing + if buffer is not shown in a window. + (Fforce_window_update): Likewise if string or buffer argument + is passed. + 2012-12-11 Eli Zaretskii * inotify.c (Finotify_add_watch): Rename decoded_file_name to === modified file 'src/buffer.c' --- src/buffer.c 2012-12-10 17:34:47 +0000 +++ src/buffer.c 2012-12-11 09:51:12 +0000 @@ -2691,10 +2691,11 @@ UNGCPRO; - /* Changing the multibyteness of a buffer means that all windows - showing that buffer must be updated thoroughly. */ current_buffer->prevent_redisplay_optimizations_p = 1; - ++windows_or_buffers_changed; + + /* If buffer is shown in a window, let redisplay consider other windows. */ + if (buffer_window_count (current_buffer)) + ++windows_or_buffers_changed; /* Copy this buffer's new multibyte status into all of its indirect buffers. */ === modified file 'src/insdel.c' --- src/insdel.c 2012-12-11 06:08:53 +0000 +++ src/insdel.c 2012-12-11 09:51:12 +0000 @@ -1800,9 +1800,10 @@ if (!NILP (BVAR (current_buffer, read_only))) Fbarf_if_buffer_read_only (); - /* Let redisplay consider other windows than selected_window - if modifying another buffer. */ - if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer) + /* If we're modifying the buffer other than shown in a selected window, + let redisplay consider other windows if this buffer is visible. */ + if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer + && buffer_window_count (current_buffer)) ++windows_or_buffers_changed; if (buffer_intervals (current_buffer)) === modified file 'src/window.c' --- src/window.c 2012-12-11 06:08:53 +0000 +++ src/window.c 2012-12-11 09:51:12 +0000 @@ -2988,22 +2988,24 @@ call1 (Qreplace_buffer_in_windows, buffer); } - -/* Safely replace BUFFER with some other buffer in all windows of all - frames, even those on other keyboards. */ +/* If BUFFER is shown in a window, safely replace it with some other + buffer in all windows of all frames, even those on other keyboards. */ void replace_buffer_in_windows_safely (Lisp_Object buffer) { - Lisp_Object tail, frame; + if (buffer_window_count (XBUFFER (buffer))) + { + Lisp_Object tail, frame; - /* A single call to window_loop won't do the job because it only - considers frames on the current keyboard. So loop manually over - frames, and handle each one. */ - FOR_EACH_FRAME (tail, frame) - window_loop (REPLACE_BUFFER_IN_WINDOWS_SAFELY, buffer, 1, frame); + /* A single call to window_loop won't do the job because it only + considers frames on the current keyboard. So loop manually over + frames, and handle each one. */ + FOR_EACH_FRAME (tail, frame) + window_loop (REPLACE_BUFFER_IN_WINDOWS_SAFELY, buffer, 1, frame); + } } - + /* If *ROWS or *COLS are too small a size for FRAME, set them to the minimum allowable size. */ @@ -3338,11 +3340,11 @@ if (STRINGP (object)) object = Fget_buffer (object); - if (BUFFERP (object) && BUFFER_LIVE_P (XBUFFER (object))) + if (BUFFERP (object) && BUFFER_LIVE_P (XBUFFER (object)) + && buffer_window_count (XBUFFER (object))) { - /* Walk all windows looking for buffer, and force update - of each of those windows. */ - + /* If buffer is live and shown in at least one window, find + all windows showing this buffer and force update of them. */ object = window_loop (REDISPLAY_BUFFER_WINDOWS, object, 0, Qvisible); return NILP (object) ? Qnil : Qt; } ------------------------------------------------------------ revno: 111188 committer: Eli Zaretskii branch nick: trunk timestamp: Tue 2012-12-11 10:24:09 +0200 message: Minor change in variable name in inotify.c. src/inotify.c (Finotify_add_watch): Rename decoded_file_name to encoded_file_name, which is what it is. diff: === modified file 'src/ChangeLog' --- src/ChangeLog 2012-12-11 06:08:53 +0000 +++ src/ChangeLog 2012-12-11 08:24:09 +0000 @@ -1,3 +1,8 @@ +2012-12-11 Eli Zaretskii + + * inotify.c (Finotify_add_watch): Rename decoded_file_name to + encoded_file_name, which is what it is. + 2012-12-11 Dmitry Antipov Consistently use marker_position and marker_byte_position. === modified file 'src/inotify.c' --- src/inotify.c 2012-12-10 11:17:21 +0000 +++ src/inotify.c 2012-12-11 08:24:09 +0000 @@ -325,7 +325,7 @@ { uint32_t mask; Lisp_Object watch_object; - Lisp_Object decoded_file_name; + Lisp_Object encoded_file_name; Lisp_Object watch_descriptor; int watchdesc = -1; @@ -345,8 +345,8 @@ } mask = aspect_to_inotifymask (aspect); - decoded_file_name = ENCODE_FILE (file_name); - watchdesc = inotify_add_watch (inotifyfd, SSDATA (decoded_file_name), mask); + encoded_file_name = ENCODE_FILE (file_name); + watchdesc = inotify_add_watch (inotifyfd, SSDATA (encoded_file_name), mask); if (watchdesc == -1) report_file_error ("Could not add watch for file", Fcons (file_name, Qnil)); ------------------------------------------------------------ revno: 111187 committer: Eli Zaretskii branch nick: trunk timestamp: Tue 2012-12-11 09:49:06 +0200 message: Fix a typo in lisp/makefile.w32-in. See http://lists.gnu.org/archive/html/emacs-devel/2012-12/msg00288.html for the details. lisp/makefile.w32-in (compile4-SH): Fix a typo that caused term subdirectory be skipped. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2012-12-11 04:44:26 +0000 +++ lisp/ChangeLog 2012-12-11 07:49:06 +0000 @@ -1,3 +1,8 @@ +2012-12-11 Eli Zaretskii + + * makefile.w32-in (compile4-SH): Fix a typo that caused term + subdirectory be skipped. + 2012-12-11 Glenn Morris * net/rcirc.el (rcirc-urls, rcirc-condition-filter): Doc fixes. === modified file 'lisp/makefile.w32-in' --- lisp/makefile.w32-in 2012-12-09 21:32:12 +0000 +++ lisp/makefile.w32-in 2012-12-11 07:49:06 +0000 @@ -387,7 +387,7 @@ done compile4-SH: autoloads compile0-SH - for dir in $(WINS_BASIC4) $(WINS_CEDET) terms obsolete; do \ + for dir in $(WINS_BASIC4) $(WINS_CEDET) term obsolete; do \ for el in $$dir/*.el; do \ if test -f $$el; \ then \