summaryrefslogtreecommitdiff
path: root/personal/itches/emacs/bulk.md
blob: 31e6090362cc8d5bc41fdda373795a5da738acf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# Emacs

- center/top point when
    - moving to text/tag search hit
    - going to man page section
    - opening eww on an anchor
    - visiting a function from its Help buffer
- make font-lock stop background at fill-column or max(len(line) for
  line in paragraph) rather than window-width when text spans >1 lines
- shell-mode
    - add faces instead of reusing font-lock-{comment,string}
    - understand `autocd` and `cd !$`
    - use Bash completions (e.g. `ls TAB` in a folder with one file)
- [.dir-locals changed priorities][bug#30008] between subfolder and
  major mode from 25 to 26
- eshell: `ls --group-directories-first` does not color folders
- emoji support
- eww, gnus-article: adapt filling to window width changes
- scroll-lock-mode
    - cursor stuck on lines wrapped by visual-line-mode
    - cursor stuck on lines with 😛
    - scroll when going down newline with forward-…
- matching-paren analysis fails: `;; (here is\n;; a comment)`
- some modes redefine C-M-h, which makes this binding hard to
  override; could mark-defun consult functions/values exposed by major
  modes instead?
- make ellipses for "invisible" text easily customizable (src/xdisp.c)
- Man-mode: make isearch skip end-of-line hyphens
- when opening `.gpg` files in a TTY, some characters (e.g. TAB) are
  swallowed by Emacs instead of being forwarded to the gpg prompt;
  these characters are then inserted in the decrypted file's buffer
  (see `epa-file-insert-file-contents`)
- let TRAMP fetch Google Drive credentials from .authinfo.gpg
- icomplete's C-j does not choose the first completion as advertised
  on empty input; it chooses ".", which AFAICT comes from the fact
  that icomplete-exhibit calls completion-pcm--filename-try-filter
  while icomplete-force-complete-and-exit simply calls
  minibuffer-force-complete-and-exit
    - likewise, if a folder contains foo.c and foo.o, "C-x C-f foo"
      hides foo.o, yet C-j completes to foo.o
- calendar uses default X resources when run in its own frame; see
  `calendar-frame-parameters`, `x-handle-named-frame-geometry`,
  `(make-frame '((name . "")))` vs `(make-frame '((title . "")))`
- use compilation-mode-line-… faces for compilation-num-… indicators
- "é" is not erased with a single DEL stroke, despite [Unicode
  conventions]
- sort tar archive members by name; serving suggestion:

    ``` elisp
    (defun my/tar-sort (info)
      (sort info (lambda (a b) (string< (tar-header-name a) (tar-header-name b)))))
    ;; Apply to tar-parse-info in tar-summarize-buffer.
    ```

- add a command or minor mode to highlight marks; serving suggestion:

    ``` elisp
    (save-excursion
      (dolist (m mark-ring)
        (goto-char (marker-position m))
        (pulse-momentary-highlight-region (point) (point-at-eol))
        (sit-for 0.1)))
    ```

- StackOverflow-like suggestions when reporting bugs
- match data vs. `:eval` during redisplay: cf. [bug#31586]
- make vc honour `.gitignore` so that `project-find-file` completion
  is not cluttered with ignored files
- in a folder with a .git folder and a .gitignore file,
    - `C-x C-f .gi TAB` completes to .gitignore
    - `C-x C-f .git TAB` says "not unique"
- add some Custom machinery to save additions/removals to list
  variables; as things stand, once I add/remove items and save the
  variable, I miss out on changes to the variable's default value:
  e.g. `git-commit-setup-hook` recently added `bug-reference-mode`,
  but I never realized it because I customized the hook to add some
  personal functions
- e-pair-mode inserts a closing `$` after point in tex-mode, but
  inserts a new pair instead of overwriting when pressing `$` again
- completions in python.el's comint buffer get confused when
  readline's completion-prefix-display-length is set: candidates
  become elided, maybe python-shell-completion-native-get-completions
  is not ready for that?
- some bindings advertised by `describe-mode` in texinfo-mode are
  invalid:
    - `C-c C-s` runs `Texinfo-insert-node` instead of
      `texinfo-show-structure`
    - `C-c C-e` runs `Texinfo-environment` instead of being a prefix
      command for `texinfo-format-{buffer,region}`

[bug#30008]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30008
[bug#31586]: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=31586
[Unicode conventions]: https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00961.html

## Better out-of-the-box display for FORM FEED

By default, FORM FEED is displayed as a dumb `^L` glyph.  This is
surprising considering it shows up in so many places: Emacs source
files, help buffers (e.g. `describe-mode`)…  You can even see it in
source files of other GNU projects, like GCC.

"Pages" are important enough to have their own navigation and
narrowing commands, yet their default delimiter is displayed as an
unassuming control character.

I like the way form feeds are displayed with [`page-break-lines`];
magit's `show-lines` blaming style achieves a similar look.

Having this kind of display by default would make it more obvious that
this character serves an actual purpose; as it stands, it looks no
different from some stray CARRIAGE RETURN.

This could be re-used by e.g.:

- `describe-symbol`, which uses the following method to visually break
  up multiple symbol definitions:

  ``` lisp
  (insert "\n\n"
          (eval-when-compile
            (propertize "\n" 'face '(:height 0.1 :inverse-video t)))
          "\n")
  ```

- Custom buffers, where sections are delimited visually with a
  999-character wide underlined space.

Full disclosure
:   This reflection started because moving over this underlined space
    with `truncate-lines` on causes the screen to jump horizontally.
    This specific problem should be fixable without dragging FORM FEED
    display into the discussion, but I feel like the latter is the
    more interesting issue ([who on Earth] enables `truncate-lines` by
    default anyway).

[`page-break-lines`]: https://github.com/purcell/page-break-lines
[who on Earth]: https://gitlab.com/peniblec/dotfiles/blob/master/.emacs-custom.el

## Dired

- allow "columns" to be toggled; more specifically, make it possible
  to hide ownership, permissions, number of hard links…

- make the filename stand out

- `% r` does not support some `\` constructs (`\#`, `\,`)

- add a face for broken symbolic links

## ERC

- move timestamp to a better position (see `stamp` module)
- play well with whitespace-mode

## Org

- dissociate sub- and super-script fontification from everything else
  in org-toggle-pretty-entities

- org-clocktable trips on DST:

    ``` org
    #+BEGIN: clocktable :scope file :maxlevel 2 :step day :stepskip0 t :tstart "[2018-10-15]" :tend "[2018-11-15]"
    #+END:

    * foo
    :LOGBOOK:
    CLOCK: [2018-10-26 Fri 08:00]--[2018-10-26 Fri 17:00] =>  9:00
    :END:

    * bar
    :LOGBOOK:
    CLOCK: [2018-10-29 Mon 08:00]--[2018-10-29 Mon 17:00] =>  9:00
    :END:
    ```

- make org-ctrl-c-ctrl-c call `(org-clock-update-mode-line t)` when
  point is on the clocked-in heading

- new command `org-clock-in-late` to clock out x minutes ago from
  previous task, and clock in x ago on task at point

## Language support

- fix builtin/keyword distinction for Bash & Python3
- highlight variables inside strings, eg
    - `"a ${variable} inside a double-quoted string"` (Bash)
    - `'a format string's {variable}` (Python)
- do not highlight a single-quoted command substitution
- recognize [POSIX "immediate-expansion"][austin#330] operator `::=`

[austin#330]: http://austingroupbugs.net/view.php?id=330

## read-passwd

- prevent kills from ending up in the clipboard
- add command to temporarily reveal password

## whitespace-mode

- skip line/wrap-prefix variables and properties

- highlights the adaptive-wrap prefix, although weirdly enough the
  whitespace *faces* are not applied

- in org-indent-mode, adds a spurious (unfaced) space marker before
  paragraphs; somehow transient-mark-mode knows not to highlight this
  space, maybe the answer lies there

## External libraries

### adaptive-wrap

- a commented-out line with no space between the comment delimiter and
  its text will get padded with the comment delimiter:

        ;(some very long line)
        ;; ⇒ wrapped with adaptive-wrap-extra-indent set to 4:
        ;(some very
        ;;;;;long line)

### magit

- customize current-tag function so that one can add `--first-parent`
- prevent section highlight overlay from hiding tag face background
- when quitting ediff conflict resolution, the "save buffer" prompt is
  out of focus, one must ALT-TAB out of the ediff control panel first
  (noticed in Emacs 27; 25.1 works fine); possible culprits:
    - magit
    - ediff
    - smerge
    - yes-or-no-p
    - read-answer
- if deleting a remote branch fails (e.g. due to wrong credentials),
  `update-ref -d` is still run
- make status buffer understand and display `typechange` e.g. when
  replacing a replacing a regular file with a symlink
- when ignoring a file in a subdirectory, magit attempts to
  `git add .gitignore` (i.e. toplevel `.gitignore`), which fails

### markdown-mode

- support [shortcut reference links]
- move point past header after C-c C-t !/@
- update sub-superscript regex to allow L~i+1~
- make justification work with indented blockquotes
- add "ini ↦ conf-mode" to markdown-code-lang-modes

[shortcut reference links]: http://spec.commonmark.org/0.27/#shortcut-reference-link

### rg-mode

- make -project DTRT in dired

### page-break-lines

- borked in magit-diff

### diff-hl

- colored fringe line is discontinued on lines featuring faces with
  heights greater than 1

  ``` shell
  $ git init
  $ echo "* foo" > README.org
  $ git add README.org ; git commit -m README.org README.org
  $ echo "* bar" >> README.org
  $ echo "* baz" >> README.org
  ```

  ``` elisp
  (load-file "…/diff-hl.el")
  (global-diff-hl-mode)
  (set-face-attribute 'org-level-1 nil :height 1.2)
  (find-file "README.org")
  ```

- in Org buffers with org-indent-mode, lines before point will "dance"
  around while editing, i.e. while I type, they stick to the left
  margin, then when I stop typing, they become indented again.