emacs/lisp
João Távora a0b5ff9bb7 Rewrite flex completion scoring with Gotoh algorithm
The greedy regexp matching, broken scoring and broken highlight were
sources of frequent complaints about the 'flex' matching style.  This
commit fixes that.

It was inspired by the 'hotfuzz' style available at
https://github.com/axelf4/hotfuzz which is a modified version of Gotoh's
1982 dynamic programming algorithm (see: GOTOH, Osamu. An improved
algorithm for matching biological sequences. Journal of molecular
biology, 1982, 162.3: 705-708.).  That style is slightly more
sophisticated than 'flex' (has special rules for matching things at word
boundaries, a C module with multithreading support).  It's almost (but
not entirely) void of hacks so it'd make a good candidate to replace
'flex' entirely, but no progress has been made in getting it into
Emacs's core in over 2 years, so I thought I'd try my hand at it.

The new 'flex' implementation also uses Gotoh algorithm (apparently
a common choice for these kinds of task) and happens mostly in a new C
function.  It is strictly more correct than the "old" flex.  For
example, when matching the pattern 'goto' to, say, 'eglot--goto' and
'eglot--bol', no longer is the latter returned first, which was a
substantial annoyance.  And of course the highlighting is also correctly
placed on the 'goto' not scattered across the candidate.

Regarding performance, it is faster than the naive 'flex', but that's
mainly because this commit also includes changes to the Elisp code which
make faster regexp's for the filtering step.  It is slower than
'hotfuzz' when that style's C-module extension is leveraged.  'hotfuzz'
does the filtering and sorting steps together in C code and has
multithreaded workers there.  The matching and scoring algorithm itself
is not the bottleneck.

The flex style was completely decoupled from the pcm/substring styles in
lisp/minibuffer.el.  Test code were refactored and more tests were
added.

* src/minibuf.c (completion--flex-cost-gotoh): New function.

* lisp/minibuffer.el (completion-flex--pattern-str): New variable.
(flex-score-match-tightness): Make obsolete.
(completion--flex-all-completions-1): New helper function.
(completion-flex-try-completion, completion-flex-all-completions): Rewrite.
(completion-substring--all-completions): No longer take transform-pattern-fn.
(completion--flex-adjust-metadata): Tweak.
(completion--flex-score, completion--flex-score-1)
(completion--flex-score-last-md, completion-flex--make-flex-pattern): Delete.

