Unfortunately, the repro isn't clear, but after using Emacs for some time, the left side of the hollow box point will end up being slightly thicker than the right side. After this happens, when the point is moved, it will leave a faint line on the left side of the point. Restarting emacs will cause the point to be a uniform box. Note that I only use the hollow box when a window is not active. Also, I have a hidpi display, so could it possibly be some sort of rounding error somewhere? In GNU Emacs 27.0.91 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.20) of 2020-07-05 built on pop-os Repository revision: 247dcb4b1b1b4ea3d50b63d41c4efa58743f610d Repository branch: emacs-27 Windowing system distributor 'The X.Org Foundation', version 11.0.12008000 System Description: Pop!_OS 20.04 LTS Recent messages: config • 1ms • Emacs Lisp config • 5ms • Clean shutdown config • 7ms • Enable Default Theme →★ loaded init.el in 93 ms Explain-pause-mode enabled. LSP :: ruby-ls:1891877 initialized successfully Quit Waiting for git... [2 times] Appointment reminders enabled (no diary file found) Added 5 events for today Configured using: 'configure --with-json' Configured features: XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP Important settings: value of $LC_MONETARY: en_US.UTF-8 value of $LC_NUMERIC: en_US.UTF-8 value of $LC_TIME: en_US.UTF-8 value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: EnhRuby Minor modes in effect: global-magit-file-mode: t magit-file-mode: t global-git-commit-mode: t async-bytecomp-package-mode: t eval-sexp-fu-flash-mode: t lsp-ui-mode: t lsp-ui-sideline-mode: t global-flycheck-mode: t flycheck-mode: t company-posframe-mode: t company-prescient-mode: t company-mode: t lsp-managed-mode: t lsp-mode: t evil-ruby-text-objects-mode: t rspec-verifiable-mode: t ruby-refactor-mode: t yas-global-mode: t yas-minor-mode: t winner-mode: t dtrt-indent-mode: t global-auto-revert-mode: t ivy-rich-mode: t ivy-prescient-mode: t counsel-mode: t ivy-posframe-mode: t ivy-mode: t persp-mode: t projectile-mode: t better-jumper-mode: t better-jumper-local-mode: t show-smartparens-global-mode: t show-smartparens-mode: t smartparens-global-mode: t smartparens-mode: t evil-traces-mode: t global-evil-collection-unimpaired-mode: t evil-collection-unimpaired-mode: t global-evil-mc-mode: t evil-mc-mode: t global-evil-matchit-mode: t evil-matchit-mode: t global-evil-surround-mode: t evil-surround-mode: t global-undo-tree-mode: t undo-tree-mode: t evil-mode: t evil-local-mode: t doom-modeline-mode: t recentf-mode: t org-roam-mode: t shell-dirtrack-mode: t explain-pause-mode: t gcmh-mode: t which-key-mode: t prescient-persist-mode: t +popup-mode: t ws-butler-global-mode: t ws-butler-mode: t save-place-mode: t leader-key-leader-override-mode: t global-leader-key-leader-override-mode: t delete-selection-mode: t savehist-mode: t xterm-mouse-mode: t override-global-mode: t straight-use-package-mode: t straight-package-neutering-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t window-divider-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t auto-fill-function: yas--auto-fill transient-mark-mode: t abbrev-mode: t Load-path shadows: /home/aaronjensen/.emacs.d/straight/build/lispy/elpa hides /home/aaronjensen/.emacs.d/straight/build/ivy/elpa /home/aaronjensen/.emacs.d/straight/build/org/ob-hledger hides /usr/local/share/emacs/27.0.91/lisp/org/ob-hledger /home/aaronjensen/.emacs.d/straight/build/org/ob-octave hides /usr/local/share/emacs/27.0.91/lisp/org/ob-octave /home/aaronjensen/.emacs.d/straight/build/org/ob-exp hides /usr/local/share/emacs/27.0.91/lisp/org/ob-exp /home/aaronjensen/.emacs.d/straight/build/org/ob-sqlite hides /usr/local/share/emacs/27.0.91/lisp/org/ob-sqlite /home/aaronjensen/.emacs.d/straight/build/org/ob-ditaa hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ditaa /home/aaronjensen/.emacs.d/straight/build/org/ol-bbdb hides /usr/local/share/emacs/27.0.91/lisp/org/ol-bbdb /home/aaronjensen/.emacs.d/straight/build/org/org-capture hides /usr/local/share/emacs/27.0.91/lisp/org/org-capture /home/aaronjensen/.emacs.d/straight/build/org/ol-info hides /usr/local/share/emacs/27.0.91/lisp/org/ol-info /home/aaronjensen/.emacs.d/straight/build/org/ob-ocaml hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ocaml /home/aaronjensen/.emacs.d/straight/build/org/ol hides /usr/local/share/emacs/27.0.91/lisp/org/ol /home/aaronjensen/.emacs.d/straight/build/org/ob-ebnf hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ebnf /home/aaronjensen/.emacs.d/straight/build/org/org-element hides /usr/local/share/emacs/27.0.91/lisp/org/org-element /home/aaronjensen/.emacs.d/straight/build/org/ob-matlab hides /usr/local/share/emacs/27.0.91/lisp/org/ob-matlab /home/aaronjensen/.emacs.d/straight/build/org/org-lint hides /usr/local/share/emacs/27.0.91/lisp/org/org-lint /home/aaronjensen/.emacs.d/straight/build/org/ox-md hides /usr/local/share/emacs/27.0.91/lisp/org/ox-md /home/aaronjensen/.emacs.d/straight/build/org/ob-C hides /usr/local/share/emacs/27.0.91/lisp/org/ob-C /home/aaronjensen/.emacs.d/straight/build/org/ob-screen hides /usr/local/share/emacs/27.0.91/lisp/org/ob-screen /home/aaronjensen/.emacs.d/straight/build/org/ob-sed hides /usr/local/share/emacs/27.0.91/lisp/org/ob-sed /home/aaronjensen/.emacs.d/straight/build/org/org-ctags hides /usr/local/share/emacs/27.0.91/lisp/org/org-ctags /home/aaronjensen/.emacs.d/straight/build/org/ob-calc hides /usr/local/share/emacs/27.0.91/lisp/org/ob-calc /home/aaronjensen/.emacs.d/straight/build/org/ob-shen hides /usr/local/share/emacs/27.0.91/lisp/org/ob-shen /home/aaronjensen/.emacs.d/straight/build/org/org-macro hides /usr/local/share/emacs/27.0.91/lisp/org/org-macro /home/aaronjensen/.emacs.d/straight/build/org/ob-fortran hides /usr/local/share/emacs/27.0.91/lisp/org/ob-fortran /home/aaronjensen/.emacs.d/straight/build/org/ob-latex hides /usr/local/share/emacs/27.0.91/lisp/org/ob-latex /home/aaronjensen/.emacs.d/straight/build/org/ol-eww hides /usr/local/share/emacs/27.0.91/lisp/org/ol-eww /home/aaronjensen/.emacs.d/straight/build/org/ob-maxima hides /usr/local/share/emacs/27.0.91/lisp/org/ob-maxima /home/aaronjensen/.emacs.d/straight/build/org/ob-tangle hides /usr/local/share/emacs/27.0.91/lisp/org/ob-tangle /home/aaronjensen/.emacs.d/straight/build/org/ol-eshell hides /usr/local/share/emacs/27.0.91/lisp/org/ol-eshell /home/aaronjensen/.emacs.d/straight/build/org/ob-coq hides /usr/local/share/emacs/27.0.91/lisp/org/ob-coq /home/aaronjensen/.emacs.d/straight/build/org/ob-ruby hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ruby /home/aaronjensen/.emacs.d/straight/build/org/ob-stan hides /usr/local/share/emacs/27.0.91/lisp/org/ob-stan /home/aaronjensen/.emacs.d/straight/build/org/ob-comint hides /usr/local/share/emacs/27.0.91/lisp/org/ob-comint /home/aaronjensen/.emacs.d/straight/build/org/ob-sql hides /usr/local/share/emacs/27.0.91/lisp/org/ob-sql /home/aaronjensen/.emacs.d/straight/build/org/ob-shell hides /usr/local/share/emacs/27.0.91/lisp/org/ob-shell /home/aaronjensen/.emacs.d/straight/build/org/org-keys hides /usr/local/share/emacs/27.0.91/lisp/org/org-keys /home/aaronjensen/.emacs.d/straight/build/org/ox-beamer hides /usr/local/share/emacs/27.0.91/lisp/org/ox-beamer /home/aaronjensen/.emacs.d/straight/build/org/ob-R hides /usr/local/share/emacs/27.0.91/lisp/org/ob-R /home/aaronjensen/.emacs.d/straight/build/org/ox hides /usr/local/share/emacs/27.0.91/lisp/org/ox /home/aaronjensen/.emacs.d/straight/build/org/ob-ref hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ref /home/aaronjensen/.emacs.d/straight/build/org/ob-abc hides /usr/local/share/emacs/27.0.91/lisp/org/ob-abc /home/aaronjensen/.emacs.d/straight/build/org/ox-icalendar hides /usr/local/share/emacs/27.0.91/lisp/org/ox-icalendar /home/aaronjensen/.emacs.d/straight/build/org/ox-odt hides /usr/local/share/emacs/27.0.91/lisp/org/ox-odt /home/aaronjensen/.emacs.d/straight/build/org/ob-org hides /usr/local/share/emacs/27.0.91/lisp/org/ob-org /home/aaronjensen/.emacs.d/straight/build/org/org-crypt hides /usr/local/share/emacs/27.0.91/lisp/org/org-crypt /home/aaronjensen/.emacs.d/straight/build/org/ob-forth hides /usr/local/share/emacs/27.0.91/lisp/org/ob-forth /home/aaronjensen/.emacs.d/straight/build/org/org-mouse hides /usr/local/share/emacs/27.0.91/lisp/org/org-mouse /home/aaronjensen/.emacs.d/straight/build/org/org-compat hides /usr/local/share/emacs/27.0.91/lisp/org/org-compat /home/aaronjensen/.emacs.d/straight/build/org/ob-core hides /usr/local/share/emacs/27.0.91/lisp/org/ob-core /home/aaronjensen/.emacs.d/straight/build/org/org-mobile hides /usr/local/share/emacs/27.0.91/lisp/org/org-mobile /home/aaronjensen/.emacs.d/straight/build/org/ol-gnus hides /usr/local/share/emacs/27.0.91/lisp/org/ol-gnus /home/aaronjensen/.emacs.d/straight/build/org/ob-gnuplot hides /usr/local/share/emacs/27.0.91/lisp/org/ob-gnuplot /home/aaronjensen/.emacs.d/straight/build/org/ob-lilypond hides /usr/local/share/emacs/27.0.91/lisp/org/ob-lilypond /home/aaronjensen/.emacs.d/straight/build/org/org hides /usr/local/share/emacs/27.0.91/lisp/org/org /home/aaronjensen/.emacs.d/straight/build/org/ob-scheme hides /usr/local/share/emacs/27.0.91/lisp/org/ob-scheme /home/aaronjensen/.emacs.d/straight/build/org/ob-picolisp hides /usr/local/share/emacs/27.0.91/lisp/org/ob-picolisp /home/aaronjensen/.emacs.d/straight/build/org/org-macs hides /usr/local/share/emacs/27.0.91/lisp/org/org-macs /home/aaronjensen/.emacs.d/straight/build/org/ob-sass hides /usr/local/share/emacs/27.0.91/lisp/org/ob-sass /home/aaronjensen/.emacs.d/straight/build/org/org-goto hides /usr/local/share/emacs/27.0.91/lisp/org/org-goto /home/aaronjensen/.emacs.d/straight/build/org/org-colview hides /usr/local/share/emacs/27.0.91/lisp/org/org-colview /home/aaronjensen/.emacs.d/straight/build/org/ox-html hides /usr/local/share/emacs/27.0.91/lisp/org/ox-html /home/aaronjensen/.emacs.d/straight/build/org/org-attach hides /usr/local/share/emacs/27.0.91/lisp/org/org-attach /home/aaronjensen/.emacs.d/straight/build/org/ox-ascii hides /usr/local/share/emacs/27.0.91/lisp/org/ox-ascii /home/aaronjensen/.emacs.d/straight/build/org/ob-dot hides /usr/local/share/emacs/27.0.91/lisp/org/ob-dot /home/aaronjensen/.emacs.d/straight/build/org/org-feed hides /usr/local/share/emacs/27.0.91/lisp/org/org-feed /home/aaronjensen/.emacs.d/straight/build/org/ob-ledger hides /usr/local/share/emacs/27.0.91/lisp/org/ob-ledger /home/aaronjensen/.emacs.d/straight/build/org/ob-lob hides /usr/local/share/emacs/27.0.91/lisp/org/ob-lob /home/aaronjensen/.emacs.d/straight/build/org/org-src hides /usr/local/share/emacs/27.0.91/lisp/org/org-src /home/aaronjensen/.emacs.d/straight/build/org/ol-rmail hides /usr/local/share/emacs/27.0.91/lisp/org/ol-rmail /home/aaronjensen/.emacs.d/straight/build/org/org-pcomplete hides /usr/local/share/emacs/27.0.91/lisp/org/org-pcomplete /home/aaronjensen/.emacs.d/straight/build/org/ob-awk hides /usr/local/share/emacs/27.0.91/lisp/org/ob-awk /home/aaronjensen/.emacs.d/straight/build/org/ob-vala hides /usr/local/share/emacs/27.0.91/lisp/org/ob-vala /home/aaronjensen/.emacs.d/straight/build/org/ob-lisp hides /usr/local/share/emacs/27.0.91/lisp/org/ob-lisp /home/aaronjensen/.emacs.d/straight/build/org/org-install hides /usr/local/share/emacs/27.0.91/lisp/org/org-install /home/aaronjensen/.emacs.d/straight/build/org/ox-publish hides /usr/local/share/emacs/27.0.91/lisp/org/ox-publish /home/aaronjensen/.emacs.d/straight/build/org/ob-python hides /usr/local/share/emacs/27.0.91/lisp/org/ob-python /home/aaronjensen/.emacs.d/straight/build/org/ob-table hides /usr/local/share/emacs/27.0.91/lisp/org/ob-table /home/aaronjensen/.emacs.d/straight/build/org/ob-emacs-lisp hides /usr/local/share/emacs/27.0.91/lisp/org/ob-emacs-lisp /home/aaronjensen/.emacs.d/straight/build/org/org-footnote hides /usr/local/share/emacs/27.0.91/lisp/org/org-footnote /home/aaronjensen/.emacs.d/straight/build/org/org-habit hides /usr/local/share/emacs/27.0.91/lisp/org/org-habit /home/aaronjensen/.emacs.d/straight/build/org/ol-w3m hides /usr/local/share/emacs/27.0.91/lisp/org/ol-w3m /home/aaronjensen/.emacs.d/straight/build/org/org-entities hides /usr/local/share/emacs/27.0.91/lisp/org/org-entities /home/aaronjensen/.emacs.d/straight/build/org/org-id hides /usr/local/share/emacs/27.0.91/lisp/org/org-id /home/aaronjensen/.emacs.d/straight/build/org/org-tempo hides /usr/local/share/emacs/27.0.91/lisp/org/org-tempo /home/aaronjensen/.emacs.d/straight/build/org/org-clock hides /usr/local/share/emacs/27.0.91/lisp/org/org-clock /home/aaronjensen/.emacs.d/straight/build/org/ob-perl hides /usr/local/share/emacs/27.0.91/lisp/org/ob-perl /home/aaronjensen/.emacs.d/straight/build/org/org-list hides /usr/local/share/emacs/27.0.91/lisp/org/org-list /home/aaronjensen/.emacs.d/straight/build/org/org-plot hides /usr/local/share/emacs/27.0.91/lisp/org/org-plot /home/aaronjensen/.emacs.d/straight/build/org/org-num hides /usr/local/share/emacs/27.0.91/lisp/org/org-num /home/aaronjensen/.emacs.d/straight/build/org/ob-plantuml hides /usr/local/share/emacs/27.0.91/lisp/org/ob-plantuml /home/aaronjensen/.emacs.d/straight/build/org/org-table hides /usr/local/share/emacs/27.0.91/lisp/org/org-table /home/aaronjensen/.emacs.d/straight/build/org/ob-haskell hides /usr/local/share/emacs/27.0.91/lisp/org/ob-haskell /home/aaronjensen/.emacs.d/straight/build/org/ox-org hides /usr/local/share/emacs/27.0.91/lisp/org/ox-org /home/aaronjensen/.emacs.d/straight/build/org/ob-js hides /usr/local/share/emacs/27.0.91/lisp/org/ob-js /home/aaronjensen/.emacs.d/straight/build/org/ox-texinfo hides /usr/local/share/emacs/27.0.91/lisp/org/ox-texinfo /home/aaronjensen/.emacs.d/straight/build/org/org-attach-git hides /usr/local/share/emacs/27.0.91/lisp/org/org-attach-git /home/aaronjensen/.emacs.d/straight/build/org/ob-J hides /usr/local/share/emacs/27.0.91/lisp/org/ob-J /home/aaronjensen/.emacs.d/straight/build/org/ob-css hides /usr/local/share/emacs/27.0.91/lisp/org/ob-css /home/aaronjensen/.emacs.d/straight/build/org/org-protocol hides /usr/local/share/emacs/27.0.91/lisp/org/org-protocol /home/aaronjensen/.emacs.d/straight/build/org/ob-io hides /usr/local/share/emacs/27.0.91/lisp/org/ob-io /home/aaronjensen/.emacs.d/straight/build/org/ob-processing hides /usr/local/share/emacs/27.0.91/lisp/org/ob-processing /home/aaronjensen/.emacs.d/straight/build/org/ob-makefile hides /usr/local/share/emacs/27.0.91/lisp/org/ob-makefile /home/aaronjensen/.emacs.d/straight/build/org/ob-asymptote hides /usr/local/share/emacs/27.0.91/lisp/org/ob-asymptote /home/aaronjensen/.emacs.d/straight/build/org/ob-mscgen hides /usr/local/share/emacs/27.0.91/lisp/org/ob-mscgen /home/aaronjensen/.emacs.d/straight/build/org/ol-bibtex hides /usr/local/share/emacs/27.0.91/lisp/org/ol-bibtex /home/aaronjensen/.emacs.d/straight/build/org/org-datetree hides /usr/local/share/emacs/27.0.91/lisp/org/org-datetree /home/aaronjensen/.emacs.d/straight/build/org/org-agenda hides /usr/local/share/emacs/27.0.91/lisp/org/org-agenda /home/aaronjensen/.emacs.d/straight/build/org/ox-man hides /usr/local/share/emacs/27.0.91/lisp/org/ox-man /home/aaronjensen/.emacs.d/straight/build/org/org-indent hides /usr/local/share/emacs/27.0.91/lisp/org/org-indent /home/aaronjensen/.emacs.d/straight/build/org/ob-groovy hides /usr/local/share/emacs/27.0.91/lisp/org/ob-groovy /home/aaronjensen/.emacs.d/straight/build/org/ob-lua hides /usr/local/share/emacs/27.0.91/lisp/org/ob-lua /home/aaronjensen/.emacs.d/straight/build/org/org-inlinetask hides /usr/local/share/emacs/27.0.91/lisp/org/org-inlinetask /home/aaronjensen/.emacs.d/straight/build/org/ob hides /usr/local/share/emacs/27.0.91/lisp/org/ob /home/aaronjensen/.emacs.d/straight/build/org/org-timer hides /usr/local/share/emacs/27.0.91/lisp/org/org-timer /home/aaronjensen/.emacs.d/straight/build/org/ox-latex hides /usr/local/share/emacs/27.0.91/lisp/org/ox-latex /home/aaronjensen/.emacs.d/straight/build/org/org-loaddefs hides /usr/local/share/emacs/27.0.91/lisp/org/org-loaddefs /home/aaronjensen/.emacs.d/straight/build/org/org-duration hides /usr/local/share/emacs/27.0.91/lisp/org/org-duration /home/aaronjensen/.emacs.d/straight/build/org/ob-clojure hides /usr/local/share/emacs/27.0.91/lisp/org/ob-clojure /home/aaronjensen/.emacs.d/straight/build/org/org-faces hides /usr/local/share/emacs/27.0.91/lisp/org/org-faces /home/aaronjensen/.emacs.d/straight/build/org/ol-mhe hides /usr/local/share/emacs/27.0.91/lisp/org/ol-mhe /home/aaronjensen/.emacs.d/straight/build/org/ob-java hides /usr/local/share/emacs/27.0.91/lisp/org/ob-java /home/aaronjensen/.emacs.d/straight/build/org/ol-docview hides /usr/local/share/emacs/27.0.91/lisp/org/ol-docview /home/aaronjensen/.emacs.d/straight/build/org/ob-eval hides /usr/local/share/emacs/27.0.91/lisp/org/ob-eval /home/aaronjensen/.emacs.d/straight/build/org/ob-eshell hides /usr/local/share/emacs/27.0.91/lisp/org/ob-eshell /home/aaronjensen/.emacs.d/straight/build/org/ol-irc hides /usr/local/share/emacs/27.0.91/lisp/org/ol-irc /home/aaronjensen/.emacs.d/straight/build/org/org-archive hides /usr/local/share/emacs/27.0.91/lisp/org/org-archive /home/aaronjensen/.emacs.d/straight/build/let-alist/let-alist hides /usr/local/share/emacs/27.0.91/lisp/emacs-lisp/let-alist Features: (shadow sort mail-extr emacsbug sendmail appt diary-lib diary-loaddefs org-duration ol-eww ol-rmail ol-mhe ol-irc ol-info ol-gnus nnir gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m ffap tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat parse-time iso8601 ls-lisp magit-bookmark bookmark bug-reference mule-util wgrep sql json-mode json-reformat json-snatcher smartparens-javascript js smartparens-c cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs smartparens-lua lua-mode sh-script vc-mtn vc-hg org-agenda executable restart-emacs desktop frameset evil-magit magit-submodule magit-obsolete magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit package url-handlers magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode vc-git diff-mode magit-core magit-autorevert magit-margin magit-transient magit-process magit-mode git-commit transient magit-git magit-section magit-utils crm log-edit message rfc822 mml mml-sec epa epg epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader pcvs-util add-log with-editor async-bytecomp company-lsp eval-sexp-fu eros lispyville lispy hydra lispy-inline avy lispy-tags mode-local elisp-def ert pp evil-collection-debug debug sotlisp skeleton org-eldoc orgonomic form-feed eww shr svg mm-url gnus nnheader gnus-util rmail rmail-loaddefs text-property-search mail-utils url-queue browse-url vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc vc-dispatcher company-oddmuse company-keywords company-etags etags fileloop company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-bbdb lsp-ui lsp-ui-flycheck lsp-ui-doc goto-addr lsp-ui-imenu lsp-ui-peek lsp-ui-sideline flycheck company-posframe company-prescient company-tng company view lsp-sqls lsp-yaml lsp-xml lsp-vhdl lsp-vetur lsp-html lsp-verilog lsp-terraform lsp-solargraph lsp-serenata lsp-rust lsp-pyls lsp-pwsh lsp-perl lsp-json lsp-intelephense lsp-haxe lsp-go lsp-gdscript lsp-fsharp lsp-eslint lsp-erlang lsp-elm lsp-css lsp-csharp gnutls lsp-clojure lsp-clients lsp-mode lv lsp-protocol spinner network-stream smartparens-markdown markdown-mode ht ewoc em-glob esh-util bindat evil-ruby-text-objects rspec-mode ruby-refactor ruby-mode smie smartparens-ruby enh-ruby-mode paren hide-mode-line popup-mode-core yasnippet popup-mode-hacks winner dtrt-indent evil-nerd-commenter evil-nerd-commenter-operator evil-nerd-commenter-sdk smartparens-html sgml-mode dom evil-visualstar autorevert filenotify ivy-rich ivy-prescient counsel-projectile counsel xdg evil-collection-xref xref project swiper ivy-posframe posframe ivy ivy-faces ivy-overlay colir color persp-projectile perspective ido projectile grep compile ibuf-ext better-jumper smartparens-config smartparens-org smartparens-text smartparens evil-collection-ibuffer evil-traces evil-org-agenda evil-org evil-anzu anzu evil-collection-unimpaired evil-collection-which-key evil-collection-profiler evil-collection-helpful evil-collection-help evil-collection-dired evil-collection-edebug evil-collection-custom cus-edit cus-start cus-load evil-collection-process-menu evil-collection annalist evil-mc evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars evil-mc-known-commands evil-mc-common evil-matchit evil-matchit-sdk evil-surround evil evil-integration undo-tree diff evil-maps evil-commands reveal flyspell ispell evil-jumps evil-command-window evil-types evil-search evil-ex evil-macros evil-repeat evil-states evil-core evil-common windmove rect evil-digraphs evil-vars ibuffer ibuffer-loaddefs thingatpt modus-vivendi-theme helpful imenu trace edebug backtrace info-look dash-functional help-fns radix-tree elisp-refs loop dired-subtree dired-hacks-utils dired dired-loaddefs face-remap doom-modeline doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path all-the-icons all-the-icons-faces data-material data-weathericons data-octicons data-fileicons data-faicons data-alltheicons memoize recentf tree-widget wid-edit org-roam org-roam-graph org-roam-doctor org-roam-db emacsql-sqlite3 emacsql emacsql-compiler org-roam-dailies org-roam-capture org-roam-completion org-roam-buffer inline pcase org-roam-macs org-roam-compat f s dash org-element avl-tree generator org-download org-attach org-id url-http url url-proxy url-privacy url-expand url-methods url-history mailcap url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-cookie url-domsuf url-util url-gw nsm rmc puny url-parse auth-source eieio eieio-core eieio-loaddefs password-cache json map url-vars async org-protocol org-capture org-refile org-tempo tempo org-mac-link rx ob-shell shell org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete pcomplete comint ansi-color ring org-list org-faces org-entities time-date noutline outline ob-emacs-lisp ob-core ob-eval org-table ol org-keys org-compat org-macs org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs explain-pause-mode explain-pause-top explain-pause-log-to-socket profiler gcmh server modus-operandi-theme dbus xml gcmh-autoloads explain-pause-mode-autoloads restclient-autoloads vterm-toggle-autoloads vterm-autoloads dumb-jump-autoloads popup-autoloads dockerfile-mode-autoloads yaml-mode-autoloads json-snatcher-autoloads json-reformat-autoloads lua-mode-autoloads ruby-refactor-autoloads rspec-mode-autoloads rufo-autoloads evil-ruby-text-objects-autoloads enh-ruby-mode-autoloads sotlisp-autoloads elisp-def-autoloads lispyville-autoloads lispy-autoloads zoutline-autoloads iedit-autoloads eros-autoloads eval-sexp-fu-autoloads eslintd-fix-autoloads web-mode-autoloads company-lsp-autoloads company-posframe-autoloads company-prescient-autoloads company-autoloads evil-magit-autoloads magit-autoloads git-commit-autoloads with-editor-autoloads transient-autoloads flycheck-autoloads let-alist-autoloads lsp-ui-autoloads lsp-mode-autoloads markdown-mode-autoloads spinner-autoloads ht-autoloads gnuplot-autoloads org-download-autoloads async-autoloads org-journal-autoloads org-gcal-autoloads alert-autoloads log4e-autoloads gntp-autoloads request-deferred-autoloads deferred-autoloads request-autoloads deft-autoloads org-roam-autoloads emacsql-sqlite3-autoloads emacsql-autoloads orgonomic-autoloads org-drill-autoloads persist-autoloads evil-org-autoloads restart-emacs-autoloads better-jumper-autoloads which-key advice ace-window-autoloads buffer-move-autoloads ivy-rich-autoloads ivy-xref-autoloads wgrep-autoloads ivy-posframe-autoloads posframe-autoloads ivy-prescient-autoloads persp-projectile-autoloads perspective-autoloads prescient prescient-autoloads which-key-autoloads popup-mode popup-mode-settings popup-mode-autoloads hide-mode-line-autoloads avy-autoloads yasnippet-autoloads form-feed-autoloads drag-stuff-autoloads smartparens-autoloads dtrt-indent-autoloads ws-butler ws-butler-autoloads evil-anzu-autoloads anzu-autoloads evil-collection-autoloads annalist-autoloads evil-mc-autoloads evil-matchit-autoloads evil-traces-autoloads evil-nerd-commenter-autoloads evil-visualstar-autoloads evil-surround-autoloads evil-autoloads goto-chg-autoloads undo-tree-autoloads counsel-projectile-autoloads counsel-autoloads swiper-autoloads ivy-autoloads projectile-autoloads pkg-info-autoloads epl-autoloads saveplace doom-modeline-autoloads shrink-path-autoloads all-the-icons-autoloads memoize-autoloads modus-operandi-theme-autoloads modus-vivendi-theme-autoloads compdef derived compdef-autoloads helpful-autoloads elisp-refs-autoloads loop-autoloads f-autoloads s-autoloads dash-functional-autoloads dired-subtree-autoloads dired-hacks-utils-autoloads dash-autoloads hydra-autoloads lv-autoloads edmacro kmacro bind-map leader-key leader-key-autoloads bind-map-autoloads delsel savehist xt-mouse no-littering no-littering-autoloads finder-inf bind-key easy-mmode org-autoloads org-version el-patch-autoloads cl-seq use-package-autoloads bind-key-autoloads straight-autoloads info cl-extra help-mode easymenu seq byte-opt straight subr-x cl-macs gv bytecomp byte-compile cconv cl-loaddefs cl-lib 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 tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer 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 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 threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 709518 827723) (symbols 48 63320 464) (strings 32 214735 107138) (string-bytes 1 7450854) (vectors 16 119221) (vector-slots 8 2327211 954848) (floats 8 1620 4237) (intervals 56 2755 1746) (buffers 1000 26)) Aaron
I'm going to try using --with-cairo for a bit to see if that helps. Aaron
[-- Attachment #1: Type: text/plain, Size: 197 bytes --] Forgot to attach a screenshot. Aaron On Mon, Jul 20, 2020 at 6:41 PM Aaron Jensen <aaronjensen@gmail.com> wrote: > > I'm going to try using --with-cairo for a bit to see if that helps. > > Aaron [-- Attachment #2: Screenshot from 2020-07-20 18-28-30.png --] [-- Type: image/png, Size: 52984 bytes --]
> From: Aaron Jensen <aaronjensen@gmail.com>
> Date: Mon, 20 Jul 2020 18:36:23 -0700
>
> Unfortunately, the repro isn't clear, but after using Emacs for some
> time, the left side of the hollow box point will end up being slightly
> thicker than the right side. After this happens, when the point is
> moved, it will leave a faint line on the left side of the point.
> Restarting emacs will cause the point to be a uniform box.
I've scanned the X implementation of the hollow box, and couldn't find
where it does something that depends on HiDPI. Can you spot anything
like that?
[-- Attachment #1: Type: text/plain, Size: 2467 bytes --] I've been affected by this issue for some years, only on Linux to my recollection, across multiple Emacs versions (26, 27, 28), and with the same behavior described by Aaron. After some time using Emacs---the trigger is unclear---Emacs enters a state where the hollow box cursor is drawn incorrectly. Specifically, the lines of the hollow box cursor are drawn with a thickness of 2 pixels rather than 1 pixel. To make things a bit more confusing, only the bottom, left, and right lines of the hollow box experience this. I believe this is because the rectangle drawing is clipped to the current glyph row (though not the current glyph column), so the extra pixels on the top fall outside the clip region and get dropped. Here are screenshots showing the behavior at a pixel level, for comparison: https://imgur.com/a/L84ekeS The relevant code is in the function x_draw_hollow_cursor, here: https://github.com/emacs-mirror/emacs/blob/96dd0196c28bc36779584e47fffcca433c9309cd/src/xterm.c#L9234 By compiling Emacs with debugging symbols and stepping through x_draw_hollow_cursor with GDB, I verified that all the arguments passed to XDrawRectangle (via x_draw_rectangle) are identical between an instance of Emacs exhibiting the bug and one that is fine. I've attached a patch that appears to resolve the problem for me. What we are doing in this patch is overriding the graphics context configuration so that line_width is set to 1, rather than the default of 0. There is somewhat detailed documentation from xlib on the meaning of the line_width argument, and how to set it via XChangeGC, here: https://tronche.com/gui/x/xlib/GC/manipulating.html In short, a line_width of 0 means "draw a line of width 1 pixel, but use a device-dependent algorithm to do so, which may have higher performance". Unlike setting line_width to 1, setting it to 0 does not make any guarantees about the exact pixels that are rendered as part of the line. Apparently, there is a bug in the X server's device-dependent graphics code, or perhaps the graphics driver, which causes the "device-dependent algorithm" to be buggy under some circumstances, and draw a line of width 2 when a line of width 1 is requested. Other interesting behavior: If I set line_width explicitly to 2 rather than to 1, then the graphical artifacts mentioned in the initial bug report occur unconditionally, every time a hollow box cursor is rendered. Would this change be appropriate to include in Emacs? [-- Attachment #2: line_width.patch --] [-- Type: application/x-patch, Size: 874 bytes --]
> From: Radon Rosborough <radon.neon@gmail.com> > Date: Sun, 28 Mar 2021 15:21:47 -0700 > > I've attached a patch that appears to resolve the problem for me. > > What we are doing in this patch is overriding the graphics context > configuration so that line_width is set to 1, rather than the default > of 0. There is somewhat detailed documentation from xlib on the > meaning of the line_width argument, and how to set it via XChangeGC, > here: https://tronche.com/gui/x/xlib/GC/manipulating.html > > In short, a line_width of 0 means "draw a line of width 1 pixel, but > use a device-dependent algorithm to do so, which may have higher > performance". Unlike setting line_width to 1, setting it to 0 does not > make any guarantees about the exact pixels that are rendered as part > of the line. Apparently, there is a bug in the X server's > device-dependent graphics code, or perhaps the graphics driver, which > causes the "device-dependent algorithm" to be buggy under some > circumstances, and draw a line of width 2 when a line of width 1 is > requested. Since this happens for unknown reasons, most probably some misfeature of the X server, the change to use an explicit line thickness is a debugging device. As such, it shouldn't be the default; instead, let's have a Lisp variable that gives the thickness, by default zero, and let users affected by this issue set the variable to whatever value that fixes the problem. > Other interesting behavior: If I set line_width explicitly to 2 rather > than to 1, then the graphical artifacts mentioned in the initial bug > report occur unconditionally, every time a hollow box cursor is > rendered. I cannot see anything when I go to the URL you posted, just a blank screen (a frequent problem with imgur.com), so I don't think I understand what "artifacts" are you alluding to. Does Emacs leave traces of the hollow cursor when it moves it to another location? Or are you alluding to the different thickness of some of the borders of the cursor? Thanks.
[-- Attachment #1.1: Type: text/plain, Size: 107 bytes --] The Imgur images look fine to me, but I've attached them to this email additionally, for your convenience. [-- Attachment #1.2: Type: text/html, Size: 149 bytes --] [-- Attachment #2: screenshot1.png --] [-- Type: image/png, Size: 2518 bytes --] [-- Attachment #3: screenshot2.png --] [-- Type: image/png, Size: 3512 bytes --]
Eli Zaretskii <eliz@gnu.org> writes: > Since this happens for unknown reasons, most probably some misfeature > of the X server, the change to use an explicit line thickness is a > debugging device. As such, it shouldn't be the default; instead, > let's have a Lisp variable that gives the thickness, by default zero, > and let users affected by this issue set the variable to whatever > value that fixes the problem. The patch fixes an issue under some X implementations, and doesn't seem to have any negative effects (that I can see), so I've applied Rodon's patch. Allowing users to control the width of the lines sounds like a nice feature, but I don't think anybody's requested it, so I'm not sure holding up fixing this bug warrants waiting for that to be implemented. It's easy enough to implement in xterm.c, but (for instance) the Windows implementation uses FrameRect, which doesn't allow specifying the line thickness? I'd rather not have a feature divergence here. So I'm closing this bug report. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Radon Rosborough <radon.neon@gmail.com>, 42452@debbugs.gnu.org
> Date: Thu, 13 May 2021 11:44:23 +0200
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > Since this happens for unknown reasons, most probably some misfeature
> > of the X server, the change to use an explicit line thickness is a
> > debugging device. As such, it shouldn't be the default; instead,
> > let's have a Lisp variable that gives the thickness, by default zero,
> > and let users affected by this issue set the variable to whatever
> > value that fixes the problem.
>
> The patch fixes an issue under some X implementations, and doesn't seem
> to have any negative effects (that I can see), so I've applied Rodon's
> patch.
>
> Allowing users to control the width of the lines sounds like a nice
> feature, but I don't think anybody's requested it, so I'm not sure
> holding up fixing this bug warrants waiting for that to be implemented.
>
> It's easy enough to implement in xterm.c, but (for instance) the Windows
> implementation uses FrameRect, which doesn't allow specifying the line
> thickness? I'd rather not have a feature divergence here.
The problem is only on X, so the variable should be X-specific. It is
not unheard of to have such debugging-related variables be
system-specific.
Eli Zaretskii <eliz@gnu.org> writes: > The problem is only on X, so the variable should be X-specific. It is > not unheard of to have such debugging-related variables be > system-specific. That's true -- and if it was purely a work-around, then I'd see no problems with adding the variable. But in this case, we're talking about allowing customising the line width of the hollow cursor, which sounds like something that people might find useful in general. And I'd really prefer to have that work consistently across all (significant) platforms. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: radon.neon@gmail.com, 42452@debbugs.gnu.org
> Date: Sun, 16 May 2021 15:23:14 +0200
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > The problem is only on X, so the variable should be X-specific. It is
> > not unheard of to have such debugging-related variables be
> > system-specific.
>
> That's true -- and if it was purely a work-around, then I'd see no
> problems with adding the variable. But in this case, we're talking
> about allowing customising the line width of the hollow cursor, which
> sounds like something that people might find useful in general.
No, we are talking about code that no one really understands why it's
needed, and why only on some systems. Which means we also don't
understand whether it could have some adverse effects on some systems.