emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r117923: Merge from emacs-24


From: Stefan Monnier
Subject: [Emacs-diffs] trunk r117923: Merge from emacs-24
Date: Mon, 22 Sep 2014 19:21:12 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117923 [merge]
revision-id: address@hidden
parent: address@hidden
parent: address@hidden
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Mon 2014-09-22 15:20:45 -0400
message:
  Merge from emacs-24
modified:
  ChangeLog                      changelog-20091113204419-o5vbwnq5f7feedwu-1538
  configure.ac                   
configure.in-20091113204419-o5vbwnq5f7feedwu-783
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/cedet/ChangeLog           changelog-20100919015713-3rbr456yray5m84f-1
  lisp/cedet/ede/emacs.el        emacs.el-20091113204419-o5vbwnq5f7feedwu-11208
  lisp/url/ChangeLog             changelog-20091113204419-o5vbwnq5f7feedwu-3116
  lisp/url/url-http.el           urlhttp.el-20091113204419-o5vbwnq5f7feedwu-2989
  lisp/url/url.el                url.el-20091113204419-o5vbwnq5f7feedwu-3005
  lisp/window.el                 window.el-20091113204419-o5vbwnq5f7feedwu-94
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/dispextern.h               
dispextern.h-20091113204419-o5vbwnq5f7feedwu-218
  src/eval.c                     eval.c-20091113204419-o5vbwnq5f7feedwu-237
  src/frame.c                    frame.c-20091113204419-o5vbwnq5f7feedwu-243
  src/image.c                    image.c-20091113204419-o5vbwnq5f7feedwu-2969
  src/lisp.h                     lisp.h-20091113204419-o5vbwnq5f7feedwu-253
  src/macfont.m                  macfont.m-20130915173740-04lgloz0557bz98l-2
  src/unexmacosx.c               
unexmacosx.c-20091113204419-o5vbwnq5f7feedwu-2413
  src/w32term.c                  w32term.c-20091113204419-o5vbwnq5f7feedwu-950
  src/xdisp.c                    xdisp.c-20091113204419-o5vbwnq5f7feedwu-240
  src/xterm.c                    xterm.c-20091113204419-o5vbwnq5f7feedwu-244
=== modified file 'ChangeLog'
--- a/ChangeLog 2014-09-15 00:20:21 +0000
+++ b/ChangeLog 2014-09-22 19:20:45 +0000
@@ -1,3 +1,8 @@
+2014-09-22  Jan Djärv  <address@hidden>
+
+       * configure.ac: Increase headerpad_extra to 1000, update the comment
+       about load commands (Bug#18505).
+
 2014-09-15  Eli Zaretskii  <address@hidden>
 
        * configure.ac (HAVE_SOUND): Check for mmsystem.h header that
@@ -1539,8 +1544,8 @@
 
 2013-07-29  Michael Albinus  <address@hidden>
 
-       * INSTALL (DETAILED BUILDING AND INSTALLATION): Add
-       --without-file-notification to --without-all.
+       * INSTALL (DETAILED BUILDING AND INSTALLATION):
+       Add --without-file-notification to --without-all.
 
 2013-07-29  Xue Fuqiao  <address@hidden>
 
@@ -1813,8 +1818,8 @@
        CONFIG_SITE for the MSYS build on MS-Windows.
        (Makefile): Use $(CFG).
 
-       * .bzrignore: Ignore *.res, *.tmp, and *.map.  Remove
-       src/emacs.res.
+       * .bzrignore: Ignore *.res, *.tmp, and *.map.
+       Remove src/emacs.res.
 
 2013-05-16  Paul Eggert  <address@hidden>
 
@@ -13428,7 +13433,7 @@
        detail: -with-x... and --srcdir.
        (options, boolean_opts): Delete; we don't have enough options to
        make this worthwhile.
-       (prefix, bindir, lisppath, datadir, libdir, lockdir): Deleted,
+       (prefix, bindir, lisppath, datadir, libdir, lockdir): Delete,
        along with the code which supported them; these should be set as
        arguments to the top-level make.
        (config_h_opts): Since this no longer doubles as a list of option

=== modified file 'configure.ac'
--- a/configure.ac      2014-09-15 00:20:21 +0000
+++ b/configure.ac      2014-09-22 19:20:45 +0000
@@ -4936,17 +4936,19 @@
   darwin)
    ## The -headerpad option tells ld (see man page) to leave room at the
    ## end of the header for adding load commands.  Needed for dumping.
-   ## 0x690 is the total size of 30 segment load commands (at 56
-   ## each); under Cocoa 31 commands are required.
+   ## 0x1000 is enough for roughly 52 load commands on the x86_64
+   ## architecture (where they are 78 bytes each). The actual number of
+   ## load commands added is not consistent but normally ranges from
+   ## about 14 to about 34. Setting it high gets us plenty of slop and
+   ## only costs about 1.5K of wasted binary space.
+   headerpad_extra=1000
    if test "$HAVE_NS" = "yes"; then
      libs_nsgui="-framework AppKit"
      if test "$NS_IMPL_COCOA" = "yes"; then
         libs_nsgui="$libs_nsgui -framework IOKit"
      fi
-     headerpad_extra=6C8
    else
      libs_nsgui=
-     headerpad_extra=690
    fi
    LD_SWITCH_SYSTEM_TEMACS="-fno-pie -prebind $libs_nsgui -Xlinker -headerpad 
