Since my contributions to "GNU Emacs" are spread over multiple repositories and bug tracking systems, I figured I would aggregate them in my own "tracker". This allows me to keep track of what I'm working on; it can also double as a [[https://jvns.ca/blog/brag-documents/][brag document]] when filtered on =PatchApplied= properties. Speaking of properties, here is the method to the madness: - =Role= :: - =author= :: for topics I raised, - =watcher= :: issues reported by someone else… - I have taken a stab at, - I could take a stab at, if time permits, - I'll tip my hat to whoever solves it, - =PatchApplied= :: whether my patches were applied, - =TestAdded= :: whether I added a unit test, - =Kudos= :: bragging is all well and good, but there's also tons of helpful folks who deserve thanks. Syntax: =CREDIT[&CREDIT…]= - =CREDIT= :: =WHOM[,WHAT[,HOW]]= - =WHOM= :: handle for the credited person; based on (in no particular order) signature, =From= display name or address local part, forge nickname - =WHAT= :: gerund - =HOW= :: =REPO:REVISION= * GNU Emacs ** Build process *** Dump **** DONE [[bug:38492]] Warn pdumper users when pure space has been overflowed :PROPERTIES: :Role: author :Kudos: eliz,fixing :END: *** LEIM **** DONE [[bug:54816]] Silent "Compiler-macro error for cl-member" when building from scratch :PROPERTIES: :Role: author :PatchApplied: t :END: ** Core *** Buffers **** {same,other}-{frame,tab,window}-prefix vs popups ***** TODO directory/file-local validation prompt ***** TODO transient *** Display **** Cairo support ***** DONE [[bug:35781]] Improve font display on Cairo builds :PROPERTIES: :Role: author :Kudos: YAMAMOTO Mitsuharu,fixing :END: ***** DONE [[bug:35871]] Fix SVG transparency with Cairo :PROPERTIES: :Role: author :Kudos: YAMAMOTO Mitsuharu,fixing :END: **** Fonts ***** TODO Rank candidate fonts consistently wrt. their version field I sometimes have two versions of a font installed, e.g. the distro-provided one, plus an upstream one tucked in =~/.local=. Emacs seems to not use the same heuristics as fontconfig's ~fc-match~, and sometimes picks the older version. No bug filed yet; discussed first on [[https://lists.gnu.org/archive/html/help-gnu-emacs/2022-01/msg00042.html][help-gnu-emacs]] and [[https://lists.gnu.org/archive/html/emacs-devel/2022-01/msg00725.html][emacs-devel]], then brought up on the [[https://lists.freedesktop.org/archives/fontconfig/2022-January/006859.html][fontconfig mailing list]]. Tentative conclusion: fontconfig's ~fc-match~ seems to take =FC_FONTVERSION= into account when ranking fonts; it'd be nice if Emacs's ~find-font~ did so too. **** "Pure GTK" port ***** DONE [[https://lists.gnu.org/archive/html/emacs-devel/2021-12/msg01845.html][emacs-devel:<87wnk0wyi7.fsf@gmail.com>]] Let =--with-webp= work with =--with-pgtk= :PROPERTIES: :Role: author :PatchApplied: t :END: ***** TODO [[bug:56653]] =S-SPC= recognized as =SPC= Reported multiple times; see merged bug reports. Something in the bowels of =GtkIMContext=. Emacs's PGTK code does this: #+begin_src c /* pgtkterm.c: key_press_event */ if (pgtk_im_filter_keypress (f, &event->key)) return TRUE; /* else keep processing */ #+end_src Input methods seem to accept =S-SPC= and call =pgtkim.c:im_context_commit_cb= with the string =" "=, thereby losing the information that we have a shift modifier. Debugging notes on Debian 11 (GTK 3.24.24) using [[./pgtk-shift-space.c][this small reproducer]]: #+begin_src sh gcc -g $(pkg-config --cflags gtk+-3.0) pgtk-shift-space.c $(pkg-config --libs gtk+-3.0) export DEBUGINFOD_URLS=https://debuginfod.debian.net #+end_src Then break on =show_commit=, and help GDB find GTK code with ~directory […gtk-3.24.24 checkout…]/gtk~. =gtkimcontextsimple.c:no_sequence_matches= is the last frame to know about the =GdkEventKey= event that includes the shift modifier; so presumably that function should refrain from calling =gtkimcontextsimple.c:gtk_im_context_simple_commit_char= if it sees modifiers? Or =pgtkim.c:im_context_commit_cb= should check its context and refrain from enqueueing =" "=; there is no straightforward way for that function to signal =pgtkterm.c:key_press_event= that the IM commit was "aborted" though… **** DONE [[bug:41584]] org-indent-mode's line-prefix text property flickers near overlays :PROPERTIES: :Role: author :Kudos: eliz,fixing :END: First reported as [[https://github.com/dgutov/diff-hl/issues/142][dgutov/diff-hl#142]]. **** TODO [[bug:52983]] Implement visual-fill-column equivalent in display engine The status quo is disheartening: - hard-wrapping is illegible in narrow windows, - soft-wrapping is illegible in wide windows. This feature would allow unwrapped text to have a reasonable upper limit on line length, with smart wrapping prefixes using =adaptive-wrap=; even hard-wrapped text would not look /too/ ugly in narrow windows. **** TODO Line height changes depending on visible characters E.g. with wide Org tables and ~truncate-lines~ enabled, if the ~org-table~ face is set to a smaller height, then scrolling horizontally makes the lines "shake" because the final newline does not have the ~org-table~ face, and is thus taller. Not sure what the right approach is: 1. ask Org to fontify the final newline, 2. ask display engine to consider the whole line to compute the height 3. ask display engine to ignore the newline to compute the height **** HiDPI ***** TODO Scale UI elements On HiDPI displays, various elements (fringe bitmaps, fringe width, underline, strikethrough) are tiny. ***** DONE Heed scaling changes :PROPERTIES: :Kudos: Po Lu,fixing,emacs.git:b18d4dbe0d :END: Changing the desktop's DPI scaling (which in my use-case happens whenever I hit my KVM's switch) causes a running Emacs's default face to become either huge or tiny. *** Input **** TODO Translate unshifted keys to shifted if no bindings are found To make =C-x [0-9]= more accessible on AZERTY. Firefox does this, cf [[https://hg.mozilla.org/mozilla-unified/file/FIREFOX_80_0_1_RELEASE/widget/gtk/nsGtkKeyUtils.cpp#l1207][here]]: #+begin_src cpp // Retry with shifted keycode. guint shiftState = (baseState | keymapWrapper->GetModifierMask(SHIFT)); uint32_t shiftedChar = keymapWrapper->GetCharCodeFor(aGdkKeyEvent, shiftState, aGdkKeyEvent->group); if (IsBasicLatinLetterOrNumeral(shiftedChar)) { // A shifted character can be an ASCII alphabet on Hebrew keyboard // layout. And also shifted character can be an ASCII numeric on // AZERTY keyboad layout. Then, it's a good hint for deciding our // keyCode. return WidgetUtils::ComputeKeyCodeFromChar(shiftedChar); } #+end_src and [[https://hg.mozilla.org/mozilla-unified/file/FIREFOX_80_0_1_RELEASE/widget/gtk/nsGtkKeyUtils.cpp#l1896][there]]: #+begin_src cpp uint32_t KeymapWrapper::GetCharCodeFor(const GdkEventKey* aGdkKeyEvent, guint aModifierState, gint aGroup) { guint keyval; if (!gdk_keymap_translate_keyboard_state( mGdkKeymap, aGdkKeyEvent->hardware_keycode, GdkModifierType(aModifierState), aGroup, &keyval, nullptr, nullptr, nullptr)) { return 0; } GdkEventKey tmpEvent = *aGdkKeyEvent; tmpEvent.state = aModifierState; tmpEvent.keyval = keyval; tmpEvent.group = aGroup; return GetCharCodeFor(&tmpEvent); } #+end_src Maybe look at ~lookup-key~ in ~src/keymap.c~? Although ~src/gtkutil.c~ seems to be the place making the most calls to ~gdk_~ functions. *** Native compilation **** DONE [[bug:41077]] Segfaults when compiling ELC+ELN :PROPERTIES: :Role: author :Kudos: Andrea,fixing :END: Took a couple of tries (and 3 days straight of compilation), but I got the branch to compile on my Samsung NC10. See also update 8 on Andrea's [[https://akrl.sdf.org/gccemacs.html][progress page]]. FTR, I attached a couple of helpful scripts to that report to measure the time & memory consumption of native compilation. **** DONE [[bug:41194]] fibn benchmark exhausts memory :PROPERTIES: :Role: author :Kudos: Andrea,fixing :END: Fixed by Andrea (see update 9 on his [[https://akrl.sdf.org/gccemacs.html][progress page]]). FTR, that report was the occasion to try out Org spreadsheet formulas, in order to compare =elisp-benchmarks= results. *** Region **** TODO [[bug:56662]] Improve region highlighting when multiple windows show the same buffer ~highlight-nonselected-windows~ allows the following use-case: 1. Set mark in buffer B1, window W1, and highlight a piece of interesting text. 2. Jump to window W2, displaying buffer B2. 3. Work on B2. 4. Glance at W1 to check again on the highlighted region. 5. Go to 3. This breaks down when B1 = B2 (a buffer that is long enough that it is useful to show various parts of it in multiple windows), because marking something in W2 disrupts the highlighting *in W1*. Not only is the visual emphasis of the useful part of W1 lost, having the region face flashing on and off in W1 while trying to work in W2 is somewhat distracting. The bug report has been closed, but Juri & Eli gave hints to make the mark (and therefore the highlighting) window-local. ** Elisp *** DONE [[bug:30008]] Subdirectory vs major mode in .dir-locals.el :PROPERTIES: :Role: author :Kudos: Neil Roberts,fixing :END: Unnoticed for a year, then merged with subsequent duplicate [[bug:33400]]. *** TODO Make cursor appearance context-dependent E.g. add a customizable list of (PREDICATE . PROPERTIES) pairs; the cursor gets the PROPERTIES from the first PREDICATE which matches. Use-cases: - completion-in-region-mode - org-speed-commands - repeat-mode *** compile **** DONE [[bug:36803]] Update mode-line of every window when compilation ends :PROPERTIES: :Role: author :Kudos: StefanM,fixing :END: *** completion **** DONE [[bug:52169]] "Args out of range" when completing shell command :PROPERTIES: :Role: author :Kudos: StefanM,fixing :END: *** files **** DONE [[bug:64939]] [[bug:66902]] Recognize env =-S= / =--split-string= in shebangs :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: [[info:coreutils#env invocation][coreutils#env invocation]] advertises this syntax to allow passing arguments to interpreters: #+begin_src awk #!/usr/bin/env -S awk -v OFS=" xyz " -f #+end_src Emacs was confused by that =-S=; no longer. Found this while working on my toy website generator which relies on a "Makefile app" with this shebang line: #+begin_src makefile #!/usr/bin/env -S make -f #+end_src *** font-lock **** DONE [[bug:35476]] font-lock-{append,prepend}-text-property and anonymous faces :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :Kudos: StefanM,fixing :END: Started off as an [[orgmode:87r2a4ztt2.fsf@gmail.com][org-mode bug]]; Stefan applied a proper fix, then I added in some refactoring and unit tests. **** DONE [[bug:39597]] M-x occur adds fontification to fundamental-mode :PROPERTIES: :Role: author :Kudos: Juri,fixing&StefanM,fixing :END: Fixed by Stefan & Juri. *** fonts **** DONE [[bug:41747]] Add default fontset setup for "Symbols and Pictographs Extended-A" :PROPERTIES: :Role: author :END: Unfortunately, Symbola now comes with a [[https://dn-works.com/wp-content/uploads/2020/UFAS-Docs/License.pdf][non-free license]]. Cf. [[https://bugs.archlinux.org/task/58886][Arch Linux]], [[https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897047][Debian]], [[https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/EC6I35ILFICKY5W5XTHYJC6UH36B2UQS/][Fedora]], [[https://www.mail-archive.com/gentoo-dev@lists.gentoo.org/msg88799.html][Gentoo]], [[https://github.com/NixOS/nixpkgs/pull/79679][NixOS]] and [[https://bugs.launchpad.net/ubuntu/+source/ttf-ancient-fonts/+bug/1824065][Ubuntu]] threads; also [[https://en.wikipedia.org/wiki/Talk:Open-source_Unicode_typefaces#Symbola_font][Wikipedia]] thread. **** DONE [[bug:51495]] Avoid fonts with incomplete coverage of MATHEMATICAL chars :PROPERTIES: :Role: author :PatchApplied: t :END: *** help **** TODO Teach =C-h k= & =C-h l= about fancy keymaps Some modes introduce indirections that defeat ~describe-key~ and ~view-lossage~. E.g. - [ ] ~gnus-article-read-summary-keys~ ([[bug:68947]]) - [ ] ~org-self-insert-command~ + ~org-use-speed-commands~ Maybe we could define a property for the related keymaps that would hold a function for =help.el= to call, in order to complement =*Help*= buffers with more helpful information? *** imenu **** TODO Add grouping/sorting predicates to ~imenu~ completion So that ~imenu~ + ~icomplete-vertical-mode~ becomes a built-in, buffer-less equivalent of ~imenu-list~. Simple example of these predicates in action: #+begin_src elisp (completing-read "bleh? " (lambda (string pred action) (if (eq action 'metadata) (let ((sort-fn (lambda (candidates) (let* ((numbers (sort (mapcar 'string-to-number candidates) '<)) (evens (seq-filter 'cl-evenp numbers)) (odds (seq-difference numbers evens))) (mapcar 'number-to-string (if (and (car evens) (< (car evens) (car odds))) (append evens odds) (append odds evens))))))) `(metadata (cycle-sort-function . ,sort-fn) (display-sort-function . ,sort-fn) (group-function . (lambda (candidate transform) (if transform candidate (if (cl-evenp (string-to-number candidate)) "even" "odd")))))) (complete-with-action action (mapcar 'number-to-string (number-sequence 1 10)) string pred)))) #+end_src *** kill-ring **** DONE [[bug:60841]] ~copy-region-blink-delay~ spuriously kicks in when the =region= face has =:inverse-video= :PROPERTIES: :Role: author :PatchApplied: t :END: From ~emacs -Q~: #+begin_src elisp M-: (custom-set-faces '(region ((t (:foreground "blue" :inverse-video t))))) C-x h M-w ; ⇒ point moves to mark then back after copy-region-blink-delay seconds. #+end_src This is caused by ~indicate-copied-region~ checking for =region= having a =:background= to assess whether it's "highlighted". The bug report snowballed into - fixing a couple of corner-cases that made ~face-differs-from-default-p~ less useful than it could be, - adding a user-option for users who actually want that feedback unconditionally, - my first patch committed [[https://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-29&id=c4988840598b7da84b25d21a1936ce1ab6f6d666][in my own name]] 😲 *** minibuffer **** TODO [[bug:69237]] Add command to toggle password visibility :PROPERTIES: :Role: watcher :Kudos: Michael Albinus,implementing :END: **** TODO Add completing read for links To harmonize ~org-open-at-point~'s =*Select Link*= & ~gnus-summary-browse-url~'s =URL to browse= prompts; allow matching on URL & description. *** project **** DONE [[bug:45765]] Change default-directory before prompting in project-compile :PROPERTIES: :Role: author :PatchApplied: t :END: *** regexp matching **** TODO [[bug:31586]] ~frame-title-format~ doesn't save match data :PROPERTIES: :Role: watcher :END: **** DONE [[bug:33697]] file-truename messes with match data :PROPERTIES: :Role: author :END: Merged with [[bug:31586]], a more general issue dealing with match data being "poisoned" by a user's =:eval= form in frame-title-format. **** DONE [[bug:57733]] Fix ~replace-*-in-region~ crash :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: *** shr **** DONE [[bug:39504]] Ensure faces of enclosing elements apply to elements :PROPERTIES: :Role: author :PatchApplied: t :END: Unfortunately debbugs.el does not handle multiple patches per message; the first patch's diff was thus applied manually, with the second patch's title (and a whole new message by the maintainer). **** DONE [[bug:69555]] Keep indenting text when 'shr-fill-text' is nil :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: Longstanding itch that was my main motivation for instructing Gnus to hide text/html parts. Now I can enjoy variable-pitch HTML parts /with properly indented citations/ 🧐 *** use-package **** DONE [[bug:60366]] Simplify manual introduction :PROPERTIES: :Role: author :PatchApplied: t :END: Following integration into core. ** Major modes *** Buffer-menu **** TODO select on entry =C-x C-b= invokes ~list-buffer~, but does not select the menu window. There are a lot of ways to work around this: - prefix with =C-x 4 1= - rebind =C-x C-b= to ~buffer-menu~ - customize =display-buffer-alist= Wondering if anyone is happy with the status quo. - /hatmatrix/ and 56 🔼voters are [[https://stackoverflow.com/q/1231188/1503371][unhappy]]; folks suggest (≈100 🔼votes total; ordered from most to least voted, aggregating duplicate answers) - rebinding to ~buffer-menu~ (✋), - using ~ido-mode~, - customizing =same-window-regexps= (obsoleted by =display-buffer-alist=), - rebinding to ~ibuffer~, - rebinding to ~bs-show~. - Neither Doom nor Spacemacs have bindings for ~buffer-menu~ nor ~list-buffers~; guessing users rely on buffer-switching commands with extra-featured completion frontends? *** Custom **** DONE [[bug:39074]] Horizontal line messes with variable value display in Custom buffers :PROPERTIES: :Role: author :PatchApplied: t :END: **** DONE [[bug:51556]] Poor contrast of Customize SVG icons with dark backgrounds :PROPERTIES: :Role: author :Kudos: StefanK,fixing :END: *** Dired **** DONE [[bug:23284]] Cannot input 'Y' with dired-do-query-replace-regexp :PROPERTIES: :Role: author :Kudos: Dmitry,fixing :END: **** DONE [[bug:28969]] Confirmation prompt for wildcard not surrounded by whitespace :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: My commit message ran afoul of debbugs.el's =M-m= again. *** ERC **** +Support SASL authentication+ :PROPERTIES: :Kudos: J.P.,fixing :END: Got bitten by this when trying to connect to irc.freenode.net from =alyon-654-1-454-60.w109-213.abo.wanadoo.fr=: #+begin_quote ERROR from irc.freenode.net: Closing Link: alyon-654-1-454-60.w109-213.abo.wanadoo.fr (SASL access only) #+end_quote This was requested in [[bug:29108]]. Lars closed this report because while there is a third-party package to implement the feature, its author did not respond when prompted for copyright assignment. I did not have the patience to look at the package; instead I went straight to [[https://ircv3.net/specs/extensions/sasl-3.1][the description of SASL on ircv3.net]] and the [[https://tools.ietf.org/html/rfc4616#section-2][RFC for the =PLAIN= mechanism]], and cobbled this silly patch: #+begin_src diff diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 1d5506e281..0da677ac18 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -6052,7 +6052,17 @@ erc-login erc-session-server erc-session-user-full-name)) (if erc-session-password - (erc-server-send (format "PASS %s" erc-session-password)) + (progn + (erc-server-send "CAP REQ :sasl") + (erc-server-send "AUTHENTICATE PLAIN") + (erc-server-send + (concat "AUTHENTICATE " (base64-encode-string + (string-join (list + (user-login-name) + (erc-current-nick) + erc-session-password) + "\0")))) + (erc-server-send "CAP END")) (message "Logging in without password")) (erc-server-send (format "NICK %s" (erc-current-nick))) (erc-server-send #+end_src AFAICT this is enough to get me authenticated on Freenode. It looks like it's not too hard to implement? Ideally Emacs's builtin =sasl.el= should be reused; that would let ERC support better SASL mechanisms than =PLAIN=. **** +Make timestamps robust vs window width changes+ :PROPERTIES: :Kudos: J.P.,fixing :END: *Solved in 5.6 with ~erc-fill-wrap~.* The =:align-to= spec for right timestamps inserts a fixed number of spaces, so resizing windows messes up their display. Eg. moving a frame from one monitor to a smaller one, lines get wrapped unnecessarily. Don't know if the solution lies in (1) using one of the more sophisticated forms of =:align-to= as shown in [[info:elisp#Pixel Specification][(elisp) Pixel Specification]], (2) iterating over stamps on window-configuration changes and updating their spec (3) just stop using right-aligned stamps on the same line as messages. (2) would not handle a buffer being shown in two windows with different widths; (1) and (2) would not handle the window becoming too narrow and requiring splitting the stamp from its message. So leaning toward (3). **** TODO Play well with whitespace-mode Last I checked, turning on whitespace-mode… hm. That entry dates from 4 years ago. Probably it broke ERC? 🤷 *** Gnus **** Article ***** TODO Aligned/tabular display of headers ***** TODO Simple setting for ~visual-line-mode~ I like ~visual-line-mode~ since it automatically re-flows buffers on window width changes, and composes with ~adaptive-wrap~ to add relevant wrap prefixes (extra indentation, citation marks), and I hope Someday™ [[bug:52983][a built-in solution to limit line length]] will be added (in the meantime, I use kludgy margin hacks to keep buffers narrow & centered). Currently, AFAICT (from incremental config tweaks; haven't searched the manual thoroughly), getting Gnus to soft-wrap lines requires futzing with: - ~gnus-article-truncate-lines~ - ~gnus-article-unfold-long-headers~ - ~gnus-treat-fill-article~ - ~gnus-treat-fill-long-lines~ - ~gnus-treat-fold-headers~ - _finally_, calling ~visual-line-mode~ in ~gnus-article-mode-hook~ **** Cloud ***** TODO [[bug:41530]] gnus-cloud-download-all-data does not mark articles as read :PROPERTIES: :Role: author :END: **** Summary ***** DONE [[bug:47026]] Allow Gnus summary faces to extend to end of line :PROPERTIES: :Role: author :PatchApplied: t :END: ***** DONE [[bug:49800]] Extend Gnus summary highlight faces by default :PROPERTIES: :Role: author :PatchApplied: t :END: ***** Threading ****** DONE [[bug:40520]] Prevent duplicate thread titles :PROPERTIES: :Role: author :PatchApplied: t :END: ****** TODO [[bug:42334]] [[bug:53755]] gnus-thread-sort-functions vs. loose threads :PROPERTIES: :Role: author :END: Closed by Lars because the way Gnus sorts things just isn't amenable to fixing this right now. Will probably need to take the plunge at some point. *** Ibuffer **** TODO Elide with "…" if displayable **** TODO Add human-readable size With summary: #+begin_src elisp (define-ibuffer-column size-hr (:name "Size" :summarizer (lambda (strings) (file-size-human-readable (apply '+ (mapcar (lambda (s) (get-text-property (1- (length s)) 'ibuffer-size s)) strings))))) (let ((sz (buffer-size buffer))) (propertize (file-size-human-readable sz) 'ibuffer-size sz))) #+end_src While at it, use this ~propertize~ trick to get rid of the "ewww" comment in ~define-ibuffer-column size~. *** Info **** ~info-display-manual~ ***** TODO redundant candidates E.g. =foo= and =foo.info.gz=. ***** TODO invalid candidates E.g. =gnutls-….png= ***** TODO use ~Info-additional-directory-list~ **** TODO redundant ~(if x (append x y) y)~ **** TODO redundant entries in ~Info-default-directory-list~ (Glenn's FIXME) - 2000-12-14 "(Info-default-directory-list): If…" (e103ef954c) config-dir = "{configure-info-directory}/" config = (list config-dir) config-dir ∈ standard-info-dirs ⇒ standard-info-dirs/config-dir ∨ config - 2000-12-15 "(Info-default-directory-list): Don't…" (b6348438a2) config-dir ∈ standard-info-dirs ⇒ standard-info-dirs ∨ config - 2012-05-26 "* lisp/paths.el (Info-default-…" (04188bb9ad) "why though" *** Org **** DONE [[orgmode:877efbgi4i.fsf@gmail.com]] Binding org-insert-todo-heading to M-S-RET :PROPERTIES: :Role: author :Kudos: Nicolas Goaziou,fixing :END: Inspired by [[https://github.com/jrblevin/markdown-mode/pull/317][jrblevin/markdown-mode#317]]. **** DONE [[orgmode:87r2a4ztt2.fsf@gmail.com]] Bug: Strike-through messes with heading face :PROPERTIES: :Role: author :PatchApplied: t :END: Eventually reverted in favor of a better fix in [[bug:35476]]. **** DONE [[orgmode:877dxpazbo.fsf_-_@gmail.com]] Make RET and C-j obey ~electric-indent-mode~ in org-mode :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: Followup to an emacs-devel thread about reconciling org-mode idiosyncrasies with Emacs core. **** DONE [[orgmode:87blm8v09s.fsf@gmail.com]] Possible fix for :includes header argument in org-babel C source blocks :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: Stumbled on this regression before starting work on a completely unrelated feature, and trying to get unit tests to pass. **** DONE [[orgmode:87mu5mhm1u.fsf@gmail.com]] Failing tests :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: More unrelated tests that needed fixing before I could start working. **** TODO [[orgmode:87mu62gvjk.fsf@gmail.com]] Setting org-todo-keywords through directory-local variables :PROPERTIES: :Role: author :END: ACKed by Bastien; bump once 9.4 is released. **** DONE [[bug:42184]] org-fontify-whole-heading-line does not work in emacs 27 :PROPERTIES: :Role: watcher :PatchApplied: t :END: An unfortunate fallout of the new =:extend= face attribute; fixed in Org 9.4, which eventually landed in Emacs 27's maintenance branch (cf. [[bug:43268]]). **** TODO [[orgmode:87mu3ze52c.fsf@gmail.com]] Default description for abbreviated links :PROPERTIES: :Role: author :END: Counter-proposal by Bastien. Next step: ACK and get back to the workbench. **** TODO Skip checkbox width when filling list item Currently items are filled like this: #+begin_example - [ ] lorem ipsum #+end_example Adding =\\[.\\]= to the regexp used in org-list-item-body-column allows "ipsum" to be aligned below "lorem". **** TODO [[bug:52587]] Prevent ~#+end_src~ background from extending to end-of-line when folded See also [[bug:65896]] for the converse: allowing the /heading/'s background to extend when folded. **** TODO Add pandoc's ~auto_identifiers~ scheme for ID generation ~org-export-new-reference~ is the function which generates the current ID, but it returns integers, so maybe the tweak should be made somewhere above in the call stack? **** TODO Make org-refile completion more similar to filename completion I'd like to have org-refile completion work like =C-x p p=, =C-x p f=, and Gnus's =B m=, where typing "bar" matches "x/bar". Current org-refile config: #+begin_src elisp (setq org-refile-targets (list (cons nil (cons :maxlevel 10))) org-refile-use-outline-path t org-outline-path-complete-in-steps nil) #+end_src IIUC =C-x p= commands use ~project--file-completion-table~, which passes a lambda to ~completing-read~ which returns ~(category . project-file)~ metadata, and… #+begin_src elisp (alist-get 'styles (alist-get 'project-file completion-category-defaults)) #+end_src … says =substring=. Likewise, ~gnus-summary-move-article~ uses ~gnus-completing-read~, which by default uses ~gnus-emacs-completing-read~, which sets ~completion-styles~ to ~gnus-completion-styles~, which includes =substring=. Ergo: either I add =substring= to my ~completion-styles~, or I teach ~org-refile~ to use =substring=… by default? when ~path-complete-in-steps~ is nil? depending on a user option? 🤔 **** TODO Fix clock table not accounting for "descriptive links" E.g. if a heading contains =[[http://long.url][Short description]]=, the text that ends up in the clock table can be truncated to a shorter length than the available width. Assuming this is because there is a length-computing function that does not account for ~org-link-descriptive~. *** Programming modes **** ~conf-mode~ ***** TODO Tweak ~javaprop~ comments As per [[https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html#load(java.io.Reader)][the rationale]]: #+begin_src diff diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el index 57ec8a0428..91aabfb6d2 100644 --- a/lisp/textmodes/conf-mode.el +++ b/lisp/textmodes/conf-mode.el @@ -140,8 +140,7 @@ conf-unix-mode-syntax-table (defvar conf-javaprop-mode-syntax-table (let ((table (make-syntax-table conf-unix-mode-syntax-table))) - (modify-syntax-entry ?/ ". 124" table) - (modify-syntax-entry ?* ". 23b" table) + (modify-syntax-entry ?! "<" table) table) "Syntax table in use in Java properties buffers.") @@ -487,7 +486,7 @@ conf-javaprop-mode (conf-mode-initialize "#" 'conf-javaprop-font-lock-keywords) (setq-local conf-assignment-column conf-javaprop-assignment-column) (setq-local conf-assignment-regexp ".+?\\([ \t]*[=: \t][ \t]*\\|$\\)") - (setq-local comment-start-skip "\\(?:#+\\|/[/*]+\\)\\s *") + (setq-local comment-start-skip "^[ \t]*\\(?:#+\\|!+\\)\\s *") (setq-local imenu-generic-expression '(("Parameters" "^[ \t]*\\(.+?\\)[=: \t]" 1)))) #+end_src **** ~python-mode~ ***** DONE [[bug:51807]] Fix customization group of python-forward-sexp-function :PROPERTIES: :Role: author :PatchApplied: t :END: ***** DONE [[bug:52380]] ~run-python~ no longer focuses interpreter :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: **** ~sh-mode~ ***** TODO Tweak indentation of continuation lines Attempted to piggyback on Dario Gjorgjevski's [[bug:44592]] to fix these cases: #+begin_src shell ${foo}bar \ --arg $(foo)bar \ --arg ${foo}bar --arg1 \ --arg2 $(foo)bar --arg1 \ --arg2 #+end_src Unfortunately my attempt was [[bug:50320][too naive]] and got reverted. I'll have to [[https://lists.gnu.org/archive/html/help-gnu-emacs/2021-09/msg00004.html][dig into SMIE]] more seriously… *** ReST **** TODO auto-pairing Backquotes and asterisks; gate syntax-table changes behind user option and/or add commands for styling **** TODO faces - =.. code block::= - links **** TODO indentation - =.. code-block::= **** TODO link insertion **** TODO outline support *** VC **** DONE [[bug:68183]] ~vc-dir~ chokes when upstream branch is local :PROPERTIES: :Role: watcher :PatchApplied: t :TestAdded: t :Kudos: eliz,reviewing&Dmitry,reviewing&Sean Whitton,reviewing :END: IOW when =branch..remote= is =.=. While fixing this, add a new =Tracking= header; try to leave =vc-git= in a better state than I found it: add tests; refactor ~vc-git-dir-extra-headers~. ***** [[bug:76187]] flaky test :PROPERTIES: :PatchApplied: t :Kudos: Paul Eggert,reporting :END: ** Minor modes *** electric-pair **** DONE [[bug:39680]] electric-pair-mode broken by undo :PROPERTIES: :Role: author :TestAdded: t :Kudos: StefanM,fixing :END: Fixed by Stefan. It took some time and effort, but I eventually managed to write a unit test. *** icomplete **** DONE [[bug:38024]] icomplete sometimes fails to show completions after backward-killing words :PROPERTIES: :Role: author :Kudos: João,fixing :END: **** TODO [[bug:40152]] icomplete vs recursive prompts :PROPERTIES: :Role: author :END: *** visual-line **** TODO [[bug:31666]] Bad interaction between visual-line-mode and wrap-prefix on long lines :PROPERTIES: :Role: watcher :END: Aka "visual-line-mode adds newlines before words that end up being split anyway"; the problem occurs without wrap-prefixes. **** TODO Faces bleed backward #+begin_example foo bar ↩ ↪baz #+end_example Point on "baz", mark-sexp: empty space between "bar" and end of previous visual line is marked. *** visual-wrap-prefix **** DONE [[bug:41810]] Fontify wrap-prefix :PROPERTIES: :Role: author :PatchApplied: t :END: **** DONE [[bug:76008]] Vs text-scale :PROPERTIES: :Role: author :Kudos: Jim Porter,fixing :END: **** TODO [[bug:76018]] Stop sticking to RET :PROPERTIES: :Role: author :END: **** TODO More fontifying? 1. Start ~markdown-mode~. 2. Write some ~> long line~ of quoted text. 3. Start ~visual-line-mode~ and ~adaptive-wrap-prefix-mode~ ~>~ markers are not fontified. **** TODO Take ~display~ property into account 1. Start ~markdown-mode~. 2. ~markdown-toggle-markup-hiding~. 3. Write some ~> long line~ of quoted text. 4. Start ~visual-line-mode~ and ~adaptive-wrap-prefix-mode~ The ~wrap-prefix~ does not match the opening ~>~'s ~display~ property. **** TODO Ignore ~whitespace-mode~ Seeing whitespace markers is misleading. **** TODO Ignore some faces #+begin_example - foo bar ↩ ↪ baz quux ↩ ↪ (corge) #+end_example With point on =b= in "baz": - mark-sexp: wrap-prefix gets =region= face - flyspell-mode: wrap-prefix gets =flyspell-incorrect= face With point on =(= or past =)= in "(corge)": - wrap-prefix gets =show-paren-match= ** Themes *** Modus **** DONE [[https://gitlab.com/protesilaos/modus-themes/-/merge_requests/50][protesilaos/modus-themes!50]] Tone down ~icomplete-selected-match~ :PROPERTIES: :Role: author :PatchApplied: t :END: ** ERT *** TODO Noninteractive pitfalls - testing faces vs redisplay: may need ~font-lock-ensure~ [[https://list.orgmode.org/87a70stkmv.fsf@gmail.com/#Z32testing:lisp:test-org.el][(org-mode dir-local TODO keywords)]] - post-command hooks: may need ~ert-simulate-command~ [[bug:39680#32][(electric-pair + undo bug)]] - ~(window-buffer (selected-window))~ does not always match ~(current-buffer)~ [[bug:52380#38][(run-python)]] * ELPA ** ada-mode *** DONE [[bug:52167]] Preserve default value of ~project-read-file-name-function~ :PROPERTIES: :Role: author :PatchApplied: t :END: ada-mode pulls in uniquify-files, which unconditionally changes the default value of ~project-read-file-name-function~. - In uniquify-files: stop doing that; advertise this setting in the package commentary. - In ada-mode: let-bind this variable in ~ada-find-file~. Patches applied, though the maintainer did not preserve authorship nor rationales from the commit messages. For my own sanity: - [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=1;filename=0001-Preserve-default-value-of-project-read-file-name-fun.patch][uniquify-files patch]] applied [[https://git.savannah.gnu.org/cgit/emacs/elpa.git/commit/?h=externals/uniquify-files&id=1d76b4f0e283afaff2be053d85f8726ffc3abd6e][here]]; - [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=2;filename=0001-Explicitly-bind-project-read-file-name-function.patch][ada-mode patch 1]]: - (ada-mode.el) applied [[https://git.savannah.nongnu.org/cgit/ada-mode.git/commit/?h=org.emacs.ada-mode&id=cd3bdbf6993d5f070795399c8f5ea538291c1d73][here]] (with further comment tweak), squashed with [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=4;filename=0003-ada-mode.el-ada-find-file-Support-future-Emacs-versi.patch][patch 3]]; - (NEWS) applied [[https://git.savannah.nongnu.org/cgit/ada-mode.git/commit/?h=org.emacs.ada-mode&id=e5bc6c3c][there]]; - [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=3;filename=0002-ada-mode.el-ada-mode-menu-Prefer-ada-find-file.patch][ada-mode patch 2]]: not applied; - [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=4;filename=0003-ada-mode.el-ada-find-file-Support-future-Emacs-versi.patch][ada-mode patch 3]]: applied [[https://git.savannah.nongnu.org/cgit/ada-mode.git/commit/?h=org.emacs.ada-mode&id=cd3bdbf6993d5f070795399c8f5ea538291c1d73][here]], squashed with [[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52167;msg=5;att=2;filename=0001-Explicitly-bind-project-read-file-name-function.patch][patch 1]]. ** debbugs *** DONE [[bug:38551]] bind to RET rather than return :PROPERTIES: :Role: author :PatchApplied: t :END: *** TODO autoload debbugs-gnu-emacs-release-blocking-reports I prefer this over the Org variant, which is autoloaded. *** TODO Make ~debbugs-gnu-apply-patch~ smarter To avoid accidents like [[bug:28969]], [[bug:39504]], [[bug:41810]], and [[bug:57733]]. ** diff-hl *** DONE [[https://github.com/dgutov/diff-hl/issues/142][#142]] Weird interaction between diff-hl-flydiff-mode and org-indent-mode :PROPERTIES: :Kudos: eliz,fixing :END: Eventually reported back to Emacs core in [[bug:41584]]. ** which-key *** DONE [[https://github.com/justbur/emacs-which-key/issues/314][#314]] Some keymap names no longer show up :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: * MELPA ** forge *** DONE [[https://github.com/magit/forge/pull/549][magit/forge#549]] Let ~forge-post-author~ and ~forge-post-date~ have foregrounds :PROPERTIES: :Role: author :PatchApplied: t :END: Initially not possible because: 1. for regular notes, ~forge-topic-refresh-buffer~ uses ~add-face-text-property~; using ~font-lock-append-text-property~ would solve this; 2. for the note at point, forge sets ~heading-highlight-face~ to ~magit-diff-hunk-heading-highlight~, which has a foreground; magit-section applies the ~heading-highlight-face~ via overlays, so it will always have more priority than text properties. Sent patch to solve 1. 2 is not a problem in my setup, since the highlight face has no foreground. *** TODO Delete source branch when GitLab MR is merged IOW set =remove_source_branch= (resp. =should_remove_source_branch=) when submitting (resp. merging) the request. Possible solutions: - Elisp option - Git config variable - Transient infix argument *** TODO Wash emoji codes On GitHub and GitLab, emoji that users enter via =:short_codes:= on the web UI are sent by the API as =:short_codes:=, instead of bona fide Unicode code points. (Emoji sent by clients like forge seem unaffected) Kludge: #+begin_src elisp (defun my/emoji-translate-code () (save-excursion (with-silent-modifications (let ((inhibit-read-only t) (old-input-method current-input-method)) (set-input-method "emoji") (while (re-search-forward ":[a-z_]*:" nil t) (when-let* ((beg (match-beginning 0)) (end (match-end 0)) (code (match-string 0)) (translation (or (quail-lookup-key code) (and (string-match ":\\([a-z]*\\)_\\([a-z]*\\):" code) (quail-lookup-key (format ":%s-%s:" (match-string 2 code) (match-string 1 code))))))) (let ((emoji-string (pcase (car translation) ((pred integerp) (string (car translation))) (_ (mapconcat 'identity (cdar translation)))))) (message "replacing %s with %s" code emoji-string) (add-text-properties beg end `(display ,emoji-string))))) (set-input-method old-input-method))))) #+end_src ** magit *** DONE Helping ~magit-ediff-dwim~ read my mind :PROPERTIES: :Role: author :PatchApplied: t :END: [[https://emacs.stackexchange.com/q/18200/10209][Reported on StackExchange]] first, then [[https://github.com/magit/magit/commit/f65b1bddd31070e6012fe91a7d845f748c40b901][applied by tarsius]]. *** DONE [[https://github.com/magit/magit/pull/2928][magit/magit#2928]] magit-split-range: fix handling of "..@{upstream}" :PROPERTIES: :Role: author :PatchApplied: t :END: *** DONE [[https://github.com/magit/magit/pull/3720][magit/magit#3720]] Make magit-blame-echo actually echo the commit summary :PROPERTIES: :Role: author :PatchApplied: t :END: *** DONE [[https://github.com/magit/magit/pull/4043][magit/magit#4043]] Fix git-commit fontification when comments contain brackets :PROPERTIES: :Role: author :PatchApplied: t :END: *** DONE +[[https://github.com/magit/magit/pull/4207][magit/magit#4207]]+ [[https://github.com/magit/magit/pull/4213][magit/magit#4213]] Autoload magit-file-mode-map correctly :PROPERTIES: :Role: author :Kudos: tarsius,fixing :END: The initial state of affairs: - ~global-magit-file-mode~ says ~:init-value t~, but that has no effect. - We need to move ~magit-file-mode~ (and ~magit-blob-mode~ while we're at it) to a new, dedicated library, and either - let users customize ~global-magit-file-mode~ to t, which will DTRT, - autoload the form that enables the mode if the variable is set. It's already possible to do either, but it slows down startup considerably. Hopefully moving the mode to a file that does not ~(require 'magit)~ will mitigate this? [[https://lists.gnu.org/archive/html/help-gnu-emacs/2020-09/msg00130.html][For context.]] Eventually closed in favour of [[https://github.com/magit/magit/pull/4237][tarsius's own solution]]. *** TODO ~git-commit-major-mode~ set in =.dir-locals.el= messes with revision buffers E.g. as configured in =magit/= repositories. This affects =SPC= and =n=, =p= in log buffers. Workarounds: 1. use =RET= to view commits; 2. jump to revision buffer and hit =g=. ** markdown-mode *** DONE [[https://github.com/jrblevin/markdown-mode/pull/124][jrblevin/markdown-mode#124]] Prevent spurious bold fontification :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: *** DONE [[https://github.com/jrblevin/markdown-mode/issues/172][jrblevin/markdown-mode#172]] Spurious bold/italic in inline code :PROPERTIES: :Role: author :TestAdded: t :Kudos: jrblevin :END: *** DONE [[https://github.com/jrblevin/markdown-mode/issues/223][jrblevin/markdown-mode#223]] Bold markers mess up italics detection :PROPERTIES: :Role: author :Kudos: jrblevin :END: *** DONE [[https://github.com/jrblevin/markdown-mode/pull/252][jrblevin/markdown-mode#252]] Fix markdown-inline-code-face's :inherit attribute :PROPERTIES: :Role: author :PatchApplied: t :END: *** DONE [[https://github.com/jrblevin/markdown-mode/pull/317][jrblevin/markdown-mode#317]] Bind markdown-insert-list-item to M-RET rather than M- :PROPERTIES: :Role: author :PatchApplied: t :TestAdded: t :END: ** page-break-lines *** DONE [[https://github.com/purcell/page-break-lines/pull/20][purcell/page-break-lines#20]] Fix disabling when major mode is derived from one of page-break-lines-modes :PROPERTIES: :Role: author :PatchApplied: t :END: ** paradox *** DONE [[https://github.com/Malabarba/paradox/pull/125][Malabarba/paradox#125]] Invert :inherit order for paradox-mode-line-face :PROPERTIES: :Role: author :PatchApplied: t :END: *** DONE [[https://github.com/Malabarba/paradox/pull/160][Malabarba/paradox#160]] Fix "Invalid face reference" warnings for custom-button-mouse :PROPERTIES: :Role: author :PatchApplied: t :END: * COMMENT File-local variables #+LINK: bug https://debbugs.gnu.org/ #+LINK: orgmode https://orgmode.org/list/%s/t/#u # Local variables: # org-property-format: "%-16s %s" # end: