Subject: bug#45260: 28.0.50; Maybe flex should only sort when there is no sorting metadata?

From: Omar Antolín Camarena <[email-masked]>
Date: Tue, 15 Dec 2020 12:47:30 -0600

Hi! This is isn't quite a bug report, but more like a technical question
and suggestion.

Briefly, the flex completion style does its own sorting of candidates by
something called "completion-score". It does this by adjusting the
metadata of the completion table to introduce new display-sort-function
and cycle-sort-function properties that sort by completion-score. If the
completion table already had a display-sort-function or a
cycle-sort-function, then the orginal function is called first and then
the result is sorted by completion-score.

I was a little surprised by this last behavior and think the following
is more natural: if the original completion table has *no*
display-sort-function then a new one that does sorting by
completion-score is introduced, but if the original table does have sort
functions, keep those intact! My reasoning is that if a completion table
bothers specifying sort functions, it is probably because they sort
things in a useful order and it's a bad idea to mess with it.

Here's the concrete example where I came across this behavior. Daniel
Mendler is working on a library called consult [1], which provides a
series of commands that rely on completing-read. One of the commands is
consult-line, which prompts you for a line from your current buffer and
jumps to it. The idea, of course, is that depending on your
completion-styles, specifying a line in the buffer with completion might
require typing very little.

The consult-line function sets the display-sort-function and
cycle-sort-function to #'identity in the metadata of the table it hands
to completing read. This is done so that the completions buffer or
icomplete display the matching lines in the order those lines occur in
the buffer. Daniel noticed [2] that under fido-mode the lines became
disordered! I set out to investigate and eventually figured out that
this was because fido-mode overrides the user's setting of
completion-styles setting it to '(flex), and the flex completion styles
uses:

