Subject: bug#74230: closed (Re: bug#74230: 30.0.92; eshell-emit-prompt clobbers text properties)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 14 Nov 2024 18:35:02 +0000

Your bug report

#74230: 30.0.92; eshell-emit-prompt clobbers text properties

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
74230: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=74230
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#74230: 30.0.92; eshell-emit-prompt clobbers text properties
From: Jim Porter <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Thu, 14 Nov 2024 10:33:18 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

On 11/14/2024 12:52 AM, Eli Zaretskii wrote:
>> Date: Thu, 7 Nov 2024 10:16:16 -0800
>> Cc: [email-masked]
>> From: Jim Porter <[email-masked]>
>>
>> Personally, I'd be ok with having this be a known bug (there's a
>> workaround for Emacs 30) and fixing it on master. But if you think this
>> change is ok for the release branch, I'd also be ok with installing
>> there; then people don't need to deal with the workaround.
> 
> I agree, let's fix this on master.

Sounds good to me. I've therefore merged my patch to the master branch 
as df288d2e414, so closing this bug.

If we think this issue is important enough to fix for Emacs 30, I 
suppose we could consider backporting my patch for the (hypothetical) 
30.2 release after 30.1 is tagged. Then users could get the fix a bit 
faster, and we wouldn't be adding last-minute changes to 30.1. I don't 
have a strong opinion on whether to do this or not though.

Subject: 30.0.92; eshell-emit-prompt clobbers text properties
From: Ashton Wiersdorf <[email-masked]>
To: [email-masked]
Date: Wed, 06 Nov 2024 11:21:01 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi there,

