Subject: 27.1; pixel-scroll-mode is unusable with popular modelines
From: Rudi C <[email-masked]>
To: [email-masked]
Date: Wed, 12 May 2021 16:07:35 +0430
List-Id: <debbugs-submit.debbugs.gnu.org>

pixel-scroll-mode has severe performance issues with some popular
modelines, as documented on:

- https://github.com/seagle0128/doom-modeline/issues/199

- https://github.com/syl20bnr/spacemacs/issues/11549

- https://www.reddit.com/r/emacs/comments/8rml8f/emacs_26_pixelscrollmode_gcs_like_theres_no/

Is this unsolvable? pixel-scroll-mode is critical when one works with
inline images, such as an org-mode workflow where notes are taken using
screenshots. I have tried some alternative non-pixel-scrolling
workarounds, but they aren't in the end usable enough for me.

I am open to experimenting with forks such as
https://github.com/emacs-ng/emacs-ng if they do have this feature.

In GNU Emacs 27.1 (build 1, x86_64-apple-darwin20.3.0, NS
appkit-2022.30 Version 11.2.1 (Build 20D75))
 of 2021-03-13 built on Fereidoons-MacBook-Pro.local
System Description:  macOS 11.2.1

Recent messages:
Quit
Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs-plus@27/27.1/share/info/emacs
 --prefix=/usr/local/Cellar/emacs-plus@27/27.1 --with-xml2 --with-gnutls
 --without-dbus --with-imagemagick --with-modules --with-rsvg
 --with-xwidgets --with-ns --disable-ns-self-contained'

Configured features:
RSVG IMAGEMAGICK GLIB NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB
TOOLKIT_SCROLL_BARS XIM NS MODULES THREADS XWIDGETS JSON PDUMPER LCMS2
GMP

Important settings:
  value of $LC_ALL: en_US.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8

Major mode: Org

Minor modes in effect:
  pdf-occur-global-minor-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  eros-mode: t
  global-anzu-mode: t
  anzu-mode: t
  diff-hl-margin-mode: t
  projectile-mode: t
  whitespace-mode: t
  flycheck-popup-tip-mode: t
  evil-org-mode: t
  org-fragtog-mode: t
  vi-tilde-fringe-mode: t
  org-indent-mode: t
  global-so-long-mode: t
  which-key-mode: t
  better-jumper-mode: t
  better-jumper-local-mode: t
  evil-goggles-mode: t
  evil-escape-mode: t
  evil-snipe-override-mode: t
  evil-snipe-mode: t
  evil-snipe-override-local-mode: t
  evil-snipe-local-mode: t
  gcmh-mode: t
  global-hl-line-mode: t
  hl-line-mode: t
  winner-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  global-undo-fu-session-mode: t
  undo-fu-session-mode: t
  undo-fu-mode: t
  global-flycheck-mode: t
  flycheck-mode: t
  yas-minor-mode: t
  savehist-mode: t
  recentf-mode: t
  doom-modeline-mode: t
  xterm-mouse-mode: t
  ivy-rich-project-root-cache-mode: t
  ivy-rich-mode: t
  ivy-mode: t
  +global-word-wrap-mode: t
  +word-wrap-mode: t
  save-place-mode: t
  global-display-line-numbers-mode: t
  display-line-numbers-mode: t
  company-tng-mode: t
  global-company-mode: t
  company-mode: t
  override-global-mode: t
  toc-org-mode: t
  hl-todo-mode: t
  global-git-commit-mode: t
  global-auto-revert-mode: t
  org-roam-mode: t
  osx-clipboard-mode: t
  ns-auto-titlebar-mode: t
  shell-dirtrack-mode: t
  evil-mode: t
  evil-local-mode: t
  +popup-mode: t
  general-override-mode: t
  global-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
  size-indication-mode: t
  column-number-mode: t
  line-number-mode: t
  global-visual-line-mode: t
  visual-line-mode: t
  transient-mark-mode: t

