Fix minor issues with removing left or right fringes

* lisp/window.el (window-max-chars-per-line): Account for
'left-fringe-width' and 'right-fringe-width' variables.

* doc/lispref/windows.texi (Window Sizes): Document the effect on
window text width when setting the width of one or both fringes to
zero.
* doc/emacs/display.texi (Fringes): Document the effect on window
text width when setting the width of one or both fringes to zero.
(Bug#22891)
This commit is contained in:
Eli Zaretskii 2016-04-16 13:53:17 +03:00
parent d6ffd645a8
commit 52e798b7cd
3 changed files with 35 additions and 2 deletions

View file

@ -1087,6 +1087,23 @@ To disable this, change the variable
@code{overflow-newline-into-fringe} to @code{nil}; this causes Emacs
to continue or truncate lines that are exactly as wide as the window.
If you customize @code{fringe-mode} to remove the fringes on one or
both sides of the window display, the features that display on the
fringe are not available. Indicators of line continuation and
truncation are an exception: when fringes are not available, Emacs
uses the leftmost and rightmost character cells to indicate
continuation and truncation with special ASCII characters, see
@ref{Continuation Lines}, and @ref{Line Truncation}. This reduces the
width available for displaying text on each line, because the
character cells used for truncation and continuation indicators are
reserved for that purpose. Since buffer text can include
bidirectional text, and thus both left-to-right and right-to-left
paragraphs (@pxref{Bidirectional Editing}), removing only one of the
fringes still reserves two character cells, one on each side of the
window, for truncation and continuation indicators, because these
indicators are displayed on opposite sides of the window in
right-to-left paragraphs.
@node Displaying Boundaries
@section Displaying Boundaries

View file

@ -605,6 +605,12 @@ exceed its total height as returned by @code{window-total-height}.
@cindex body width of a window
The @dfn{body width} of a window is the width of its text area, which
does not include the scroll bar, fringes, margins or a right divider.
Note that when one or both fringes are removed (by setting their width
to zero), the display engine reserves two character cells, one on each
side of the window, for displaying the continuation and truncation
glyphs, which leaves 2 columns less for text display. (The function
@code{window-max-chars-per-line}, described below, takes this
peculiarity into account.)
@defun window-body-width &optional window pixelwise
This function returns the width, in columns, of the body of window

View file

@ -1889,9 +1889,19 @@ the font."
(ncols (/ window-width font-width)))
(if (and (display-graphic-p)
overflow-newline-into-fringe
(/= (frame-parameter nil 'left-fringe) 0)
(/= (frame-parameter nil 'right-fringe) 0))
(not
(or (eq left-fringe-width 0)
(and (null left-fringe-width)
(= (frame-parameter nil 'left-fringe) 0))))
(not
(or (eq right-fringe-width 0)
(and (null right-fringe-width)
(= (frame-parameter nil 'right-fringe) 0)))))
ncols
;; FIXME: This should remove 1 more column when there are no
;; fringes, lines are truncated, and the window is hscrolled,
;; but EOL is not in the view, because then there are 2
;; truncation glyphs, not one.
(1- ncols)))))
(defun window-current-scroll-bars (&optional window)