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 (45565B)


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