I like configuring my eshell prompt like so: (this has been tested 
with emacs -Q)

    (defun fancy-shell ()
      "A pretty shell with git status"
      (let* ((cwd (abbreviate-file-name (eshell/pwd)))
             (ref "main") ; usually calls out to magit to get the 
             current refname
             (stat t)
             (x-stat eshell-last-command-status)
             (git-chunk
              (if ref
                  (format "%s%s%s "
                          (propertize (if stat "[" "(") 
                          'font-lock-face (list :foreground (if 
                          stat "red" "green")))
                          (propertize ref 'font-lock-face 
                          '(:foreground "yellow"))
                          (propertize (if stat "]" ")") 
                          'font-lock-face (list :foreground (if 
                          stat "red" "green"))))
                "")))
        (propertize
         (format "%s %s %s$ "
                 (if (< 0 x-stat) (format (propertize "!%s" 
                 'font-lock-face '(:foreground "red")) x-stat)
                   (propertize "➤" 'font-lock-face (list 
                   :foreground (if (< 0 x-stat) "red" "green"))))
                 (propertize cwd 'font-lock-face '(:foreground 
                 "#45babf"))
                 git-chunk)
         'read-only t
         'front-sticky   '(font-lock-face read-only)
         'rear-nonsticky '(font-lock-face read-only))))
    
    (setopt eshell-prompt-function 'fancy-shell)
    (setopt eshell-highlight-prompt nil)

This worked perfectly in Emacs 29.4. However, in Emacs 30.0.92, I 
cannot
type any text any more. This appears to be an issue with the 
function
`eshell-emit-prompt'.

In Emacs 29.4, the function did *not* overwrite the text 
properties of
the prompt `rear-nonsticky (read-only)`. The new version 
overwrites the
rear-nonsticky property so that it is only `(field)`.

If I set `eshell-highlight-prompt' to `t', then I get the 
read-only
behavior that I want, but now I cannot get the pleasant component
highlighting that `fancy-shell' is meant to provide.

You probably know a better solution, but I would like that either 
the
text properties that `eshell-prompt-function' do *not* get 
clobbered
like this, or that `read-only' get added to the `front-sticky' and
`rear-nonsticky' text properties, and `read-only' set to `t'.

For example, this does what I want:

    (defun eshell-emit-prompt ()
      "Emit a prompt if eshell is being used interactively."
      (when (boundp 'ansi-color-context-region)
        (setq ansi-color-context-region nil))
      (run-hooks 'eshell-before-prompt-hook)
      (if (not eshell-prompt-function)
          (set-marker eshell-last-output-end (point))
        (let ((prompt (funcall eshell-prompt-function)))
          (add-text-properties
           0 (length prompt)
           (if eshell-highlight-prompt
               '( read-only t
                  field prompt
                  font-lock-face eshell-prompt
                  front-sticky (read-only field font-lock-face)
                  rear-nonsticky (read-only field font-lock-face))
             '( field prompt
                read-only t                         ; CHANGE HERE
                front-sticky (read-only field)      ; CHANGE HERE
                rear-nonsticky (read-only field)))  ; CHANGE HERE
           prompt)
          (eshell-interactive-filter nil prompt)))
      (run-hooks 'eshell-after-prompt-hook))

I hope that was helpful; thank you for your time and attention.

In GNU Emacs 30.0.92 (build 2, aarch64-apple-darwin24.1.0, NS
 appkit-2575.20 Version 15.1 (Build 24B83)) of 2024-11-05 built on
 vulcan.local
Windowing system distributor 'Apple', version 10.3.2575
System Description:  macOS 15.1

Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
 --infodir=/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/info/emacs
 --prefix=/opt/homebrew/Cellar/emacs-plus@30/30.0.92 --with-xml2
 --with-gnutls --with-native-compilation=aot 
 --without-compress-install
 --with-dbus --with-imagemagick --with-modules --with-rsvg 
 --with-webp
 --without-pop --with-xwidgets --with-ns 
 --disable-ns-self-contained
 'CFLAGS=-O2 -DFD_SETSIZE=10000 -DDARWIN_UNLIMITED_SELECT
 -I/opt/homebrew/opt/gcc/include 
 -I/opt/homebrew/opt/libgccjit/include'
 'LDFLAGS=-L/opt/homebrew/lib/gcc/14 
 -I/opt/homebrew/opt/gcc/include
 -I/opt/homebrew/opt/libgccjit/include''

Configured features:
ACL DBUS GIF GLIB GMP GNUTLS IMAGEMAGICK JPEG LCMS2 LIBXML2 
MODULES
NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM XWIDGETS ZLIB

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

Major mode: ELisp/l

Minor modes in effect:
  jinx-mode: t
  electric-pair-mode: t
  hl-line-mode: t
  magit-todos-mode: t
  global-git-commit-mode: t
  global-treesit-auto-mode: t
  eat-eshell-visual-command-mode: t
  eat-eshell-mode: t
  corfu-popupinfo-mode: t
  corfu-echo-mode: t
  corfu-history-mode: t
  global-corfu-mode: t
  corfu-mode: t
  marginalia-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  which-key-mode: t
  pulsar-global-mode: t
  pulsar-mode: t
  mlscroll-mode: t
  olivetti-mode: t
  consult-notes-denote-mode: t
  consult-denote-mode: t
  denote-rename-buffer-mode: t
  citar-denote-mode: t
  citar-embark-mode: t
  denote-menu-bar-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  global-evil-collection-unimpaired-mode: t
  evil-collection-unimpaired-mode: t
  global-origami-mode: t
  origami-mode: t
  evil-mode: t
  evil-local-mode: t
  gcmh-mode: t
  puni-mode: t
  windmove-mode: t
  winner-mode: t
  pixel-scroll-precision-mode: t
  global-auto-revert-mode: t
  elpaca-use-package-mode: t
  override-global-mode: t
  display-time-mode: t
  savehist-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: t
  line-number-mode: t
  visual-line-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  hs-minor-mode: t

Load-path shadows:
/Users/ashton/.emacs.d/elpaca/builds/auctex/tex-site hides 
/opt/homebrew/share/emacs/site-lisp/tex-site
/Users/ashton/.emacs.d/elpaca/builds/which-key/which-key hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/which-key
/Users/ashton/.emacs.d/elpaca/builds/transient/transient hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/transient
/Users/ashton/.emacs.d/elpaca/builds/org/ob-comint hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-comint
/Users/ashton/.emacs.d/elpaca/builds/org/ob-exp hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-exp
/Users/ashton/.emacs.d/elpaca/builds/org/org-ctags hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-ctags
/Users/ashton/.emacs.d/elpaca/builds/org/ob-emacs-lisp hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-emacs-lisp
/Users/ashton/.emacs.d/elpaca/builds/org/oc hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc
/Users/ashton/.emacs.d/elpaca/builds/org/ox-texinfo hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-texinfo
/Users/ashton/.emacs.d/elpaca/builds/org/ol-irc hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-irc
/Users/ashton/.emacs.d/elpaca/builds/org/ol-doi hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-doi
/Users/ashton/.emacs.d/elpaca/builds/org/ob hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob
/Users/ashton/.emacs.d/elpaca/builds/org/org-refile hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-refile
/Users/ashton/.emacs.d/elpaca/builds/org/org-version hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-version
/Users/ashton/.emacs.d/elpaca/builds/org/org-num hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-num
/Users/ashton/.emacs.d/elpaca/builds/org/ol-mhe hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-mhe
/Users/ashton/.emacs.d/elpaca/builds/org/ob-shell hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-shell
/Users/ashton/.emacs.d/elpaca/builds/org/org-attach hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-attach
/Users/ashton/.emacs.d/elpaca/builds/org/ob-C hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-C
/Users/ashton/.emacs.d/elpaca/builds/org/org-macs hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-macs
/Users/ashton/.emacs.d/elpaca/builds/org/org-entities hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-entities
/Users/ashton/.emacs.d/elpaca/builds/org/ob-dot hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-dot
/Users/ashton/.emacs.d/elpaca/builds/org/ob-sql hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-sql
/Users/ashton/.emacs.d/elpaca/builds/org/ol-eww hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-eww
/Users/ashton/.emacs.d/elpaca/builds/org/org-datetree hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-datetree
/Users/ashton/.emacs.d/elpaca/builds/org/org-macro hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-macro
/Users/ashton/.emacs.d/elpaca/builds/org/ob-eval hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-eval
/Users/ashton/.emacs.d/elpaca/builds/org/ob-haskell hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-haskell
/Users/ashton/.emacs.d/elpaca/builds/org/ox-org hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-org
/Users/ashton/.emacs.d/elpaca/builds/org/ol-rmail hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-rmail
/Users/ashton/.emacs.d/elpaca/builds/org/ob-awk hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-awk
/Users/ashton/.emacs.d/elpaca/builds/org/ob-groovy hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-groovy
/Users/ashton/.emacs.d/elpaca/builds/org/ox-icalendar hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-icalendar
/Users/ashton/.emacs.d/elpaca/builds/org/ob-octave hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-octave
/Users/ashton/.emacs.d/elpaca/builds/org/ob-scheme hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-scheme
/Users/ashton/.emacs.d/elpaca/builds/org/org-mobile hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-mobile
/Users/ashton/.emacs.d/elpaca/builds/org/ob-processing hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-processing
/Users/ashton/.emacs.d/elpaca/builds/org/oc-biblatex hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc-biblatex
/Users/ashton/.emacs.d/elpaca/builds/org/oc-csl hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc-csl
/Users/ashton/.emacs.d/elpaca/builds/org/org-colview hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-colview
/Users/ashton/.emacs.d/elpaca/builds/org/ob-R hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-R
/Users/ashton/.emacs.d/elpaca/builds/org/org-table hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-table
/Users/ashton/.emacs.d/elpaca/builds/org/ox-html hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-html
/Users/ashton/.emacs.d/elpaca/builds/org/ob-fortran hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-fortran
/Users/ashton/.emacs.d/elpaca/builds/org/ol hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol
/Users/ashton/.emacs.d/elpaca/builds/org/ob-plantuml hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-plantuml
/Users/ashton/.emacs.d/elpaca/builds/org/ol-docview hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-docview
/Users/ashton/.emacs.d/elpaca/builds/org/ob-perl hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-perl
/Users/ashton/.emacs.d/elpaca/builds/org/ob-sqlite hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-sqlite
/Users/ashton/.emacs.d/elpaca/builds/org/oc-basic hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc-basic
/Users/ashton/.emacs.d/elpaca/builds/org/ob-sed hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-sed
/Users/ashton/.emacs.d/elpaca/builds/org/org-fold-core hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-fold-core
/Users/ashton/.emacs.d/elpaca/builds/org/ob-ditaa hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-ditaa
/Users/ashton/.emacs.d/elpaca/builds/org/ob-ruby hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-ruby
/Users/ashton/.emacs.d/elpaca/builds/org/oc-bibtex hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc-bibtex
/Users/ashton/.emacs.d/elpaca/builds/org/org-habit hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-habit
/Users/ashton/.emacs.d/elpaca/builds/org/org-loaddefs hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-loaddefs
/Users/ashton/.emacs.d/elpaca/builds/org/ol-gnus hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-gnus
/Users/ashton/.emacs.d/elpaca/builds/org/ob-screen hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-screen
/Users/ashton/.emacs.d/elpaca/builds/org/org-mouse hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-mouse
/Users/ashton/.emacs.d/elpaca/builds/org/ob-css hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-css
/Users/ashton/.emacs.d/elpaca/builds/org/org-inlinetask hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-inlinetask
/Users/ashton/.emacs.d/elpaca/builds/org/ob-lisp hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-lisp
/Users/ashton/.emacs.d/elpaca/builds/org/ol-eshell hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-eshell
/Users/ashton/.emacs.d/elpaca/builds/org/org-pcomplete hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-pcomplete
/Users/ashton/.emacs.d/elpaca/builds/org/org-lint hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-lint
/Users/ashton/.emacs.d/elpaca/builds/org/org-id hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-id
/Users/ashton/.emacs.d/elpaca/builds/org/org-capture hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-capture
/Users/ashton/.emacs.d/elpaca/builds/org/ob-sass hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-sass
/Users/ashton/.emacs.d/elpaca/builds/org/ob-tangle hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-tangle
/Users/ashton/.emacs.d/elpaca/builds/org/ob-calc hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-calc
/Users/ashton/.emacs.d/elpaca/builds/org/ob-java hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-java
/Users/ashton/.emacs.d/elpaca/builds/org/org-compat hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-compat
/Users/ashton/.emacs.d/elpaca/builds/org/org-attach-git hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-attach-git
/Users/ashton/.emacs.d/elpaca/builds/org/ox-beamer hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-beamer
/Users/ashton/.emacs.d/elpaca/builds/org/org-protocol hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-protocol
/Users/ashton/.emacs.d/elpaca/builds/org/org-element hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-element
/Users/ashton/.emacs.d/elpaca/builds/org/ob-lob hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-lob
/Users/ashton/.emacs.d/elpaca/builds/org/org-tempo hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-tempo
/Users/ashton/.emacs.d/elpaca/builds/org/ob-python hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-python
/Users/ashton/.emacs.d/elpaca/builds/org/ob-latex hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-latex
/Users/ashton/.emacs.d/elpaca/builds/org/ol-w3m hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-w3m
/Users/ashton/.emacs.d/elpaca/builds/org/org-agenda hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-agenda
/Users/ashton/.emacs.d/elpaca/builds/org/org-persist hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-persist
/Users/ashton/.emacs.d/elpaca/builds/org/ob-ocaml hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-ocaml
/Users/ashton/.emacs.d/elpaca/builds/org/ob-ref hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-ref
/Users/ashton/.emacs.d/elpaca/builds/org/org-fold hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-fold
/Users/ashton/.emacs.d/elpaca/builds/org/ob-julia hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-julia
/Users/ashton/.emacs.d/elpaca/builds/org/ob-lilypond hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-lilypond
/Users/ashton/.emacs.d/elpaca/builds/org/ob-table hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-table
/Users/ashton/.emacs.d/elpaca/builds/org/ob-clojure hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-clojure
/Users/ashton/.emacs.d/elpaca/builds/org/org-indent hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-indent
/Users/ashton/.emacs.d/elpaca/builds/org/org-plot hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-plot
/Users/ashton/.emacs.d/elpaca/builds/org/ox-latex hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-latex
/Users/ashton/.emacs.d/elpaca/builds/org/org-src hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-src
/Users/ashton/.emacs.d/elpaca/builds/org/org-duration hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-duration
/Users/ashton/.emacs.d/elpaca/builds/org/ob-makefile hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-makefile
/Users/ashton/.emacs.d/elpaca/builds/org/ol-info hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-info
/Users/ashton/.emacs.d/elpaca/builds/org/org-clock hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-clock
/Users/ashton/.emacs.d/elpaca/builds/org/ob-forth hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-forth
/Users/ashton/.emacs.d/elpaca/builds/org/ox-odt hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-odt
/Users/ashton/.emacs.d/elpaca/builds/org/ol-man hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-man
/Users/ashton/.emacs.d/elpaca/builds/org/ox-publish hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-publish
/Users/ashton/.emacs.d/elpaca/builds/org/org-archive hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-archive
/Users/ashton/.emacs.d/elpaca/builds/org/ob-org hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-org
/Users/ashton/.emacs.d/elpaca/builds/org/ob-lua hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-lua
/Users/ashton/.emacs.d/elpaca/builds/org/org-keys hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-keys
/Users/ashton/.emacs.d/elpaca/builds/org/ob-eshell hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-eshell
/Users/ashton/.emacs.d/elpaca/builds/org/org-faces hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-faces
/Users/ashton/.emacs.d/elpaca/builds/org/ox-man hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-man
/Users/ashton/.emacs.d/elpaca/builds/org/org-list hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-list
/Users/ashton/.emacs.d/elpaca/builds/org/ox-md hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-md
/Users/ashton/.emacs.d/elpaca/builds/org/org-goto hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-goto
/Users/ashton/.emacs.d/elpaca/builds/org/ol-bbdb hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-bbdb
/Users/ashton/.emacs.d/elpaca/builds/org/org hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org
/Users/ashton/.emacs.d/elpaca/builds/org/ol-bibtex hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ol-bibtex
/Users/ashton/.emacs.d/elpaca/builds/org/ox-koma-letter hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-koma-letter
/Users/ashton/.emacs.d/elpaca/builds/org/ox-ascii hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox-ascii
/Users/ashton/.emacs.d/elpaca/builds/org/ob-matlab hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-matlab
/Users/ashton/.emacs.d/elpaca/builds/org/ox hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ox
/Users/ashton/.emacs.d/elpaca/builds/org/org-timer hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-timer
/Users/ashton/.emacs.d/elpaca/builds/org/oc-natbib hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/oc-natbib
/Users/ashton/.emacs.d/elpaca/builds/org/ob-core hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-core
/Users/ashton/.emacs.d/elpaca/builds/org/org-feed hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-feed
/Users/ashton/.emacs.d/elpaca/builds/org/ob-gnuplot hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-gnuplot
/Users/ashton/.emacs.d/elpaca/builds/org/ob-js hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-js
/Users/ashton/.emacs.d/elpaca/builds/org/org-element-ast hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-element-ast
/Users/ashton/.emacs.d/elpaca/builds/org/org-footnote hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-footnote
/Users/ashton/.emacs.d/elpaca/builds/org/ob-maxima hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/ob-maxima
/Users/ashton/.emacs.d/elpaca/builds/org/org-cycle hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-cycle
/Users/ashton/.emacs.d/elpaca/builds/org/org-crypt hides 
/opt/homebrew/Cellar/emacs-plus@30/30.0.92/share/emacs/30.0.92/lisp/org/org-crypt

Features:
(shadow sort adaptive-wrap mail-extr emacsbug tempel find-func
evil-collection-info info cl-print em-rebind em-smart em-tramp 
help-fns
radix-tree misearch multi-isearch vc-git vc-dispatcher hideshow
face-remap jinx elec-pair em-unix em-term em-script em-pred em-ls
em-hist em-glob em-extpipe em-cmpl em-dirs em-basic em-banner 
em-alias
evil-collection-eshell em-prompt evil-collection-forge forge-repos
forge-tablist hl-line forge-topics forge-commands forge-semi
forge-bitbucket buck forge-gogs gogs forge-gitea gtea forge-gitlab 
glab
forge-github ghub-graphql treepy gsexp ghub url-http url-gw nsm 
url-auth
let-alist gnutls forge-notify forge-revnote forge-pullreq 
forge-issue
forge-topic yaml eieio-custom bug-reference forge-post 
markdown-mode
edit-indirect noutline outline forge-repo forge forge-core 
forge-db
closql emacsql-sqlite-common emacsql emacsql-compiler eieio-base
magit-todos pcre2el rxt advice re-builder hl-todo f async grep
evil-collection-magit magit-bookmark magit-submodule 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 imenu 
magit-diff
smerge-mode diff git-commit log-edit message sendmail yank-media 
puny
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util
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 magit-margin
magit-transient magit-process with-editor server magit-mode 
benchmark
magit-git magit-base magit-section cursor-sensor crm eshell 
treesit-auto
combobulate combobulate-go combobulate-json combobulate-yaml
combobulate-css combobulate-js-ts combobulate-python 
combobulate-html
combobulate-toml combobulate-cursor combobulate-query scheme
combobulate-ui transient combobulate-display combobulate-ztree
combobulate-contrib combobulate-envelope combobulate-manipulation 
python
combobulate-procedure combobulate-navigation combobulate-misc
combobulate-setup tempo combobulate-interface combobulate-settings
diff-mode track-changes combobulate-rules typescript-mode cc-mode
cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine 
cc-vars
cc-defs compile esh-mode esh-var esh-cmd generator esh-ext esh-opt
esh-proc esh-io esh-arg esh-module esh-module-loaddefs esh-util 
eat
term/xterm xterm tramp trampver tramp-integration files-x 
tramp-message
tramp-compat xdg parse-time format-spec tramp-loaddefs term 
disp-table
ehelp shell pcomplete comint ansi-osc ansi-color cape kind-icon 
svg-lib
svg dom xml corfu-popupinfo corfu-echo corfu-history corfu 
orderless
symbol-overlay marginalia vertico-multiform vertico which-key avy 
pulsar
pulse color mlscroll olivetti consult-notes-denote consult-notes
consult-denote denote-journal-extras denote-rename-buffer 
citar-denote
citar-embark embark-consult embark ffap all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons citar citar-file
citar-cache citar-format parsebib bibtex iso8601 time-date 
browse-url
denote xref project consult bookmark text-property-search compat
nordic-midnight-theme nordic-night-theme evil-surround
evil-collection-unimpaired evil-collection-eldoc 
evil-collection-dired
evil-collection annalist origami origami-parsers cl s dash evil
evil-integration evil-maps evil-commands reveal evil-jumps
evil-command-window evil-types evil-search evil-ex evil-macros
evil-repeat evil-states evil-core comp comp-cstr warnings comp-run
comp-common evil-common thingatpt rect evil-vars cus-start 
diminish gcmh
tempel-autoloads git-timemachine-autoloads git-modes-autoloads
consult-projectile-autoloads projectile-autoloads forge-autoloads
closql-autoloads emacsql-autoloads ghub-autoloads treepy-autoloads
markdown-mode-autoloads yaml-autoloads magit-delta-autoloads
xterm-color-autoloads blamer-autoloads posframe-autoloads
magit-todos-autoloads async-autoloads hl-todo-autoloads
pcre2el-autoloads apheleia-autoloads rust-mode-autoloads
json-mode-autoloads rx json-snatcher-autoloads web-mode-autoloads
csv-mode-autoloads docker-compose-mode-autoloads 
yaml-mode-autoloads
dockerfile-mode-autoloads go-mode-autoloads elixir-mode-autoloads
treesit-auto-autoloads combobulate-autoloads 
consult-flycheck-autoloads
eglot-booster-autoloads flycheck-autoloads consult-eglot-autoloads
rainbow-mode-autoloads free-keys-autoloads package-lint-autoloads
scribble-mode-autoloads lua-mode-autoloads racket-mode-autoloads
haskell-mode-autoloads typescript-mode-autoloads 
julia-repl-autoloads
eglot-jl-autoloads julia-mode-autoloads company-coq-autoloads
yasnippet-autoloads company-math-autoloads company-autoloads
math-symbol-lists-autoloads proof-general-autoloads proof-site
proof-autoloads idris-mode-autoloads prop-menu-autoloads 
slime-autoloads
macrostep-autoloads eshell-vterm-autoloads eat-autoloads 
vterm-autoloads
message-view-patch-autoloads magit-autoloads 
magit-section-autoloads
with-editor-autoloads mu4e-views-autoloads 
xwidgets-reuse-autoloads
org-mime-autoloads ebdb-autoloads pcmpl-args-autoloads 
cape-autoloads
kind-icon-autoloads svg-lib-autoloads corfu-autoloads
orderless-autoloads all-the-icons-autoloads wgrep-autoloads
embark-consult-autoloads embark-autoloads symbol-overlay-autoloads
marginalia-autoloads vertico-autoloads puni-autoloads
which-key-autoloads ace-window-autoloads avy-autoloads
diminish-autoloads pulsar-autoloads mlscroll-autoloads 
gptel-autoloads
transient-autoloads crdt-autoloads malyon-autoloads 
mastodon-autoloads
request-autoloads persist-autoloads hackernews-autoloads 
nov-autoloads
esxml-autoloads kv-autoloads atomic-chrome-autoloads 
websocket-autoloads
lorem-ipsum-autoloads writegood-mode-autoloads jinx-autoloads
auctex-autoloads tex-site edit-indirect-autoloads 
wc-goal-mode-autoloads
osx-dictionary-autoloads adaptive-wrap-autoloads
writeroom-mode-autoloads visual-fill-column-autoloads 
olivetti-autoloads
deft-autoloads consult-notes-autoloads consult-denote-autoloads
consult-autoloads citar-denote-autoloads denote-autoloads
citar-autoloads citeproc-autoloads f-autoloads queue-autoloads
string-inflection-autoloads parsebib-autoloads pdf-tools-autoloads
tablist-autoloads gnuplot-autoloads corg-autoloads
org-bulletproof-autoloads org-fragtog-autoloads 
ox-pandoc-autoloads
ht-autoloads ox-hugo-autoloads tomelr-autoloads ox-gfm-autoloads
htmlize-autoloads engrave-faces-autoloads ob-racket-autoloads
org-loaddefs nordic-night-theme-autoloads evil-org-autoloads
evil-surround-autoloads evil-nerd-commenter-autoloads
evil-args-autoloads evil-numbers-autoloads 
evil-collection-autoloads
annalist-autoloads evil-autoloads goto-chg-autoloads 
origami-autoloads
s-autoloads dash-autoloads gcmh-autoloads pcase treesit doc-view
jka-compr image-mode exif dired dired-loaddefs edmacro kmacro 
windmove
winner pixel-scroll cua-base ring cl-extra help-mode autorevert
filenotify cus-edit pp cus-load wid-edit elpaca-use-package 
use-package
use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core
elpaca-use-package-autoloads elpaca-log elpaca-ui url url-proxy
url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util url-parse auth-source eieio
eieio-core cl-macs icons password-cache json subr-x map byte-opt 
gv
bytecomp byte-compile url-vars mailcap cl-seq elpaca 
elpaca-process
cl-loaddefs cl-lib elpaca-autoloads time savehist rmc iso-transl 
tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks 
lisp-float-type
elisp-mode 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 easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core 
term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian 
philippine
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 emoji-zwj 
charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray 
oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face 
macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable 
backquote
threads xwidget-internal dbusbind kqueue cocoa ns lcms2 multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 1045386 1178825) (symbols 48 49905 20)
 (strings 32 351480 71515) (string-bytes 1 8452714) (vectors 16 
 87562)
 (vector-slots 8 1759867 513038) (floats 8 987 15307)
 (intervals 56 10261 5742) (buffers 992 26))

-- 
Ashton Wiersdorf
https://lambdaland.org/