summaryrefslogtreecommitdiff
path: root/elpa/transient-0.8.6/CHANGELOG
blob: d5b821f8f4e420df1acbd9cecab4d8bf763a7aaf (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
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
# -*- mode: org -*-
* v0.8.6    2025-03-15

Bug fixes:

- ~transient-show-summary~ errored for commands that have neither a
  summary nor a docstring.  0886651d

- ~transient-format-description~ errored for ~transient-information~
  and ~transient-information*~ suffixes.  #366

- ~transient--wrap-command~ failed to load autoloaded commands.
  40308623

- ~transient-suffix-object~ errored if a command is bound more than
  once and is invoked using the mouse or ~RET~.  f69e1286

- For some releases ~transient-suffix-object~ errored if it could not
  identify a unique suffix, which helped establish that it is in fact
  legitimate to use this function as a predicate.  No longer error if
  there are zero matches, but continue to error if their are multiple
  matches that cannot be disambiguated.  4a06aeb0

* v0.8.5    2025-03-01

- Added new faces ~transient-key-recurse~ and ~transient-key-stack~.
  58e22554

Bug fixes:

- ~transient--setup-recursion~ did not consider the ~resurse~ shorthand.
  32a7e256

- The parent group was not always stored in suffix objects.  #354

- Invoking a suffix of a sub-prefix (which is configured to return to
  the outer prefix), did exit instead of returning, if the suffix's
  own behavior was not explicitly specified.  #352

- The color of a suffix that returns to the outer prefix, was wrong
  when there isn't actually an outer prefix.  e88005d2

- When potentially removing other bindings for the same command
  while adding a new binding, false-negative avoidance was too heavily
  favored over false-positive avoidance.  #355

- Defining the ~transient-higher-level~ face involves calling
  ~face-attributes~ on another face.  That call requested the value
  for the current frame (which may not exist yet) instead of using
  the default.  #359

- When the transient window is hidden while the minibuffer is used,
  then it was not restored if using Helm.  #361

- Non-suffix command that aren't accessed via a symbol, were not
  properly wrapped to ensure post-command cleanup happens even in
  case of an error or if the user aborts a minibuffer use, causing
  the menu window to get stuck.  08201f06

* v0.8.4    2025-02-01

- Added new option ~transient-show-docstring-format~.  65cd6cec

- Unless called with a prefix argument, ~transient-toggle-docstrings~
  now only shows docstrings for the current menu invocation.  13f3f5e0

- The ~##~ macro from the ~llama~ package can now be used after keywords
  in group specifications (including suffix bindings).  7c650436

- Suffix commands can now be advised using the new ~advice~ and ~advice*~
  slots available for suffixes and groups.  This feature is still
  experimental.  #340

- ~transient-scope~ can now also match against prefix classes, not just
  specific prefix commands.  #334

- The default level of a suffix command can now be set via its
  prototype, using the new function ~transient-set-default-level~.
  f6c249c7

* v0.8.3    2025-01-03

- Added new constant ~transient-version~.  3022f6d5

* v0.8.2    2025-01-01

- Added support for displaying the transient menu in a dedicated
  frame.  bf58c0bb

- When including a group via a variable, the imported value can now be
  a top-level group.  eebcbe30

- The transient window is now fitted to its buffer horizontally as well.
  fd9811ea

- Added new command ~transient-copy-menu-text~.  042f37aa

- Added new command ~transient-toggle-docstrings~.  52679f98

- Added new command ~transient-describe~, which can be bound as many times
  as needed to show help for arbitrary things.  5a18a791

Bug fixes:

- The use of ~display-buffer-full-frame~ was prevented too aggressively.
  5353464b

- Fixed remembering and restoring the old value of the ~no-other-window~
  window parameter.  de984302

- When a command is bound multiple times and the instances use different
  transient behavior, then the behavior (and color) for the last binding
  was used for all bindings.  fe71a7e7, a99dcda9

- Enabling ~transient-force-single-column~ resulted in an error.
  28347e59

- ~transient-toggle-common~ used to exit the menu.  98c01b84

* v0.8.1    2024-12-08

Bug fixes:

- Interactively setting the level of a transient prefix resulted in
  an error.  #337.

* v0.8.0    2024-12-06

- While the minibuffer is in use, the menu window is now hidden by
  default.  The new option ~transient-show-during-minibuffer-read~ not
  only controls whether the menu stays visible while the minibuffer
  is in use, but also whether it may be resized if necessary.  This
  new option replaces ~transient-hide-during-minibuffer-read~.  #330

- When returning to a prefix whose ~refresh-suffixes~ slot is non-nil,
  its suffixes are now re-initialized.  #327

- Added documentation for ~inapt-if*~ slots to manual.  179545a6

- ~transient-args~ now takes a prefix command or a list of prefix
  commands as argument.

- ~transient-scope~ now takes a prefix command or a list of prefix
  commands and/or a prefix class or list of prefix classes as
  arguments.  It can still be called without any argument, but that
  should only be done in functions that take part in setting up a
  menu, not in a suffix command.

- Added new generic function ~transient-prefix-value~, giving finer
  control over how the value returned by ~transient-args~ is determined.

- Added support for implementing ~transient-init-scope~ methods for
  prefix classes.

- ~transient-setup-buffer-hook~ is now run later to allow overriding
  more default settings.

- The new prefix slots ~display-action~ and ~mode-line-format~, can be
  used to override ~transient-display-buffer-action~ and
  ~transient-mode-line-format~ for individual prefix menus.  #332

- Updated the manual considerably.

Bug fixes:

- Fixes some menu navigation edge-cases.

* v0.7.9    2024-11-04

Bug fixes:

- Fixed a recent regression in ~transient-suffix-object~.  #325

- The height of the transient window was fixed even it used the full
  frame height.  5478d4e6

* v0.7.8    2024-11-02

- Additional potential mistakes in menu definitions are now detected.
  bbda5bb6, 8873c300

- Added new (and still experimental) ~environment~ prefix slot, which
  can be used to, for example, implement a cache to be used while
  refreshing the menu.  05c011b8

- When navigating through the menu using the keyboard or hovering a
  suffix command with the mouse, information about the command is now
  shown in the echo area or using a tooltip.  #282

Bug fixes:

- When the command that exits a transient uses the minibuffer,
  ~transient-current-*~ variables were not immediately reset to
  ~nil~. #323

- Key sequences with three or more events broke
  ~transient-suffix-object~.  #324

* v0.7.7    2024-10-04

Bug fix:

- Fix a regression introduced by the previous commit, which broke
  dynamic prefixes that use a ~:setup-children~ function to prepare
  their suffixes.  #313

* v0.7.6    2024-10-01

- ~transient-active-prefix~ now accepts a single prefix symbol, in place
  of a list of such symbols.  #307

- ~other-frame-prefix~ and ~other-window-prefix~ can now be used while a
  transient prefix is active.  #305

- Added new macro ~transient-with-help-window~ for use in ~:show-help~
  functions.  #309

* v0.7.5    2024-09-01

- Updated tooling.

Bug fixes:

- ~static-if~ is now used correctly.  0e35673e

- When an existing window ends up being used to display the transient
  buffer, then the previous value of the ~no-other-window~ parameter is
  now restored, when the transient is exited.  #302

- The names assigned to suffixes, which are defined using lambdas in
  the prefix definition, are now guaranteed to be unique.  #304

* v0.7.4    2024-08-05

- Added new function ~transient-active-prefix~.

* v0.7.3    2024-07-13

- Refactored code responsible for inserting columns.

Bug fix:

- The ~transient-current-*~ variables are intended to only be used by
  suffix commands, when they are invoked from a prefix.  Previously
  they were only cleared when the prefix is ultimately exited, which
  meant that they unintentionally were accessible in timers.  Now the
  values of these variables are nil when used outside their intended
  scope.  0e0ece32, f2cb28a5

* v0.7.2    2024-06-24

- Added support for adding suffixes that activate value presets.  #183

Bug fix:

- Restored the ability to individually set infix arguments if the
  prefix's ~refresh-suffixes~ slot is non-nil.  8db5f0fd

* v0.7.1    2024-06-19

- Added a workaround for ~emoji.el~ from Emacs 29.1 calling an internal
  function using an outdated number of arguments.  #288

* v0.7.0    2024-06-18

- Added new macro ~transient-augment-suffix~, which can be used to
  specify the suffix behavior of a command that was previously defined
  as a prefix, using ~transient-define-prefix~.  2fd3ea14

- Added new function ~transient-scope~, which is just a convenient way
  to get the value of the ~scope~ slot of the ~transient-prefix-object~.
  7f6c39c5

- Added new hook ~transient-setup-buffer-hook~, which is run early when
  setting the transient menu buffer.  #283

- Added new class ~transient-information*~, a variant of recently added
  ~transient-information~ class.  8a80e952

- By default our macros that define commands, mark those as for
  interactive use only.  ~(declare (interactive-only nil))~ can now be
  used to overwrite that.  fcc60e27

- Groups now also accept ~:inapt*~ predicates.  3d395d64

- Spaces between columns is reduced from three to two.  dd93001e

- Removed unused ~transient-plist-to-alist~ function.  1251faf0

Bug fixes:

- ~transient--force-fixed-pitch~ was run to late to always succeed.  #283

- Key binding conflict detection was too strict, taking hypothetical
  bindings for inapt commands into account.  c356d1bc

- Key binding conflict detection did not consider bindings in regular
  keymaps, such as ~transient-base-map~.  2698d62d

- ~func-arity~ gets confused when a function is advised, so we had to
  add a wrapper function ~transient--func-arity~.  91dd7bb3

- Some mistakes, that can be expected to occur when defining suffix and
  prefix commands, were not detected.  7e827c31

* v0.6.0    2024-03-21

- On Emacs 28.1 and later, all infix commands and suffix commands
  that are defined inline (i.e., using a lambda when defining a prefix
  command), are now hidden from ~execute-extended-command~ (aka ~M-x~) /by
  default/.  It was already possible to hide these commands, but users
  had to opt-in explicitly.  After refactoring how these commands are
  declared to be unsuitable for ~M-x~, it is now possible to hide them
  /without/ also hiding other, unrelated kinds of unsuitable commands.

  I recommend that you instruct ~M-x~ to hide /all/ unsuitable command.
  This requires that you customizing ~read-extended-command-predicate~,
  because the Emacs authors have decided that this should be an opt-in
  feature.

  Note that this has no effect on Emacs releases before 28.1.

- Added documentation stating that ~:class~ has to be specified when
  using ~:setup-children~.  beecdc85

- Added a new prefix slot ~column-widths~, which can be used to specify
  the minimal width of each column in all ~transient-columns~ groups of
  that prefix.  92e8952e

- When assigning a name to a suffix that is defined inline, we no
  longer use the suffix description, iff that would result in an
  overly long name.  81a108ba

- Functions used as the value of face slots can now take one
  argument, the suffix object.  Functions that take zero arguments
  are still supported.  Additionally, ~transient--pending-suffix~ is
  bound around calls to these functions, but it is better to pass
  the object as an argument.  f582a9bc

- The new ~definition~ suffix slot can be used to specify a default
  function definition that is used if no function body is provided
  using ~transient-define-suffix~.  5b334a51

- Taught ~transient-suffix-object~ about ~transient--pending-suffix~.
  20a3770d

Bug fixes:

- If ~transient-parse-suffix~ and ~transient-parse-suffixes~ are called
  with an invalid value for their ~prefix~ argument, they failed to
  detect that.  03e752d9

- If ~nil~ is encountered inside a group specification, that was
  silently ignored.  Now an error is signaled.  8c01a1eb

- ~find-function~ wasn't able to locate the definitions of infix
  commands anymore.  a30df67b

- There was no binding for ~ignore-preserving-kill-region~ in
  ~transient-predicate-map~.  0fc87002

- Invoking a non-symbolic non-suffix command, caused an error.
  bd2a5ea0

- When a group begins with an included subgroup, that affected what
  group class was assumed, in the absence of an explicit specification.
  df36bc87

- ~transient--suspend-override~ failed to move out of the minibuffer
  before refreshing the transient buffer.  833143ba

- When a suffix command signaled an error during a trivial phase
  (which does not involve, e.g., the minibuffer), then the transient
  window was not deleted when the debugger was entered.  9d8f361f

- When a prefix was refreshed, the wrong color was used for suffix
  commands that exit the prefix, indicating that would cause a return
  to the outer prefix, even though there is none.  f51c144a

- Calling ~transient-infix-read~ with an invalid value, resulted in
  a confusing error.  Now an appropriate error is used.  3ebb6acf

- When third-party code or user customization managed to display
  another buffer in our dedicated window, then that buffer got
  killed when we tried to kill the transient buffer.  #271

* v0.5.3    2023-12-16

- Fixed regression when setting ~:pad-keys~ for a ~transient-columns~
  group.  #269

* v0.5.2    2023-12-05

- Fixed formatting issues in the manual.

* v0.5.1    2023-12-05

- Added a new introduction by JD Smith (@jdtsmith).

Bug fixes:

- Faces that use a box are now defined more defensively to protect
  against unexpected values and provide reasonable fallback colors.
  413310cd, b8aefce3

- Only prepare to return to the parent transient if there actually is
  a parent.  The only negative effect of failing to do this was that
  the suffix was colored wrong, since ~transient--do-return~ falls back
  to behave like ~transient--do-exit~.  5f2cfc9f

* v0.5.0    2023-11-28

- Some suffix commands exit the transient from which they were
  invoked, while others don't (allowing the user to invoke another
  suffix without first having to enter the transient again).

  Until now it wasn't possible to tell which category any given suffix
  falls into, at least not by default.  Now the key binding of each
  suffix is colorized to indicate its transient behavior.  Red means
  that the suffix exits the transient, and blue means that it does
  not.  Keys for suffixes that currently cannot be invoked are gray.

  Likewise, the thin line, that is drawn between the transient popup
  buffer and the minibuffer, is used to indicate what happens, if you
  invoke a command that is not a suffix.  Most prefixes do not allow
  non-suffixes to be invoked, so this line usually is gray.  c8a9ac51