Load-path shadows:
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/lispy/elpa hides
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/ivy/elpa
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/tablist/tablist
hides /usr/local/share/emacs/site-lisp/tablist/tablist
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/tablist/tablist-filter
hides /usr/local/share/emacs/site-lisp/tablist/tablist-filter
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/jsonrpc/jsonrpc
hides /usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/jsonrpc
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/xref/xref hides
/usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/progmodes/xref
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/project/project
hides /usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/progmodes/project
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/flymake/flymake
hides /usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/progmodes/flymake
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/faceup/faceup
hides /usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/emacs-lisp/faceup
/usr/local/share/emacs/site-lisp/let-alist/let-alist hides
/usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/emacs-lisp/let-alist
/Users/evar/.emacs.d.doom/.local/straight/build-27.1/eldoc/eldoc hides
/usr/local/Cellar/emacs-plus@27/27.1/share/emacs/27.1/lisp/emacs-lisp/eldoc

Features:
(shadow sort emacsbug sendmail mail-extr evil-collection-typescript-mode
typescript-mode timezone org-pdftools pdf-occur pdf-isearch
evil-collection-pdf pdf-tools org-noter drag-stuff elisp-def idlwave
idlwave-help idlw-help elisp-demos evil-collection-indent
evil-collection-helpful helpful trace info-look evil-collection-info
info evil-collection-elisp-refs elisp-refs evil-nerd-commenter
evil-nerd-commenter-operator evil-nerd-commenter-sdk
html-mode-expansions smartparens-html sgml-mode dom vc-hg eglot-jl
evil-collection-eglot eglot array jsonrpc ert evil-collection-help help
evil-collection-flymake flymake-proc flymake warnings js2-refactor
js2r-paredit js2r-conveniences js2r-conditionals js2r-wrapping
js2r-functions js2r-vars js2r-iife js2r-formatting js2r-helpers npm-mode
js2-mode-expansions xref-js2 evil-collection-js2-mode js2-mode
js-mode-expansions smartparens-javascript js diff-hl-flydiff conf-mode
osx-trash evil-collection-image ox-pandoc ht ox-org ox-odt rng-loc
rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns
nxml-enc xmltok nxml-util ox-icalendar ox-ascii ox-md ox-beamer ox-latex
org-re-reveal ox-html table ox-publish ox org-archive
mc-hide-unmatched-lines-mode mc-mark-more mc-cycle-cursors
multiple-cursors-core tabify macrostep-c cmacexp
evil-collection-macrostep macrostep cc-mode-expansions smartparens-c
cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs misc evil-markdown cl-print evil-collection-debug debug
flycheck-cask evil-embrace evil-surround eros highlight-quoted amx
hide-mode-line evil-collection-wdired wdired evil-anzu anzu dired-aux
vc-svn diredfl diff-hl-margin diff-hl-dired diff-hl
evil-collection-log-view log-view evil-collection-vc-dir vc-dir ewoc vc
vc-dispatcher dired-x company-files rainbow-delimiters company-shell
evil-collection-sh-script sh-script smie ffap highlight-numbers
parent-mode dart-mode executable org-crypt nav-flash git-gutter
evil-collection-vc-git vc-git tramp-cache tramp-sh tramp tramp-loaddefs
trampver tramp-integration files-x tramp-compat parse-time iso8601
ls-lisp projectile ibuf-ext evil-collection-ibuffer ibuffer
ibuffer-loaddefs auto-minor-mode disp-table whitespace
flycheck-popup-tip org-eldoc embrace expand-region text-mode-expansions
the-org-mode-expansions er-basic-expansions expand-region-core
expand-region-custom org-super-links evil-org org-fragtog
vi-tilde-fringe highlight-indent-guides org-indent ol-bibtex bibtex
raku-detect so-long cursor-sensor evil-collection-which-key which-key
better-jumper company-yasnippet company-dabbrev-code company-dabbrev
company-capf evil-goggles pulse evil-easymotion evil-escape evil-snipe
gcmh hl-line winner paren ws-butler undo-fu-session undo-fu
flycheck-clj-kondo evil-collection-flycheck flycheck doom-themes-ext-org
tramp-theme em-dirs esh-var esh-mode esh-cmd esh-ext esh-opt esh-proc
esh-io esh-arg esh-module esh-groups esh-util solarized-light-theme
solarized solarized-faces term/xterm xterm desktop frameset face-remap
doom-snippets doom-snippets-lib yasnippet evil-collection-elisp-mode
elisp-mode savehist recentf tree-widget doom-modeline
doom-modeline-segments doom-modeline-env doom-modeline-core shrink-path
.emacs pdf-continuous-scroll-mode pdf-annot evil-collection-tablist
tablist tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw cedet pdf-misc saveplace-pdf-view
pdf-view magit-bookmark evil-collection-bookmark bookmark jka-compr
pdf-cache pdf-info tq pdf-util pdf-macs image-mode exif vlf-setup
google-translate-smooth-ui google-translate google-translate-default-ui
google-translate-core-ui evil-collection-popup popup ido
google-translate-core google-translate-tk google-translate-backend
evil-collection-view view neuron-mode smartparens-markdown markdown-mode
edit-indirect xt-mouse lispyville lispy hydra lv lispy-inline etags
fileloop ivy-xref evil-collection-ivy ivy-avy avy all-the-icons-ivy
all-the-icons all-the-icons-faces data-material data-weathericons
data-octicons data-fileicons data-faicons data-alltheicons ivy-rich
counsel xdg swiper ivy flx delsel ivy-faces ivy-overlay colir color
evil-collection-xref xref project evil-collection-edebug edebug
backtrace help-fns radix-tree lispy-tags mode-local adaptive-wrap
smartparens-config smartparens-text smartparens dtrt-indent saveplace
display-line-numbers night-completion company-tng company
use-package-bind-key bind-key toc-org ob-tmux org-roam-protocol
org-protocol org-drill persist org-agenda orgit
evil-collection-magit-todos magit-todos pcre2el rxt re-builder hl-todo
async evil-collection-grep grep evil-collection-compile compile
github-review ghub-graphql treepy gsexp ghub url-http url-gw nsm
url-auth url url-proxy url-privacy url-expand url-methods url-history
url-cookie url-domsuf url-util mailcap gnutls deferred a
evil-collection-magit magit-autoloads magit-submodule magit-obsolete
magit-popup 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
core-packages package browse-url url-handlers url-parse auth-source json
map url-vars magit-repos magit-apply magit-wip magit-log which-func
evil-collection-imenu imenu magit-diff smerge-mode diff
evil-collection-diff-mode diff-mode git-commit evil-collection-log-edit
log-edit message rmc puny evil-collection-dired dired dired-loaddefs
rfc822 mml mml-sec password-cache evil-collection-epa epa epg epg-config
gnus-util rmail rmail-loaddefs text-property-search mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums
mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log
magit-core magit-autorevert autorevert filenotify magit-margin
magit-transient magit-process with-editor server magit-mode transient
help-mode magit-git magit-section magit-utils crm org-roam org-roam-link
org-roam-graph xml org-roam-doctor org-roam-dailies org-roam-capture
org-roam-db emacsql-sqlite3 emacsql emacsql-compiler org-capture
org-roam-completion org-roam-buffer org-roam-faces org-roam-macs
org-roam-compat org-id org-refile smartparens-org org-yt org-element
avl-tree generator org org-macro org-footnote org-pcomplete org-list
org-faces org-entities time-date noutline outline org-version
ob-emacs-lisp org-table org-loaddefs find-func evil-collection-calendar
evil-collection-custom cus-edit cus-start cus-load wid-edit
evil-collection-comint evil-collection annalist cal-menu calendar
cal-loaddefs eieio eieio-core eieio-loaddefs ob-shell ob ob-tangle ol
org-src ob-ref ob-lob ob-table ob-exp ob-comint ob-core ob-eval org-keys
org-compat org-macs format-spec fzf osx-clipboard f dash s
ns-auto-titlebar let-alist smartparens-lua evil evil-integration
evil-maps evil-commands reveal flyspell ispell evil-jumps
evil-command-window evil-types evil-search shell pcomplete comint
ansi-color evil-macros evil-repeat evil-states evil-core advice
evil-common windmove thingatpt rect evil-digraphs evil-vars ring derived
core-editor core-projects core-ui edmacro kmacro easy-mmode
core-keybinds pp general cl-extra easymenu seq byte-opt cl-seq
use-package-core bytecomp byte-compile cconv core-modules tex-site rx
proof-site proof-autoloads cl core core-lib pcase cl-macs gv cl-loaddefs
cl-lib subr-x tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-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 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
xwidget-internal kqueue cocoa ns lcms2 multi-tty make-network-process
emacs)

Memory information:
((conses 16 2562794 1368001)
 (symbols 48 72974 4)
 (strings 32 288739 170030)
 (string-bytes 1 10095640)
 (vectors 16 336750)
 (vector-slots 8 10439187 3314216)
 (floats 8 1317 1928)
 (intervals 56 58572 16876)
 (buffers 1000 121))