1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-25 07:28:20 +00:00

Merge from emacs-24

This commit is contained in:
Stefan Monnier 2014-09-22 15:20:45 -04:00
commit 9949231fb0
20 changed files with 342 additions and 182 deletions

View File

@ -1,3 +1,8 @@
2014-09-22 Jan Djärv <jan.h.d@swipnet.se>
* configure.ac: Increase headerpad_extra to 1000, update the comment
about load commands (Bug#18505).
2014-09-15 Eli Zaretskii <eliz@gnu.org>
* configure.ac (HAVE_SOUND): Check for mmsystem.h header that
@ -1539,8 +1544,8 @@
2013-07-29 Michael Albinus <michael.albinus@gmx.de>
* 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 <xfq.free@gmail.com>
@ -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 <eggert@cs.ucla.edu>
@ -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

View File

@ -4936,17 +4936,19 @@ case "$opsys" in
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"

View File

@ -1,3 +1,9 @@
2014-09-22 Kan-Ru Chen <kanru@kanru.info>
* 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 <sds@gnu.org>
* 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 <eliz@gnu.org>
@ -349,8 +355,8 @@
2014-09-05 Martin Rudalics <rudalics@gmx.at>
* 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

View File

@ -1,3 +1,9 @@
2014-09-22 David Engster <deng@randomsample.de>
* 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 <monnier@iro.umontreal.ca>
* semantic/ia.el (semantic-ia-complete-symbol-menu): Use posn-at-point

View File

@ -80,12 +80,6 @@ Return a tuple of ( EMACSNAME . VERSION )."
(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 @@ m4_define(\\[SXEM4CS_BETA_VERSION\\], \\[\\([0-9]+\\)\\])")
;; 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-*[,)]")

View File

@ -1,3 +1,9 @@
2014-09-22 Dmitry Gutov <dgutov@yandex.ru>
* url.el (url-retrieve-internal): Clarify the docstring.
* url-http.el (url-http): Same. (Bug#18116)
2014-08-07 Reuben Thomas <rrt@sc3d.org>
* url-handlers.el: Remove a comment about VMS, which we no longer

View File

@ -1171,8 +1171,8 @@ the end of the document."
"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).

View File

@ -170,8 +170,8 @@ URL-encoded before it's used."
(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).

View File

@ -7377,10 +7377,10 @@ accessible position."
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 @@ accessible position."
;; 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)))

View File

@ -1,3 +1,75 @@
2014-09-22 Dmitry Antipov <dmantipov@yandex.ru>
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 <david@porkrind.org> (tiny change)
* unexmacosx.c (dump_it): Improve error message.
2014-09-22 Juri Linkov <juri@jurta.org>
* image.c (imagemagick_load_image): Add delay to imagemagick metadata.
(Bug#10747, bug#18334)
2014-09-22 Eli Zaretskii <eliz@gnu.org>
* 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 <eliz@gnu.org>
* 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 <rudalics@gmx.at> 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
<rudalics@gmx.at>.
2014-09-22 Dmitry Antipov <dmantipov@yandex.ru>
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 <eliz@gnu.org>
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 <eliz@gnu.org>
* w32.c (fcntl): Support O_NONBLOCK fcntl on the write side of pipes.
2014-09-22 Eli Zaretskii <eliz@gnu.org>
* 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 <dmantipov@yandex.ru>
@ -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 <rudalics@gmx.at>
* 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 <rudalics@gmx.at>
* 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 <rudalics@gmx.at>
* 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 <eliz@gnu.org>
* 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 <rudalics@gmx.at>
@ -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 <dmantipov@yandex.ru>
@ -1764,12 +1836,12 @@
2014-07-21 Eli Zaretskii <eliz@gnu.org>
* 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 <rudalics@gmx.at>.
* 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 <rudalics@gmx.at>.
row has zero buffer position as their start position.
Reported by martin rudalics <rudalics@gmx.at>.
* 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 <handa@gnu.org>
* 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.

View File

@ -2523,7 +2523,9 @@ struct it
/* 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

View File

@ -104,7 +104,7 @@ union specbinding *backtrace_next (union specbinding *) EXTERNALLY_VISIBLE;
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 @@ backtrace_debug_on_exit (union specbinding *pdl)
/* 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 @@ call_debugger (Lisp_Object arg)
}
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 @@ grow_specpdl (void)
}
}
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 @@ record_in_backtrace (Lisp_Object function, Lisp_Object *args, ptrdiff_t nargs)
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 @@ eval_sub (Lisp_Object form)
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 @@ eval_sub (Lisp_Object form)
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 @@ eval_sub (Lisp_Object form)
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 @@ eval_sub (Lisp_Object form)
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 @@ eval_sub (Lisp_Object form)
}
}
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 @@ eval_sub (Lisp_Object form)
}
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 @@ eval_sub (Lisp_Object form)
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 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
Lisp_Object lisp_numargs;
Lisp_Object val;
register Lisp_Object *internal_args;
ptrdiff_t i;
ptrdiff_t i, count;
QUIT;
@ -2670,13 +2667,13 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
}
/* 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 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
}
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 @@ apply_lambda (Lisp_Object fun, Lisp_Object args)
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 ();

View File

@ -1806,9 +1806,9 @@ The functions are run with one argument, the frame to be deleted. */)
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 @@ Coordinates are relative to the frame, not a window,
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

View File

@ -8231,6 +8231,12 @@ imagemagick_load_image (struct frame *f, struct image *img,
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,

View File

@ -3976,8 +3976,7 @@ extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
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);

View File

@ -2598,6 +2598,9 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no
macfont_close (struct font *font)
{
struct macfont_info *macfont_info = (struct macfont_info *) font;
if (macfont_info->cache)
{
int i;
block_input ();
@ -2611,7 +2614,9 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no
xfree (macfont_info->metrics[i]);
if (macfont_info->metrics)
xfree (macfont_info->metrics);
macfont_info->cache = NULL;
unblock_input ();
}
}
static int

View File

@ -1322,7 +1322,9 @@ dump_it (void)
}
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);

View File

@ -2228,7 +2228,7 @@ x_draw_stretch_glyph_string (struct glyph_string *s)
{
/* 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 @@ x_draw_hollow_cursor (struct window *w, struct glyph_row *row)
/* 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 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row,
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 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row,
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),

View File

@ -2995,12 +2995,8 @@ init_iterator (struct it *it, struct window *w,
/* 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 @@ init_iterator (struct it *it, struct window *w,
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 @@ redisplay_internal (void)
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 @@ extend_face_to_end_of_line (struct it *it)
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,10 +20553,18 @@ display_line (struct it *it)
/* 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)
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
{
/* Glyph is completely off the left margin of the
@ -20603,7 +20637,10 @@ display_line (struct it *it)
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 @@ produce_special_glyphs (struct it *it, enum display_element_type what)
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

View File

@ -2474,7 +2474,7 @@ x_draw_stretch_glyph_string (struct glyph_string *s)
{
/* 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 @@ x_draw_hollow_cursor (struct window *w, struct glyph_row *row)
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 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
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 @@ x_draw_bar_cursor (struct window *w, struct glyph_row *row, int width, enum text
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);