- Many faces have also been improved.  This involves changing which
  built-in faces they inherit from, some explicit changes to their
  appearance, and semantic clarifications.  Of course your mileage may
  vary — it's possible that some face just happened to look right with
  your chosen theme, but now it has to be themed to achieve that
  again.  47d3f01d 71d16d86 et al.

- Added a new face, ~transient-delimiter~, which is used for parentheses
  around values and the pipe character used to separate possible values
  from each other.  567b5d54

- Added a new command ~transient-toggle-level-limit~, bound to ~C-x a~,
  which temporarily shows all suffix commands a transient has to
  offer.  This makes it possible to occasionally use more obscure
  commands and arguments, without having to always display them.
  For more information see [[https://magit.vc/manual/transient/Enabling-and-Disabling-Suffixes.html][Enabling and Disabling Suffixes]].  #243

The changes described below, only directly affect package authors and
users who implement their own transients.  If that does not describe
you, then all you have to know is that many features were fine-tuned
and otherwise improved, opening up some new use-cases and making some
things easier to implement.  This will hopefully lead to improvements
in your favorite transient-using packages in the coming months.

- It sometimes makes sense to bind multiple keys to the same suffix
  command, e.g., because they behave differently based on the suffix
  description, or some other slot that can be set per binding.
  Previously these bindings shared a visibility level; how this can
  be set individually.  #153

- While functions are run, which format strings to be inserted into the
  transient buffer or to determine whether other aspects of a suffix,
  that transient buffer no longer is the current buffer.  Instead the
  buffer in which the prefix and its suffixes operate, is the current
  buffer.  This affects functions such as ~transient-format-description~
  and those found in predicate slots such as ~if~.  In contexts where
  the transient buffer is needed but the other buffer happens to be
  current, the new macro ~transient-with-shadowed-buffer~ can be used
  to temporarily change that.

- The new suffix slots ~face~ and ~inapt-face~ can be used to specify how
  a suffix looks, which in simple cases is more convenient than using
  a function as ~description~ and adding the face there.  The values of
  these slots should be faces or functions that returns a face.  The
  default for ~inapt-face~ is ~transient-inapt-suffix~, but in some cases
  it is undesirable to apply this face to the whole description, so
  this can be overridden by setting this slot to ~nil~ for individual
  suffixes.  The default for ~face~ is ~nil~.  c2a75880 8e15a29b 71399d21

- Added new variables ~transient--pending-suffix~ and
  ~transient--pending-group~, which are bound while a suffix/group is
  being inserted.  These are mostly intended for internal purposes,
  but in some rare complex cases package authors might need them too.
  0717589a 70e8dc80

- Sometimes it is useful to display some information in the transient
  buffer, which is not associated with a suffix command.  The new
  class ~transient-information~ can be used for that purpose.  Children
  that use this class are very similar to regular suffixes, the lack
  of a command binding being nearly the only difference.  #226

- Instead of a list of choices, the value of a suffix's ~choices~ slot
  can now be a function that returns such a list.  #212

- Per-suffix functions that format its description (specified using the
  ~description~ slot) can now optionally take one instead of zero argument,
  the respective suffix object.  09be367b

- Added a new command ~transient-echo-arguments~ intended for use in
  examples and bug reports, when a prefix must bind some command, but it
  does not really matter which.  Using this command is less verbose than
  having to implement a dummy every time, and it comes with some goodies.
  I.e., it reports information about the prefix from which it was invoked.
  faa3d09d

- When a command was defined using ~transient-define-suffix~ and an alias
  for that command was created using ~defalias~, then the alias had no
  access to the associated suffix object.  Now it does, which makes it
  possible to bind the same command multiple times in a prefix, and make
  it behave differently depending on the symbol-name that was used to
  invoke it.  f43aee1a

- The values of a prefix's ~transient-suffix~ and ~transient-non-suffix~
  slots should now be a boolean.  The value of the ~transient-suffix~
  slot has to be handled differently for different types of suffixes.
  I.e., infix arguments must ignore it, and sub-prefixes must honor
  it but to do so they must use a different pre-command.  Previously
  booleans were not supported and the previously recommended values,
  ~transient--do-stay~ and ~transient--do-exit~ are still supported (but
  they are "corrected" for sub-prefixes).  For the ~transient~ slot the
  use of booleans was always allowed and recommended.  8098d175

- For sub-prefixes a value of ~t~ for the ~transient-suffix~ slot of the
  parent prefix now means that suffixes, which exit the sub-prefix,
  return to the parent prefix, instead of exiting that as well.
  784887b7 5ad5b627

- In addition to booleans and pre-commands, the values of the
  ~transient-suffix~, ~transient-non-suffix~ and ~transient~ slots
  may now also be pre-command "shorthands", e.g., use ~leave~ instead
  of ~transient--do-leave~ (which in some cases is a good value for
  `transient-non-suffix`). 9617b6c7

- ~transient--do-replace~ now behaves as documented and implied by its
  name.  Use the new ~transient--do-stack~ if you want to return to the
  outer prefix.  94661e0c

- Added a new prefix slot ~transient-switch-frame~, which allows
  specifying the transient behavior of ~switch-frame~ per prefix and
  independently of the transient behavior of other non-suffixes
  (specified using the ~transient-non-suffix~ slot).  609dabfd

- Added a new function ~transient-prefix-object~ to allow package
  authors to avoid the following unfortunate complication.

  While a transient is being setup or refreshed (which involves
  preparing its suffixes) the variable ~transient--prefix~ can be
  used to access the prefix object.  Thus this is what has to be
  used in suffix methods such as ~transient-format-description~,
  and in object-specific functions that are stored in suffix slots
  such as ~description~.  When a suffix command is invoked (i.e.,
  in its ~interactive~ form and function body) then the variable
  ~transient-current-prefix~ has to be used instead.

  Two distinct variables are needed, because any prefix may itself
  be used as a suffix of another prefix, and such sub-prefixes have
  to be able to tell themselves apart from the prefix they were
  invoked from.  Regular suffix commands, which are not prefixes, do
  not have to concern themselves with this distinction, so they can
  use this function instead.  In the context of a plain suffix, it
  always returns the value of the appropriate variable.
  37307c1b

Bug fixes:

- cc0fa805 transient--post-command: Redisplay after universal argument
- dd970cd4 Compile suffix commands that are defined inside prefix definitions
- b150b48b transient-quit-one: Cancel prefix-arg instead of exiting transient
- 7c08beb8 Revert "transient-{set,save,reset}: Stay transient"
- f8209cc8 transient--maybe-pad-keys: Ignore raw strings
- 0a0ba1aa transient--do-leave: Actually behave as documented
- ed5bd6fd transient-infix-set(argument): Fix disabling incompatible options
- 3a2b936a Fix highlighting infix for which user input is being read
- d834f764 transient-format(around:suffix): Don't attempt to highlight full line
- af6eb310 transient-format: Only highlight infix if minibuffer is used
- b1d1c369 Prevent temporary faces from leaking back into objects
- 307695d2 transient-format-description(around:suffix): Combine faces
- 7f0215c4 transient-format-value(option,value): Use argument faces

Also contains various documentation updates and a lot of code clean-ups.

This release drops support for Emacs 25.  The last Emacs 25 release
(25.3) was released in 2017; over six years ago.  The current Emacs
version is 29.1; that's four major releases since 25.1.

* v0.4.3    2023-08-25

- Added a second implementation of ~transient--wrap-command~, taking
  advantage of improvements in Emacs 30.

* v0.4.2    2023-08-25

- Infix commands are only useful when invoked from a transient prefix
  command and ~execute-extended-command~ should not offer them as
  completion candidates.  In the past we used a weird kludge to
  accomplish that, but now we rely on ~read-extended-command-predicate~.
  That allowed the removal of some complications and made it possible
  to fix a bug in ~transient--wrap-command~.

  To hide infix commands, users now have to update to Emacs 28, or
  later, and customize ~read-extended-command-predicate~.

  #+begin_src emacs-lisp
    (setq read-extended-command-predicate
          'command-completion-default-include-p)
  #+end_src

- Due to changes in Emacs 29.1, pretty-printing isn't consistent
  across Emacs releases anymore by default, which is unfortunate
  in our case because we use it to write to files that are likely
  to be checked into version control.  We now force the use of the
  old style across releases.

* v0.4.1    2023-06-02

Bug fixes:

- 070d47b0 Support searches that end right after suffix
- ab831828 transient--insert-group(columns): Drop separator before first column
- 62edeffd #247 Fix bug using :incompatible using suffixes before infixes
- 6efa9fad transient-predicate-map: Bind univeral-argument-more

* v0.4.0    2023-05-10

- Transient has to update state after every suffix command.  If that
  fails for some reason, then Emacs ends up in an badly broken state.
  It was rare, but in the worst case scenario, that meant that Emacs
  refused to call any more commands and had to be killed.

  Naturally ~post-command-hook~ is the first choice to run something
  after commands, but unfortunately that hook is not guaranteed to run
  only once, and worse it is not guaranteed run /after/ the command.
  Working around this limitation made an essential part of Transient
  much more complex and fragile.  As new edge-cases were discovered,
  new and increasingly desperate heuristics had to be added, until I
  finally decided that relying solely on hooks was just not feasible.

  Now ~pre-command-hook~ is used to advice ~this-command~, to add an
  around advice, which ensures that the state update takes place, even
  when ~post-command-hook~ is run prematurely.  The advice wraps both
  the function body and the interactive spec with ~unwind-protect~, so
  we can finally be sure that the state change is always performed,
  and that the advice is removed again.

  It has been an interesting journey, and I have documented it in long
  commit messages.  If you are interested in the details, see 7b8a7d71
  (which still tries to avoid using any advice), 51c68c87, 52cac9c0,
  bug#61179 and bug#61176.

- The ~transient-define-prefix~ now expands to code instead of data,
  meaning that lambda expressions are finally properly evaluated and
  byte-compiled.  ea851f3b e88f51d6 277e5f2d a1774182

- Popup navigation is no longer considered a second-class feature and
  is enabled by default.  Some transients allow arbitrary non-suffixes
  to be invoked, so some key bindings, which were previously used for
  popup navigation, had to be removed, to avoid conflicts.  98d50202 ff

- Each prefix and suffix can now have its own help function.  This is
  configured using the new ~show-help~ slot.  ea5ac99f

- The ~transient-options~ class now supports two types of options that
  can have multiple values: repeated option-value pairs and a final
  option that takes all remaining arguments as value.  #154

- Added support for the use of non-proportional text in the transient
  popup.  7f5520b3

- Imenu was taught about Transient's definition macros.  #178

- It is now possible to return to the parent prefix from a sub-prefix.
  e90f7a16

- Boolean values of the ~transient~ slot of sub-prefixes are now
  interpreted correctly.  4a36b1d9

- Added new option ~transient-hide-during-minibuffer-read~.  5762bd9a

- Added new option ~transient-align-variable-pitch~.  cda6a120

- Added new command ~transient-reset~, which clears the set and saved
  value of the active transient.  51585b8d

- When using Emacs 28, ~execute-extended-command~ can be told to ignore
  transient infix commands.  Even when using that Emacs version, that
  command does not ignore any commands by default, but this behavior
  can be easily be enabled using:

    (setq read-extended-command-predicate
          'command-completion-default-include-p)

  Infix arguments are implemented as commands, so they by default show
  up as completion candidates of ~execute-extended-command~, which is
  useless because they are only intended to be invoked from transient
  prefix commands.  Enable this feature to prevent that.

- Added new command ~transient-toggle-debug~.  b466cd9a

- Depend on the Compat package, allowing me to use convenient features
  that were added to Emacs over the last few years, without having to
  wait another few years until everybody has updated to a reasonably
  recent Emacs release.  5ae3c401

- Added basic support for suffixes that span multiple lines (multi-row
  cells).  #193

- Infix arguments can now be invoked following a prefix argument.  To
  use a negative prefix argument use "C--".  "-" cannot be used anymore
  because it conflicts with the most common prefix key used for infix
  arguments.  ed2febd0

- Removed obsolete aliases for functions deprecated in v0.3.0.  #192

- Duplicated suffix commands are now disambiguated, making it possible
  to bind a command multiple times as a suffix of a transient command,
  but still have it do different things depending on what binding is
  used, based on the value of some slot of the corresponding suffix
  object, similar to how ~self-insert-command~ inserts the pressed key.
  f27c840a

- ~recursive-edit~ and ~top-level~ can now be used while a transient is
  active.  fcdeadc1 5a1b2bac

- Switched to Emacs 29's new keymap functions, which are also supported
  in newer releases, thanks to the Compat package.  87f70af5 5a966aa8

Bug fixes:

- 938b0591 #173 transient--show: Set point after displaying window again
- 202271f7 Resurrect transient-files class
- c26cbac5 #181 transient-{init,set}-value: Use case-sensitive matching
- 28491e1f Properly deal with stealth undefined command
- 143a1393 transient-infix-read: Always enable-recursive-minibuffers
- 76b77e01 magit--{pre,post}-command: Add emergency exits
- 09b436fa transient--debug: Ignore error in transient--suffix-symbol
- f2e0dfcc transient--get-predicate-for: Ignore error in transient--suffix-symbol
- bf29731a transient--post-command: Don't pop and push equal redisplay maps
- 3c78b10f transient--redisplay: Don't redisplay during mouse-drag-region
- 714e3482 No longer always suspend when handle-switch-frame is called
- ecb815bc transient--abort-commands: Add keyboard-escape-quit
- 8b1f8dcc transient--minibuffer-depth: Must always be a number
- 686b7ebc Fix handling of sub-prefix command that use the minibuffer
- a19faa1c Return to outer prefix when minibuffer is aborted for sub-prefix
- 4477555b transient--post-exit: Deal with unbound transient slot properly
- 0f39af0e #188 transient-format-description: Use cl-call-next-method
- 1fd1cf51 When highlighting suffixes not normally displayed consider group level
- 7c771c94 Do not let-bind overriding-terminal-local-map to nil
- 31d355b5 transient-set-level: Refresh shown levels after setting one
- bb056e71 Invoke suffix commands directly when a button is pushed
- 270eff1c Fix redisplay when popup navigation is enabled
- 81b2b912 Use this-original-command again
- d4fb853d #198 transient--show: Also hide the header-line
- 7467a79c transient--suspend-override: Cancel display timer
- 5686a792 transient--suspend-override: Cancel prefix key display
- 1c84d7ad Remap kp-subtract, kp-equal and kp-add
- 5302db18 Once popup is showing keep doing so until full exit
- cc887ebe transient--delay-post-command: Fix execute-extended-command handling
- 3b267425 transient--fit-window-to-buffer: Use correct package prefix
- 9d4fabc3 #208 transient--describe-function: Handle renamed help buffer
- 555792f7 #209 Fix setting level of anonymous infixes
- 0a3b22f1 #215 transient--delay-post-command: Account for events returned as vector
- ad953cc3 #204 transient--insert-group: Add fallback for failed alignment calculation
- 5337e5eb #230 transient-define-{*}: Error if ARGLIST is missing
- d800ce01 Use equal to compare with empty vector
- 3657117b #234 transient--parse-suffix: Detect when mandatory command is missing
- f88cbbc5 #234 transient--parse-suffix: Differentiate command and desc lambda
- 0204a243 #234 transient--parse-suffix: Define suffix aliases at load-time
- 0ae0de43 #241 transient--invalid: Add special-case for anonymous inapt commands
- af7fe42b #244 transient--parse-suffix: Don't try to evaluate closures again
- 6ff5c51f transient-isearch-abort: Fix partial match case

Also contains various documentation updates, code clean-ups and
build improvements.

* v0.3.7    2021-10-25

- Added an additional safety hatch to prevent Emacs from entering an
  inconsistent state when an unexpected error occurs.  99e48369

- Added support for implementing section movement commands in
  third-party packages.  This was requested by the maintainer of
  Emacspeak.  Because they would be of very limited use to sighted
  users no such commands are added to Transient itself.  769219b5

- ~transient-read-number-{N0,N+,N}~ now support infix arguments that
  have three different states: disabled, enabled without an empty
  value, and enabled with a non-empty value.  626d105e

- If a command is called as a suffix of itself, then the help command
  shows the function definition instead of the man-page as it usually
  does for prefixes.  e17e2b2f

- Give users more control over how the transient buffer is displayed.
  Various aspects that were previously hardcoded can now be changed
  using the ~transient-display-buffer-action~ option.  7c677737

- Added support for adding suffixes that might be neither defined nor
  autoloaded when the prefix is invoked.  This usually results in an
  error and while it is now possible to override that using an extra
  step, it is still discouraged.  6842305e

Bug fixes:

- 1e740608 transient-map: Bind C-u to universal-argument
- e9048100 Explicitly call transient--pre-command in button action
- be119ee4 Export variables for transient non-infix suffixes
- b526b9c7 transient-infix-set: Consider all incompatibility rules
- 7126d6aa Fix hydra-inspired colors
- 0c2255a2 transient-get-value: Add an emergency exit

Also contains various documentation updates and code clean-ups.

* v0.3.6    2021-07-01

- Added new option ~transient-force-single-column~, which may be useful
  for low vision.  #122

- Added new option ~transient-highlight-higher-levels~, which is
  intended for package authors.  90a05622

* v0.3.5    2021-06-16

- Added a kludge to work around some unexpected Emacs behavior.
  ef921d30

- When showing help for a suffix that is also a subprefix, then also
  consider the manpage that is set for the prefix, if any.  a9bdd013

* v0.3.4    2021-05-25

- Very minor changes.

* v0.3.3    2021-05-24

- Added SPDX-License-Identifier library header.  7d3d8d79

* v0.3.2    2021-04-20

- Fixed an error message.  c145229a

* v0.3.1    2021-04-19

- Changed ~transient-prefix~'s ~suffix-description~ slot to be initially
  unbound, as was always intended.  c28b8a4

- Added new functions ~transient-read-file~ and
  ~transient-read-existing-file~.  a3b44224

* v0.3.0    2021-02-21

- Added a temporary kludge to prevent a transient from being invoked
  while the minibuffer is active.  A future release will enable
  this again, once we are sure that cannot cause Emacs to enter an
  inconsistent state, that causes most events to be ignored.  #112

- Improved the backtrace that is shown when a fatal error occurred in a
  critical context.  This involved some back and forth.  See commits
  mentioning the "emergency exit".

- Added support for defining a per-prefix fallback suffix description
  function, which is used for suffixes that do not explicitly provide
  a description.  The new ~suffix-description~ slot is used to specify
  that function.  The new ~transient-command-summary-or-name~ function
  is useful, not just as an example.  8b22b52b

- Added ~transient-arg-value~, which can be used to extract the values
  of individual arguments in the output of ~transient-args~.  d76f73f8

- Added support for using variables in group and suffix definitions
  of a prefix.  Such indirect specifications are resolved when the
  transient prefix is being defined.  #101

- No longer bind ~M-<key>~ to any common suffix commands; freeing this
  namespace for a variety of uses in individual transient.  A few
  existing bindings had to be changed because of this.  990eb0a2

- Added ~transient-suffixes~ function, which is useful when
  ~transient-args~ is not sufficient because one needs the suffix
  objects, not just their values.  #98

- Added ~init-value~ slot for infix and prefix objects.  If this value
  bound then it is called with the object as only argument instead of
  the primary ~transient-init-value~ method of the object class.  #96,
  3284f6a0

- Added ~unsavable~ slot for infix objects.  If this is non-nil, then
  the value of the infix is removed from the prefix value before
  saving, setting and adding to history.  #96

- Added support for right padding the keys of all suffixes in a group.
  This is controlled using the new ~pad-keys~ slot of group objects.
  7502390b, 293a437d

- Added support for delaying setup of the suffixes of a prefix until
  that is invoked.  Also added support for using unnamed functions as
  suffix commands.  Taken together these changes make it possible to
  dynamically create the list of suffixed.  See the ~notmuch-transient~
  package for two examples: ~notmuch-search-transient~ and
  ~notmuch-tag-transient~.  f2252d53, a3e53633

- Added the infix class ~transient-lisp-variable~.  2d8ceff4

- Added ~transient-infix-read~, which allows arbitrary commands to read
  a value the same way as would the infix command that is provided as
  an argument to this function.  73694be4

- Added support for coloring suffixes in a Hydra-like fashion.
  To enable this, customize option ~transient-semantic-coloring~.
  248862c5

- Added support for disabling and dimming suffix commands that are
  currently not suitable, instead of completely hiding them.  #80

- Autoload functions that serve a purpose similar to that of
  ~define-key~. #85

- Consistently use ~transient-~ as the prefix of all symbols.
  The old names remain available as obsolete aliases.  dd0c44cb

- Added support for scrolling the transient popup buffer using the
  scroll bar.  #84

- Various bug fixes.
  48238bf5 Allow invoking arbitrary prefixes as non-suffixes
  d85eb790 transient-read-directory: Pass read value through file-local-name
  f086cb62 transient--insert-suffix: Allow same key with different predicates
  d555d260 transient-format-description(lisp-variable): Return string
  0d79ccfa transient--parse-suffix: Don't fallback to read-string for options
  f88dbc43 transient-suffix-object: Support all suffixes
  b343e2a3 transient-infix-read: Fix ivy specific kludge
  55bad195 transient--pp-to-file: Bugfix
  c1df3b21 Ensure we use symbols in a few more places
  769fa438 transient-set-level: Fix edge-case
  88d935c7 transient-display-buffer-action: inhibit-same-window by default

* v0.2.0    2020-02-26

- ~transient-args~ must now be called with a transient prefix command
  as argument.  It is now the only argument and its value must be a
  symbol now, an object is no longer supported.  When this command
  does not match ~current-transient-command~, then this function now
  returns the set, saved or default value.  0312b93, 7d0db28,
  d33fe5a, a6ce195

- No longer use the last history element as initial minibuffer input
  by default.  Added new option ~transient-read-with-initial-input~ to
  allow users to restore the old default. dcf7a4d, 5decc6e

- The set and saved values were not always used.  #68

- Added support for inserting and removing groups.  #36

- Added support for specifying where to insert elements and groups
  using coordinates.  #26

- Added support for moving the cursor inside the transient popup
  buffer using the arrow keys or Isearch, and for invoke suffix
  commands using RET or mouse clicks.  Unlike Magit-Popup, Transient
  doesn't make the transient popup buffer the current buffer.  This
  is important when invoking suffix commands that take the current
  position into account, but it has the drawback that we do not get
  these features for free.  Because I also consider them unnecessary
  I did not implement them initially.  Turns out quite a few users
  strongly disagree.  Set ~transient-enable-popup-navigation~ to ~t~ to
  enable these features.  #42

- Explicitly support Edebug.  Previously when Edebug was triggered
  while a transient was active, then Emacs entered an unrecoverable
  state.  #19

- No longer attempt to display a thin line in termcap frames.  0a96a57

- Work around some Ivy bugs/incompatibilities.  af243d5, fed7ab1

- The new option ~transient-force-fixed-pitch~ allows users to use a
  monospaced font in transient's popup buffer even if they use a
  proportional font for the rest of Emacs.  #25, #67

- Adapted to backward incompatible changes in Emacs 27 that prevented
  faces from extending to the edge of the window as expected.  c1ae1ee

- No longer depend on dash (or any other third-party package).  #66

- When a transient has conflicting key bindings and Transient is
  configure to warn about that, then Emacs entered an unrecoverable
  state instead.  75de1f0

- ~transient-format-value~ now supports options with multiple values.
  #65

- Removing a suffix based on its position was broken.  41cbf49

- In our popup buffers disable the tab feature that Emacs 27
  introduces.  #62

- Inserting a new suffix next to another ended up replacing the latter
  instead if its key binding was defined in the suffix object.  #58

- ~transient-undefined~ learned to make some noise.  #57

- Fix replacing a suffix with another suffix bound to the same key.
  5a360bb, 4ce1868

- Characters are no longer allowed as pseudo suffixes.  To insert a
  an empty cell into a table use the empty string instead.  71687ba

- Added new variable ~transient--buffer-name~.  #45

- Some misconfiguration that affects how the transient popup buffer
  is displayed could lead to Emacs entering an unrecoverable state.
  #34, #44

- The echo area is now cleared when the transient popup buffer is
  shown.  afdf1f0

- If ~transient-show-popup~ is 0 or a negative number, then not even
  a one-line summary is shown initially.  #41

- Added new function ~transient-read-directory~.  a87cb2c

- ~define-transient-command~ now supports specifying the level of a
  suffix using the ~:level~ keyword argument.  6506cfd

- The mode-related suffix predicates now also support a list of modes
  as argument in addition to a single mode as before.  1c6afb8

- The new ~incompatible~ slot of prefix objects makes it possible to
  specify which arguments should be autoatically disabled when the
  user enables certain other arguments.  544b3bb

- ~transient--history-push~ is now defined as generic function.  47b7975

- The a new ~history-key~ slot and ~transient--history-key~ generic
  function for prefix objects.  3668aeb, e627d45

- Disallow setting the level of essential suffixes that are shared
  between all transients.  #29

- The active infix is now highlight while reading its value from the
  user.  #30

- The commands ~transient-set~  and ~transient-save~ can now be configured
  to exit the transient, though by default they still don't.  a47ae94

- Always respect the ~transient~ slot of a suffix, even if that suffix
  has a binding in ~transient-predicate-map~.  919fc66

- Added new generic functions ~transient-set-value~ and
  ~transient-save-value~ intended for prefix commands.  ebe9d9d

- It is no longer possible to set a prefix level to 0, which is an
  invalid value.  #28

- All transient prefix and suffix commands are now automatically
  declared to be for interactive use only.  a6295fa

- Infix arguments are no longer added to ~command-history~ because
  these entries were both useless and extremely noisy.  #23

- ~digit-argument~ no longer exits the transient.  5f0ec7d

- A new keymap, ~transient-base-map~ was added to make it easier to
  change key bindings that are shared between all transients.  This
  new keymap is used as the parent of all the other keymaps that are
  shared between all transients.

- Added new commands ~transient-scroll-up~ and ~transient-scroll-down~,
  which scroll the transient window.  ~C-v~ and ~M-v~ (and ~<next>~ and
  ~<prior>~) are bound to these commands.  These keys were chosen they
  are bound to scrolling commands in the global map too.  This made
  it necessary to find a new binding for ~transient-show~, which ~C-t~ is
  bound to now.  #17

- The new option ~transient-mode-line-format~ allows users to use
  a mode-line for the transient popup buffer instead of just a
  thin line that separates it from the echo area.  When using a
  non-standard value for ~transient-display-buffer-action~ it may
  be necessary to do that.  #17

- The new option ~transient-display-buffer-action~ allows users to
  specify how a window is selected to display the transient popup
  buffer.  The ~lv~ library is no longer used.  #17

- The window that was selected before the transient window was shown
  is no longer re-selected before calling a suffix that exits the
  transient.  If a suffix changes the selected window unintentionally,
  then that is a bug.  This makes it possible to intentionally change
  the window layout using transients.

- An infix is a special kind of suffix.  Depending on context
  "suffixes" means "suffixes (including infixes)" or "non-infix
  suffixes".  This is now mention in a few places where users might
  otherwise get confused.

- Stopped claiming that the transient is shown in the "echo area",
  because technically that is not correct.  Instead talk about the
  "popup buffer".

- Fixed handling of suffix commands that are undefined at the time the
  prefix is invoked.  This is still an error, but the error message
  now explains what is wrong.  a729bbb

- Fixed saving values/history/levels, making sure that the printed
  expression is never abbreviated.  #15

- Fixed jumping to the correct place in a manpage when showing the
  documentation for an infix argument.  c4bf4af

- Bound ~ESC ESC ESC~ to ~transient-quit-all~ because the convention is
  that it should be possible to exit any temporary state using this
  binding.  #12

- Fixed referencing suffix bindings by their key when the key binding
  is defined in the suffix object instead of in the suffix spec.
  e4ffb97

- Remove trailing whitespace from popup text for the benefit of users
  who have set enabled ~show-trailing-whitespace~ globally.  0758efa

- Fixed showing available bindings on a single line instead of using
  the usual popup buffer.  2f011c9, 99d3bf6

- Added a line between the ~lv~ window and the echo area.  ca18bb6

- Fixed adding a new suffix at the end of a group and removing a
  group's last suffix.  #20, #6

- No longer use ~cl-typep~, which appears to have a bug on Emacs 25.
  9183fe1

- Fixed ~lisp~ make target.  170a3fd

- Fixed reading a number as the value of an infix.  8219c0b

- Various bug fixes to
  ~transient--goto-argument-description~ (4f80a89),
  ~transient-show-help~ (ccac95e),
  ~transient-infix-read~ (7bf9759).

* v0.1.0    2019-01-14

- First release.