From: Eli Zaretskii Date: Sat, 16 Apr 2016 10:53:17 +0000 (+0300) Subject: Fix minor issues with removing left or right fringes X-Git-Tag: emacs-25.0.93~26 X-Git-Url: https://code.delx.au/gnu-emacs/commitdiff_plain/52e798b7cd6626d83622206839ddaf7353e4f942 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) --- diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index 01f899f1c0..8039291298 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -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 diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index f61f08a7f2..0665eb9098 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -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 diff --git a/lisp/window.el b/lisp/window.el index 7e46aa89b8..fd0fcc975b 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -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)