* test/lisp/minibuffer-tests.el (completion--sorted-flex-completions):
New helper function.
(completion-flex-test-non-ascii): New test.
(completion--pcm-score): Delete.
(completion-pcm-test-3, completion-pcm-test-4)
(completion-substring-test-1, completion-substring-test-2)
(completion-flex-test-2, completion-flex-test-3): Tweak.
2026-02-07 21:23:19 +00:00
..
calc ; calc: Correct width of rules composed of Unicode glyphs 2026-01-17 14:51:01 +02:00
calendar Fix inconsistent definition and usage of 'calendar-buffer' 2026-01-24 14:09:59 +02:00
cedet Fix [More] buttons in tutorial and other buttons in Semantic 2026-02-03 05:14:59 +02:00
emacs-lisp shortdoc: Don't burp on missing docstrings 2026-02-04 10:59:23 -05:00
emulation ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
erc Use seq-doseq for iterating over strings in ERC 2026-01-11 05:25:03 -08:00
eshell ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
gnus Call browser functions via `browse-url' 2026-01-20 10:31:03 +00:00
image Refill 'image-dired-display-image-buffer' 2026-01-03 13:22:01 +02:00
international ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
language ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
leim/quail ; Fix last change to iroquoian.el 2026-02-02 00:27:03 +01:00
mail ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
mh-e ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
net Organize tramp-adb-handle-make-process a little bit better 2026-01-27 18:25:05 +01:00
nxml ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
obsolete ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
org ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
play ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
progmodes Eglot: fix thinko in eglot--async-request 2026-02-05 22:39:19 +00:00
term (xterm--init): Fix probem in async mode (bug#80163) 2026-01-20 22:46:31 -05:00
textmodes (yaml-ts-mode-yamllint-options): Use a list of strings 2026-02-04 11:03:57 -05:00
url ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
use-package ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
vc ; diff--revert-kill-hunks: Hoist binding inhibit-read-only. 2026-02-05 12:24:05 +00:00
abbrev.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
align.el Fix last change in align.el 2026-02-05 10:56:51 +02:00
allout-widgets.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
allout.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ansi-color.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ansi-osc.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
apropos.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
arc-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
array.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
auth-source-pass.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
auth-source.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
autoinsert.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
autorevert.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
avoid.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
battery.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
bind-key.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
bindings.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
bookmark.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
bs.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
buff-menu.el Fix buffer menu unmark (bug#80082) 2026-01-13 20:49:03 +02:00
button.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
calculator.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
case-table.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.1 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.2 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.3 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.4 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.5 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.6 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.7 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.8 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.9 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.10 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.11 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.12 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.13 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.14 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.15 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.16 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ChangeLog.17 ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
char-fold.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
chistory.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
cmuscheme.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
color.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
comint.el * lisp/comint.el (comint-redirect-hook): Defvar (bug#80313) 2026-02-04 11:14:10 -05:00
completion-preview.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
completion.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
composite.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
COPYING
cus-dep.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
cus-edit.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
cus-face.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
cus-start.el ; Improve last change 2026-01-26 14:29:47 +02:00
cus-theme.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
custom.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dabbrev.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
delim-col.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
delsel.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
descr-text.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
desktop.el Fix desktop saving and restoring in daemon sessions 2026-02-01 08:49:57 +02:00
dframe.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dired-aux.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dired-x.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dired.el Fix support of listing switches with whitespace in Dired 2026-01-24 15:39:11 +02:00
dirtrack.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
disp-table.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
display-fill-column-indicator.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
display-line-numbers.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dnd.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
doc-view.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dom.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dos-fns.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dos-vars.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dos-w32.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
double.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
dynamic-setting.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ebuff-menu.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ecomplete.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
editorconfig-conf-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
editorconfig-core-handle.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
editorconfig-core.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
editorconfig-fnmatch.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
editorconfig-tools.el ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
editorconfig.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
edmacro.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ehelp.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
elec-pair.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
electric.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
elide-head.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
emacs-lock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
env.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa-dired.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa-file.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa-hook.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa-ks.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa-mail.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epa.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epg-config.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
epg.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
expand.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
external-completion.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ezimage.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
face-remap.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
facemenu.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
faces.el ; Fix a recent change of tab-bar/line faces 2026-01-12 15:10:59 +02:00
ffap.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
filecache.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
fileloop.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
filenotify.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
files-x.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
files.el ; * lisp/files.el (file-name-version-regexp): typo in doc string 2026-01-27 15:30:21 +01:00
filesets.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
find-cmd.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
find-dired.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
find-file.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
find-lisp.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
finder.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
flow-ctrl.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
foldout.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
follow.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
font-core.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
font-lock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
format-spec.el ; * lisp/format-spec.el (format-spec): Doc fix. (Bug#80078) 2026-01-03 14:21:19 +02:00
format.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
forms.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
frame.el Document frame id related commands and tweak a return value (Bug#80192) 2026-01-27 10:23:34 +01:00
frameset.el Fix desktop saving and restoring in daemon sessions 2026-02-01 08:49:57 +02:00
fringe.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
generic-x.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
help-at-pt.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
help-fns.el ; Fix documentation of 'help-fns-describe-function-functions' 2026-01-31 12:59:17 +02:00
help-macro.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
help-mode.el Fix [More] buttons in tutorial and other buttons in Semantic 2026-02-03 05:14:59 +02:00
help.el Bind 'apropos-user-option' to C-h u 2026-01-10 12:38:05 +01:00
hex-util.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hexl.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hfy-cmap.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hi-lock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hilit-chg.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hippie-exp.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
hl-line.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
htmlfontify.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ibuf-ext.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ibuf-macs.el (define-ibuffer-column): Fix corner case miscompilations (bug#80180) 2026-01-14 16:52:09 -05:00
ibuffer.el Avoid byte-compiled code in `ibuffer-maybe-show-predicates' value (bug#80117) 2026-01-11 22:31:49 +13:00
icomplete.el New key 'M-j' for 'icomplete-mode' (bug#62108) 2026-01-30 09:27:12 +02:00
ido.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ielm.el Fix behavior for ielm-dynamic-multiline-inputs (bug#80123) 2026-01-15 11:12:12 +00:00
iimage.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
image-file.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
image-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
image.el Improve (WebP) image animation 2026-01-24 19:37:30 +01:00
imenu.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
indent-aux.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
indent.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
info-look.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
info-xref.el ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
info.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
informat.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
isearch.el isearch.el: Remove autoloads hacks 2026-02-02 17:42:40 -05:00
isearchb.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
jit-lock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
jka-cmpr-hook.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
jka-compr.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
json.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
jsonrpc.el Jsonrpc: avoid redisplay_internal calls from jsonrpc-request 2026-01-26 22:57:09 +00:00
keymap.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
kmacro.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ldefs-boot.el ; * lisp/ldefs-boot.el: Regenerate. 2026-01-29 17:03:58 +00:00
loadhist.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
loadup.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
locate.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
lpr.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ls-lisp.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
macros.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
Makefile.in ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
man.el ; Fix messages in "M-x man" 2026-01-18 14:36:51 +02:00
master.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mb-depth.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
md4.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
menu-bar.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
midnight.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
minibuf-eldef.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
minibuffer.el Rewrite flex completion scoring with Gotoh algorithm 2026-02-07 21:23:19 +00:00
misc.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
misearch.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mouse-copy.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mouse-drag.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mouse.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mpc.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
msb.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
mwheel.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
newcomment.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
notifications.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
novice.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
obarray.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
outline.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
paren.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
password-cache.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-cvs.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-git.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-gnu.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-linux.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-rpm.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-unix.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcmpl-x.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pcomplete.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pgtk-dnd.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pixel-scroll.el pixel-scroll: Avoid loading `cua-base' 2026-01-31 11:01:02 +02:00
plstore.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
printing.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
proced.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
profiler.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ps-bdf.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ps-mule.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ps-print.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ps-samp.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
pulse.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
README
recentf.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
rect.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
register.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
registry.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
repeat.el repeat: handle non-character keys with hint strings 2026-01-04 18:56:19 -05:00
replace.el New key 'M-j' for 'icomplete-mode' (bug#62108) 2026-01-30 09:27:12 +02:00
reposition.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
reveal.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
rfn-eshadow.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ring-bell-fns.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
rot13.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
rtree.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ruler-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
savehist.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
saveplace.el save-place-alist-to-file: Use prin1, not pp (bug#80183) 2026-01-12 09:59:40 +00:00
scroll-all.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
scroll-bar.el ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
scroll-lock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
select.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
send-to.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
server.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
ses.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
shadowfile.el shadowfile.el uses eqhemeral buffer names now 2026-01-07 10:08:45 +01:00
shell.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
simple.el Support cons cell for 'line-spacing' 2026-01-24 13:32:44 +02:00
skeleton.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
so-long.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
sort.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
soundex.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
speedbar.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
sqlite-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
sqlite.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
startup.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
strokes.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
subr.el ; * lisp/subr.el (take-while): bytecode micro-optimisation 2026-02-05 17:36:17 +01:00
svg.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
system-taskbar.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
t-mouse.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tab-bar.el ; Remove "--" from the name of autoloaded 'window--get-split-combination' 2026-01-22 20:09:47 +02:00
tab-line.el ; Fix a recent change of tab-bar/line faces 2026-01-12 15:10:59 +02:00
tabify.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
talk.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tar-mode.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tempo.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
term.el Fix updating buffer menu after invoking "M-x term" 2026-01-21 17:37:33 +02:00
thingatpt.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
thread.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
time-stamp.el ; time-stamp-inserts-lines: Clearer doc string 2026-01-05 15:53:47 -08:00
time.el display-time: Add option to customize help-echo format 2026-01-31 12:12:21 +02:00
timezone.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tmm.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tool-bar.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tooltip.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
touch-screen.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
transient.el Update to Transient v0.12.0-15-gfe5214e6 2026-01-04 17:52:30 +01:00
tree-widget.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
treesit-x.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
treesit.el hideshow: Reword documentation (bug#80116) 2026-01-10 14:55:55 +02:00
tty-tip.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
tutorial.el Fix [More] buttons in tutorial and other buttons in Semantic 2026-02-03 05:14:59 +02:00
type-break.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
uniquify.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
userlock.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
vcursor.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
version.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
view.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
visual-wrap.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
w32-fns.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
w32-vars.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
wdired.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
which-key.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
whitespace.el ; whitespace-global-modes: Replace "automagically". 2026-01-12 10:38:29 +00:00
wid-browse.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
wid-edit.el Make tty default face show the face widget in customize 2026-01-03 13:55:19 +02:00
widget.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
windmove.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
window-tool-bar.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
window-x.el ; Remove "--" from the name of autoloaded 'window--get-split-combination' 2026-01-22 20:09:47 +02:00
window.el ; * lisp/window.el (window--frame-landscape-p): Tweak wording. 2026-02-05 12:18:54 +00:00
winner.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
woman.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
x-dnd.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
xdg.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
xml.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
xt-mouse.el ; Add 2026 to copyright years. 2026-01-01 12:54:34 +00:00
xwidget.el ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00
yank-media.el ; Remove redundant cl-lib runtime dependencies across lisp/ 2026-01-17 15:32:15 +02:00

This directory contains source code for the parts of Emacs that are
written in Emacs Lisp.  *.el files are Emacs Lisp source, and the
corresponding *.elc files are byte-compiled versions.  Byte-compiled
files are architecture-independent.

The term subdirectory contains Lisp files that customize Emacs for
certain terminal types.  When Emacs starts, it checks the TERM
environment variable to get the terminal type and loads
'term/${TERM}.el' if it exists.

The other subdirectories hold Lisp packages grouped by their general
purpose.