(put 'flex 'completion--adjust-metadata 'completion--flex-adjust-metadata)

to install the completion--flex-adjust-metadata function which modifies
the completion table metadata to compose any existing sort-functions
with one that sorts by completion-score.

Now, I do understand the purpose of flex's sorting by completion-score
and think it does a fair job of making flex more useful. I only wonder
if always sorting by completion-score is a good idea, and propose
instead sorting by completion-score only in the absence of sort-function
metadata.

So, my questions are:

1. Why does flex sort even if there is display/cycle-sort-functions
present? Is there some good reason or use case I'm not seeing?

2. If not, would you consider change completion--flex-adjust-metadata so that it only does the sorting by completion-score in case there is no display/cycle-sort-function metadata present?

[1] Consult, https://github.com/minad/consult
[2] "Candidate order is changed when filtering in fido-mode", https://github.com/minad/consult/issues/57

In GNU Emacs 28.0.50 (build 1, x86_64-w64-mingw32)
 of 2019-12-28 built on W550S
Windowing system distributor 'Microsoft Corp.', version 10.0.19041
System Description: Microsoft Windows 10 Home (v10.0.2004.19041.685)

Recent messages:
Auto-saving...done
Starting new Ispell process c:/Users/Omar/Utils/hunspell/bin/hunspell.exe with default dictionary...done
Checking spelling of OCCURRENCE...
OCCURRENCE is correct
Mark set [2 times]
Auto-saving...done
Saving file c:/Users/Omar/advent-of-code/2020/day15.pl...
Wrote c:/Users/Omar/advent-of-code/2020/day15.pl
Discard unstaged changes in 2020/day15.pl? (y or n) y
Reverting buffer ‘day15.pl’.

Configured using:
 'configure --without-compress-install --without-dbus --with-modules
 'CFLAGS=-O2 -g3''

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY W32NOTIFY ACL GNUTLS LIBXML2
HARFBUZZ ZLIB TOOLKIT_SCROLL_BARS MODULES THREADS JSON PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: en_US
  locale-coding-system: cp1252

Major mode: Lisp Interaction

Minor modes in effect:
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  shell-dirtrack-mode: t
  show-paren-mode: t
  electric-pair-mode: t
  beginend-global-mode: t
  beginend-prog-mode: t
  global-dot-mode: t
  dot-mode: t
  marginalia-mode: t
  minibuffer-electric-default-mode: t
  minibuffer-depth-indicate-mode: t
  gcmh-mode: t
  override-global-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
  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:
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-texinfo hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-texinfo
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-publish hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-publish
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-org hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-org
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-odt hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-odt
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-md hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-md
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-man hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-man
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-latex hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-latex
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-icalendar hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-icalendar
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-html hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-html
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-beamer hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-beamer
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ox-ascii hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ox-ascii
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-version hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-version
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-timer hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-timer
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-tempo hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-tempo
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-table hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-table
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-src hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-src
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-protocol hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-protocol
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-plot hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-plot
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-pcomplete hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-pcomplete
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-num hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-num
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-mouse hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-mouse
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-mobile hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-mobile
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-macs hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-macs
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-macro hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-macro
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-loaddefs hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-loaddefs
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-list hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-list
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-lint hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-lint
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-keys hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-keys
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-install hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-install
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-inlinetask hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-inlinetask
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-indent hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-indent
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-id hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-id
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-habit hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-habit
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-goto hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-goto
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-footnote hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-footnote
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-feed hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-feed
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-faces hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-faces
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-entities hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-entities
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-element hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-element
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-duration hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-duration
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-datetree hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-datetree
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-ctags hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-ctags
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-crypt hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-crypt
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-compat hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-compat
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-colview hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-colview
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-clock hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-clock
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-capture hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-capture
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-attach hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-attach
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-attach-git hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-attach-git
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-archive hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-archive
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/org-agenda hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/org-agenda
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-w3m hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-w3m
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-rmail hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-rmail
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-mhe hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-mhe
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-irc hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-irc
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-info hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-info
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-gnus hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-gnus
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-eww hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-eww
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-eshell hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-eshell
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-docview hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-docview
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-bibtex hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-bibtex
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ol-bbdb hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ol-bbdb
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-vala hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-vala
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-tangle hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-tangle
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-table hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-table
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-stan hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-stan
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-sqlite hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-sqlite
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-sql hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-sql
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-shen hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-shen
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-shell hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-shell
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-sed hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-sed
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-screen hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-screen
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-scheme hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-scheme
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-sass hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-sass
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ruby hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ruby
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ref hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ref
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-R hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-R
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-python hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-python
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-processing hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-processing
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-plantuml hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-plantuml
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-picolisp hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-picolisp
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-perl hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-perl
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-org hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-org
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-octave hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-octave
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ocaml hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ocaml
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-mscgen hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-mscgen
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-maxima hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-maxima
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-matlab hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-matlab
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-makefile hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-makefile
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-lua hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-lua
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-lob hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-lob
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-lisp hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-lisp
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-lilypond hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-lilypond
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ledger hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ledger
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-latex hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-latex
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-js hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-js
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-java hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-java
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-J hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-J
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-io hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-io
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-hledger hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-hledger
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-haskell hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-haskell
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-groovy hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-groovy
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-gnuplot hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-gnuplot
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-fortran hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-fortran
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-forth hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-forth
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-exp hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-exp
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-eval hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-eval
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-eshell hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-eshell
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-emacs-lisp hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-emacs-lisp
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ebnf hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ebnf
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-dot hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-dot
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-ditaa hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-ditaa
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-css hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-css
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-core hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-core
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-coq hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-coq
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-comint hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-comint
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-clojure hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-clojure
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-calc hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-calc
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-C hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-C
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-awk hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-awk
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-asymptote hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-asymptote
c:/Users/Omar/.emacs.d/elpa/org-plus-contrib-20201214/ob-abc hides c:/Users/Omar/emax64/share/emacs/28.0.50/lisp/org/ob-abc

Features:
(shadow sort bbdb-message mailalias bbdb-mua bbdb-com bbdb bbdb-site
timezone mail-extr emacsbug sendmail ispell bug-reference magit-extras
isearch-extras misearch multi-isearch misc misc-text executable vc-git
perl-mode mule-util face-remap 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 magit-repos
magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff
diff-mode magit-core magit-autorevert autorevert filenotify magit-margin
magit-transient magit-process magit-mode git-commit transient magit-git
magit-section magit-utils crm log-edit message rmc puny dired
dired-loaddefs format-spec rfc822 mml mml-sec epa derived epg epg-config
gnus-util rmail rmail-loaddefs text-property-search time-date 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 with-editor async-bytecomp advice async shell
pcomplete server dash email-config markdown-mode rx color noutline
outline comint ansi-color pdf-loader paren elec-pair ace-link avy ring
beginend dot-mode marginalia embark ffap thingatpt icomplete-vertical
icomplete orderless minibuf-eldef mb-depth block-undo imenu
modus-vivendi-theme modus-operandi-theme modus-themes edmacro kmacro
gcmh diminish cl-extra help-mode use-package use-package-ensure
use-package-delight use-package-diminish use-package-bind-key bind-key
easy-mmode use-package-core finder-inf tex-site slime-autoloads info
package easymenu browse-url url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars
term/common-win 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 w32notify w32 lcms2 multi-tty make-network-process
emacs)

Memory information:
((conses 16 405692 178817)
 (symbols 48 25554 3)
 (strings 32 112339 21643)
 (string-bytes 1 3103871)
 (vectors 16 37642)
 (vector-slots 8 472577 106426)
 (floats 8 255 730)
 (intervals 56 765 635)
 (buffers 1000 18))