-Xlinker $headerpad_extra"
 

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-09-22 19:19:29 +0000
+++ b/lisp/ChangeLog    2014-09-22 19:20:45 +0000
@@ -1,3 +1,9 @@
+2014-09-22  Kan-Ru Chen  <address@hidden>
+
+       * window.el (fit-window-to-buffer): When counting buffer width,
+       count the whole visible buffer.  Correctly convert the body-height
+       to pixel size for window-text-pixel-size (Bug#18498).
+
 2014-09-22  Sam Steingold  <address@hidden>
 
        * progmodes/sql.el (sql-product-alist): Improve the Vertica entry.
@@ -191,8 +197,8 @@
        (pcase--expand): Use it.
        (pcase-exhaustive): New macro.  (Bug#16567)
 
-       * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Add
-       pcase-exhaustive.
+       * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2):
+       Add pcase-exhaustive.
 
 2014-09-13  Eli Zaretskii  <address@hidden>
 
@@ -349,8 +355,8 @@
 
 2014-09-05  Martin Rudalics  <address@hidden>
 
-       * scroll-bar.el (horizontal-scroll-bars-available-p): New
-       function.
+       * scroll-bar.el (horizontal-scroll-bars-available-p):
+       New function.
        (horizontal-scroll-bar-mode): Rewrite using
        horizontal-scroll-bars-available-p.
        * menu-bar.el (menu-bar-showhide-scroll-bar-menu): Rewrite using

=== modified file 'lisp/cedet/ChangeLog'
--- a/lisp/cedet/ChangeLog      2014-06-19 22:07:09 +0000
+++ b/lisp/cedet/ChangeLog      2014-09-22 19:20:45 +0000
@@ -1,3 +1,9 @@
+2014-09-22  David Engster  <address@hidden>
+
+       * ede/emacs.el (ede-emacs-version): Do not call 'egrep' to
+       determine Emacs version (it was dead code anyway).  Make sure that
+       configure.ac or configure.in exist.  (Bug#18476)
+
 2014-06-19  Stefan Monnier  <address@hidden>
 
        * semantic/ia.el (semantic-ia-complete-symbol-menu): Use posn-at-point

=== modified file 'lisp/cedet/ede/emacs.el'
--- a/lisp/cedet/ede/emacs.el   2014-04-02 15:14:50 +0000
+++ b/lisp/cedet/ede/emacs.el   2014-09-22 19:20:45 +0000
@@ -80,12 +80,6 @@
     (with-current-buffer buff
       (erase-buffer)
       (setq default-directory (file-name-as-directory dir))
-      (or (file-exists-p configure_ac)
-         (setq configure_ac "configure.in"))
-      ;(call-process "egrep" nil buff nil "-n" "-e" "^version=" "Makefile")
-      (call-process "egrep" nil buff nil "-n" "-e" "AC_INIT" configure_ac)
-      (goto-char (point-min))
-      ;(re-search-forward "version=\\([0-9.]+\\)")
       (cond
        ;; Maybe XEmacs?
        ((file-exists-p "version.sh")
@@ -113,7 +107,8 @@
        ;; Insert other Emacs here...
 
        ;; Vaguely recent version of GNU Emacs?
-       (t
+       ((or (file-exists-p configure_ac)
+           (file-exists-p (setq configure_ac "configure.in")))
        (insert-file-contents configure_ac)
        (goto-char (point-min))
        (re-search-forward "AC_INIT(\\(?:GNU 
\\)?[eE]macs,\\s-*\\([0-9.]+\\)\\s-*[,)]")

=== modified file 'lisp/url/ChangeLog'
--- a/lisp/url/ChangeLog        2014-08-07 11:49:36 +0000
+++ b/lisp/url/ChangeLog        2014-09-22 19:20:45 +0000
@@ -1,3 +1,9 @@
+2014-09-22  Dmitry Gutov  <address@hidden>
+
+       * url.el (url-retrieve-internal): Clarify the docstring.
+
+       * url-http.el (url-http): Same.  (Bug#18116)
+
 2014-08-07  Reuben Thomas  <address@hidden>
 
        * url-handlers.el: Remove a comment about VMS, which we no longer

=== modified file 'lisp/url/url-http.el'
--- a/lisp/url/url-http.el      2014-06-26 06:55:15 +0000
+++ b/lisp/url/url-http.el      2014-09-22 19:20:45 +0000
@@ -1171,8 +1171,8 @@
   "Retrieve URL via HTTP asynchronously.
 URL must be a parsed URL.  See `url-generic-parse-url' for details.
 
-When retrieval is completed, execute the function CALLBACK, using
-the arguments listed in CBARGS.  The first element in CBARGS
+When retrieval is completed, execute the function CALLBACK, passing it
+an updated value of CBARGS as arguments.  The first element in CBARGS
 should be a plist describing what has happened so far during the
 request, as described in the docstring of `url-retrieve' (if in
 doubt, specify nil).

=== modified file 'lisp/url/url.el'
--- a/lisp/url/url.el   2014-03-29 00:55:44 +0000
+++ b/lisp/url/url.el   2014-09-22 19:20:45 +0000
@@ -170,8 +170,8 @@
 (defun url-retrieve-internal (url callback cbargs &optional silent
                                  inhibit-cookies)
   "Internal function; external interface is `url-retrieve'.
-CBARGS is the list of arguments that the callback function will
-receive; its first element should be a plist specifying what has
+The callback function will receive an updated value of CBARGS as
+arguments; its first element should be a plist specifying what has
 happened so far during the request, as described in the docstring
 of `url-retrieve' (if in doubt, specify nil).
 

=== modified file 'lisp/window.el'
--- a/lisp/window.el    2014-09-15 00:20:21 +0000
+++ b/lisp/window.el    2014-09-22 19:20:45 +0000
@@ -7377,10 +7377,10 @@
                             max-width))
                    (+ total-width (window-max-delta
                                    nil t nil nil nil nil pixelwise))))
-                ;; When fitting vertically, assume that WINDOW's start
-                ;; position remains unaltered.  WINDOW can't get wider
-                ;; than its frame's pixel width, its height remains
-                ;; unaltered.
+                ;; When fitting horizontally, assume that WINDOW's
+                ;; start position remains unaltered.  WINDOW can't get
+                ;; wider than its frame's pixel width, its height
+                ;; remains unaltered.
                 (width (+ (car (window-text-pixel-size
                                 nil (window-start) (point-max)
                                 (frame-pixel-width)
@@ -7389,7 +7389,7 @@
                                 ;; overshoots when the first line below
                                 ;; the bottom is wider than the window.
                                 (* body-height
-                                   (if pixelwise char-height 1))))
+                                   (if pixelwise 1 char-height))))
                           (window-right-divider-width))))
            (unless pixelwise
              (setq width (/ (+ width char-width -1) char-width)))

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-09-22 14:37:22 +0000
+++ b/src/ChangeLog     2014-09-22 19:20:45 +0000
@@ -1,3 +1,75 @@
+2014-09-22  Dmitry Antipov  <address@hidden>
+
+       On OSX, do not free font-specific data more than once (Bug#18501).
+       * macfont.m (macfont_close): Release and free font-specific data
+       only if it wasn't previously freed.
+
+2014-09-22  David Caldwell <address@hidden> (tiny change)
+
+       * unexmacosx.c (dump_it): Improve error message.
+
+2014-09-22  Juri Linkov  <address@hidden>
+
+       * image.c (imagemagick_load_image): Add delay to imagemagick metadata.
+       (Bug#10747, bug#18334)
+
+2014-09-22  Eli Zaretskii  <address@hidden>
+
+       * frame.c (Fmouse_position, Fset_mouse_position): Clarify the
+       units in which the position is measured.  (Bug#18493)
+
+       * xdisp.c (redisplay_internal): Force redisplay of all windows
+       that show a buffer whose narrowing has changed.  (Bug#18490)
+
+2014-09-22  Eli Zaretskii  <address@hidden>
+
+       * xterm.c (x_draw_hollow_cursor, x_draw_bar_cursor):
+       * w32term.c (x_draw_hollow_cursor, x_draw_bar_cursor): In R2L
+       lines, draw the hollow-box and hbar cursors on the right side of
+       cursor-glyph.  Thanks to martin rudalics <address@hidden> for
+       testing on X.
+
+       * xterm.c (x_draw_stretch_glyph_string):
+       * w32term.c (x_draw_stretch_glyph_string): Fix a thinko that
+       caused the block cursor to disappear on a TAB in R2L lines in
+       every window except the leftmost one.  Reported by Martin Rudalics
+       <address@hidden>.
+
+2014-09-22  Dmitry Antipov  <address@hidden>
+
+       Always use matched specpdl entry to record call arguments (Bug#18473).
+       * lisp.h (record_in_backtrace): Adjust prototype.
+       * eval.c (record_in_backtrace): Return current specpdl level.
+       (set_backtrace_args, set_backtrace_nargs): Merge.  Adjust all users.
+       (eval_sub, Ffuncall): Record call arguments in matched specpdl
+       entry and use that entry in call to backtrace_debug_on_exit.
+       (apply_lambda): Likewise.  Get current specpdl level as 3rd arg.
+       (do_debug_on_call): Get current specpdl level as 2nd arg.
+
+       Prefer ptrdiff_t to int and avoid integer overflows.
+       * fileio.c (make_temp_name):
+       * font.c (font_parse_family_registry): Avoid integer
+       overflow on string size calculation.
+       * data.c (Faset): Likewise for byte index.
+
+2014-09-22  Eli Zaretskii  <address@hidden>
+
+       Fix display of R2L lines in partial-width windows.
+       * xdisp.c (init_iterator): Don't use it->bidi_p before it is
+       assigned the correct value.
+       (extend_face_to_end_of_line): Account for truncation and
+       continuation glyphs in R2L rows when one of the fringes is not
+       displayed.
+       (display_line): Don't assign negative X offset to a row if we are
+       going to produce a truncation glyph for it.  When handling
+       truncated R2L rows, consider the width of the left fringe instead
+       of the right one.
+       (produce_special_glyphs): Fix bogus assignments.
+
+2014-09-22  Eli Zaretskii  <address@hidden>
+
+       * w32.c (fcntl): Support O_NONBLOCK fcntl on the write side of pipes.
+
 2014-09-22  Eli Zaretskii  <address@hidden>
 
        * fileio.c (Fexpand_file_name) [DOS_NT]: Make sure newdirlim is
@@ -103,17 +175,17 @@
        file names properly displayed.
        (do_play_sound) [WINDOWSNT]: Use Unicode APIs to play sound files
        when w32-unicode-filenames is non-nil, but not on Windows 9X,
-       where these APIs are not available even in UNICOWS.DLL.  Improve
-       the format of error messages and include the file name in them
+       where these APIs are not available even in UNICOWS.DLL.
+       Improve the format of error messages and include the file name in them
        where appropriate.
        (Fplay_sound_internal) [WINDOWSNT]: Make the MS-Windows branch
        call play-sound-functions, per documentation.
 
-       * w32.c (w32_get_long_filename, w32_get_short_filename): Constify
-       the input file name arguments.
+       * w32.c (w32_get_long_filename, w32_get_short_filename):
+       Constify the input file name arguments.
 
-       * w32.h (w32_get_long_filename, w32_get_short_filename): Update
-       prototypes.
+       * w32.h (w32_get_long_filename, w32_get_short_filename):
+       Update prototypes.
 
 2014-09-15  Dmitry Antipov  <address@hidden>
 
@@ -220,8 +292,8 @@
        * lread.c (readevalloop_eager_expand_eval): Add GCPRO and fix
        bootstrap broken if GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE.
 
-       Remove redundant GCPROs around Ffuncall and Fapply calls.  This
-       is safe because Ffuncall protects all of its arguments by itself.
+       Remove redundant GCPROs around Ffuncall and Fapply calls.
+       This is safe because Ffuncall protects all of its arguments by itself.
        * charset.c (map_charset_for_dump): Remove redundant GCPRO.
        * eval.c (Fapply, apply1, call0, call1, call2, call3, call4, call5)
        (call6, call7): Likewise.  Use compound literals where applicable.
@@ -511,8 +583,8 @@
 2014-09-03  Martin Rudalics  <address@hidden>
 
        * buffer.c (scroll-bar-height): Fix typo in doc-string.
-       * frame.c (Vdefault_frame_horizontal_scroll_bars): Remove
-       variable.
+       * frame.c (Vdefault_frame_horizontal_scroll_bars):
+       Remove variable.
        * nsfns.m (Fx_create_frame):
        * w32fns.c (Fx_create_frame):
        * xfns.c (Fx_create_frame): Default horizontal scroll bars to
@@ -750,8 +822,8 @@
 
 2014-08-28  Martin Rudalics  <address@hidden>
 
-       * w32term.c (w32_horizontal_scroll_bar_handle_click): In
-       `event->y' return entire range (the size of the scroll bar minus
+       * w32term.c (w32_horizontal_scroll_bar_handle_click):
+       In `event->y' return entire range (the size of the scroll bar minus
        that of the thumb).
        * xterm.c (xm_scroll_callback, xaw_jump_callback): In `whole'
        return entire range (the scaled size of the scroll bar minus
@@ -771,8 +843,8 @@
 
        * xdisp.c (display_line): Don't assume that the call to
        reseat_at_next_visible_line_start ends up at a character
-       immediately following the newline on the previous line.  Avoids
-       setting the ends_at_zv_p flag on screen lines that are not at or
+       immediately following the newline on the previous line.
+       Avoids setting the ends_at_zv_p flag on screen lines that are not at or
        beyond ZV, which causes infloop in redisplay.  For the details, see
        http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00368.html.
 
@@ -796,8 +868,8 @@
        (newlocale, wcscoll_l): Define substitutes for platforms that
        lack them, so as to simplify the mainline code.
        (str_collate): Simplify the code by assuming the above definitions.
-       Use wcscoll_l, not uselocale, as uselocale is too fragile.  For
-       example, the old version left the Emacs in the wrong locale if
+       Use wcscoll_l, not uselocale, as uselocale is too fragile.
+       For example, the old version left the Emacs in the wrong locale if
        wcscoll reported an error.  Use 'int', not ptrdiff_t, for the int
        result.  Report an error if newlocale fails.
 
@@ -1016,8 +1088,8 @@
        * term.c (OUTPUT, tty_set_terminal_modes)
        (tty_set_terminal_window, tty_set_scroll_region)
        (tty_clear_to_end, tty_write_glyphs, tty_write_glyphs_with_face)
-       (tty_ins_del_lines, tty_menu_display, tty_menu_activate): Use
-       FRAME_TOTAL_LINES instead of FRAME_LINES.
+       (tty_ins_del_lines, tty_menu_display, tty_menu_activate):
+       Use FRAME_TOTAL_LINES instead of FRAME_LINES.
        (Fresume_tty): Use FRAME_TOTAL_LINES instead of FRAME_LINES.
        Call change_frame_size with frame's menu bar lines subtracted
        from height.
@@ -1068,14 +1140,14 @@
 
 2014-08-04  Martin Rudalics  <address@hidden>
 
-       * frame.h (FRAME_HAS_HORIZONTAL_SCROLL_BARS): Condition
-       correctly according to toolkit used.
+       * frame.h (FRAME_HAS_HORIZONTAL_SCROLL_BARS):
+       Condition correctly according to toolkit used.
        * frame.c (make_initial_frame, make_terminal_frame)
        (x_set_horizontal_scroll_bars, x_set_scroll_bar_height)
        (Vdefault_frame_horizontal_scroll_bars): Correctly condition
        assignments according to presence of toolkit scrollbars.
-       * window.h (WINDOW_HAS_HORIZONTAL_SCROLL_BAR): Condition
-       correctly according to toolkit used.
+       * window.h (WINDOW_HAS_HORIZONTAL_SCROLL_BAR):
+       Condition correctly according to toolkit used.
        * window.c (set_window_scroll_bars): Set horizontal scroll bar
        only if toolkit supports it.
        * w32term.c (w32_redeem_scroll_bar): Always redeem scroll bar if
@@ -1331,15 +1403,15 @@
        (x_set_scroll_bar_height): Add external declarations.
        * frame.c: (frame_inhibit_resize, frame_windows_min_size)
        (adjust_frame_size): New functions.
-       (make_frame): Initial horizontal_scroll_bars field.  Use
-       SET_FRAME_LINES.  Don't allow horizontal scroll bar in
+       (make_frame): Initial horizontal_scroll_bars field.
+       Use SET_FRAME_LINES.  Don't allow horizontal scroll bar in
        minibuffer window.
        (make_initial_frame, make_terminal_frame): No horizontal scroll
        bar in initial and terminal frames.  Use adjust_frame_size.
        (Fframe_total_cols): Fix doc-string.
        (Fframe_total_lines, Fscroll_bar_height): New Lisp functions.
-       (Fset_frame_height, Fset_frame_width, Fset_frame_size): Rewrite
-       using adjust_frame_size.
+       (Fset_frame_height, Fset_frame_width, Fset_frame_size):
+       Rewrite using adjust_frame_size.
        (Qscroll_bar_height, Qhorizontal_scroll_bars)
        (Qframe_windows_min_size): New symbols.
        (x_set_frame_parameters): Remove call of check_frame_size.
@@ -1350,8 +1422,8 @@
        (x_set_internal_border_width, x_set_vertical_scroll_bars)
        (x_set_scroll_bar_width, x_set_right_divider_width)
        (x_set_bottom_divider_width): Rewrite using adjust_frame_size.
-       (x_set_horizontal_scroll_bars, x_set_scroll_bar_height): New
-       functions.
+       (x_set_horizontal_scroll_bars, x_set_scroll_bar_height):
+       New functions.
        (x_figure_window_size): Rewrite to make frame display the
        expected number of lines.
        (Vdefault_frame_scroll_bars): Rewrite doc-string.
@@ -1398,8 +1470,8 @@
        compute_fringe_widths.
        * term.c (Fresume_tty): When changing the size of a tty frame do
        not pass height of menu bar.
-       (clear_tty_hooks, set_tty_hooks): Clear
-       horizontal_scroll_bar_hook.
+       (clear_tty_hooks, set_tty_hooks):
+       Clear horizontal_scroll_bar_hook.
        (init_tty): Frame has no horizontal scroll bars.
        * termhooks.h (enum scroll_bar_part): Add scroll_bar_move_ratio,
        scroll_bar_before_handle, scroll_bar_horizontal_handle,
@@ -1408,25 +1480,25 @@
        scroll_bar_to_rightmost entries.
        (enum event_kind): Add HORIZONTAL_SCROLL_BAR_CLICK_EVENT
        (struct terminal): Add set_horizontal_scroll_bar_hook.
-       * w32console.c (initialize_w32_display): Clear
-       horizontal_scroll_bar_hook.
+       * w32console.c (initialize_w32_display):
+       Clear horizontal_scroll_bar_hook.
        * w32fns.c (x_set_mouse_color): Use FRAME_W32_DISPLAY instead of
        FRAME_X_DISPLAY.
        (x_clear_under_internal_border, x_set_internal_border_width):
        New functions.
-       (x_set_menu_bar_lines): Rewrite using frame_inhibit_resize.  Set
-       windows_or_buffers_changed when adding the menu bar.
+       (x_set_menu_bar_lines): Rewrite using frame_inhibit_resize.
+       Set windows_or_buffers_changed when adding the menu bar.
        (x_set_tool_bar_lines): Rewrite using adjust_frame_size.
        (x_change_tool_bar_height, x_set_scroll_bar_default_height)
        (w32_createhscrollbar): New functions.
        (w32_createscrollbar): Rename to w32_createvscrollbar.
        (w32_createwindow): Init WND_HSCROLLBAR_INDEX.
        (w32_name_of_message): Replace WM_EMACS_CREATESCROLLBAR by
-       WM_EMACS_CREATEVSCROLLBAR and WM_EMACS_CREATEHSCROLLBAR.  Add
-       WM_EMACS_SHOWCURSOR.
+       WM_EMACS_CREATEVSCROLLBAR and WM_EMACS_CREATEHSCROLLBAR.
+       Add WM_EMACS_SHOWCURSOR.
        (w32_wnd_proc): Handle WM_HSCROLL case.  In WM_WINDOWPOSCHANGING
-       case do not artificially impose WM size hints.  Handle
-       WM_EMACS_SHOWCURSOR case.  Replace WM_EMACS_CREATESCROLLBAR case
+       case do not artificially impose WM size hints.
+       Handle WM_EMACS_SHOWCURSOR case.  Replace WM_EMACS_CREATESCROLLBAR case
        by WM_EMACS_CREATEVSCROLLBAR and WM_EMACS_CREATEHSCROLLBAR
        cases.
        (my_create_tip_window): Replace WND_SCROLLBAR_INDEX by
@@ -1445,8 +1517,8 @@
        pass height of menu bar to change_frame_size.
        * w32menu.c (set_frame_menubar): Rewrite using
        frame_inhibit_resize.
-       * w32term.h (struct w32_display_info): Add
-       horizontal_scroll_bar_cursor and cursor_display_counter.
+       * w32term.h (struct w32_display_info):
+       Add horizontal_scroll_bar_cursor and cursor_display_counter.
        (struct scroll_bar): Add horizontal.
        (HORIZONTAL_SCROLL_BAR_INSIDE_HEIGHT)
        (HORIZONTAL_SCROLL_BAR_LEFT_RANGE)
@@ -1456,8 +1528,8 @@
        (HORIZONTAL_SCROLL_BAR_TOP_BORDER)
        (HORIZONTAL_SCROLL_BAR_BOTTOM_BORDER)
        (HORIZONTAL_SCROLL_BAR_MIN_HANDLE): New macros.
-       (WM_EMACS_CREATEVSCROLLBAR, WM_EMACS_CREATEHSCROLLBAR): Define
-       instead of WM_EMACS_CREATESCROLLBAR.
+       (WM_EMACS_CREATEVSCROLLBAR, WM_EMACS_CREATEHSCROLLBAR):
+       Define instead of WM_EMACS_CREATESCROLLBAR.
        (WND_VSCROLLBAR_INDEX, WND_HSCROLLBAR_INDEX): Define instead of
        WND_SCROLLBAR_INDEX.
        * w32term.c (horizontal_scroll_bar_min_handle)
@@ -1476,18 +1548,18 @@
        scrollbar cases.
        (my_create_scrollbar): Replace with two new functions
        my_create_vscrollbar and my_create_hscrollbar.
-       (x_scroll_bar_create): New argument "horizontal".  Update
-       callers accordingly.
+       (x_scroll_bar_create): New argument "horizontal".
+       Update callers accordingly.
        (x_scroll_bar_remove, w32_condemn_scroll_bars)
        (w32_redeem_scroll_bar, x_scroll_bar_clear): Handle horizontal
        scroll bar case.
        (w32_read_socket): Handle WM_HSCROLL cae.
-       (x_new_font): Don't recompute fringe widths.  Use
-       frame_inhibit_resize.  Calculate new menu bar height iff we
+       (x_new_font): Don't recompute fringe widths.
+       Use frame_inhibit_resize.  Calculate new menu bar height iff we
        build without toolkit.  Always clear under internal border.
        (x_set_window_size): Don't check frame size or recompute
-       fringes.  Reset fullscreen status before applying sizes.  Always
-       resize as requested by pixelwise argument.  Don't call
+       fringes.  Reset fullscreen status before applying sizes.
+       Always resize as requested by pixelwise argument.  Don't call
        do_pending_window_change.
        (x_wm_set_size_hint): Add call for FRAME_SCROLL_BAR_AREA_HEIGHT.
        (w32_initialize_display_info): Initialize dpyinfo's
@@ -1513,8 +1585,8 @@
        (WINDOW_TOPMOST_P, WINDOW_HAS_HORIZONTAL_SCROLL_BAR)
        (WINDOW_CONFIG_SCROLL_BAR_HEIGHT)
        (WINDOW_CONFIG_SCROLL_BAR_LINES)
-       (WINDOW_SCROLL_BAR_LINES, WINDOW_SCROLL_BAR_AREA_HEIGHT): New
-       macros.
+       (WINDOW_SCROLL_BAR_LINES, WINDOW_SCROLL_BAR_AREA_HEIGHT):
+       New macros.
        (WINDOW_LEFT_FRINGE_COLS, WINDOW_RIGHT_FRINGE_COLS)
        (WINDOW_FRINGE_COLS, WINDOW_FRINGE_EXTENDED_P): Remove macros.
        (WINDOW_VERTICAL_SCROLL_BAR_TYPE)
@@ -1527,11 +1599,11 @@
        (Fwindow_old_point, sanitize_window_sizes): New functions.
        (Qwindow_sanitize_window_sizes): New symbol.
        (window_body_height): Count in horizontal scroll bar.
-       (set_window_hscroll, Fscroll_left, Fscroll_right): Set
-       suspend_auto_hscroll slot.
+       (set_window_hscroll, Fscroll_left, Fscroll_right):
+       Set suspend_auto_hscroll slot.
        (Fwindow_inside_edges): Count fringes pixelwise.
-       (coordinates_in_window, Fcoordinates_in_window_p): Consider
-       horizontal scroll bar.
+       (coordinates_in_window, Fcoordinates_in_window_p):
+       Consider horizontal scroll bar.
        (check_frame_size, adjust_window_margins): Remove functions and
        corresponding calls.
        (set_window_buffer): Initialize old_pointm and horizontal scroll
@@ -1547,8 +1619,8 @@
        (Fsplit_window_internal): Inherit horizontal scroll bar type and
        height.
        (Fdelete_window_internal): Unchain old_pointm marker.
-       (window_scroll_pixel_based, Fscroll_other_window): Adjust
-       old_pointm.
+       (window_scroll_pixel_based, Fscroll_other_window):
+       Adjust old_pointm.
        (Fwindow_text_width, Fwindow_text_height): New argument
        "pixelwise".
        (struct saved_window): New fields, old_pointm, hscroll_whole,
@@ -1603,10 +1675,10 @@
        (x_frame_parm_handlers): Add x_set_scroll_bar_height,
        x_set_horizontal_scroll_bars, x_set_left_fringe,
        x_set_right_fringe.
-       * xmenu.c (update_frame_menubar, free_frame_menubar): Use
-       adjust_frame_size.
-       * xterm.h (struct x_display_info): Add
-       horizontal_scroll_bar_cursor and Xatom_Horizontal_Scrollbar
+       * xmenu.c (update_frame_menubar, free_frame_menubar):
+       Use adjust_frame_size.
+       * xterm.h (struct x_display_info):
+       Add horizontal_scroll_bar_cursor and Xatom_Horizontal_Scrollbar
        slots.
        (struct scroll_bar): Add horizontal slot.
        (HORIZONTAL_SCROLL_BAR_INSIDE_HEIGHT)
@@ -1629,15 +1701,15 @@
        (x_set_toolkit_horizontal_scroll_bar_thumb)
        (XTset_horizontal_scroll_bar, x_net_wm_state)
        (x_horizontal_scroll_bar_report_motion): New functions.
-       (xg_scroll_callback, x_scroll_bar_handle_click): Handle
-       horizontal scroll bars.
+       (xg_scroll_callback, x_scroll_bar_handle_click):
+       Handle horizontal scroll bars.
        (SCROLL_BAR_HORIZONTAL_NAME): Define.
        (XTset_vertical_scroll_bar): Attempt to clear areas not covered
        by scroll bar.
-       (XTcondemn_scroll_bars, XTredeem_scroll_bar): Rewrite.  Handle
-       horizontal scroll bars.
-       (handle_one_xevent): Handle horizontal scroll bar events.  Call
-       x_net_wm_state.
+       (XTcondemn_scroll_bars, XTredeem_scroll_bar): Rewrite.
+       Handle horizontal scroll bars.
+       (handle_one_xevent): Handle horizontal scroll bar events.
+       Call x_net_wm_state.
        (x_set_window_size_1, x_wm_set_size_hint): Don't call
        check_frame_size.
        (x_set_window_size): Don't call check_frame_size and
@@ -1687,8 +1759,8 @@
 
 2014-07-25  Eli Zaretskii  <address@hidden>
 
-       * w32term.h (current_popup_menu, menubar_in_use): Move
-       declarations from w32term.c.
+       * w32term.h (current_popup_menu, menubar_in_use):
+       Move declarations from w32term.c.
 
 2014-07-25  Martin Rudalics  <address@hidden>
 
@@ -1742,8 +1814,8 @@
        * xterm.c (handle_one_xevent):
        * gtkutil.c (xg_event_is_for_menubar):
        * xfns.c (x_window) [USE_X_TOOLKIT]:
-       * xmenu.c (set_frame_menubar, free_frame_menubar): Prefer
-       to use FRAME_MENUBAR_HEIGHT.
+       * xmenu.c (set_frame_menubar, free_frame_menubar):
+       Prefer to use FRAME_MENUBAR_HEIGHT.
 
 2014-07-21  Dmitry Antipov  <address@hidden>
 
@@ -1764,12 +1836,12 @@
 
 2014-07-21  Eli Zaretskii  <address@hidden>
 
-       * w32select.c (setup_windows_coding_system): Apply
-       CODING_ANNOTATION_MASK to the common_flags member of struct
+       * w32select.c (setup_windows_coding_system):
+       Apply CODING_ANNOTATION_MASK to the common_flags member of struct
        coding_system.  Reported by martin rudalics <address@hidden>.
 
-       * w16select.c (Fw16_get_clipboard_data): Apply
-       CODING_ANNOTATION_MASK to the common_flags member of struct
+       * w16select.c (Fw16_get_clipboard_data):
+       Apply CODING_ANNOTATION_MASK to the common_flags member of struct
        coding_system.
 
        * xdisp.c (init_iterator): Initialize it->stop_charpos to the
@@ -1777,8 +1849,8 @@
        (handle_invisible_prop): Record in it->stop_charpos the position
        where the invisible text ends.  (Bug#18035)
        (hscroll_window_tree): Don't try hscrolling windows whose cursor
-       row has zero buffer position as their start position.  Reported by
-       martin rudalics <address@hidden>.
+       row has zero buffer position as their start position.
+       Reported by martin rudalics <address@hidden>.
 
        * xdisp.c (move_it_vertically_backward, move_it_by_lines): Prevent
        infinite looping in redisplay when display lines don't have enough
@@ -2218,8 +2290,8 @@
        are in sync with what the window wants.
        (Bug#17892)
 
-       * xdisp.c (display_line, display_mode_line): Call
-       prepare_desired_row with additional arguments, as appropriate.
+       * xdisp.c (display_line, display_mode_line):
+       Call prepare_desired_row with additional arguments, as appropriate.
 
        * dispextern.h (prepare_desired_row): Adjust prototype.
 
@@ -2308,7 +2380,7 @@
 
 2014-06-28  K. Handa  <address@hidden>
 
-       * coding.c (MAX_CHARBUF_SIZE): Renamed from CHARBUF_SIZE.
+       * coding.c (MAX_CHARBUF_SIZE): Rename from CHARBUF_SIZE.
        (MIN_CHARBUF_SIZE): New macro.
        (ALLOC_CONVERSION_WORK_AREA): New arg SIZE.  Callers changed.
 

=== modified file 'src/dispextern.h'
--- a/src/dispextern.h  2014-08-03 12:34:44 +0000
+++ b/src/dispextern.h  2014-09-22 19:20:45 +0000
@@ -2523,7 +2523,9 @@
 
   /* First and last visible x-position in the display area.  If window
      is hscrolled by n columns, first_visible_x == n * FRAME_COLUMN_WIDTH
-     (f), and last_visible_x == pixel width of W + first_visible_x.  */
+     (f), and last_visible_x == pixel width of W + first_visible_x.
+     When truncation or continuation glyphs are produced due to lack of
+     fringes, last_visible_x excludes the space required for these glyphs.  */
   int first_visible_x, last_visible_x;
 
   /* Last visible y-position + 1 in the display area without a mode

=== modified file 'src/eval.c'
--- a/src/eval.c        2014-09-11 13:21:19 +0000
+++ b/src/eval.c        2014-09-22 19:20:45 +0000
@@ -104,7 +104,7 @@
 union specbinding *backtrace_top (void) EXTERNALLY_VISIBLE;
 
 static Lisp_Object funcall_lambda (Lisp_Object, ptrdiff_t, Lisp_Object *);
-static Lisp_Object apply_lambda (Lisp_Object fun, Lisp_Object args);
+static Lisp_Object apply_lambda (Lisp_Object, Lisp_Object, ptrdiff_t);
 
 static Lisp_Object
 specpdl_symbol (union specbinding *pdl)
@@ -172,17 +172,11 @@
 /* Functions to modify slots of backtrace records.  */
 
 static void
-set_backtrace_args (union specbinding *pdl, Lisp_Object *args)
+set_backtrace_args (union specbinding *pdl, Lisp_Object *args, ptrdiff_t nargs)
 {
   eassert (pdl->kind == SPECPDL_BACKTRACE);
   pdl->bt.args = args;
-}
-
-static void
-set_backtrace_nargs (union specbinding *pdl, ptrdiff_t n)
-{
-  eassert (pdl->kind == SPECPDL_BACKTRACE);
-  pdl->bt.nargs = n;
+  pdl->bt.nargs = nargs;
 }
 
 static void
@@ -334,10 +328,10 @@
 }
 
 static void
-do_debug_on_call (Lisp_Object code)
+do_debug_on_call (Lisp_Object code, ptrdiff_t count)
 {
   debug_on_next_call = 0;
-  set_backtrace_debug_on_exit (specpdl_ptr - 1, true);
+  set_backtrace_debug_on_exit (specpdl + count, true);
   call_debugger (list1 (code));
 }
 
@@ -2035,9 +2029,11 @@
     }
 }
 
-void
+ptrdiff_t
 record_in_backtrace (Lisp_Object function, Lisp_Object *args, ptrdiff_t nargs)
 {
+  ptrdiff_t count = SPECPDL_INDEX ();
+
   eassert (nargs >= UNEVALLED);
   specpdl_ptr->bt.kind = SPECPDL_BACKTRACE;
   specpdl_ptr->bt.debug_on_exit = false;
@@ -2045,6 +2041,8 @@
   specpdl_ptr->bt.args = args;
   specpdl_ptr->bt.nargs = nargs;
   grow_specpdl ();
+
+  return count;
 }
 
 /* Eval a sub-expression of the current expression (i.e. in the same
@@ -2055,6 +2053,7 @@
   Lisp_Object fun, val, original_fun, original_args;
   Lisp_Object funcar;
   struct gcpro gcpro1, gcpro2, gcpro3;
+  ptrdiff_t count;
 
   if (SYMBOLP (form))
     {
@@ -2092,10 +2091,10 @@
   original_args = XCDR (form);
 
   /* This also protects them from gc.  */
-  record_in_backtrace (original_fun, &original_args, UNEVALLED);
+  count = record_in_backtrace (original_fun, &original_args, UNEVALLED);
 
   if (debug_on_next_call)
-    do_debug_on_call (Qt);
+    do_debug_on_call (Qt, count);
 
   /* At this point, only original_fun and original_args
      have values that will be used below.  */
@@ -2147,8 +2146,7 @@
              gcpro3.nvars = argnum;
            }
 
-         set_backtrace_args (specpdl_ptr - 1, vals);
-         set_backtrace_nargs (specpdl_ptr - 1, XINT (numargs));
+         set_backtrace_args (specpdl + count, vals, XINT (numargs));
 
          val = (XSUBR (fun)->function.aMANY) (XINT (numargs), vals);
          UNGCPRO;
@@ -2169,8 +2167,7 @@
 
          UNGCPRO;
 
-         set_backtrace_args (specpdl_ptr - 1, argvals);
-         set_backtrace_nargs (specpdl_ptr - 1, XINT (numargs));
+         set_backtrace_args (specpdl + count, argvals, XINT (numargs));
 
          switch (i)
            {
@@ -2223,7 +2220,7 @@
        }
     }
   else if (COMPILEDP (fun))
-    val = apply_lambda (fun, original_args);
+    val = apply_lambda (fun, original_args, count);
   else
     {
       if (NILP (fun))
@@ -2240,7 +2237,7 @@
        }
       if (EQ (funcar, Qmacro))
        {
-         ptrdiff_t count = SPECPDL_INDEX ();
+         ptrdiff_t count1 = SPECPDL_INDEX ();
          Lisp_Object exp;
          /* Bind lexical-binding during expansion of the macro, so the
             macro can know reliably if the code it outputs will be
@@ -2248,19 +2245,19 @@
          specbind (Qlexical_binding,
                    NILP (Vinternal_interpreter_environment) ? Qnil : Qt);
          exp = apply1 (Fcdr (fun), original_args);
-         unbind_to (count, Qnil);
+         unbind_to (count1, Qnil);
          val = eval_sub (exp);
        }
       else if (EQ (funcar, Qlambda)
               || EQ (funcar, Qclosure))
-       val = apply_lambda (fun, original_args);
+       val = apply_lambda (fun, original_args, count);
       else
        xsignal1 (Qinvalid_function, original_fun);
     }
   check_cons_list ();
 
   lisp_eval_depth--;
-  if (backtrace_debug_on_exit (specpdl_ptr - 1))
+  if (backtrace_debug_on_exit (specpdl + count))
     val = call_debugger (list2 (Qexit, val));
   specpdl_ptr--;
 
@@ -2657,7 +2654,7 @@
   Lisp_Object lisp_numargs;
   Lisp_Object val;
   register Lisp_Object *internal_args;
-  ptrdiff_t i;
+  ptrdiff_t i, count;
 
   QUIT;
 
@@ -2670,13 +2667,13 @@
     }
 
   /* This also GCPROs them.  */
-  record_in_backtrace (args[0], &args[1], nargs - 1);
+  count = record_in_backtrace (args[0], &args[1], nargs - 1);
 
   /* Call GC after setting up the backtrace, so the latter GCPROs the args.  */
   maybe_gc ();
 
   if (debug_on_next_call)
-    do_debug_on_call (Qlambda);
+    do_debug_on_call (Qlambda, count);
 
   check_cons_list ();
 
@@ -2796,14 +2793,14 @@
     }
   check_cons_list ();
   lisp_eval_depth--;
-  if (backtrace_debug_on_exit (specpdl_ptr - 1))
+  if (backtrace_debug_on_exit (specpdl + count))
     val = call_debugger (list2 (Qexit, val));
   specpdl_ptr--;
   return val;
 }
 
 static Lisp_Object
-apply_lambda (Lisp_Object fun, Lisp_Object args)
+apply_lambda (Lisp_Object fun, Lisp_Object args, ptrdiff_t count)
 {
   Lisp_Object args_left;
   ptrdiff_t i;
@@ -2830,15 +2827,14 @@
 
   UNGCPRO;
 
-  set_backtrace_args (specpdl_ptr - 1, arg_vector);
-  set_backtrace_nargs (specpdl_ptr - 1, i);
+  set_backtrace_args (specpdl + count, arg_vector, i);
   tem = funcall_lambda (fun, numargs, arg_vector);
 
   /* Do the debug-on-exit now, while arg_vector still exists.  */
-  if (backtrace_debug_on_exit (specpdl_ptr - 1))
+  if (backtrace_debug_on_exit (specpdl + count))
     {
       /* Don't do it again when we return to eval.  */
-      set_backtrace_debug_on_exit (specpdl_ptr - 1, false);
+      set_backtrace_debug_on_exit (specpdl + count, false);
       tem = call_debugger (list2 (Qexit, tem));
     }
   SAFE_FREE ();

=== modified file 'src/frame.c'
--- a/src/frame.c       2014-09-18 11:34:24 +0000
+++ b/src/frame.c       2014-09-22 19:20:45 +0000
@@ -1806,9 +1806,9 @@
 
 DEFUN ("mouse-position", Fmouse_position, Smouse_position, 0, 0, 0,
        doc: /* Return a list (FRAME X . Y) giving the current mouse frame and 
position.
-The position is given in character cells, where (0, 0) is the
-upper-left corner of the frame, X is the horizontal offset, and Y is
-the vertical offset.
+The position is given in canonical character cells, where (0, 0) is the
+upper-left corner of the frame, X is the horizontal offset, and Y is the
+vertical offset, measured in units of the frame's default character size.
 If Emacs is running on a mouseless terminal or hasn't been programmed
 to read the mouse position, it returns the selected frame for FRAME
 and nil for X and Y.
@@ -1927,9 +1927,10 @@
 so the coordinates of the top left character in the frame
 may be nonzero due to left-hand scroll bars or the menu bar.
 
-The position is given in character cells, where (0, 0) is the
-upper-left corner of the frame, X is the horizontal offset, and Y is
-the vertical offset.
+The position is given in canonical character cells, where (0, 0) is
+the upper-left corner of the frame, X is the horizontal offset, and
+Y is the vertical offset, measured in units of the frame's default
+character size.
 
 This function is a no-op for an X frame that is not visible.
 If you have just created a frame, you must wait for it to become visible

=== modified file 'src/image.c'
--- a/src/image.c       2014-09-07 07:04:01 +0000
+++ b/src/image.c       2014-09-22 19:20:45 +0000
@@ -8231,6 +8231,12 @@
       return 0;
     }
 
+  if (MagickGetImageDelay (image_wand) > 0)
+    img->lisp_data =
+      Fcons (Qdelay,
+             Fcons (make_float (MagickGetImageDelay (image_wand) / 100.0),
+                    img->lisp_data));
+
   if (MagickGetNumberImages (image_wand) > 1)
     img->lisp_data =
       Fcons (Qcount,

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2014-09-22 06:06:19 +0000
+++ b/src/lisp.h        2014-09-22 19:20:45 +0000
@@ -3976,8 +3976,7 @@
 extern void init_eval (void);
 extern void syms_of_eval (void);
 extern void unwind_body (Lisp_Object);
-extern void record_in_backtrace (Lisp_Object function,
-                                Lisp_Object *args, ptrdiff_t nargs);
+extern ptrdiff_t record_in_backtrace (Lisp_Object, Lisp_Object *, ptrdiff_t);
 extern void mark_specpdl (void);
 extern void get_backtrace (Lisp_Object array);
 Lisp_Object backtrace_top_function (void);

=== modified file 'src/macfont.m'
--- a/src/macfont.m     2014-08-25 07:00:42 +0000
+++ b/src/macfont.m     2014-09-22 19:20:45 +0000
@@ -2598,20 +2598,25 @@
 macfont_close (struct font *font)
 {
   struct macfont_info *macfont_info = (struct macfont_info *) font;
-  int i;
-
-  block_input ();
-  CFRelease (macfont_info->macfont);
-  CGFontRelease (macfont_info->cgfont);
-  if (macfont_info->screen_font)
-    CFRelease (macfont_info->screen_font);
-  macfont_release_cache (macfont_info->cache);
-  for (i = 0; i < macfont_info->metrics_nrows; i++)
-    if (macfont_info->metrics[i])
-      xfree (macfont_info->metrics[i]);
-  if (macfont_info->metrics)
-    xfree (macfont_info->metrics);
-  unblock_input ();
+
+  if (macfont_info->cache)
+    {
+      int i;
+
+      block_input ();
+      CFRelease (macfont_info->macfont);
+      CGFontRelease (macfont_info->cgfont);
+      if (macfont_info->screen_font)
+       CFRelease (macfont_info->screen_font);
+      macfont_release_cache (macfont_info->cache);
+      for (i = 0; i < macfont_info->metrics_nrows; i++)
+       if (macfont_info->metrics[i])
+         xfree (macfont_info->metrics[i]);
+      if (macfont_info->metrics)
+       xfree (macfont_info->metrics);
+      macfont_info->cache = NULL;
+      unblock_input ();
+    }
 }
 
 static int

=== modified file 'src/unexmacosx.c'
--- a/src/unexmacosx.c  2014-09-17 19:58:31 +0000
+++ b/src/unexmacosx.c  2014-09-22 19:20:45 +0000
@@ -1322,7 +1322,9 @@
       }
 
   if (curr_header_offset > text_seg_lowest_offset)
-    unexec_error ("not enough room for load commands for new __DATA segments");
+    unexec_error ("not enough room for load commands for new __DATA segments"
+                 " (increase headerpad_extra in configure.in to at least %lX)",
+                 num_unexec_regions * sizeof (struct segment_command));
 
   printf ("%ld unused bytes follow Mach-O header\n",
          text_seg_lowest_offset - curr_header_offset);

=== modified file 'src/w32term.c'
--- a/src/w32term.c     2014-08-28 06:46:58 +0000
+++ b/src/w32term.c     2014-09-22 19:20:45 +0000
@@ -2228,7 +2228,7 @@
        {
          /* In R2L rows, draw the cursor on the right edge of the
             stretch glyph.  */
-         int right_x = window_box_right_offset (s->w, TEXT_AREA);
+         int right_x = window_box_right (s->w, TEXT_AREA);
 
          if (x + background_width > right_x)
            background_width -= x - right_x;
@@ -5472,6 +5472,12 @@
   /* Compute frame-relative coordinates for phys cursor.  */
   get_phys_cursor_geometry (w, row, cursor_glyph, &left, &top, &h);
   rect.left = left;
+  /* When on R2L character, show cursor at the right edge of the
+     glyph, unless the cursor box is as wide as the glyph or wider
+     (the latter happens when x-stretch-cursor is non-nil).  */
+  if ((cursor_glyph->resolved_level & 1) != 0
+      && cursor_glyph->pixel_width > w->phys_cursor_width)
+    rect.left += cursor_glyph->pixel_width - w->phys_cursor_width;
   rect.top = top;
   rect.bottom = rect.top + h;
   rect.right = rect.left + w->phys_cursor_width;
@@ -5553,7 +5559,7 @@
                         WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
                         width, row->height);
        }
-      else
+      else     /* HBAR_CURSOR */
        {
          int dummy_x, dummy_y, dummy_h;
 
@@ -5564,6 +5570,9 @@
 
          get_phys_cursor_geometry (w, row, cursor_glyph, &dummy_x,
                                    &dummy_y, &dummy_h);
+         if ((cursor_glyph->resolved_level & 1) != 0
+             && cursor_glyph->pixel_width > w->phys_cursor_width)
+           x += cursor_glyph->pixel_width - w->phys_cursor_width;
          w32_fill_area (f, hdc, cursor_color, x,
                         WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
                                                  row->height - width),

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2014-09-21 22:49:24 +0000
+++ b/src/xdisp.c       2014-09-22 19:20:45 +0000
@@ -2995,12 +2995,8 @@
 
       /* If we truncate lines, leave room for the truncation glyph(s) at
         the right margin.  Otherwise, leave room for the continuation
-        glyph(s).  Done only if the window has no fringes.  Since we
-        don't know at this point whether there will be any R2L lines in
-        the window, we reserve space for truncation/continuation glyphs
-        even if only one of the fringes is absent.  */
-      if (WINDOW_RIGHT_FRINGE_WIDTH (it->w) == 0
-         || (it->bidi_p && WINDOW_LEFT_FRINGE_WIDTH (it->w) == 0))
+        glyph(s).  Done only if the window has no right fringe.  */
+      if (WINDOW_RIGHT_FRINGE_WIDTH (it->w) == 0)
        {
          if (it->line_wrap == TRUNCATE)
            it->last_visible_x -= it->truncation_pixel_width;
@@ -3065,6 +3061,19 @@
         iterator.  */
       if (it->bidi_p)
        {
+         /*  Since we don't know at this point whether there will be
+             any R2L lines in the window, we reserve space for
+             truncation/continuation glyphs even if only the left
+             fringe is absent.  */
+         if (base_face_id == DEFAULT_FACE_ID
+             && WINDOW_LEFT_FRINGE_WIDTH (it->w) == 0
+             && WINDOW_RIGHT_FRINGE_WIDTH (it->w) != 0)
+           {
+             if (it->line_wrap == TRUNCATE)
+               it->last_visible_x -= it->truncation_pixel_width;
+             else
+               it->last_visible_x -= it->continuation_pixel_width;
+           }
          /* Note the paragraph direction that this buffer wants to
             use.  */
          if (EQ (BVAR (current_buffer, bidi_paragraph_direction),
@@ -13564,6 +13573,12 @@
 
       if (mode_line_update_needed (w))
        w->update_mode_line = 1;
+
+      /* If reconsider_clip_changes above decided that the narrowing
+        in the current buffer changed, make sure all other windows
+        showing that buffer will be redisplayed.  */
+      if (current_buffer->clip_changed)
+       bset_update_mode_line (current_buffer);
     }
 
   /* Normally the message* functions will have already displayed and
@@ -19386,7 +19401,18 @@
 
          for (row_width = 0, g = row_start; g < row_end; g++)
            row_width += g->pixel_width;
-         stretch_width = window_box_width (it->w, TEXT_AREA) - row_width;
+
+         /* FIXME: There are various minor display glitches in R2L
+            rows when only one of the fringes is missing.  The
+            strange condition below produces the least bad effect.  */
+         if ((WINDOW_LEFT_FRINGE_WIDTH (it->w) == 0)
+             == (WINDOW_RIGHT_FRINGE_WIDTH (it->w) == 0)
+             || WINDOW_RIGHT_FRINGE_WIDTH (it->w) != 0)
+           stretch_width = window_box_width (it->w, TEXT_AREA);
+         else
+           stretch_width = it->last_visible_x - it->first_visible_x;
+         stretch_width -= row_width;
+
          if (stretch_width > 0)
            {
              stretch_ascent =
@@ -20527,9 +20553,17 @@
                  /* When the last glyph of an R2L row only fits
                     partially on the line, we need to set row->x to a
                     negative offset, so that the leftmost glyph is
-                    the one that is partially visible.  */
-                 if (row->reversed_p && new_x > it->last_visible_x)
-                   row->x = it->last_visible_x - new_x;
+                    the one that is partially visible.  But if we are
+                    going to produce the truncation glyph, this will
+                    be taken care of in produce_special_glyphs.  */
+                 if (row->reversed_p
+                     && new_x > it->last_visible_x
+                     && !(it->line_wrap == TRUNCATE
+                          && WINDOW_LEFT_FRINGE_WIDTH (it->w) == 0))
+                   {
+                     eassert (FRAME_WINDOW_P (it->f));
+                     row->x = it->last_visible_x - new_x;
+                   }
                }
              else
                {
@@ -20603,7 +20637,10 @@
                  that they are cropped at the right edge of the
                  window, so an image glyph will always end exactly at
                  last_visible_x, even if there's no right fringe.  */
-              && (WINDOW_RIGHT_FRINGE_WIDTH (it->w) || it->what == IT_IMAGE))
+              && ((row->reversed_p
+                   ? WINDOW_LEFT_FRINGE_WIDTH (it->w)
+                   : WINDOW_RIGHT_FRINGE_WIDTH (it->w))
+                  || it->what == IT_IMAGE))
              ? (it->current_x >= it->last_visible_x)
              : (it->current_x > it->last_visible_x)))
        {
@@ -25780,14 +25817,13 @@
 
   temp_it.dp = NULL;
   temp_it.what = IT_CHARACTER;
-  temp_it.len = 1;
   temp_it.c = temp_it.char_to_display = GLYPH_CHAR (glyph);
   temp_it.face_id = GLYPH_FACE (glyph);
   temp_it.len = CHAR_BYTES (temp_it.c);
 
   PRODUCE_GLYPHS (&temp_it);
   it->pixel_width = temp_it.pixel_width;
-  it->nglyphs = temp_it.pixel_width;
+  it->nglyphs = temp_it.nglyphs;
 }
 
 #ifdef HAVE_WINDOW_SYSTEM

=== modified file 'src/xterm.c'
--- a/src/xterm.c       2014-09-16 08:20:08 +0000
+++ b/src/xterm.c       2014-09-22 19:20:45 +0000
@@ -2474,7 +2474,7 @@
        {
          /* In R2L rows, draw the cursor on the right edge of the
             stretch glyph.  */
-         int right_x = window_box_right_offset (s->w, TEXT_AREA);
+         int right_x = window_box_right (s->w, TEXT_AREA);
 
          if (x + background_width > right_x)
            background_width -= x - right_x;
@@ -7977,6 +7977,15 @@
                                            GCForeground, &xgcv);
   gc = dpyinfo->scratch_cursor_gc;
 
+  /* When on R2L character, show cursor at the right edge of the
+     glyph, unless the cursor box is as wide as the glyph or wider
+     (the latter happens when x-stretch-cursor is non-nil).  */
+  if ((cursor_glyph->resolved_level & 1) != 0
+      && cursor_glyph->pixel_width > w->phys_cursor_width)
+    {
+      x += cursor_glyph->pixel_width - w->phys_cursor_width;
+      wd -= 1;
+    }
   /* Set clipping, draw the rectangle, and reset clipping again.  */
   x_clip_to_row (w, row, TEXT_AREA, gc);
   XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h - 1);
@@ -8062,9 +8071,10 @@
                          WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y),
                          width, row->height);
        }
-      else
+      else /* HBAR_CURSOR */
        {
          int dummy_x, dummy_y, dummy_h;
+         int x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
 
          if (width < 0)
            width = row->height;
@@ -8074,8 +8084,10 @@
          get_phys_cursor_geometry (w, row, cursor_glyph, &dummy_x,
                                    &dummy_y, &dummy_h);
 
-         XFillRectangle (dpy, window, gc,
-                         WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
+         if ((cursor_glyph->resolved_level & 1) != 0
+             && cursor_glyph->pixel_width > w->phys_cursor_width)
+           x += cursor_glyph->pixel_width - w->phys_cursor_width;
+         XFillRectangle (dpy, window, gc, x,
                          WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y +
                                                   row->height - width),
                          w->phys_cursor_width, width);


reply via email to

[Prev in Thread] Current Thread [Next in Thread]