-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.txt
1162 lines (868 loc) · 55.9 KB
/
todo.txt
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
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
- Figure out why my magit setup is slow and get it fast. Doom Emacs has showed
me there's no reason for it not to be greased lightning in my repos.
new-init.el has none of my custom setup for it yet and magit runs nice and
snappy. Guess I can start moving it towards doing what I want and see when it
starts bogging down. Looks like magit-delta may be contributing, which seems
to be stalled at "...probably it's the overlays?" for years now:
https://github.com/dandavison/magit-delta/issues/9
- Get js2-concat-multiline-strings to always be false in NodeJS projects. I
might conceivably want it in projects with stringent backwards compatibility
standards for browsers, but any Node version I'll be using will have template
literal support.
- Get lsp-mode not to interfere with the flycheck-checkers I've configured
manually (e.g. in sh-mode I'm no longer getting shellcheck reports). That
might be due to lsp-mode setting flycheck-checker itself, which apparently it
does.
- Integrate
[emacs-bash-completion](https://github.com/szermatt/emacs-bash-completion)
into my sh-mode config, so I get tab-completion for CLI tool options. I was
typing, realized this ought to exist, did a quick search, and found that sure
enough it does.
- Remove my dumb hacks to try to start evil-mode in the desired state and
instead use the supported mechanisms to choose initial state
(evil-*-state-modes, evil-buffer-regexps). The code to rip out is added to
evil-local-mode-hook in config-packages.el. Note that
after-change-major-mode-hook might be where I could install hooks to make
intelligent guesses about initial-state, as long as they run after
evil-mode's own initial-state logic (or replace it for given buffers) - it
should be possible to do things like check buffer contents there, making it
possible to start with insert-state if the file's empty but normal-state if
it's not, or to use normal-state in a COMMIT_EDITMSG buffer if there are
non-commented non-empty lines (i.e. we're editing a pre-existing message) but
insert-state but if there are not (a brand-new commit message).
- Make my '<leader> g d' binding put evil-mode into insert-state, as in many
cases I'll just want to quit after seeing what I wanted to, and being in
normal-state makes that two keystrokes instead of one. Turns out this should
be easy to do - just add the appropriate mode to evil-insert-state-modes or
else match buffer name using evil-buffer-regexps.
- Find some good tools for interacting with MongoDB. ob-mongo looks useful for
doing one-off analyses: https://github.com/krisajenkins/ob-mongo
- Add do-at-point package and configure my programming modes to use it for
"grab hyperlink to file in git forge" / "grab hyperlink to commit in git
forge", as well as "follow hyperlink", "find file", maybe "jump to def", etc?
Might be trying to overkill - just seemed like an interesting thought.
- Find k8s/Helm tooling for Emacs. Need a language server and/or yaml-lsp
plugin for Helm/k8s files. https://github.com/TxGVNN/emacs-k8s-mode, maybe
parts of https://github.com/techniumlabs/ecloud, possibly adapt
https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools
to use its backend tools within Emacs. Get chart-testing tool (binary named
`ct`) integrated for linting Helm files.
- Update Emacs conf to use xref-find-definitions-other-window for first jump to
def, then to stay in that window for successive jumps. That's usually what I
want.
- Replace Tern.js with the Typescript language server - by all accounts it does
quite well with JS and of course it gives you TypeScript intelligence too. I
suppose I'd get free basic typechecking in all JS I write, now that I type
that...
- Try Jinx + libenchant + aspell for spellchecking. I really don't often need
spellchecking anywhere except the current view, so it sounds worthwhile.
- Split my personal aspell wordlist out into a few different wordlists, so I
can distinguish between things like 'technical abbreviations', 'personal
terminology', etc. I thought this meant a lot of low-level fiddling, but I
was wrong - aspell has --add-extra-dicts and --lset-extra-dicts options that
can be used to add several dicts. Thus, implementing this is, theoretically,
a Simple Matter of Code. See commented code in prog-mode-hook for notes on
what a POC might require.
- Find reproduction for issue where beacon-mode flickers in the wrong position
(something to do with having the same buffer displayed in multiple windows,
IIRC)
- Teach magit to open buffers from magit-status in the other window in a frame,
if another one's available.
- Figure out how to signal git-gutter buffers to update after a magit
operation causes them to be out-of-date
- Fix aggressive-fill-paragraph mode's "only fill
inside comments" behavior. See afp-mode-comment-bug.md for details.
- Find a way to toggle comment types. c-toggle-comment-style seems like it's
supposed to do this job, at least in c-mode, but it didn't
- Try using recommendations at https://ianyepan.github.io/posts/emacs-ide/ for
how to configure lsp-mode.
- Add a project-search feature whereby after a regular search, you can expand
the search to also apply to all locally-fetched, unmerged, recently-modified
branches. Sometimes I see stuff in code review, think it's available, then
discover it hasn't merged yet, and it's annoying to have to grovel through
hunting it down.
- Add a project-search feature whereby after a regular search, I can expand the
search to include history (be nice to stream the results in as they arrive
and keep the interaction working, so I can pause/stop the search by jumping
to a hit).
- Add a project-search feature whereby after a regular search, I can expand the
search to include search results from the project's forge (GitHub, GitLab,
etc). It's often a useful way to dig up related issues, relevant PRs, and the
like - things that may not be in the local project history.
- Get counsel-dash installed and get a baseline set of docs configured with it
and under version control. Being able to search project docs rapidly from my
editor for my core tools sounds lovely - use docs search to figure out the
main API I'm looking for, then use LSP autocomplete to explore its details.
https://github.com/dash-docs-el/counsel-dash
- Install mode-minder, because it might occasionally be handy for getting the
overview of all my installed modes: https://github.com/jdtsmith/mode-minder
- Pick a todo.txt mode to use. I have two installed right now and they
conflict.
- Install and configure gmch, so Emacs can garbage-collect while I'm not
actively doing things. Seems like a better state of affairs to me.
https://gitlab.com/koral/gcmh
- Move to [site-lisp](https://git.sr.ht/~pkal/site-lisp) package for
autoloading my site-lisp directory. I've been meaning to do something like it
for years now.
- Try libvterm for in-Emacs terminals. I've heard rave reviews. ...though now
that I've discovered cool-retro-term I don't know that I'll ever be able to
give up its awesome look-and-feel.
- Set mode-line-compact to t
- Replace my yes-or-no-p alias with use-short-answers
- Replace emojify-mode with Emacs 28.1's built-in emoji support? Supposed to
work automatically if you have "Noto Color Emoji" installed
- Add opt-in support for aggressive-filling multiline strings in languages with
support for it (bash, JS, Python are the obvious ones, though PHP's heredoc
strings would also qualify).
- Check out the code-compass package. Supposed to provide automated inline
analysis of code complexity and dependency depth... sounds interesting.
- See if I should set file-preserve-symlinks-on-save
- Consider turning on help-enable-symbol-autoload. Upside: autoloaded functions
will always have docs. Downside: might get side effects from loading files
just to know what something is.
- Give code-review package a test run. I could see advantages to being able to
review in Emacs; it'd be awesome to be able to do things like jump straight
to the file in question to get a closer look at what's going on.
- Try "emacs -f message-mailto %u" to make Emacs a mailto handler? or
"emacsclient -e '(message-mailto "%u")'" . How does that work on OS X?
- Snag and adapt
https://takeonrules.com/2020/11/11/synchronizing-osx-terminal-and-emacs-dark-light-appearance/
for my own config.
- Consider whether it's worth moving from projectile to the built-in project?
- Add wgrep-ag to my setup so global find-and-replace can be massively easier.
- integrate tzc into my workflows; it's a timezone converter that might be more
useful than the CLI one I hacked up.
- Try out async-backup? Maybe it would be superior to my hand-rolled backup on
save? It claims that backup-on-save is slow by default, but I can't claim
I've ever noticed that...
- Get smart-dash-mode compatible with evil-mode's replace mode (R from normal
mode). Right now when I type a dash in replace mode it inserts it rather than
replacing the next character.
- Bind C-k to previous result in ivy buffer switching. Make sure I'm taking the
right approach to general ivy-based keybinds, as it works in projectile file
search, but not in buffer switching.
- Add an evil-mode textobject for comments. I've wanted this so many times and
I find it hard to believe it doesn't exist.
- Add a vim textobject for URL. I attempted this as ne/textobj-url, but it
definitely doesn't work. Gotta understand evil-define-text-object better, I
think? The issue here may have just been a poor keybinding - should take like
5 minutes to look more closely.
- Submit bugfix for notmuch-address-selection-function upstream. See my
override of notmuch-address-selection-function in
site-lisp/config-packages.el.
- Apply the advice in
https://github.com/hlissner/doom-emacs/blob/develop/docs/faq.org#how-does-doom-start-up-so-quickly
to my config. It looks like the Doom Emacs maintainer has taken the time to
figure out all the things I've thought about trying but have not actually
done (like loading packages only on demand, but preloading big packages in
the background on idle, so your idle time is used intelligently).
- Figure out how to keep moving the cursor snappy when lsp-ui mode is running.
At least in yaml-mode when I'm hacking Ansible, the cursor gets painfully
unresponsive while it's running, but as soon as I turn it off it's reasonable
again.
- Set up jinja-mode to auto-apply to files with /templates/ in the path, cause
it's probably an Ansible template if that shows up
- Try skerrick-mode next time I'm working in NodeJS server code. It's an alpha
version of a package that aims to make NodeJS dev more like writing Emacs
Lisp. Installed but not configured.
- Remember that I have / add a keybinding for eslint-disable-rule? I'm not sure
how often I'll really use it, but it's a nice idea. Wouldn't mind having some
generalized "perma-ignore next error" behavior like this that ties into
flycheck or flymake, really...
- Try frontmacs-javascript as a possible new JS mode. Installed but not
configured.
- Try Serenata as a new PHP intelligence engine. See how it compares to
php-language-server. Seems to be more maintained, at least.
https://serenata.gitlab.io/
- Try phpactor as a new PHP intelligence engine. See how it compares to
php-language-server and Serenata.
- Teach Emacs to automatically change its theme when OS X changes between light
and dark modes. I have a function to choose theme correctly,
ne/set-theme-to-match-system-theme, but I don't have a way to detect the
event. I could poll, but that's needless waste. I could also turn off OS X's
automatic theme picker and manually specify which mode I want via Hammerspoon
binding or similar.
- Figure out how to sustainably and permanently fix string-edit-at-point in
json-mode. When editing JSON, you really don't want string concatenation, as
it doesn't support it. Bug report + suggested fix:
https://github.com/magnars/string-edit.el/issues/15
- Look into using tree-sitter to drive syntax coloration in Emacs. I've
installed the relevant packages but it will require a lot more than just
that. I know php-mode has a long history of slow syntax coloration and having
a hard time keeping up with the latest PHP syntax changes, so it might be
worth starting there. Might also be helpful for yaml-mode's difficulties in
syntax coloration: https://github.com/ikatyang/tree-sitter-yaml
- Try evil-tree-edit, which uses tree-sitter to offer syntactically-aware
editing for non-lisps. Think paredit/lispy/smartparens, but with an actual
syntax tree for any supported language. tree-edit is a sibling package
apparently aimed more at refactoring.
- Keep a history of caught spelling errors, so I can correct words I get wrong
regularly. This is really a spellchecker feature request, not an Emacs thing,
but Emacs is mostly where I use my spellchecker.
- Get aggressive-fill-paragraph-mode working in php-mode without horrible
slowdowns when typing multiline comments (seemingly due to buffer indent
attempts, as I see buffer indents happening after almost every keystroke).
Looks like this may be related to c-indent-new-comment-line, which tries to
indent and is perhaps getting invoked somehow, with php-mode being an
extension of cc-mode. Could possibly relate to this issue as well:
https://github.com/emacs-php/php-mode/issues/657
- Try using chemacs for managing custom environments for bug reports:
https://github.com/plexus/chemacs
- Get aggressive-fill-paragraph-mode working in multiline strings.
- Try modern-sh's REPL (or perhaps skip straight to just using
eval-in-repl-shell.el, which got installed as a dependency)
- Try emacs-piper for munging data from the filesystem. Different UI for
evolving pipelines interactively, with the option to use elisp as well. Seems
interesting (if only applicable for local desktop hacks).
https://gitlab.com/howardabrams/emacs-piper
- Try eval-in-repl's Python and JavaScript support
- figure out workflow for evaluating code inline some writing a file (that is,
learn how to use the elisp workflow anywhere else I can, like shell / JS /
PHP)
- Try smerge and/or ediff for git conflict resolution UI. Also take a look at
Apple's opendiff tool (https://emacs.stackexchange.com/q/16469), but pretty
sure that's closed source and thus unsustainable. Meld
(https://meldmerge.org/) looks like it at least gets the basics right and is
open source.
- Try `ac-capf.el` to get auto-complete to show language server completions in
lsp-mode. It should Just Work, as they say. Probably wouldn't get popup docs
of any kind, but should be a pretty easy improvement.
- Try integrating web-mode-edit-element into my markup editing style, or else
figuring out how to get smartparens slurp/barf/etc working in web-mode. If it
works out, delete my prototypical work on making tagedit work with web-mode
in favor of it, per this comment of mine:
https://github.com/magnars/tagedit/pull/15#issuecomment-260336539
- Make sure I'm using the 27.1 native JSON parser for LSP backends
- Move package customizations to `early-init.el`
- Remove manual call to (package-initialize)
- Try out emacs-dashboard package
- Try out highlight-indent-guides.el
- Install visual-regexp-steroids and give it a try:
https://github.com/benma/visual-regexp-steroids.el/
- Activate so-long-mode, as it's built-in now.
- See whether the proposed changes to timestamp format will impact my time
logging package. format-time-string, decode-time, and time-convert are all
noted as possibly impacted.
- There are FINALLY functions for parsing ISO 8601 formats, including durations
and intervals. Update any of my code appropriately (see the iso8601-*
functions for details).
- Consider whether I have a use for server-after-make-frame-hook
- Look into 'flex' completion style - add 'flex' to completion-styles if it
seems relevant.
- Ditch fill-column-indicator package in favor of display-fill-column-indicator
variable.
- Add font-lock-refontify to my Anki deck so I remember it exists (I rarely
deal with font-lock code but sometimes I do wander into it)
- Make "<leader> g n" support going to the last hunk in a file and "<leader> g
p" support going to the first hunk in a file. Feels like an off-by-one error.
Some tinkering via debug suggests that in `git-gutter:next-hunk`, the
calculation of the local variable real-index is wrong. Going to the previous
hunk, it never gets down to 0, and going to the next hunk, it never gets up
to 2. Incident count: 3
- Add function to send a "refresh browser" request to Skewer. It's handy when
you get a document's markup mangled, and if you have sites auto-skewering
then it's almost no friction to actually do that.
- Make git-gutter show staged changes as changed (right now they don't show up
at all). Maybe use different colors to indicate the fact that they're staged?
- Find or create a way to detect my most common typing errors. Bonus points if
it automatically generates typing drills to let me focus in on typos it has
detected. I asked this question on StackExchange and have gotten only upvotes
so far:
https://emacs.stackexchange.com/questions/52948/package-to-detect-most-common-typing-mistakes
Maybe the speed-type package would be a good starting point?
https://github.com/parkouss/speed-type/
- Get smart-dash-mode usable in CSS. Some styles of class naming involve
underscores, so it would be nice to have it do the right thing automatically.
- Make smart-dash-mode aware of it when I'm editing a bash variable.
- Add a customizable variable to smart-dash-mode that lists modes where
variables start with a sigil (e.g. '$'), and in those modes no heuristic is
necessary - if point is in a string matching \$[a-zA-Z0-9_]+, you *know* you
should insert a _. You can maybe do smarter stuff than just that, too.
- Consider upstreaming a cleaned-up version of my smart-dash-mode hacks file?
It's handy for bash but not sure how generally applicable it is. Teaching
smart-dash-mode to be smarter about languages with variable sigils could be
useful, though (especially for languages like PHP and bash where vars can be
embedded in strings, since smart-dash-mode just turns itself off in strings).
- Add a workaround to web-mode-init so smart-dash-mode knows when we're in a
comment.
- Fix move-current-buffer's behavior on trying to move a buffer to be a child
of its own current path. I went for years without realizing I hadn't handled
this case, so it's probably not worth fussing over, but it is definitely
incorrect as-is. Rough incident dates: 2020-08-28
- Fix my C-x C-f binding to handle pasted paths with multiple slashes
correctly.
- Consider using emacs-async to byte-compile packages on upgrade, and maybe
also config-packages.el: https://github.com/jwiegley/emacs-async Be careful,
though - there's a reason auto-compile doesn't do it, and it's probably a
good one.
- Teach auto-compile to not get in the way when bisecting. I sometimes wind up
in states that won't yield a working Emacs, which is kind of a pain. I might
be able to just update/extend my `githooks/` dir and get what I need here.
- Set up lsp-latex if I ever start using LaTeX seriously.
- Try setting up dap-mode for debugging PHP, as doing so should get me close to
debugging support for a lot of languages out of the gate and an
ever-increasing number as time goes by: https://github.com/emacs-lsp/dap-mode
- Start using package-quickstart to speed up start times once Emacs 27.1 is
released.
- Figure out how to make smartparens interact nicely with web-mode. '{{' and
'{%' don't work right when both are on, but I don't see a way to ban
multi-character sequences from smartparens, and I don't want to lose pairing
braces in CSS and JS.
Years later, I just realized it would help to only activate smartparens when
I'm in JS, CSS, or a server-side language, since I'm usually writing '{{' and
'{%' in markup, not genuine languages. Basically advise smartparens key
handlers if you're in web-mode and only let them fire when you're not in
markup. Note that it's only really braces I'd want to turn off pairing for -
most other pairs don't have this issue.
- Replace my setup for echoing offscreen matching line for parens with this
one:
https://with-emacs.com/posts/editing/show-matching-lines-when-parentheses-go-off-screen/
- Figure out why aggressive-fill-paragraph-mode breaks lsp-mode in PHP badly. I
can't enter spaces due to errors getting thrown saying "lsp-request: Method
LanguageServer\Server\TextDocument::rangeFormatting() does not exist"
- Finish tweaks/submit PR for aggressive-fill-paragraph-mode.
- Update my "get git forge commit" keybinding to get URL to HEAD if point is
not over a hash; look for/suggest as feature request in underlying library?
- Make a PR to auto-complete for supporting smart-dash-mode.
- Add function to spawn an emacs instance with my installed packages but none
of my customizations looking at exactly the file and location I'm currently
in. The idea is to make it easy to answer the question "Is a behavior my
fault or is it a lower-level bug in my dependencies?"
- Use elisp-depmap to see if I can find any packages I actually don't want in
my config.
- Try porting the Readable library to Emacs Lisp. I have yet to really
internalize reading Emacs Lisp, and it looks promising to me:
https://readable.sourceforge.io/
Readable is implemented as a reader macro, it seems, and elisp does not
support reader macros
(https://emacs.stackexchange.com/questions/18003/how-can-i-modify-elisps-reader),
so this might be a dead end.
That said, some enterprising soul *has* implemented a POC elisp reader:
https://github.com/mishoo/elisp-reader.el
so this may yet be achievable without hacking a lot of C.
- Go through the tools and techniques described in
https://alphapapa.github.io/emacs-package-dev-handbook/ and adopt any that
seem useful.
- Consider replacing Cask in my elisp package writing with Keg? Not sure I
actually will prefer Keg, or that it will get a big enough community to stick
around, but in principle I like reducing the number of languages I depend on.
https://github.com/conao3/keg.el
- Try out evil-smartparens, once I'm a little more used to smartparens itself.
Looks like it might do some neat stuff.
https://github.com/jschaf/evil-smartparens/
- When I'm working in a NodeJS script (detectable by '#! /usr/bin/env node',
among other approaches), js2-mode should auto-execute
`(setq-local js2-concat-multiline-strings nil)`
Life would be better that way.
More generally I guess that should happen whenever it sees any JS features
that imply backtick-strings are available. Is that ES 6?
- I just typed "element.style.display = 'hidden'" when obviously it should have
been 'none' and wish my editor had warned me. A quick way to get this would
be to start using TypeScript or Flow to do static checking of JS and install
https://www.npmjs.com/package/csstype with it.
- Look at using lsp-html with web-mode. See what it might buy me.
- Try out literate-elisp for one of my packages, largely as an experiment in
literate programming: https://github.com/jingtaozf/literate-elisp
- Write a macro to eval a block of elisp and query for value of any undefined
variables, then bind it to a key. It would be useful when debugging defuns.
- Play with ob-html-chrome. It sounds like it could be a useful tool for
writing docs that embed HTML, as many people like to see what things look
like. https://github.com/nikclayton/ob-html-chrome
- Report and/or fix bug in rainbow-mode.el - URLs with hashes and hex-like
characters are vulnerable to false positives. https://localhost/test#debug is
an example that gets highlighted for me as of time of writing.
If I turn the opening character class of the first entry in
rainbow-hexademical-colors-font-lock-keywords from '[^&]' to '[[:space:]]',
my above URL example no longer causes trouble. No idea if that's a valid fix,
but it's a useful data point.
Bug report filed: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=37681
- Generate autoloads for my mode configs (and other code I've hacked up myself)
from autoload cookie comments, rather than maintaining them manually.
Apparently auto-compile has `auto-compile-update-autoloads' for this purpose.
As long as you commit those changes along with the others, that would
probably work pretty well.
- ac-source-css-property and ac-source-css-property-names are missing a bunch of
bleeding-edge CSS 3 stuff. Get that in there. Ideally, generated from the
spec, along with basic docs, and adding ';' at the end of property values.
- If I ever accumulate enough feeds for it to matter, try adding elfeed-summary
into my RSS feed workflow.
- Emacs 26: Move package config into early-init.el, per recently-landed patch
in Emacs trunk.
- Consider using suppression functions to implement afp's fill-comments-only
feature? I feel like it would be more robust than the current approach, but
perhaps I'm mistaken. I also think it might solve some of my js2-mode issues,
though I'm not sure of that (I think changing the fill function from the
default is where they come from).
- Add afp-super-aggressive to aggressive-fill-paragraph-mode to bundle up my
proposed changes per the maintainer's suggestion.
- Make aggressive-fill-paragraph-mode suppress auto-fill in markdown-mode code
blocks. I thought it was supposed to, but in the traditional four-space
indented code blocks, it doesn't seem to work for me.
- Try out prog-fill for (auto?) filling code. I've installed it but haven't
tried to use it for anything yet.
- aggressive-fill-paragraph-mode should auto-fill after breaking a paragraph
into two paragraphs (RET RET, basically).
- Suppress aggressive-fill-paragraph-mode while directly above or below markdown
code blocks.
- Prevent my aggressive-fill-paragraph-mode from filling rst titles when
deleting a preceding paragraph (and maybe just prevent it from filling
titles in general).
- Prevent aggressive-fill-paragraph-mode from filling paragraphs that look
hand-formatted. A decent heuristic might be "if the majority of lines are
less than three-quarters the width of fill-column"? A better heuristic is
probably 'Are lines other than the last one and the one before / after point
less than three-quarters of fill-column?'
- Set up a 'Stale questions' saved search in notmuch that shows me all
non-response emails I sent including a question mark in the body or subject
line that have received no replies and are more than a week old. The goal is
to have my email system let me know about threads I need to bump.
- Auto-insert basic email template after exiting "To:" field. If it contains
one email address with the name, use first name. If it contains multiples,
say "Hi everyone".
- Come up with a way to send emails and flag the newly-made thread as
'watched'. Incident count: 5
- Notify me when a new email comes into a thread I'm writing a response in.
Incident count: 1
- Use smtpmail-queue-mail and some network up/down notifier to automatically
queue mail if offline and to automatically send it when back online.
Update: I have just installed the 'network-watch' package from MELPA, so this
should be just about trivial to do now. The one thing is I'd have to
distinguish between "network is up" and "I have an internet connection",
which the eping package might be useful for (or I could just shell out
myself).
Incident count: 1
- Figure out what mime-type should be used for emailing bash scripts as an
attachment.
- Understand how text/plain email attachments get converted from just LF to
CRLF. I suspect it's notmuch's compose mode making sure my attachment conforms
to RFC 2046, section 4.1.1, which specifies CRLF *must* be used for text/plain
content.
- Figure out why git-rebase-mode doesn't always have the keybindings it claims
to. I think it happens the first time I rebase after starting Emacs, so it's
likely an initialization problem, but I'm not really sure. I believe it's a
question of whether evil-mode is in insert-state or not, because I have the
logic that tries (and fails) to pick the right state based on whether a
buffer has contents or not.
- Use gmailieer to sync notmuch tags to gmail: https://github.com/gauteh/gmailieer
- Submit PR to make flycheck-eslint-rulesdir a list.
- Get flycheck to support opening URLs for more details on errors. Sometimes
error messages are confusing or terse but the error ID can be used to map
directly to a documentation ID that explains the issue well.
- Add (or find) a flycheck checker for nginx config files using -t.
https://www.flycheck.org/en/latest/developer/developing.html#writing-the-checker
explains how to do the job.
- Make js-doc use Tern (when available) to guess types for function params.
- Give kakoune.el a whirl, just to see what it's like:
https://github.com/jmorag/kakoune.el . After reading through Kakoune's
philosophy document, it does sound like it could be an improvement on the Vim
experience. https://kakoune.org/why-kakoune/why-kakoune.html
- Remember that HTMLize exists and I installed it. I could see it being useful
for getting syntax coloration on static sites for obscure programming
languages, for instance.
- Figure out a smarter way than "start Emacs from a terminal" to make
browse-url snappy.
If I start emacs from a Terminal prompt, opening a link is instantaneous.
If I start it via Spotlight or my Hammerspoon binding, they're slow.
They load the exact same set of elisp files.
Their environments are different (determined via the `process-environment`
variable), but I don't see any immediate smoking guns for causing this
difference.
For the moment I guess I'll start it from a terminal session. :/
This didn't happen before Mojave - I wonder what changed?
Worth noting that this may not be Emacs-specific. Opening a URL from YakYak
the other day took a full ten seconds.
For more verbose analysis, see this file's history.
- Add ne/yas-copy-snippet. I occasionally want to populate then copy / paste a
snippet (often for pasting into a prompt in another system, like a bash shell
or a browser console). It would be nice to have it be easier than it is.
- Consider trying dtache package for managing project-specific dev processes.
It apparently uses a program to actually manage processes so that a crashed
or killed Emacs doesn't kill the processes. Doesn't sound super-compelling to
me but could be interesting, and maybe an alternative to the main reasons I'm
tempted to use terminals in Emacs.
- Make the ansi-term tweaks suggested in this article:
http://echosa.github.io/blog/2012/06/06/improving-ansi-term/
- Consider using project-shells for managing shells? I've installed it just so I
have it around should I decide to try it.
- See how hard it would be to be content with shell-pop as my terminal manager.
It only supports a single terminal session, and automatically changes
directories based on the buffer you spawned it from. If I could figure out
how to work within that constraint, it might be reasonably usable.
- I'd like to have a hotkey that brings up my most recent terminal. I'd also
like terminal windows to always appear in a bottom window of my current
frame, which is probably a need popwin would achieve admirably. I used to
think I wanted something more like a tabbed terminal emulator, and maybe I
will want some keybindings for flipping between groups of terminal buffers,
but that's secondary to just establishing "terminal buffers get and/or create
the bottom window". I have just installed term-projectile, which seems to
handle the create and swap features - I just need to teach popwin how to
force terminals to always display in the bottom half of a split panel
properly. N.B.: shackle may be a significantly better alternative to popwin:
https://github.com/wasamasa/shackle
- Fix my '<leader> p o f' binding. At present it doesn't really work.
- Teach js2-mode not to concatenate ES 6 backtick strings. When
js2-concat-multiline-strings is t, newlines invoke concatenation which I
guess could make sense if you're trying to use template strings and don't
want any newlines in it, but what I want is for ES 5 strings to Just Work and
for ES 6 strings to Just Work. Not sure if this should be an extension of my
own or something that goes in the core. Until I use ES 6 more often, the
workaround is to set that var to false when I'm actually using backtick
strings.
- Figure out why entering '/**<RET>' in js2-mode results in a proper comment
block if you wait a bit before pressing Enter, but a weird string
concatenation if you press it quickly.
- Make json-mode.el print paths more minimally (use .name instead of ["name"])?
Maybe it's that way cause it's not supported everywhere.
- Add function for injecting JS from arbitrary URL into documents.
There's already one for using bower, but being able to just grab any URL could
be handy, especially if you're in a locked-down environment.
- Look into integrating jscs.el with my JS editing flow. I've already installed
the elisp library just so I have it around. I much prefer ESLint for style
checking, but if jscs can *fix* the style failures for me, that would be quite
nice. Note that newer ESLint versions have some support for fixing violations.
- Add tern-lint.el to my JS setup. Static type checking is a handy thing (and I
personally find flow's comment-annotation syntax too intrusive for good
readability).
- Report issue with Tern seeing 'this' as the global namespace in Angular
controller functions. Controllers always have constructor semantics, and
should be treated as such.
- Report dontLoad being overridden by loadEagerly in .tern-project. I would
expect the opposite behavior.
- For vars that are assigned a function directly, tern should treat any
immediately-preceding JSDoc block as being that var's JSDoc. See pick in
lodash 4.13.1 for an example of failure.
- Add php-auto-yasnippet-style function params to tern.js.
- I'd like yasnippets for JavaScript. I don't much like the defaults.
- Report and/or fix yasnippet issue where loading js2-mode's snippets doesn't
load its parent-mode's snippets.
- Add flycheck-css-colorguard: http://melpa.org/#/flycheck-css-colorguard
- css-mode should have working comment fill. Right now it only believes in
single-line comments, which gets clumsy and annoying fast.
...it looks like someone may have actually fixed this:
https://lists.gnu.org/archive/html/emacs-diffs/2015-04/msg00293.html
Further research shows that css-fill-paragraph works, but there are two issues
with my current setup using current css-mode:
* RET binding does not insert the appropriate comment prefix.
php-mode gets this right. So does c-mode. Ah, right - because php-mode is
a big hack on top of c-mode.
It looks like c-mode has its own function implementing the
comment-and-newline behavior, while I'm using comment-indent-new-line.
It works fine in most modes, but not css-mode.
Supposedly setting 'comment-multi-line' to non-nil should solve this, but
it doesn't.
...inspection via edebug suggests comment-indent-new-line is expecting
fill-prefix to be set by adaptive-fill, but it's nil. How's that
supposed to work?
fill-prefix is used on the assumption that it's a normal fill-prefix,
then a few lines later it's used as if it's chosen by adaptive-fill, but
with no logic to actually invoke adaptive-fill.
If I run fill-context-prefix manually on a decent-sized hunk of CSS
comment, it returns " * ", as you'd hope.
So how can I make that apply in this context?
* fill-paragraph does not work correctly on a one-line paragraph that is
wider than fill-column. It works fine in other cases, and auto-fill
itself *does* work fine in that case.
- Maybe add ac-html-csswatcher package to my setup. Parses CSS/LESS files in your
project to give you a class/ID ac-source when writing HTML.
- It would be awesome to have a flycheck module that gave warnings/errors based
on (configurable) browsers you just violated support for. The caniuse data
makes this feasible, but maybe a royal pain.
- Bind '<leader> p s' to helm-projectile-ag, with fallback to the regular grep
command. (feature request in helm-projectile-ag?)
- Make projectile refresh cache on idle, and always use cache? I can touch
.projectile if I want to force a refresh. Then again, this is only noticeable
on my work machine... Enable if file listing takes more than N milliseconds?
- Replace my projectile-ag search keybinding with deadgrep? I've installed
deadgrep and it feels sort of different but it is interesting.
- Fix ':' choking projectile grep searches on Windows.
- I would like an auto-complete source for existing files that is based on a
per-project 'docroot/static' variable. I would like that source to be
activated when I am working in a template and have entered an href="/..." or a
src="/...". Actually, it might work better if it was just activated for any
string beginning with '/'. Some hints:
http://superuser.com/questions/67170/how-do-i-complete-file-paths-in-emacs
- Try corfu as a replacement for auto-complete. I hear some claims it's better
than company mode.
- Figure out if the compdef package would buy me anything useful. I think it's
for eliminating auto-complete source boilerplate from
company-mode/completion-at-point configurations, but I might be
misunderstanding. https://gitlab.com/jjzmajic/compdef
- I should have Twig/Django snippets. 'block' is the obvious one, but probably
snippets for all the major bits of syntax would be handy, and someone out
there must have written such things.
- Figure out how to run afp-fill-paragraph after kill-region *only* if the user
called it interactively. It's often used in code which can lead to weird
results inside comments.
- Make afp-fill-paragraph play better with <RET> <RET> in emacs lisp comments.
The second <RET> loses the leading space, so you then have to type a space
with something other than self-insert-function to actually make your new
paragraph.
- Set up Elsa as an Elisp static analyzer: https://github.com/emacs-elsa/Elsa
- Try using elisp-def as an enhancement to slime-nav-mode? It's installed, just
have to try configuring it and seeing if it makes life any better.
- Use Consolas-10 as font by default on Windows.
- Look into midi-kbd.el and lily-midi.el as an aid in creating lilypond files
with MIDI instruments.
- Try smooth-scrolling package and see if it makes my life any better:
https://github.com/aspiers/smooth-scrolling
- Simpler alternative to file watchers, perhaps:
https://github.com/wasamasa/firestarter
- Get ac-isearch working when auto-completion is active. I think my
global-set-key of C-s to regex searching currently overrides it.
- Extract jedi-force to be an ELPA package. I was thinking of adding more
features, but it might be fine as it is.
- Integrate what's useful from spacemacs: https://github.com/syl20bnr/spacemacs
I've got most of what I want, but evil-little-word could be nice.
- Add evil text object/motion for 'comment', 'inner comment', 'around comment',
etc. Sometimes I find myself trying to think in those terms.
- Add a mechanism to collapse/expand all comments (and docstrings?) in a file.
bicycle-mode is a wrapper around hs-mode that might be a starting place. I
installed it for future reference.
- Make comment auto-fill work with C++-style comments in js2-mode, not just
C-style. Turns out it does - it's just that js2-mode thinks single-line
comments are only block comments if there's a trailing single-line comment. A
better test might be "is there a preceding single-line comment". See
js2-mode-extend-comment for the logic that would need tweaking.
- Make auto-fill apply to strings in emacs-lisp-mode. Really seems like this
should already be happening. Dunno why it doesn't.
- Get Emacs to auto-fill with string concatenation in JS (and similar langs).
That is, something like this
var foo = 'foo is ' +
'a set of ' +
'really short strings';
if filled, becomes
var foo = 'foo is a set of really short strings';
- If I ever get minimap.el usable on OS X, when active it should appear between
my two panes. That way it's always close to whichever buffer it applies to.
Note: the sublimity package looks like it may be more maintained.
- Try out demap for minimap usage? Installed it and gave it a quick test, but
it doesn't seem to handle window or frame management especially well in my
setup (I'd prefer it to expand the frame by the number of columns it needs
automatically).
- Tweak md-readme.el so that author/created/requires lines are headers *without*
colons, whose bodies are the text following the colon-delimited field names.
el2markdown is another package to do a similar job - maybe it's better?
- File feature request to flycheck for being able to run checkers while in
web-mode. May well get rejected, because supporting this would be pretty hard.
- Add keybindings for scrolling completion window by a full window-ful. C-v and
M-v are the obvious ones. Useful when you're digging through something like wx
or the JDK looking for a class that might apply.
- Derive a lightweight envrc-mode from sh-mode and add support for
direnv-specific things like PATH_add. Google suggests none exists.
- Make a PR to yasnippet for my solution to the 'once' snippet overriding the
'require_once' snippet.
- Add support for a 'description' field in yasnippets. You could use that to
drive a help popup in {auto-complete,company}-mode, which can in turn be very
handy in languages with obscure syntax (e.g. bash) or for snippets whose
purpose is not immediately obvious to the novice. Even cooler would be to let
you insert snippets by searching their descriptions, a la
https://metacode.app/.
- Find a workaround that will let me use auto-complete in a yasnippet tab
field. A keybinding other than Tab for auto-complete would work, but it might
be possible to bind something clever to Tab that picks which maneuver to do
based on whether there are any characters before point *and* whether
autocompletion has been invoked before while in this field. or something like
that. This guy came up with a way to do it for company-mode - maybe I should
bite the bullet and switch over...
https://www.reddit.com/r/emacs/comments/auwzjr/comment/ehb5zxm/
- Figure out how to insert '[ | ]' in bash snippets like if when I type '['
(where | indicates cursor position). I constantly do this little weird dance
which I only just now realized I've been doing. Since you can escape to elisp
easily in yasnippets, this should be perfectly possible - now is just not the
time. Incident count: >100
- Add a command to rename a file in a project. I don't care about refactoring
smarts (though it might be nice to offer a hook to support that), I just want
to query/replace throughout the project for
s/$old_relative_pathname/$new_relative_pathname/. Incident date list:
2020-01-15
- Add a keybinding for 'rename this git-managed buffer'. Incident count: 3.
This shouldn't be too bad - ne/yank-buffer-project-relative-path gets exactly
the argument I want for the first param and the second one should just be the
same interactive prompt it currently is. Alas, I don't see a way to call an
interactive function and supply a value for one argument while having the
interactive interface itself run for the second. It's probably possible to
use the `interactive-form" function to do that, but it would be tricky.
Arguably this is a feature request to magit, since I don't care for the way
magit-file-rename works at present - I want a way to say explicitly say
"rename the current file", so I don't have to do a redundant Enter keystroke
after invoking the command (it shows the current buffer as the first item in
the list [but oddly only allows you to select things nested in that buffer's
directory, not the whole repo]).
- Think about how backup-walker, undo-tree, and magit ought to intersect,
ideally. Really this is less about any of those packages and more about the
theoretical interplay between version control, explicit commits, implicit
savepoints, and an editor's in-memory undo support. Note that the
extraordinary John Wiegley has touched on some of this in his package
git-undo.el: https://github.com/jwiegley/git-undo-el
- Add a command to backup-walker to revert to the selected backup file. 'r'
would be a good keybinding. If this doesn't already exist, it might make sense
to wrap this up with my other backup settings as 'sane-autosaves'. See if
backups-mode makes this work nicely?
https://github.com/chadbraunduin/backups-mode
- Add a command to backup-walker to ediff against the current file.
- As a simple exercise to start learning macros, try implementing PHP's
"defaulting" ternary operator behavior. The example I emailed myself was
(setq (default (= 3 foo) 5)), where 'default' is the macro, presumably.
- If I ever start using multiple windows more seriously, window-numbering-mode
might be handy. http://nschum.de/src/emacs/window-numbering-mode/
- Teach yaml-mode + lsp-mode + ansible to auto-generate a yasnippet with for
all required fields on tabbing or autocompleting after typing a module name.
By definition, you'll want to populate all required fields, so might as well
just do it. This is likely mostly on the language server, with maybe a little
editor intelligence on when to trigger it.
- Teach yaml-language-server to suggest available Ansible modules when defining
a new task and you request completion on a blank line after the '- name: ...'
line. It currently fails due to something being undefined, but it seems
obvious to me this is where you put a pragmatic hack into the codebase to
enable what people will usually want, rather than stick with purity. I know
this is language-server-specific, because the same issue happens in Visual
Studio Code (I downloaded it to test that).
- Define a really good ac-source for use with lsp-mode. Seems like most of what
we need to do here could be set up generically based on the features a given
server offers, but I suppose working on this could show me I'm wrong about
that.
- Configure lsp-ui package to taste. I've installed it.
- Consider integrating lsp-mode with php-auto-yasnippet? May or may not be worth
doing.
- Try adapting flymake-phpstan to work with my PHP setup. Installed the package
so I have it if I ever have time for this again
- Get lsp-mode and php-language-server showing function summaries in minibuffer,
not just function signatures.
- ac-php looks like it does a lot of what I'd need, as a newcomer to the party:
https://github.com/xcwen/ac-php
- Install/configure php-scratch, as it could be handy for quick experiments.
- If I ever have to go back to programming Java, try using lsp-java with
lsp-mode. Looks like a much better alternative to eclim, IMO, since it ties
directly to a supported Eclipse project.
- php-mode should not move sigils when swapping words with M-t.
$this_thing => thing_$this is not what we want.
- It would be really sweet to get yasnippet's bracket placement to do the Right
Thing based on major-mode, placing them on the newline or on the same line
intelligently. I'm guessing that can be achieved by applying elisp to the
templates. This was inspired by making changes to the php-mode snippets to do
bracket placement the way I like. Someone's done some work that was approved
of by another guy on the yasnippet blog, and they've said any extensions would
not be accepted into yasnippet:
http://comments.gmane.org/gmane.emacs.yasnippet.devel/403