memory-leaks

Still reachable: lots of words in many pages.
git clone https://git.kevinlegouguec.net/memory-leaks
Log | Files | Refs | README | LICENSE

tracker.org (45140B)


      1 Since my contributions to "GNU Emacs" are spread over multiple
      2 repositories and bug tracking systems, I figured I would aggregate
      3 them in my own "tracker".  This allows me to keep track of what I'm
      4 working on; it can also double as a [[https://jvns.ca/blog/brag-documents/][brag document]] when filtered on
      5 =PatchApplied= properties.
      6 
      7 Speaking of properties, here is the method to the madness:
      8 
      9 - =Role= ::
     10   - =author= :: for topics I raised,
     11   - =watcher= :: issues reported by someone else…
     12     - I have taken a stab at,
     13     - I could take a stab at, if time permits,
     14     - I'll tip my hat to whoever solves it,
     15 - =PatchApplied= :: whether my patches were applied,
     16 - =TestAdded= :: whether I added a unit test,
     17 - =Kudos= :: bragging is all well and good, but there's also tons of
     18   helpful folks who deserve thanks.  Syntax: =CREDIT[&CREDIT…]=
     19   - =CREDIT= :: =WHOM[,WHAT[,HOW]]=
     20     - =WHOM= :: handle for the credited person; based on (in no
     21       particular order) signature, =From= display name or address
     22       local part, forge nickname
     23     - =WHAT= :: gerund
     24     - =HOW= :: =REPO:REVISION=
     25 * GNU Emacs
     26 ** Build process
     27 *** Dump
     28 **** DONE [[bug:38492]] Warn pdumper users when pure space has been overflowed
     29 :PROPERTIES:
     30 :Role:           author
     31 :Kudos:          eliz,fixing
     32 :END:
     33 *** LEIM
     34 **** DONE [[bug:54816]] Silent "Compiler-macro error for cl-member" when building from scratch
     35 :PROPERTIES:
     36 :Role:           author
     37 :PatchApplied:   t
     38 :END:
     39 ** Core
     40 *** Buffers
     41 **** {same,other}-{frame,tab,window}-prefix vs popups
     42 ***** TODO directory/file-local validation prompt
     43 ***** TODO transient
     44 *** Display
     45 **** Cairo support
     46 ***** DONE [[bug:35781]] Improve font display on Cairo builds
     47 :PROPERTIES:
     48 :Role:           author
     49 :Kudos:          YAMAMOTO Mitsuharu,fixing
     50 :END:
     51 ***** DONE [[bug:35871]] Fix SVG transparency with Cairo
     52 :PROPERTIES:
     53 :Role:           author
     54 :Kudos:          YAMAMOTO Mitsuharu,fixing
     55 :END:
     56 **** Fonts
     57 ***** TODO Rank candidate fonts consistently wrt. their version field
     58 I sometimes have two versions of a font installed, e.g. the
     59 distro-provided one, plus an upstream one tucked in =~/.local=.
     60 
     61 Emacs seems to not use the same heuristics as fontconfig's ~fc-match~,
     62 and sometimes picks the older version.
     63 
     64 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]],
     65 then brought up on the [[https://lists.freedesktop.org/archives/fontconfig/2022-January/006859.html][fontconfig mailing list]].  Tentative conclusion:
     66 fontconfig's ~fc-match~ seems to take =FC_FONTVERSION= into account
     67 when ranking fonts; it'd be nice if Emacs's ~find-font~ did so too.
     68 **** "Pure GTK" port
     69 ***** 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=
     70 :PROPERTIES:
     71 :Role:           author
     72 :PatchApplied:   t
     73 :END:
     74 ***** TODO [[bug:52795]] [[bug:56653]] =S-SPC= recognized as =SPC=
     75 Reported multiple times; see merged bug reports.  Something in the
     76 bowels of =GtkIMContext=.  Emacs's PGTK code does this:
     77 
     78 #+begin_src c
     79 /* pgtkterm.c: key_press_event */
     80 	  if (pgtk_im_filter_keypress (f, &event->key))
     81 	    return TRUE;
     82         /* else keep processing */
     83 #+end_src
     84 
     85 Input methods seem to accept =S-SPC= and call
     86 =pgtkim.c:im_context_commit_cb= with the string =" "=, thereby losing
     87 the information that we have a shift modifier.
     88 
     89 Debugging notes on Debian 11 (GTK 3.24.24) using [[./pgtk-shift-space.c][this small
     90 reproducer]]:
     91 
     92 #+begin_src sh
     93 gcc -g $(pkg-config --cflags gtk+-3.0) pgtk-shift-space.c $(pkg-config --libs gtk+-3.0)
     94 export DEBUGINFOD_URLS=https://debuginfod.debian.net
     95 #+end_src
     96 
     97 Then break on =show_commit=, and help GDB find GTK code with
     98 ~directory […gtk-3.24.24 checkout…]/gtk~.
     99 
    100 =gtkimcontextsimple.c:no_sequence_matches= is the last frame to know
    101 about the =GdkEventKey= event that includes the shift modifier; so
    102 presumably that function should refrain from calling
    103 =gtkimcontextsimple.c:gtk_im_context_simple_commit_char= if it sees
    104 modifiers?
    105 
    106 Or =pgtkim.c:im_context_commit_cb= should check its context and
    107 refrain from enqueueing =" "=; there is no straightforward way for
    108 that function to signal =pgtkterm.c:key_press_event= that the IM
    109 commit was "aborted" though…
    110 **** DONE [[bug:41584]] org-indent-mode's line-prefix text property flickers near overlays
    111 :PROPERTIES:
    112 :Role:           author
    113 :Kudos:          eliz,fixing
    114 :END:
    115 First reported as [[https://github.com/dgutov/diff-hl/issues/142][dgutov/diff-hl#142]].
    116 **** TODO [[bug:52983]] Implement visual-fill-column equivalent in display engine
    117 The status quo is disheartening:
    118 
    119 - hard-wrapping is illegible in narrow windows,
    120 - soft-wrapping is illegible in wide windows.
    121 
    122 This feature would allow unwrapped text to have a reasonable upper
    123 limit on line length, with smart wrapping prefixes using
    124 =adaptive-wrap=; even hard-wrapped text would not look /too/ ugly in
    125 narrow windows.
    126 **** TODO Line height changes depending on visible characters
    127 E.g. with wide Org tables and ~truncate-lines~ enabled, if the
    128 ~org-table~ face is set to a smaller height, then scrolling
    129 horizontally makes the lines "shake" because the final newline does
    130 not have the ~org-table~ face, and is thus taller.
    131 
    132 Not sure what the right approach is:
    133 1. ask Org to fontify the final newline,
    134 2. ask display engine to consider the whole line to compute the height
    135 3. ask display engine to ignore the newline to compute the height
    136 **** HiDPI
    137 ***** TODO Scale UI elements
    138 On HiDPI displays, various elements (fringe bitmaps, fringe width,
    139 underline, strikethrough) are tiny.
    140 ***** DONE Heed scaling changes
    141 :PROPERTIES:
    142 :Kudos:          Po Lu,fixing,emacs.git:b18d4dbe0d
    143 :END:
    144 Changing the desktop's DPI scaling (which in my use-case happens
    145 whenever I hit my KVM's switch) causes a running Emacs's default face
    146 to become either huge or tiny.
    147 *** Input
    148 **** TODO Translate unshifted keys to shifted if no bindings are found
    149 To make =C-x [0-9]= more accessible on AZERTY.  Firefox does this, cf
    150 [[https://hg.mozilla.org/mozilla-unified/file/FIREFOX_80_0_1_RELEASE/widget/gtk/nsGtkKeyUtils.cpp#l1207][here]]:
    151 
    152 #+begin_src cpp
    153   // Retry with shifted keycode.
    154   guint shiftState = (baseState | keymapWrapper->GetModifierMask(SHIFT));
    155   uint32_t shiftedChar = keymapWrapper->GetCharCodeFor(aGdkKeyEvent, shiftState,
    156                                                        aGdkKeyEvent->group);
    157   if (IsBasicLatinLetterOrNumeral(shiftedChar)) {
    158     // A shifted character can be an ASCII alphabet on Hebrew keyboard
    159     // layout. And also shifted character can be an ASCII numeric on
    160     // AZERTY keyboad layout.  Then, it's a good hint for deciding our
    161     // keyCode.
    162     return WidgetUtils::ComputeKeyCodeFromChar(shiftedChar);
    163   }
    164 #+end_src
    165 
    166 and [[https://hg.mozilla.org/mozilla-unified/file/FIREFOX_80_0_1_RELEASE/widget/gtk/nsGtkKeyUtils.cpp#l1896][there]]:
    167 
    168 #+begin_src cpp
    169 uint32_t KeymapWrapper::GetCharCodeFor(const GdkEventKey* aGdkKeyEvent,
    170                                        guint aModifierState, gint aGroup) {
    171   guint keyval;
    172   if (!gdk_keymap_translate_keyboard_state(
    173           mGdkKeymap, aGdkKeyEvent->hardware_keycode,
    174           GdkModifierType(aModifierState), aGroup, &keyval, nullptr, nullptr,
    175           nullptr)) {
    176     return 0;
    177   }
    178   GdkEventKey tmpEvent = *aGdkKeyEvent;
    179   tmpEvent.state = aModifierState;
    180   tmpEvent.keyval = keyval;
    181   tmpEvent.group = aGroup;
    182   return GetCharCodeFor(&tmpEvent);
    183 }
    184 #+end_src
    185 
    186 Maybe look at ~lookup-key~ in ~src/keymap.c~?  Although
    187 ~src/gtkutil.c~ seems to be the place making the most calls to ~gdk_~
    188 functions.
    189 *** Native compilation
    190 **** DONE [[bug:41077]] Segfaults when compiling ELC+ELN
    191 :PROPERTIES:
    192 :Role:           author
    193 :Kudos:          Andrea,fixing
    194 :END:
    195 Took a couple of tries (and 3 days straight of compilation), but I got
    196 the branch to compile on my Samsung NC10.  See also update 8 on
    197 Andrea's [[https://akrl.sdf.org/gccemacs.html][progress page]].
    198 
    199 FTR, I attached a couple of helpful scripts to that report to measure
    200 the time & memory consumption of native compilation.
    201 **** DONE [[bug:41194]] fibn benchmark exhausts memory
    202 :PROPERTIES:
    203 :Role:           author
    204 :Kudos:          Andrea,fixing
    205 :END:
    206 Fixed by Andrea (see update 9 on his [[https://akrl.sdf.org/gccemacs.html][progress page]]).
    207 
    208 FTR, that report was the occasion to try out Org spreadsheet formulas,
    209 in order to compare =elisp-benchmarks= results.
    210 *** Region
    211 **** TODO [[bug:56662]] Improve region highlighting when multiple windows show the same buffer
    212 ~highlight-nonselected-windows~ allows the following use-case:
    213 
    214 1. Set mark in buffer B1, window W1, and highlight a piece of
    215    interesting text.
    216 2. Jump to window W2, displaying buffer B2.
    217 3. Work on B2.
    218 4. Glance at W1 to check again on the highlighted region.
    219 5. Go to 3.
    220 
    221 This breaks down when B1 = B2 (a buffer that is long enough that it is
    222 useful to show various parts of it in multiple windows), because
    223 marking something in W2 disrupts the highlighting *in W1*.
    224 
    225 Not only is the visual emphasis of the useful part of W1 lost, having
    226 the region face flashing on and off in W1 while trying to work in W2
    227 is somewhat distracting.
    228 
    229 The bug report has been closed, but Juri & Eli gave hints to make the
    230 mark (and therefore the highlighting) window-local.
    231 ** Elisp
    232 *** DONE [[bug:30008]] Subdirectory vs major mode in .dir-locals.el
    233 :PROPERTIES:
    234 :Role:           author
    235 :Kudos:          Neil Roberts,fixing
    236 :END:
    237 Unnoticed for a year, then merged with subsequent duplicate [[bug:33400]].
    238 *** TODO [[bug:77224]] Make cursor appearance context-dependent
    239 :PROPERTIES:
    240 :Role:           watcher
    241 :Kudos:          Elijah Gabe Pérez,fixing
    242 :END:
    243 E.g. add a customizable list of (PREDICATE . PROPERTIES) pairs; the
    244 cursor gets the PROPERTIES from the first PREDICATE which matches.
    245 
    246 Use-cases:
    247 - completion-in-region-mode
    248 - org-speed-commands
    249 - repeat-mode
    250 *** compile
    251 **** DONE [[bug:36803]] Update mode-line of every window when compilation ends
    252 :PROPERTIES:
    253 :Role:           author
    254 :Kudos:          StefanM,fixing
    255 :END:
    256 *** completion
    257 **** DONE [[bug:52169]] "Args out of range" when completing shell command
    258 :PROPERTIES:
    259 :Role:           author
    260 :Kudos:          StefanM,fixing
    261 :END:
    262 *** files
    263 **** DONE [[bug:64939]] [[bug:66902]] Recognize env =-S= / =--split-string= in shebangs
    264 :PROPERTIES:
    265 :Role:           author
    266 :PatchApplied:   t
    267 :TestAdded:      t
    268 :END:
    269 [[info:coreutils#env invocation][coreutils#env invocation]] advertises this syntax to allow passing
    270 arguments to interpreters:
    271 
    272 #+begin_src awk
    273 #!/usr/bin/env -S awk -v OFS=" xyz " -f
    274 #+end_src
    275 
    276 Emacs was confused by that =-S=; no longer.  Found this while working
    277 on my toy website generator which relies on a "Makefile app" with this
    278 shebang line:
    279 
    280 #+begin_src makefile
    281 #!/usr/bin/env -S make -f
    282 #+end_src
    283 
    284 *** font-lock
    285 **** DONE [[bug:35476]] font-lock-{append,prepend}-text-property and anonymous faces
    286 :PROPERTIES:
    287 :Role:           author
    288 :PatchApplied:   t
    289 :TestAdded:      t
    290 :Kudos:          StefanM,fixing
    291 :END:
    292 Started off as an [[orgmode:87r2a4ztt2.fsf@gmail.com][org-mode bug]]; Stefan applied a proper fix, then I
    293 added in some refactoring and unit tests.
    294 **** DONE [[bug:39597]] M-x occur adds fontification to fundamental-mode
    295 :PROPERTIES:
    296 :Role:           author
    297 :Kudos:          Juri,fixing&StefanM,fixing
    298 :END:
    299 Fixed by Stefan & Juri.
    300 *** fonts
    301 **** DONE [[bug:41747]] Add default fontset setup for "Symbols and Pictographs Extended-A"
    302 :PROPERTIES:
    303 :Role:           author
    304 :END:
    305 Unfortunately, Symbola now comes with a [[https://dn-works.com/wp-content/uploads/2020/UFAS-Docs/License.pdf][non-free license]].
    306 
    307 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
    308 [[https://en.wikipedia.org/wiki/Talk:Open-source_Unicode_typefaces#Symbola_font][Wikipedia]] thread.
    309 **** DONE [[bug:51495]] Avoid fonts with incomplete coverage of MATHEMATICAL chars
    310 :PROPERTIES:
    311 :Role:           author
    312 :PatchApplied:   t
    313 :END:
    314 *** help
    315 **** TODO Teach =C-h k= & =C-h l= about fancy keymaps
    316 Some modes introduce indirections that defeat ~describe-key~ and
    317 ~view-lossage~.
    318 
    319 E.g.
    320 - [ ] ~gnus-article-read-summary-keys~ ([[bug:68947]])
    321 - [ ] ~org-self-insert-command~ + ~org-use-speed-commands~
    322 
    323 Maybe we could define a property for the related keymaps that would
    324 hold a function for =help.el= to call, in order to complement =*Help*=
    325 buffers with more helpful information?
    326 *** imenu
    327 **** TODO Add grouping/sorting predicates to ~imenu~ completion
    328 So that ~imenu~ + ~icomplete-vertical-mode~ becomes a built-in,
    329 buffer-less equivalent of ~imenu-list~.
    330 
    331 Simple example of these predicates in action:
    332 
    333 #+begin_src elisp
    334 (completing-read
    335  "bleh? "
    336  (lambda (string pred action)
    337    (if (eq action 'metadata)
    338        (let ((sort-fn
    339               (lambda (candidates)
    340                 (let* ((numbers (sort (mapcar 'string-to-number candidates) '<))
    341                        (evens (seq-filter 'cl-evenp numbers))
    342                        (odds (seq-difference numbers evens)))
    343                   (mapcar 'number-to-string
    344                           (if (and (car evens) (< (car evens) (car odds)))
    345                               (append evens odds)
    346                             (append odds evens)))))))
    347          `(metadata
    348            (cycle-sort-function . ,sort-fn)
    349            (display-sort-function . ,sort-fn)
    350            (group-function
    351             . (lambda (candidate transform)
    352                 (if transform
    353                     candidate
    354                   (if (cl-evenp (string-to-number candidate))
    355                       "even"
    356                     "odd"))))))
    357      (complete-with-action action
    358                            (mapcar 'number-to-string
    359                                    (number-sequence 1 10))
    360                            string
    361                            pred))))
    362 #+end_src
    363 
    364 *** kill-ring
    365 **** DONE [[bug:60841]] ~copy-region-blink-delay~ spuriously kicks in when the =region= face has =:inverse-video=
    366 :PROPERTIES:
    367 :Role:           author
    368 :PatchApplied:   t
    369 :END:
    370 From ~emacs -Q~:
    371 #+begin_src elisp
    372 M-: (custom-set-faces '(region ((t (:foreground "blue" :inverse-video t)))))
    373 C-x h
    374 M-w
    375 ; ⇒ point moves to mark then back after copy-region-blink-delay seconds.
    376 #+end_src
    377 
    378 This is caused by ~indicate-copied-region~ checking for =region=
    379 having a =:background= to assess whether it's "highlighted".
    380 
    381 The bug report snowballed into
    382 
    383 - fixing a couple of corner-cases that made
    384   ~face-differs-from-default-p~ less useful than it could be,
    385 - adding a user-option for users who actually want that feedback
    386   unconditionally,
    387 - my first patch committed [[https://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-29&id=c4988840598b7da84b25d21a1936ce1ab6f6d666][in my own name]] 😲
    388 *** minibuffer
    389 **** TODO [[bug:69237]] Add command to toggle password visibility
    390 :PROPERTIES:
    391 :Role:           watcher
    392 :Kudos:          Michael Albinus,implementing
    393 :END:
    394 **** TODO Add completing read for links
    395 To harmonize ~org-open-at-point~'s =*Select Link*= &
    396 ~gnus-summary-browse-url~'s =URL to browse= prompts; allow matching on
    397 URL & description.
    398 *** project
    399 **** DONE [[bug:45765]] Change default-directory before prompting in project-compile
    400 :PROPERTIES:
    401 :Role:           author
    402 :PatchApplied:   t
    403 :END:
    404 *** regexp matching
    405 **** TODO [[bug:31586]] ~frame-title-format~ doesn't save match data
    406 :PROPERTIES:
    407 :Role:           watcher
    408 :END:
    409 **** DONE [[bug:33697]] file-truename messes with match data
    410 :PROPERTIES:
    411 :Role:           author
    412 :END:
    413 Merged with [[bug:31586]], a more general issue dealing with match data
    414 being "poisoned" by a user's =:eval= form in frame-title-format.
    415 **** DONE [[bug:57733]] Fix ~replace-*-in-region~ crash
    416 :PROPERTIES:
    417 :Role:           author
    418 :PatchApplied:   t
    419 :TestAdded:      t
    420 :END:
    421 *** shr
    422 **** DONE [[bug:39504]] Ensure faces of enclosing elements apply to <code> elements
    423 :PROPERTIES:
    424 :Role:           author
    425 :PatchApplied:   t
    426 :END:
    427 Unfortunately debbugs.el does not handle multiple patches per message;
    428 the first patch's diff was thus applied manually, with the second
    429 patch's title (and a whole new message by the maintainer).
    430 **** DONE [[bug:66676]] Delegate filling to ~visual-line-mode~
    431 :PROPERTIES:
    432 :Role:           watcher
    433 :Kudos:          Rahguzar
    434 :END:
    435 **** DONE [[bug:69555]] Keep indenting text when 'shr-fill-text' is nil
    436 :PROPERTIES:
    437 :Role:           author
    438 :PatchApplied:   t
    439 :TestAdded:      t
    440 :END:
    441 Longstanding itch that was my main motivation for instructing Gnus to
    442 hide text/html parts.  Now I can enjoy variable-pitch HTML parts /with
    443 properly indented citations/ 🧐
    444 *** use-package
    445 **** DONE [[bug:60366]] Simplify manual introduction
    446 :PROPERTIES:
    447 :Role:           author
    448 :PatchApplied:   t
    449 :END:
    450 Following integration into core.
    451 ** Major modes
    452 *** Buffer-menu
    453 **** TODO select on entry
    454 =C-x C-b= invokes ~list-buffers~ (resp. =C-x p C-b=
    455 ~project-list-buffers~), but does not select the menu window.
    456 
    457 There are many workarounds:
    458 
    459 - prefix with =C-x 4 1=
    460 - rebind =C-x C-b= to ~buffer-menu~
    461   - also selects menu window with =C-x 4 4= 👍
    462   - does not handle ~project-list-buffer~ 👎
    463 - customize =display-buffer-alist= to ~display-buffer-same-window~
    464   - handles ~project-list-buffer~ 👍
    465   - does not select menu window on =C-x 4 4= 👎
    466 
    467 Wondering if anyone is happy with the status quo.
    468 
    469 - /hatmatrix/ and 56 🔼voters are [[https://stackoverflow.com/q/1231188/1503371][unhappy]]; folks suggest (≈100 🔼votes
    470   total; ordered from most to least voted, merging duplicates)
    471   - rebinding to ~buffer-menu~,
    472   - using ~ido-mode~,
    473   - customizing =same-window-regexps= (obsoleted by
    474     =display-buffer-alist=),
    475   - rebinding to ~ibuffer~,
    476   - rebinding to ~bs-show~.
    477 - Neither Doom nor Spacemacs have bindings for ~buffer-menu~ nor
    478   ~list-buffers~; guessing users rely on buffer-switching commands
    479   with extra-featured completion frontends?
    480 *** Custom
    481 **** DONE [[bug:39074]] Horizontal line messes with variable value display in Custom buffers
    482 :PROPERTIES:
    483 :Role:           author
    484 :PatchApplied:   t
    485 :END:
    486 **** DONE [[bug:51556]] Poor contrast of Customize SVG icons with dark backgrounds
    487 :PROPERTIES:
    488 :Role:           author
    489 :Kudos:          StefanK,fixing
    490 :END:
    491 *** Dired
    492 **** DONE [[bug:23284]] Cannot input 'Y' with dired-do-query-replace-regexp
    493 :PROPERTIES:
    494 :Role:           author
    495 :Kudos:          Dmitry,fixing
    496 :END:
    497 **** DONE [[bug:28969]] Confirmation prompt for wildcard not surrounded by whitespace
    498 :PROPERTIES:
    499 :Role:           author
    500 :PatchApplied:   t
    501 :TestAdded:      t
    502 :END:
    503 My commit message ran afoul of debbugs.el's =M-m= again.
    504 *** ERC
    505 **** +Support SASL authentication+
    506 :PROPERTIES:
    507 :Kudos:          J.P.,fixing
    508 :END:
    509 Got bitten by this when trying to connect to irc.freenode.net from
    510 =alyon-654-1-454-60.w109-213.abo.wanadoo.fr=:
    511 #+begin_quote
    512 ERROR from irc.freenode.net: Closing Link:
    513 alyon-654-1-454-60.w109-213.abo.wanadoo.fr (SASL access only)
    514 #+end_quote
    515 
    516 This was requested in [[bug:29108]].  Lars closed this report because
    517 while there is a third-party package to implement the feature, its
    518 author did not respond when prompted for copyright assignment.
    519 
    520 I did not have the patience to look at the package; instead I went
    521 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
    522 =PLAIN= mechanism]], and cobbled this silly patch:
    523 
    524 #+begin_src diff
    525 diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
    526 index 1d5506e281..0da677ac18 100644
    527 --- a/lisp/erc/erc.el
    528 +++ b/lisp/erc/erc.el
    529 @@ -6052,7 +6052,17 @@ erc-login
    530                     erc-session-server
    531                     erc-session-user-full-name))
    532    (if erc-session-password
    533 -      (erc-server-send (format "PASS %s" erc-session-password))
    534 +      (progn
    535 +        (erc-server-send "CAP REQ :sasl")
    536 +        (erc-server-send "AUTHENTICATE PLAIN")
    537 +        (erc-server-send
    538 +         (concat "AUTHENTICATE " (base64-encode-string
    539 +                                  (string-join (list
    540 +                                                (user-login-name)
    541 +                                                (erc-current-nick)
    542 +                                                erc-session-password)
    543 +                                               "\0"))))
    544 +        (erc-server-send "CAP END"))
    545      (message "Logging in without password"))
    546    (erc-server-send (format "NICK %s" (erc-current-nick)))
    547    (erc-server-send
    548 #+end_src
    549 
    550 AFAICT this is enough to get me authenticated on Freenode.  It looks
    551 like it's not too hard to implement?
    552 
    553 Ideally Emacs's builtin =sasl.el= should be reused; that would let ERC
    554 support better SASL mechanisms than =PLAIN=.
    555 **** +Make timestamps robust vs window width changes+
    556 :PROPERTIES:
    557 :Kudos:          J.P.,fixing
    558 :END:
    559 *Solved in 5.6 with ~erc-fill-wrap~.*
    560 
    561 The =:align-to= spec for right timestamps inserts a fixed number of
    562 spaces, so resizing windows messes up their display.  Eg. moving a
    563 frame from one monitor to a smaller one, lines get wrapped
    564 unnecessarily.
    565 
    566 Don't know if the solution lies in (1) using one of the more
    567 sophisticated forms of =:align-to= as shown in [[info:elisp#Pixel Specification][(elisp) Pixel
    568 Specification]], (2) iterating over stamps on window-configuration
    569 changes and updating their spec (3) just stop using right-aligned
    570 stamps on the same line as messages.
    571 
    572 (2) would not handle a buffer being shown in two windows with
    573 different widths; (1) and (2) would not handle the window becoming too
    574 narrow and requiring splitting the stamp from its message.  So leaning
    575 toward (3).
    576 **** TODO Play well with whitespace-mode
    577 Last I checked, turning on whitespace-mode… hm.  That entry dates from
    578 4 years ago.  Probably it broke ERC? 🤷
    579 *** Gnus
    580 **** Article
    581 ***** TODO Aligned/tabular display of headers
    582 ***** TODO Simple setting for ~visual-line-mode~
    583 I like ~visual-line-mode~ since it automatically re-flows buffers on
    584 window width changes, and composes with ~adaptive-wrap~ to add
    585 relevant wrap prefixes (extra indentation, citation marks), and I hope
    586 Someday™ [[bug:52983][a built-in solution to limit line length]] will be added (in
    587 the meantime, I use kludgy margin hacks to keep buffers narrow &
    588 centered).
    589 
    590 Currently, AFAICT (from incremental config tweaks; haven't searched
    591 the manual thoroughly), getting Gnus to soft-wrap lines requires
    592 futzing with:
    593 
    594 - ~gnus-article-truncate-lines~
    595 - ~gnus-article-unfold-long-headers~
    596 - ~gnus-treat-fill-article~
    597 - ~gnus-treat-fill-long-lines~
    598 - ~gnus-treat-fold-headers~
    599 - _finally_, calling ~visual-line-mode~ in ~gnus-article-mode-hook~
    600 **** Cloud
    601 ***** TODO [[bug:41530]] gnus-cloud-download-all-data does not mark articles as read
    602 :PROPERTIES:
    603 :Role:           author
    604 :END:
    605 **** Summary
    606 ***** DONE [[bug:47026]] Allow Gnus summary faces to extend to end of line
    607 :PROPERTIES:
    608 :Role:           author
    609 :PatchApplied:   t
    610 :END:
    611 ***** DONE [[bug:49800]] Extend Gnus summary highlight faces by default
    612 :PROPERTIES:
    613 :Role:           author
    614 :PatchApplied:   t
    615 :END:
    616 ***** Threading
    617 ****** DONE [[bug:40520]] Prevent duplicate thread titles
    618 :PROPERTIES:
    619 :Role:           author
    620 :PatchApplied:   t
    621 :END:
    622 ****** TODO [[bug:42334]] [[bug:53755]] gnus-thread-sort-functions vs. loose threads
    623 :PROPERTIES:
    624 :Role:           author
    625 :END:
    626 Closed by Lars because the way Gnus sorts things just isn't amenable
    627 to fixing this right now.  Will probably need to take the plunge at
    628 some point.
    629 *** Ibuffer
    630 **** TODO Elide with "…" if displayable
    631 **** TODO Add human-readable size
    632 With summary:
    633 #+begin_src elisp
    634 (define-ibuffer-column size-hr
    635   (:name "Size"
    636    :summarizer
    637    (lambda (strings)
    638      (file-size-human-readable
    639       (apply '+ (mapcar (lambda (s)
    640                           (get-text-property (1- (length s)) 'ibuffer-size s))
    641                         strings)))))
    642   (let ((sz (buffer-size buffer)))
    643     (propertize (file-size-human-readable sz) 'ibuffer-size sz)))
    644 #+end_src
    645 
    646 While at it, use this ~propertize~ trick to get rid of the "ewww"
    647 comment in ~define-ibuffer-column size~.
    648 *** Info
    649 **** ~info-display-manual~
    650 ***** TODO redundant candidates
    651 E.g. =foo= and =foo.info.gz=.
    652 ***** TODO invalid candidates
    653 E.g. =gnutls-….png=
    654 ***** TODO use ~Info-additional-directory-list~
    655 **** TODO redundant ~(if x (append x y) y)~
    656 **** TODO redundant entries in ~Info-default-directory-list~ (Glenn's FIXME)
    657 - 2000-12-14 "(Info-default-directory-list): If…" (e103ef954c)
    658   config-dir = "{configure-info-directory}/"
    659   config     = (list config-dir)
    660   config-dir ∈ standard-info-dirs
    661       ⇒ standard-info-dirs/config-dir ∨ config
    662 - 2000-12-15 "(Info-default-directory-list): Don't…" (b6348438a2)
    663   config-dir ∈ standard-info-dirs
    664         ⇒ standard-info-dirs ∨ config
    665 - 2012-05-26 "* lisp/paths.el (Info-default-…" (04188bb9ad)
    666   "why though"
    667 *** Org
    668 **** DONE [[orgmode:877efbgi4i.fsf@gmail.com]] Binding org-insert-todo-heading to M-S-RET
    669 :PROPERTIES:
    670 :Role:           author
    671 :Kudos:          Nicolas Goaziou,fixing
    672 :END:
    673 Inspired by [[https://github.com/jrblevin/markdown-mode/pull/317][jrblevin/markdown-mode#317]].
    674 **** DONE [[orgmode:87r2a4ztt2.fsf@gmail.com]] Bug: Strike-through messes with heading face
    675 :PROPERTIES:
    676 :Role:           author
    677 :PatchApplied:   t
    678 :END:
    679 Eventually reverted in favor of a better fix in [[bug:35476]].
    680 **** DONE [[orgmode:877dxpazbo.fsf_-_@gmail.com]] Make RET and C-j obey ~electric-indent-mode~ in org-mode
    681 :PROPERTIES:
    682 :Role:           author
    683 :PatchApplied:   t
    684 :TestAdded:      t
    685 :END:
    686 Followup to an emacs-devel thread about reconciling org-mode
    687 idiosyncrasies with Emacs core.
    688 **** DONE [[orgmode:87blm8v09s.fsf@gmail.com]] Possible fix for :includes header argument in org-babel C source blocks
    689 :PROPERTIES:
    690 :Role:           author
    691 :PatchApplied:   t
    692 :TestAdded:      t
    693 :END:
    694 Stumbled on this regression before starting work on a completely
    695 unrelated feature, and trying to get unit tests to pass.
    696 **** DONE [[orgmode:87mu5mhm1u.fsf@gmail.com]] Failing tests
    697 :PROPERTIES:
    698 :Role:           author
    699 :PatchApplied:   t
    700 :TestAdded:      t
    701 :END:
    702 More unrelated tests that needed fixing before I could start working.
    703 **** TODO [[orgmode:87mu62gvjk.fsf@gmail.com]] Setting org-todo-keywords through directory-local variables
    704 :PROPERTIES:
    705 :Role:           author
    706 :END:
    707 ACKed by Bastien; bump once 9.4 is released.
    708 **** DONE [[bug:42184]] org-fontify-whole-heading-line does not work in emacs 27
    709 :PROPERTIES:
    710 :Role:           watcher
    711 :PatchApplied:   t
    712 :END:
    713 An unfortunate fallout of the new =:extend= face attribute; fixed in
    714 Org 9.4, which eventually landed in Emacs 27's maintenance branch
    715 (cf. [[bug:43268]]).
    716 **** TODO [[orgmode:87mu3ze52c.fsf@gmail.com]] Default description for abbreviated links
    717 :PROPERTIES:
    718 :Role:           author
    719 :END:
    720 Counter-proposal by Bastien.  Next step: ACK and get back to the
    721 workbench.
    722 **** TODO Skip checkbox width when filling list item
    723 Currently items are filled like this:
    724 #+begin_example
    725 - [ ] lorem
    726   ipsum
    727 #+end_example
    728 Adding =\\[.\\]= to the regexp used in org-list-item-body-column
    729 allows "ipsum" to be aligned below "lorem".
    730 **** TODO [[bug:52587]] Prevent ~#+end_src~ background from extending to end-of-line when folded
    731 See also [[bug:65896]] for the converse: allowing the /heading/'s
    732 background to extend when folded.
    733 **** TODO Add pandoc's ~auto_identifiers~ scheme for ID generation
    734 ~org-export-new-reference~ is the function which generates the current
    735 ID, but it returns integers, so maybe the tweak should be made
    736 somewhere above in the call stack?
    737 **** TODO Make org-refile completion more similar to filename completion
    738 I'd like to have org-refile completion work like =C-x p p=, =C-x p f=, and
    739 Gnus's =B m=, where typing "bar" matches "x/bar".
    740 
    741 Current org-refile config:
    742 #+begin_src elisp
    743 (setq org-refile-targets (list (cons nil (cons :maxlevel 10)))
    744       org-refile-use-outline-path t
    745       org-outline-path-complete-in-steps nil)
    746 #+end_src
    747 
    748 IIUC =C-x p= commands use ~project--file-completion-table~, which passes a
    749 lambda to ~completing-read~ which returns ~(category . project-file)~
    750 metadata, and…
    751 
    752 #+begin_src elisp
    753 (alist-get 'styles (alist-get 'project-file completion-category-defaults))
    754 #+end_src
    755 
    756 … says =substring=.  Likewise, ~gnus-summary-move-article~ uses
    757 ~gnus-completing-read~, which by default uses
    758 ~gnus-emacs-completing-read~, which sets ~completion-styles~ to
    759 ~gnus-completion-styles~, which includes =substring=.
    760 
    761 Ergo: either I add =substring= to my ~completion-styles~, or I teach
    762 ~org-refile~ to use =substring=… by default? when ~path-complete-in-steps~
    763 is nil? depending on a user option? 🤔
    764 **** TODO Fix clock table not accounting for "descriptive links"
    765 E.g. if a heading contains =[[http://long.url][Short description]]=,
    766 the text that ends up in the clock table can be truncated to a shorter
    767 length than the available width.
    768 
    769 Assuming this is because there is a length-computing function that
    770 does not account for ~org-link-descriptive~.
    771 *** Programming modes
    772 **** ~conf-mode~
    773 ***** TODO Tweak ~javaprop~ comments
    774 As per [[https://docs.oracle.com/javase/10/docs/api/java/util/Properties.html#load(java.io.Reader)][the rationale]]:
    775 #+begin_src diff
    776 diff --git a/lisp/textmodes/conf-mode.el b/lisp/textmodes/conf-mode.el
    777 index 57ec8a0428..91aabfb6d2 100644
    778 --- a/lisp/textmodes/conf-mode.el
    779 +++ b/lisp/textmodes/conf-mode.el
    780 @@ -140,8 +140,7 @@ conf-unix-mode-syntax-table
    781  
    782  (defvar conf-javaprop-mode-syntax-table
    783    (let ((table (make-syntax-table conf-unix-mode-syntax-table)))
    784 -    (modify-syntax-entry ?/  ". 124" table)
    785 -    (modify-syntax-entry ?*  ". 23b" table)
    786 +    (modify-syntax-entry ?! "<" table)
    787      table)
    788    "Syntax table in use in Java properties buffers.")
    789  
    790 @@ -487,7 +486,7 @@ conf-javaprop-mode
    791    (conf-mode-initialize "#" 'conf-javaprop-font-lock-keywords)
    792    (setq-local conf-assignment-column conf-javaprop-assignment-column)
    793    (setq-local conf-assignment-regexp ".+?\\([ \t]*[=: \t][ \t]*\\|$\\)")
    794 -  (setq-local comment-start-skip "\\(?:#+\\|/[/*]+\\)\\s *")
    795 +  (setq-local comment-start-skip "^[ \t]*\\(?:#+\\|!+\\)\\s *")
    796    (setq-local imenu-generic-expression
    797  	      '(("Parameters" "^[ \t]*\\(.+?\\)[=: \t]" 1))))
    798  
    799 
    800 #+end_src
    801 **** ~emacs-lisp-mode~
    802 ***** Prefer Emacs source directory over installation directory when finding definitions
    803 Entry points:
    804 
    805 - =M-.= on Elisp symbols: hook into ~elisp--xref-find-definitions~,
    806   add a preference to consider source dir when
    807   ~find-lisp-object-file-name~ returns something under the
    808   installation dir?
    809 
    810 - ~help-view-source~ in Help buffers: likewise; in
    811   ~help-function-def--button-function~ … or not, eventually reaches
    812   down to ~find-library-name~; tunable with
    813   =find-library-source-path=?
    814 
    815 =find-library-source-path= might be the answer for both situations.
    816 **** ~python-mode~
    817 ***** DONE [[bug:51807]] Fix customization group of python-forward-sexp-function
    818 :PROPERTIES:
    819 :Role:           author
    820 :PatchApplied:   t
    821 :END:
    822 ***** DONE [[bug:52380]] ~run-python~ no longer focuses interpreter
    823 :PROPERTIES:
    824 :Role:           author
    825 :PatchApplied:   t
    826 :TestAdded:      t
    827 :END:
    828 **** ~sh-mode~
    829 ***** TODO Tweak indentation of continuation lines
    830 Attempted to piggyback on Dario Gjorgjevski's [[bug:44592]] to fix these cases:
    831 #+begin_src shell
    832 ${foo}bar \
    833     --arg
    834 $(foo)bar \
    835     --arg
    836 
    837 ${foo}bar --arg1 \
    838           --arg2
    839 $(foo)bar --arg1 \
    840           --arg2
    841 #+end_src
    842 
    843 Unfortunately my attempt was [[bug:50320][too naive]] and got reverted.  I'll have to
    844 [[https://lists.gnu.org/archive/html/help-gnu-emacs/2021-09/msg00004.html][dig into SMIE]] more seriously…
    845 *** ReST
    846 **** TODO auto-pairing
    847 Backquotes and asterisks; gate syntax-table changes behind user option
    848 and/or add commands for styling
    849 **** TODO faces
    850 - =.. code block::=
    851 - links
    852 **** TODO indentation
    853 - =.. code-block::=
    854 **** TODO link insertion
    855 **** TODO outline support
    856 *** VC
    857 **** DONE [[bug:68183]] ~vc-dir~ chokes when upstream branch is local
    858 :PROPERTIES:
    859 :Role:           watcher
    860 :PatchApplied:   t
    861 :TestAdded:      t
    862 :Kudos:          eliz,reviewing&Dmitry,reviewing&Sean Whitton,reviewing
    863 :END:
    864 IOW when =branch.<CURRENT>.remote= is =.=.
    865 
    866 While fixing this, add a new =Tracking= header; try to leave =vc-git=
    867 in a better state than I found it: add tests; refactor
    868 ~vc-git-dir-extra-headers~.
    869 ***** [[bug:76187]] flaky test
    870 :PROPERTIES:
    871 :PatchApplied:   t
    872 :Kudos:          Paul Eggert,reporting
    873 :END:
    874 ** Minor modes
    875 *** electric-pair
    876 **** DONE [[bug:39680]] electric-pair-mode broken by undo
    877 :PROPERTIES:
    878 :Role:           author
    879 :TestAdded:      t
    880 :Kudos:          StefanM,fixing
    881 :END:
    882 Fixed by Stefan.  It took some time and effort, but I eventually
    883 managed to write a unit test.
    884 *** icomplete
    885 **** DONE [[bug:38024]] icomplete sometimes fails to show completions after backward-killing words
    886 :PROPERTIES:
    887 :Role:           author
    888 :Kudos:          João,fixing
    889 :END:
    890 **** TODO [[bug:40152]] icomplete vs recursive prompts
    891 :PROPERTIES:
    892 :Role:           author
    893 :END:
    894 *** visual-line
    895 **** TODO [[bug:31666]] Bad interaction between visual-line-mode and wrap-prefix on long lines
    896 :PROPERTIES:
    897 :Role:           watcher
    898 :END:
    899 Aka "visual-line-mode adds newlines before words that end up being
    900 split anyway"; the problem occurs without wrap-prefixes.
    901 **** TODO Faces bleed backward
    902 #+begin_example
    903  foo bar        ↩
    904 ↪baz
    905 #+end_example
    906 Point on "baz", mark-sexp: empty space between "bar" and end of
    907 previous visual line is marked.
    908 *** visual-wrap-prefix
    909 **** DONE [[bug:41810]] Fontify wrap-prefix
    910 :PROPERTIES:
    911 :Role:           author
    912 :PatchApplied:   t
    913 :END:
    914 **** DONE [[bug:76008]] Vs text-scale
    915 :PROPERTIES:
    916 :Role:           author
    917 :Kudos:          Jim Porter,fixing
    918 :END:
    919 **** TODO [[bug:76018]] Stop sticking to RET
    920 :PROPERTIES:
    921 :Role:           author
    922 :END:
    923 **** TODO More fontifying?
    924 1. Start ~markdown-mode~.
    925 2. Write some ~> long line~ of quoted text.
    926 3. Start ~visual-line-mode~ and ~adaptive-wrap-prefix-mode~
    927 
    928 ~>~ markers are not fontified.
    929 **** TODO Take ~display~ property into account
    930 1. Start ~markdown-mode~.
    931 2. ~markdown-toggle-markup-hiding~.
    932 3. Write some ~> long line~ of quoted text.
    933 4. Start ~visual-line-mode~ and ~adaptive-wrap-prefix-mode~
    934 
    935 The ~wrap-prefix~ does not match the opening ~>~'s ~display~ property.
    936 **** TODO Ignore ~whitespace-mode~
    937 Seeing whitespace markers is misleading.
    938 **** TODO Ignore some faces
    939 #+begin_example
    940  - foo bar  ↩
    941 ↪  baz quux ↩
    942 ↪  (corge)
    943 #+end_example
    944 With point on =b= in "baz":
    945 - mark-sexp: wrap-prefix gets =region= face
    946 - flyspell-mode: wrap-prefix gets =flyspell-incorrect= face
    947 With point on =(= or past =)= in "(corge)":
    948 - wrap-prefix gets =show-paren-match=
    949 ** Themes
    950 *** Modus
    951 **** DONE [[https://gitlab.com/protesilaos/modus-themes/-/merge_requests/50][protesilaos/modus-themes!50]] Tone down ~icomplete-selected-match~
    952 :PROPERTIES:
    953 :Role:           author
    954 :PatchApplied:   t
    955 :END:
    956 ** ERT
    957 *** TODO Noninteractive pitfalls
    958 - testing faces vs redisplay: may need ~font-lock-ensure~
    959   [[https://list.orgmode.org/87a70stkmv.fsf@gmail.com/#Z32testing:lisp:test-org.el][(org-mode dir-local TODO keywords)]]
    960 - post-command hooks: may need ~ert-simulate-command~
    961   [[bug:39680#32][(electric-pair + undo bug)]]
    962 - ~(window-buffer (selected-window))~ does not always match
    963   ~(current-buffer)~ [[bug:52380#38][(run-python)]]
    964 * ELPA
    965 ** ada-mode
    966 *** DONE [[bug:52167]] Preserve default value of ~project-read-file-name-function~
    967 :PROPERTIES:
    968 :Role:           author
    969 :PatchApplied:   t
    970 :END:
    971 ada-mode pulls in uniquify-files, which unconditionally changes the
    972 default value of ~project-read-file-name-function~.
    973 
    974 - In uniquify-files: stop doing that; advertise this setting in the
    975   package commentary.
    976 - In ada-mode: let-bind this variable in ~ada-find-file~.
    977 
    978 Patches applied, though the maintainer did not preserve authorship nor
    979 rationales from the commit messages.  For my own sanity:
    980 
    981 - [[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]];
    982 - [[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]]:
    983   - (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
    984     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]];
    985   - (NEWS) applied [[https://git.savannah.nongnu.org/cgit/ada-mode.git/commit/?h=org.emacs.ada-mode&id=e5bc6c3c][there]];
    986 - [[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;
    987 - [[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]].
    988 ** debbugs
    989 *** DONE [[bug:38551]] bind to RET rather than return
    990 :PROPERTIES:
    991 :Role:           author
    992 :PatchApplied:   t
    993 :END:
    994 *** TODO autoload debbugs-gnu-emacs-release-blocking-reports
    995 I prefer this over the Org variant, which is autoloaded.
    996 *** TODO Make ~debbugs-gnu-apply-patch~ smarter
    997 To avoid accidents like [[bug:28969]], [[bug:39504]], [[bug:41810]], and
    998 [[bug:57733]].
    999 ** diff-hl
   1000 *** DONE [[https://github.com/dgutov/diff-hl/issues/142][#142]] Weird interaction between diff-hl-flydiff-mode and org-indent-mode
   1001 :PROPERTIES:
   1002 :Kudos:          eliz,fixing
   1003 :END:
   1004 Eventually reported back to Emacs core in [[bug:41584]].
   1005 ** which-key
   1006 *** DONE [[https://github.com/justbur/emacs-which-key/issues/314][#314]] Some keymap names no longer show up
   1007 :PROPERTIES:
   1008 :Role:           author
   1009 :PatchApplied:   t
   1010 :TestAdded:      t
   1011 :END:
   1012 * MELPA
   1013 ** forge
   1014 *** DONE [[https://github.com/magit/forge/pull/549][magit/forge#549]] Let ~forge-post-author~ and ~forge-post-date~ have foregrounds
   1015 :PROPERTIES:
   1016 :Role:           author
   1017 :PatchApplied:   t
   1018 :END:
   1019 Initially not possible because:
   1020 
   1021 1. for regular notes, ~forge-topic-refresh-buffer~ uses
   1022    ~add-face-text-property~; using ~font-lock-append-text-property~
   1023    would solve this;
   1024 
   1025 2. for the note at point, forge sets ~heading-highlight-face~ to
   1026    ~magit-diff-hunk-heading-highlight~, which has a foreground;
   1027    magit-section applies the ~heading-highlight-face~ via overlays, so
   1028    it will always have more priority than text properties.
   1029 
   1030 Sent patch to solve 1.  2 is not a problem in my setup, since the
   1031 highlight face has no foreground.
   1032 *** TODO Delete source branch when GitLab MR is merged
   1033 IOW set =remove_source_branch= (resp. =should_remove_source_branch=)
   1034 when submitting (resp. merging) the request.  Possible solutions:
   1035 
   1036 - Elisp option
   1037 - Git config variable
   1038 - Transient infix argument
   1039 *** TODO Wash emoji codes
   1040 On GitHub and GitLab, emoji that users enter via =:short_codes:= on
   1041 the web UI are sent by the API as =:short_codes:=, instead of bona
   1042 fide Unicode code points.
   1043 
   1044 (Emoji sent by clients like forge seem unaffected)
   1045 
   1046 Kludge:
   1047 
   1048 #+begin_src elisp
   1049 (defun my/emoji-translate-code ()
   1050   (save-excursion
   1051     (with-silent-modifications
   1052       (let ((inhibit-read-only t)
   1053             (old-input-method current-input-method))
   1054         (set-input-method "emoji")
   1055         (while (re-search-forward ":[a-z_]*:" nil t)
   1056           (when-let*
   1057               ((beg (match-beginning 0))
   1058                (end (match-end 0))
   1059                (code (match-string 0))
   1060                (translation
   1061                 (or (quail-lookup-key code)
   1062                     (and (string-match ":\\([a-z]*\\)_\\([a-z]*\\):" code)
   1063                          (quail-lookup-key
   1064                           (format
   1065                            ":%s-%s:"
   1066                            (match-string 2 code) (match-string 1 code)))))))
   1067             (let ((emoji-string
   1068                    (pcase (car translation)
   1069                      ((pred integerp) (string (car translation)))
   1070                      (_ (mapconcat 'identity (cdar translation))))))
   1071               (message "replacing %s with %s" code emoji-string)
   1072               (add-text-properties beg end `(display ,emoji-string)))))
   1073         (set-input-method old-input-method)))))
   1074 #+end_src
   1075 
   1076 ** magit
   1077 *** DONE Helping ~magit-ediff-dwim~ read my mind
   1078 :PROPERTIES:
   1079 :Role:           author
   1080 :PatchApplied:   t
   1081 :END:
   1082 [[https://emacs.stackexchange.com/q/18200/10209][Reported on StackExchange]] first, then [[https://github.com/magit/magit/commit/f65b1bddd31070e6012fe91a7d845f748c40b901][applied by tarsius]].
   1083 *** DONE [[https://github.com/magit/magit/pull/2928][magit/magit#2928]] magit-split-range: fix handling of "..@{upstream}"
   1084 :PROPERTIES:
   1085 :Role:           author
   1086 :PatchApplied:   t
   1087 :END:
   1088 *** DONE [[https://github.com/magit/magit/pull/3720][magit/magit#3720]] Make magit-blame-echo actually echo the commit summary
   1089 :PROPERTIES:
   1090 :Role:           author
   1091 :PatchApplied:   t
   1092 :END:
   1093 *** DONE [[https://github.com/magit/magit/pull/4043][magit/magit#4043]] Fix git-commit fontification when comments contain brackets
   1094 :PROPERTIES:
   1095 :Role:           author
   1096 :PatchApplied:   t
   1097 :END:
   1098 *** 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
   1099 :PROPERTIES:
   1100 :Role:           author
   1101 :Kudos:          tarsius,fixing
   1102 :END:
   1103 The initial state of affairs:
   1104 
   1105 - ~global-magit-file-mode~ says ~:init-value t~, but that has no
   1106   effect.
   1107 - We need to move ~magit-file-mode~ (and ~magit-blob-mode~ while we're
   1108   at it) to a new, dedicated library, and either
   1109   - let users customize ~global-magit-file-mode~ to t, which will
   1110     DTRT,
   1111   - autoload the form that enables the mode if the variable is set.
   1112 
   1113 It's already possible to do either, but it slows down startup
   1114 considerably.  Hopefully moving the mode to a file that does not
   1115 ~(require 'magit)~ will mitigate this?
   1116 
   1117 [[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]].
   1118 *** TODO ~git-commit-major-mode~ set in =.dir-locals.el= messes with revision buffers
   1119 E.g. as configured in =magit/= repositories.  This affects =SPC= and
   1120 =n=, =p= in log buffers.  Workarounds:
   1121 
   1122 1. use =RET= to view commits;
   1123 2. jump to revision buffer and hit =g=.
   1124 ** markdown-mode
   1125 *** DONE [[https://github.com/jrblevin/markdown-mode/pull/124][jrblevin/markdown-mode#124]] Prevent spurious bold fontification
   1126 :PROPERTIES:
   1127 :Role:           author
   1128 :PatchApplied:   t
   1129 :TestAdded:      t
   1130 :END:
   1131 *** DONE [[https://github.com/jrblevin/markdown-mode/issues/172][jrblevin/markdown-mode#172]] Spurious bold/italic in inline code
   1132 :PROPERTIES:
   1133 :Role:           author
   1134 :TestAdded:      t
   1135 :Kudos:          jrblevin
   1136 :END:
   1137 *** DONE [[https://github.com/jrblevin/markdown-mode/issues/223][jrblevin/markdown-mode#223]] Bold markers mess up italics detection
   1138 :PROPERTIES:
   1139 :Role:           author
   1140 :Kudos:          jrblevin
   1141 :END:
   1142 *** DONE [[https://github.com/jrblevin/markdown-mode/pull/252][jrblevin/markdown-mode#252]] Fix markdown-inline-code-face's :inherit attribute
   1143 :PROPERTIES:
   1144 :Role:           author
   1145 :PatchApplied:   t
   1146 :END:
   1147 *** DONE [[https://github.com/jrblevin/markdown-mode/pull/317][jrblevin/markdown-mode#317]] Bind markdown-insert-list-item to M-RET rather than M-<return>
   1148 :PROPERTIES:
   1149 :Role:           author
   1150 :PatchApplied:   t
   1151 :TestAdded:      t
   1152 :END:
   1153 ** page-break-lines
   1154 *** 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
   1155 :PROPERTIES:
   1156 :Role:           author
   1157 :PatchApplied:   t
   1158 :END:
   1159 ** paradox
   1160 *** DONE [[https://github.com/Malabarba/paradox/pull/125][Malabarba/paradox#125]] Invert :inherit order for paradox-mode-line-face
   1161 :PROPERTIES:
   1162 :Role:           author
   1163 :PatchApplied:   t
   1164 :END:
   1165 *** DONE [[https://github.com/Malabarba/paradox/pull/160][Malabarba/paradox#160]] Fix "Invalid face reference" warnings for custom-button-mouse
   1166 :PROPERTIES:
   1167 :Role:           author
   1168 :PatchApplied:   t
   1169 :END:
   1170 * COMMENT File-local variables
   1171 #+LINK: bug     https://debbugs.gnu.org/
   1172 #+LINK: orgmode https://orgmode.org/list/%s/t/#u
   1173 # Local variables:
   1174 # org-property-format: "%-16s %s"
   1175 # end: