Subject: bug#27830: 26.0.50; Left fringe gets truncated by a pixel in window not sharing that edge with frame

From: Kaushal Modi <[email-masked]>
Date: Tue, 25 Jul 2017 20:19:31 +0000

Hello,

In the past month or two, I have noticed that left edge of the fringe gets
cut by a pixel if that fringe is on the the left-most window (i.e. not in a
window that shares the left edge of the frame too).

While this might seem nitpicky, that is very evident when using a package
that diff-hl that shows the uncommited changed lines in the fringe.

Step 0: Please eval the below macro.. it's just a helper to install the
needed package.

(defmacro emacs-pkg-debug-setup (pkg-alist &rest body)
  "Install packages in PKG-ALIST and evaluate BODY.
Each element of PKG-ALIST has the form (((ID . LOCATION) . (PKG1 PKG2 ..))
..).
The ID and LOCATION are the same as the ones in `package-archives'.
PKG1, PKG2, .. are package names from the ID archive.

Example usage:

1. Launch 'emacs -Q'.
2. Copy this macro definition to its scratch buffer and evaluate it.
3. Evaluate a minimum working example using this macro as below:
     (emacs-pkg-debug-setup '(;; Install hydra from GNU Elpa
                              (nil . (hydra))
                              ;; Install org from Org Elpa
                              ((\"org\" . \"http://orgmode.org/elpa/\") .
(org)))
       ;; Then evaluate the below forms
       (org-mode)) "
  (declare (indent 1) (debug t))
  `(progn
     (require 'package)
     (setq user-emacs-directory (concat temporary-file-directory
                                        (getenv "USER") "/"
".emacs.d-debug/"))
     (setq package-user-dir (format "%selpa_%s/"
                                    user-emacs-directory
emacs-major-version))
     (let (archive pkgs)
       (dolist (archive-alist ,pkg-alist)
(setq archive (car archive-alist))
(when archive
           (add-to-list 'package-archives archive :append))
         (setq pkgs (append pkgs (cdr archive-alist))))
       (package-initialize)
       (package-refresh-contents)

       (dolist (pkg pkgs)
         (when (and pkg (not (package-installed-p pkg)))
           (package-install pkg))
         (require pkg))

       ,@body)))

;; Step 1: Eval above macro and then the below form
(emacs-pkg-debug-setup '((nil . (diff-hl)))
  (scroll-bar-mode -1)
  (message "Done!"))

(PS: You may skip Steps 0 and 1 and do these instead manually, and then
proceed to Step 2.)
i. Install diff-hl in emacs -Q
ii. (scroll-bar-mode -1)

Step 2: Open a git controlled file, make some changes and save it
Step 3: Eval: (diff-hl-mode)
Step 4: Split the window: C-x 3

Notice how the green bracket in the fringe covering the changed line looks
on the left window (sharing the left edge with frame), and how the window
divider overlaps the vertical line of the green bracket in the fringe in
the right-hand-side window.

This did not happen in emacs 25.x or until "recently" (about a month or two
back).

I am copying Dmitry (author of diff-hl package) as he also has seen this
issue happen:
https://github.com/dgutov/diff-hl/issues/94#issuecomment-317815076

Also copying Martin as my gut feeling says that he would know exactly
what's going on here as it has to do with windows and frames :) My
apologies if I shouldn't have copied you.

Thanks.

In GNU Emacs 26.0.50 (build 17, x86_64-pc-linux-gnu, GTK+ Version 2.24.23)
 of 2017-07-25
Repository revision: 6dc5d45c542a6f9cfbcf3e37d597c9e0efb3070d
Windowing system distributor 'The X.Org Foundation', version 11.0.60900000
System Description: Red Hat Enterprise Linux Workstation release 6.6
(Santiago)

Recent messages:
nil
next-line: End of buffer
C-x 3 runs the command split-window-right
C-x 2 runs the command split-window-below
C-x 3 runs the command split-window-right
Mark set [2 times]
Saved text until "mode)
;; Step 4: Split the window: C-x 3"
Mark set
Making completion list...

Configured using:
 'configure --with-modules
 --prefix=/home/kmodi/usr_local/apps/6/emacs/master
 '--program-transform-name=s/^ctags$/ctags_emacs/'
 'CPPFLAGS=-I/home/kmodi/usr_local/6/include -I/usr/include/freetype2
 -I/usr/include' 'CFLAGS=-ggdb3 -O0' 'CXXFLAGS=-ggdb3 -O0'
 'LDFLAGS=-L/home/kmodi/usr_local/6/lib -L/home/kmodi/usr_local/6/lib64
 -ggdb3''

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK2 X11 MODULES

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=none
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  override-global-mode: t
  diff-auto-refine-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug sendmail help-fns two-column iso-transl
help-mode cl-print debug use-package pcase warnings diminish bind-key cl
diff-hl-dired diff advice diff-hl edmacro kmacro face-remap vc-hg vc-git
vc-dir ewoc vc vc-dispatcher diff-mode compile comint ansi-color ring
easy-mmode autoload radix-tree lisp-mnt tar-mode cus-edit cus-start
cus-load wid-edit mm-archive message dired dired-loaddefs format-spec
rfc822 mml mml-sec epa derived gnus-util rmail rmail-loaddefs mailabbrev
gmm-utils mailheader mm-decode mm-bodies mm-encode mail-utils
network-stream starttls url-http tls gnutls mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm subr-x puny url-cache
url-auth url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-domsuf url-util mailcap epg finder-inf package easymenu
epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache url-vars seq byte-opt gv bytecomp
byte-compile cconv cl-loaddefs cl-lib time-date mule-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win
x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote dbusbind inotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 233359 43074)
 (symbols 48 30364 1)
 (miscs 40 83 524)
 (strings 32 69880 4520)
 (string-bytes 1 1857461)
 (vectors 16 32959)
 (vector-slots 8 1451073 140058)
 (floats 8 72 562)
 (intervals 56 1170 64)
 (buffers 992 18)
 (heap 1024 47444 8353))

-- 

Kaushal Modi