unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
blob 4557f41c3f706f4a987ba238980302872adbc0b2 45440 bytes (raw)
name: doc/emacs/mini.texi 	 # note: path name is non-authoritative(*)

   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
 
@c -*- coding: utf-8 -*-
@c This is part of the Emacs manual.
@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2024 Free Software
@c Foundation, Inc.
@c See file emacs.texi for copying conditions.
@node Minibuffer
@chapter The Minibuffer
@cindex minibuffer

  The @dfn{minibuffer} is where Emacs commands read complicated
arguments, such as file names, buffer names, Emacs command names, or
Lisp expressions.  We call it the ``minibuffer'' because it's a
special-purpose buffer with a small amount of screen space.  You can
use the usual Emacs editing commands in the minibuffer to edit the
argument text.

@menu
* Basic Minibuffer::      Basic usage of the minibuffer.
* Minibuffer File::       Entering file names with the minibuffer.
* Minibuffer Edit::       How to edit in the minibuffer.
* Completion::            An abbreviation facility for minibuffer input.
* Minibuffer History::    Reusing recent minibuffer arguments.
* Repetition::            Re-executing commands that used the minibuffer.
* Passwords::             Entering passwords in the echo area.
* Yes or No Prompts::     Replying yes or no in the echo area.
@end menu

@node Basic Minibuffer
@section Using the Minibuffer

@cindex prompt
  When the minibuffer is in use, it appears in the echo area, with a
cursor.  The minibuffer starts with a @dfn{prompt}, usually ending
with a colon.  The prompt states what kind of input is expected, and
how it will be used.  The prompt is highlighted using the
@code{minibuffer-prompt} face (@pxref{Faces}).

  The simplest way to enter a minibuffer argument is to type the text,
then @key{RET} to submit the argument and exit the minibuffer.
Alternatively, you can type @kbd{C-g} to exit the minibuffer by
canceling the command asking for the argument (@pxref{Quitting}).

@cindex default argument
@vindex minibuffer-default-prompt-format
  Sometimes, the prompt shows a @dfn{default argument}, inside
parentheses before the colon.  This default will be used as the
argument if you just type @key{RET}.  For example, commands that read
buffer names usually show a buffer name as the default; you can type
@key{RET} to operate on that default buffer.  You can customize how
the default argument is shown with the user option
@code{minibuffer-default-prompt-format}.

@cindex Minibuffer Electric Default mode
@cindex mode, Minibuffer Electric Default
@findex minibuffer-electric-default-mode
@vindex minibuffer-eldef-shorten-default
  If you enable Minibuffer Electric Default mode, a global minor mode,
Emacs hides the default argument as soon as you modify the contents of
the minibuffer (since typing @key{RET} would no longer submit that
default).  If you ever bring back the original minibuffer text, the
prompt again shows the default.  To enable this minor mode, type
@kbd{M-x minibuffer-electric-default-mode}.

  Since the minibuffer appears in the echo area, it can conflict with
other uses of the echo area.  If an error message or an informative
message is emitted while the minibuffer is active, the message is
displayed in brackets after the minibuffer text for a few seconds, or
until you type something; then the message disappears.  While the
minibuffer is in use, Emacs does not echo keystrokes.

@vindex minibuffer-follows-selected-frame
  While using the minibuffer, you can switch to a different frame,
perhaps to note text you need to enter (@pxref{Frame Commands}).  By
default, the active minibuffer moves to this new frame.  If you set
the user option @code{minibuffer-follows-selected-frame} to
@code{nil}, then the minibuffer stays in the frame where you opened
it, and you must switch back to that frame in order to complete (or
abort) the current command.  If you set that option to a value which
is neither @code{nil} nor @code{t}, the minibuffer moves frame only
after a recursive minibuffer has been opened in the current command
(@pxref{Recursive Mini,,, elisp}).  This option is mainly to retain
(approximately) the behavior prior to Emacs 28.1.  Note that the
effect of the command, when you finally finish using the minibuffer,
always takes place in the frame where you first opened it.  The sole
exception is that when that frame no longer exists, the action takes
place in the currently selected frame.

@node Minibuffer File
@section Minibuffers for File Names

@cindex default directory
  Commands such as @kbd{C-x C-f} (@code{find-file}) use the minibuffer
to read a file name argument (@pxref{Basic Files}).  When the
minibuffer is used to read a file name, it typically starts out with
some initial text ending in a slash.  This is the @dfn{default
directory}.  For example, it may start out like this:

@example
Find file: /u2/emacs/src/
@end example

@noindent
Here, @samp{Find file:@: } is the prompt and @samp{/u2/emacs/src/} is
the default directory.  If you now type @kbd{buffer.c} as input, that
specifies the file @file{/u2/emacs/src/buffer.c}.  @xref{File Names},
for information about the default directory.

  Alternative defaults for the file name you may want are available by
typing @kbd{M-n}, see @ref{Minibuffer History}.

  You can specify a file in the parent directory with @file{..}:
@file{/a/b/../foo.el} is equivalent to @file{/a/foo.el}.
Alternatively, you can use @kbd{M-@key{DEL}} to kill directory names
backwards (@pxref{Words}).

  To specify a file in a completely different directory, you can kill
the entire default with @kbd{C-a C-k} (@pxref{Minibuffer Edit}).
Alternatively, you can ignore the default, and enter an absolute file
name starting with a slash or a tilde after the default directory.
For example, you can specify @file{/etc/termcap} as follows:

@example
Find file: /u2/emacs/src//etc/termcap
@end example

@noindent
@cindex // in file name
@cindex double slash in file name
@cindex slashes repeated in file name
@findex file-name-shadow-mode
A double slash causes Emacs to ignore everything before the
second slash in the pair.  In the example above,
@file{/u2/emacs/src/} is ignored, so the argument you supplied is
@file{/etc/termcap}.  The ignored part of the file name is dimmed if
the terminal allows it.  (To disable this dimming, turn off File Name
Shadow mode with the command @w{@kbd{M-x file-name-shadow-mode}}.)

  When completing remote file names (@pxref{Remote Files}), a double
slash behaves slightly differently: it causes Emacs to ignore only the
file-name part, leaving the rest (method, host and username, etc.)
intact.  Typing three slashes in a row ignores everything in remote
file names.  @xref{File name completion,,, tramp, The Tramp Manual}.

@cindex home directory shorthand
  Emacs interprets @file{~/} as your home directory.  Thus,
@file{~/foo/bar.txt} specifies a file named @file{bar.txt}, inside a
directory named @file{foo}, which is in turn located in your home
directory.  In addition, @file{~@var{user-id}/} means the home
directory of a user whose login name is @var{user-id}.  Any leading
directory name in front of the @file{~} is ignored: thus,
@file{/u2/emacs/~/foo/bar.txt} is equivalent to @file{~/foo/bar.txt}.

  On MS-Windows and MS-DOS systems, where a user doesn't always have a
home directory, Emacs uses several alternatives.  For MS-Windows, see
@ref{Windows HOME}; for MS-DOS, see
@ifnottex
@ref{MS-DOS File Names}.
@end ifnottex
@iftex
@ref{MS-DOS File Names, HOME on MS-DOS,, emacs, the digital version of
the Emacs Manual}.
@end iftex
On these systems, the @file{~@var{user-id}/} construct is supported
only for the current user, i.e., only if @var{user-id} is the current
user's login name.

@vindex insert-default-directory
  To prevent Emacs from inserting the default directory when reading
file names, change the variable @code{insert-default-directory} to
@code{nil}.  In that case, the minibuffer starts out empty.
Nonetheless, relative file name arguments are still interpreted based
on the same default directory.

  You can also enter remote file names in the minibuffer.
@xref{Remote Files}.

@node Minibuffer Edit
@section Editing in the Minibuffer

  The minibuffer is an Emacs buffer, albeit a peculiar one, and the
usual Emacs commands are available for editing the argument text.
(The prompt, however, is @dfn{read-only}, and cannot be changed.)

  Since @key{RET} in the minibuffer submits the argument, you can't
use it to insert a newline.  You can do that with @kbd{C-q C-j}, which
inserts a @kbd{C-j} control character, which is formally equivalent to
a newline character (@pxref{Inserting Text}).  Alternatively, you can
use the @kbd{C-o} (@code{open-line}) command (@pxref{Blank Lines}).

  Inside a minibuffer, the keys @key{TAB}, @key{SPC}, and @kbd{?} are
often bound to @dfn{completion commands}, which allow you to easily
fill in the desired text without typing all of it.  @xref{Completion}.
As with @key{RET}, you can use @kbd{C-q} to insert a @key{TAB},
@key{SPC}, or @samp{?} character.  If you want to make @key{SPC} and
@key{?} insert normally instead of starting completion, you can put
the following in your init file:

@lisp
(keymap-unset minibuffer-local-completion-map "SPC")
(keymap-unset minibuffer-local-completion-map "?")
@end lisp

  For convenience, @kbd{C-a} (@code{move-beginning-of-line}) in a
minibuffer moves point to the beginning of the argument text, not the
beginning of the prompt.  For example, this allows you to erase the
entire argument with @kbd{C-a C-k}.

@cindex height of minibuffer
@cindex size of minibuffer
@cindex growing minibuffer
@cindex resizing minibuffer
  When the minibuffer is active, the echo area is treated much like an
ordinary Emacs window.  For instance, you can switch to another window
(with @kbd{C-x o}), edit text there, then return to the minibuffer
window to finish the argument.  You can even kill text in another
window, return to the minibuffer window, and yank the text into the
argument.  There are some restrictions on the minibuffer window,
however: for instance, you cannot split it.  @xref{Windows}.

@vindex resize-mini-windows
  Normally, the minibuffer window occupies a single screen line.
However, if you add two or more lines' worth of text into the
minibuffer, it expands automatically to accommodate the text.  The
variable @code{resize-mini-windows} controls the resizing of the
minibuffer.  The default value is @code{grow-only}, which means the
behavior we have just described.  If the value is @code{t}, the
minibuffer window will also shrink automatically if you remove some
lines of text from the minibuffer, down to a minimum of one screen
line.  If the value is @code{nil}, the minibuffer window never changes
size automatically, but you can use the usual window-resizing commands
on it (@pxref{Windows}).

@vindex max-mini-window-height
  The variable @code{max-mini-window-height} controls the maximum
height for resizing the minibuffer window.  A floating-point number
specifies a fraction of the frame's height; an integer specifies the
maximum number of lines; @code{nil} means do not resize the minibuffer
window automatically.  The default value is 0.25.

  The @kbd{C-M-v} command in the minibuffer scrolls the help text from
commands that display help text of any sort in another window.  You
can also scroll the help text with @kbd{M-@key{PageUp}} and
@kbd{M-@key{PageDown}} (or, equivalently, @kbd{M-@key{prior}} and
@kbd{M-@key{next}}).  This is especially useful with long lists of
possible completions.  @xref{Other Window}.

@vindex enable-recursive-minibuffers
@findex minibuffer-depth-indicate-mode
  Emacs normally disallows most commands that use the minibuffer while
the minibuffer is active.  To allow such commands in the minibuffer,
set the variable @code{enable-recursive-minibuffers} to @code{t}.
You might need also to enable @code{minibuffer-depth-indicate-mode}
to show the current recursion depth in the minibuffer prompt
on recursive use of the minibuffer.

  When active, the minibuffer is usually in @code{minibuffer-mode}.
This is an internal Emacs mode without any special features.

@findex minibuffer-inactive-mode
  When not active, the minibuffer is in @code{minibuffer-inactive-mode},
and clicking @kbd{mouse-1} there shows the @file{*Messages*} buffer.
If you use a dedicated frame for minibuffers, Emacs also recognizes
certain keys there, for example, @kbd{n} to make a new frame.

@node Completion
@section Completion
@c This node is referenced in the tutorial.  When renaming or deleting
@c it, the tutorial needs to be adjusted.
@cindex completion

  You can often use a feature called @dfn{completion} to help enter
arguments.  This means that after you type part of the argument, Emacs
can fill in the rest, or some of it, based on what was typed so far.

@cindex completion alternative
  When completion is available, certain keys (usually @key{TAB},
@key{RET}, and @key{SPC}) are rebound in the minibuffer to special
completion commands (@pxref{Completion Commands}).  These commands
attempt to complete the text in the minibuffer, based on a set of
@dfn{completion alternatives} provided by the command that requested
the argument.  You can usually type @kbd{?} to see a list of
completion alternatives.

  Although completion is usually done in the minibuffer, the feature
is sometimes available in ordinary buffers too.  @xref{Symbol
Completion}.

@menu
* Completion Example::       Examples of using completion.
* Completion Commands::      A list of completion commands.
* Completion Exit::          Completion and minibuffer text submission.
* Completion Styles::        How completion matches are chosen.
* Completion Options::       Options for completion.
@end menu

@node Completion Example
@subsection Completion Example

@kindex TAB @r{(completion example)}
  A simple example may help here.  @kbd{M-x} uses the minibuffer to
read the name of a command, so completion works by matching the
minibuffer text against the names of existing Emacs commands.  Suppose
you wish to run the command @code{auto-fill-mode}.  You can do that by
typing @kbd{M-x auto-fill-mode @key{RET}}, but it is easier to use
completion.

  If you type @kbd{M-x a u @key{TAB}}, the @key{TAB} looks for
completion alternatives (in this case, command names) that start with
@samp{au}.  There are several, including @code{auto-fill-mode} and
@code{autoconf-mode}, but they all begin with @code{auto}, so the
@samp{au} in the minibuffer completes to @samp{auto}.  (More commands
may be defined in your Emacs session.  For example, if a command
called @code{authorize-me} was defined, Emacs could only complete
as far as @samp{aut}.)

  If you type @kbd{@key{TAB}} again immediately, it cannot determine
the next character; it could be @samp{-}, @samp{a}, or @samp{c}.  So
it does not add any characters; instead, @key{TAB} displays a list of
all possible completions in another window.

  Next, type @kbd{-f}.  The minibuffer now contains @samp{auto-f}, and
the only command name that starts with this is @code{auto-fill-mode}.
If you now type @kbd{@key{TAB}}, completion fills in the rest of the
argument @samp{auto-fill-mode} into the minibuffer.

  Hence, typing just @kbd{a u @key{TAB} - f @key{TAB}} allows you to
enter @samp{auto-fill-mode}.

  @key{TAB} also works while point is not at the end of the
minibuffer.  In that case, it will fill in text both at point and at
the end of the minibuffer.  If you type @kbd{M-x autocm}, then press
@kbd{C-b} to move point before the @samp{m}, you can type
@kbd{@key{TAB}} to insert the text @samp{onf-} at point and @samp{ode}
at the end of the minibuffer, so that the minibuffer contains
@samp{autoconf-mode}.

@node Completion Commands
@subsection Completion Commands

  Here is a list of the completion commands defined in the minibuffer
when completion is allowed.

@table @kbd
@item @key{TAB}
Complete the text in the minibuffer as much as possible; if unable to
complete, display a list of possible completions
(@code{minibuffer-complete}).
@item @key{SPC}
Complete up to one word from the minibuffer text before point
(@code{minibuffer-complete-word}).  This command is not available for
arguments that often include spaces, such as file names.
@item @key{RET}
Submit the text in the minibuffer as the argument, possibly completing
first (@code{minibuffer-complete-and-exit}).  @xref{Completion Exit}.
@item ?
Display a list of completions and a few useful key bindings
(@code{minibuffer-completion-help}).
@end table

@kindex TAB @r{(completion)}
@findex minibuffer-complete
  @key{TAB} (@code{minibuffer-complete}) is the most fundamental
completion command.  It searches for all possible completions that
match the existing minibuffer text, and attempts to complete as much
as it can.  @xref{Completion Styles}, for how completion alternatives
are chosen.

@kindex SPC @r{(completion)}
@findex minibuffer-complete-word
  @key{SPC} (@code{minibuffer-complete-word}) completes like
@key{TAB}, but only up to the next hyphen or space.  If you have
@samp{auto-f} in the minibuffer and type @key{SPC}, it finds that the
completion is @samp{auto-fill-mode}, but it only inserts @samp{ill-},
giving @samp{auto-fill-}.  Another @key{SPC} at this point completes
all the way to @samp{auto-fill-mode}.

@kindex ? @r{(completion)}
@cindex completion list
  If @key{TAB} or @key{SPC} is unable to complete, it displays in
another window a list of matching completion alternatives (if there are
any) and a few useful commands to select a completion candidate.  You
can display the same completion list and help with @kbd{?}
(@code{minibuffer-completion-help}).  The following commands can be used
with the completion list:

@table @kbd
@vindex minibuffer-completion-auto-choose
@kindex M-DOWN
@kindex M-UP
@kindex M-RET
@findex minibuffer-next-completion
@findex minibuffer-previous-completion
@findex minibuffer-choose-completion
@item M-@key{DOWN}
@itemx M-@key{UP}
While in the minibuffer or in the completion list buffer, @kbd{M-@key{DOWN}}
(@code{minibuffer-next-completion} and @kbd{M-@key{UP}}
(@code{minibuffer-previous-completion}) navigate through the
completions and displayed in the completions buffer.  When
@code{minibuffer-completion-auto-choose} is non-@code{nil} (which is
the default), using these commands also inserts the current completion
candidate into the minibuffer.  If
@code{minibuffer-completion-auto-choose} is @code{nil}, you can use
the @kbd{M-@key{RET}} command (@code{minibuffer-choose-completion}) to
insert the completion candidates into the minibuffer.  By default,
that exits the minibuffer, but with a prefix argument, @kbd{C-u
M-@key{RET}} inserts the currently active candidate without exiting
the minibuffer.

@findex switch-to-completions
@item M-v
@itemx @key{PageUp}
@itemx @key{prior}
Typing @kbd{M-v}, while in the minibuffer, selects the window showing
the completion list (@code{switch-to-completions}).  This paves the
way for using the commands below.  @key{PageUp}, @key{prior} and
@kbd{M-g M-c} do the same.  You can also select the window in other
ways (@pxref{Windows}).

@findex choose-completion
@item @key{RET}
@itemx mouse-1
@itemx mouse-2
While in the completion list buffer, this chooses the completion at
point (@code{choose-completion}).  With a prefix argument, @kbd{C-u
@key{RET}} inserts the completion at point into the minibuffer, but
doesn't exit the minibuffer---thus, you can change your mind and
choose another candidate.

@findex next-completion
@item @key{TAB}
@item @key{RIGHT}
@item @key{n}
While in the completion list buffer, these keys move point to the
following completion alternative (@code{next-completion}).

@findex previous-completion
@item @key{S-TAB}
@item @key{LEFT}
@item @key{p}
While in the completion list buffer, these keys move point to the
previous completion alternative (@code{previous-completion}).

@findex quit-window
@item @kbd{q}
While in the completion list buffer, this quits the window showing it
and selects the window showing the minibuffer (@code{quit-window}).

@findex kill-current-buffer
@item @kbd{z}
While in the completion list buffer, kill it and delete the window
showing it (@code{kill-current-buffer}).
@end table

@node Completion Exit
@subsection Completion Exit

@kindex RET @r{(completion in minibuffer)}
@findex minibuffer-complete-and-exit
  When a command reads an argument using the minibuffer with
completion, it also controls what happens when you type @key{RET}
(@code{minibuffer-complete-and-exit}) to submit the argument.  There
are four types of behavior:

@itemize @bullet
@item
@dfn{Strict completion} accepts only exact completion matches.  Typing
@key{RET} exits the minibuffer only if the minibuffer text is an exact
match, or completes to one.  Otherwise, Emacs refuses to exit the
minibuffer; instead it tries to complete, and if no completion can be
done it momentarily displays @samp{[No match]} after the minibuffer
text.  (You can still leave the minibuffer by typing @kbd{C-g} to
cancel the command.)

An example of a command that uses this behavior is @kbd{M-x}, since it
is meaningless for it to accept a non-existent command name.

@item
@dfn{Cautious completion} is like strict completion, except @key{RET}
exits only if the text is already an exact match.  If the text
completes to an exact match, @key{RET} performs that completion but
does not exit yet; you must type a second @key{RET} to exit.

Cautious completion is used for reading file names for files that must
already exist, for example.

@item
@dfn{Permissive completion} allows any input; the completion
candidates are just suggestions.  Typing @key{RET} does not complete,
it just submits the argument as you have entered it.

@cindex minibuffer confirmation
@cindex confirming in the minibuffer
@item
@dfn{Permissive completion with confirmation} is like permissive
completion, with an exception: if you typed @key{TAB} and this
completed the text up to some intermediate state (i.e., one that is not
yet an exact completion match), typing @key{RET} right afterward does
not submit the argument.  Instead, Emacs asks for confirmation by
momentarily displaying @samp{[Confirm]} after the text; type @key{RET}
again to confirm and submit the text.  This catches a common mistake,
in which one types @key{RET} before realizing that @key{TAB} did not
complete as far as desired.

@vindex confirm-nonexistent-file-or-buffer
You can tweak the confirmation behavior by customizing the variable
@code{confirm-nonexistent-file-or-buffer}.  The default value,
@code{after-completion}, gives the behavior we have just described.
If you change it to @code{nil}, Emacs does not ask for confirmation,
falling back on permissive completion.  If you change it to any other
non-@code{nil} value, Emacs asks for confirmation whether or not the
preceding command was @key{TAB}.

This behavior is used by most commands that read file names, like
@kbd{C-x C-f}, and commands that read buffer names, like @kbd{C-x b}.
@end itemize

@node Completion Styles
@subsection How Completion Alternatives Are Chosen
@cindex completion style

  Completion commands work by narrowing a large list of possible
completion alternatives to a smaller subset that matches what you
have typed in the minibuffer.  In @ref{Completion Example}, we gave a
simple example of such matching.  The procedure of determining what
constitutes a match is quite intricate.  Emacs attempts to offer
plausible completions under most circumstances.

  Emacs performs completion using one or more @dfn{completion
styles}---sets of criteria for matching minibuffer text to completion
alternatives.  During completion, Emacs tries each completion style in
turn.  If a style yields one or more matches, that is used as the list
of completion alternatives.  If a style produces no matches, Emacs
falls back on the next style.

@vindex completion-styles
  The list variable @code{completion-styles} specifies the completion
styles to use.  Each list element is the name of a completion style (a
Lisp symbol).  The available style symbols are stored in the variable
@code{completion-styles-alist} (@pxref{Completion Variables,,, elisp,
The Emacs Lisp Reference Manual}).  The default completion styles are
(in order):

@table @code
@item basic
@cindex @code{basic}, completion style
A matching completion alternative must have the same beginning as the
text in the minibuffer before point.  Furthermore, if there is any
text in the minibuffer after point, the rest of the completion
alternative must contain that text as a substring.

@cindex partial completion
@cindex @code{partial-completion}, completion style
@item partial-completion
This aggressive completion style divides the minibuffer text into
words separated by hyphens or spaces, and completes each word
separately.  (For example, when completing command names,
@samp{em-l-m} completes to @samp{emacs-lisp-mode}.)

Furthermore, a @samp{*} in the minibuffer text is treated as a
@dfn{wildcard}---it matches any string of characters at the
corresponding position in the completion alternative.

@item emacs22
@cindex @code{emacs22}, completion style
This completion style is similar to @code{basic}, except that it
ignores the text in the minibuffer after point.  It is so-named
because it corresponds to the completion behavior in Emacs 22.
@end table

@noindent
The following additional completion styles are also defined, and you
can add them to @code{completion-styles} if you wish
(@pxref{Customization}):

@table @code
@item substring
@cindex @code{substring}, completion style
A matching completion alternative must contain the text in the
minibuffer before point, and the text in the minibuffer after point,
as substrings (in that same order).

Thus, if the text in the minibuffer is @samp{foobar}, with point
between @samp{foo} and @samp{bar}, that matches
@samp{@var{a}foo@var{b}bar@var{c}}, where @var{a}, @var{b}, and
@var{c} can be any string including the empty string.

@item flex
@cindex @code{flex}, completion style
This aggressive completion style, also known as @code{flx} or
@code{fuzzy} or @code{scatter} completion, attempts to complete using
in-order substrings.  For example, it can consider @samp{foo} to match
@samp{frodo} or @samp{fbarbazoo}.

@item initials
@cindex @code{initials}, completion style
This very aggressive completion style attempts to complete acronyms
and initialisms.  For example, when completing command names, it
matches @samp{lch} to @samp{list-command-history}.
@end table

@noindent
There is also a very simple completion style called @code{emacs21}.
In this style, if the text in the minibuffer is @samp{foobar},
only matches starting with @samp{foobar} are considered.

@vindex completion-category-overrides
You can use different completion styles in different situations,
by setting the variable @code{completion-category-overrides}.
For example, the default setting says to use only @code{basic}
and @code{substring} completion for buffer names.


@node Completion Options
@subsection Completion Options

@cindex case-sensitivity and completion
@cindex case in completion
  Case is significant when completing case-sensitive arguments, such
as command names.  For example, when completing command names,
@samp{AU} does not complete to @samp{auto-fill-mode}.  Case
differences are ignored when completing arguments in which case does
not matter.

@vindex read-file-name-completion-ignore-case
@vindex read-buffer-completion-ignore-case
  When completing file names, case differences are ignored if the
variable @code{read-file-name-completion-ignore-case} is
non-@code{nil}.  The default value is @code{nil} on systems that have
case-sensitive file-names, such as GNU/Linux; it is non-@code{nil} on
systems that have case-insensitive file-names, such as Microsoft
Windows.  When completing buffer names, case differences are ignored
if the variable @code{read-buffer-completion-ignore-case} is
non-@code{nil}; the default is @code{nil}.

@vindex completion-ignored-extensions
@cindex ignored file names, in completion
  When completing file names, Emacs usually omits certain alternatives
that are considered unlikely to be chosen, as determined by the list
variable @code{completion-ignored-extensions}.  Each element in the
list should be a string; any file name ending in such a string is
ignored as a completion alternative.  Any element ending in a slash
(@file{/}) represents a subdirectory name.  The standard value of
@code{completion-ignored-extensions} has several elements including
@code{".o"}, @code{".elc"}, and @code{"~"}.  For example, if a
directory contains @samp{foo.c} and @samp{foo.elc}, @samp{foo}
completes to @samp{foo.c}.  However, if @emph{all} possible
completions end in otherwise-ignored strings, they are not ignored: in the
previous example, @samp{foo.e} completes to @samp{foo.elc}.  Emacs
disregards @code{completion-ignored-extensions} when showing
completion alternatives in the completion list.

  Shell completion is an extended version of filename completion,
@pxref{Shell Options}.

@vindex completion-auto-help
  If @code{completion-auto-help} is set to @code{nil}, the completion
commands never display the completion list buffer; you must type
@kbd{?} to display the list.  If the value is @code{lazy}, Emacs only
shows the completion list buffer on the second attempt to complete.
In other words, if there is nothing to complete, the first @key{TAB}
echoes @samp{Next char not unique}; the second @key{TAB} shows the
completion list buffer.  If the value is @code{always}, the completion
list buffer is always shown when completion is attempted.

The display of the completion list buffer after it is shown for the
first time is also controlled by @code{completion-auto-help}.  If the
value is @code{t} or @code{lazy}, the window showing the completions
pops down when Emacs is able to complete (and may pop up again if
Emacs is again unable to complete after you type some more text); if
the value is @code{always}, the window pops down only when you exit
the completion.  The value @code{visible} is a hybrid: it behaves like
@code{t} when it decides whether to pop up the window showing the
completion list buffer, and like @code{always} when it decides whether
to pop it down.

@vindex completion-auto-select
  Emacs can optionally select the window showing the completions when
it shows that window.  To enable this behavior, customize the user
option @code{completion-auto-select} to @code{t}, which changes the
behavior of @key{TAB} when Emacs pops up the completions: pressing
@kbd{@key{TAB}} will switch to the completion list buffer, and you can
then move to a candidate by cursor motion commands and select it with
@kbd{@key{RET}}.  If the value of @code{completion-auto-select} is
@code{second-tab}, then the first @kbd{@key{TAB}} will pop up the
completions list buffer, and the second one will switch to it.

@vindex completion-cycle-threshold
  If @code{completion-cycle-threshold} is non-@code{nil}, completion
commands can cycle through completion alternatives.  Normally, if
there is more than one completion alternative for the text in the
minibuffer, a completion command completes up to the longest common
substring.  If you change @code{completion-cycle-threshold} to
@code{t}, the completion command instead completes to the first of
those completion alternatives; each subsequent invocation of the
completion command replaces that with the next completion alternative,
in a cyclic manner.  If you give @code{completion-cycle-threshold} a
numeric value @var{n}, completion commands switch to this cycling
behavior only when there are @var{n} or fewer alternatives.

@vindex completions-format
  When displaying completions, Emacs will normally pop up a new buffer
to display the completions.  The completions will by default be sorted
horizontally, using as many columns as will fit in the window-width,
but this can be changed by customizing the @code{completions-format}
user option.  If its value is @code{vertical}, Emacs will sort the
completions vertically instead, and if it's @code{one-column}, Emacs
will use just one column.

@vindex completions-sort
  The @code{completions-sort} user option controls the order in which
the completions are sorted in the @samp{*Completions*} buffer.  The
default is @code{alphabetical}, which sorts in alphabetical order.
The value @code{nil} disables sorting; the value @code{historical}
sorts alphabetically first, and then rearranges according to the order
of the candidates in the minibuffer history.  The value can also be a
function, which will be called with the list of completions, and
should return the list in the desired order.

@vindex completions-max-height
  When @code{completions-max-height} is non-@code{nil}, it limits the
size of the completions window.  It is specified in lines and include
mode, header line and a bottom divider, if any.  For a more complex
control of the Completion window display properties, you can use
@code{display-buffer-alist} (@pxref{Buffer Display Action
Alists,,Action Alists for Buffer Display, elisp, The Emacs Lisp
Reference Manual}).

@vindex completions-header-format
The variable @code{completions-header-format} is a format spec string to
control the informative line shown before the completions list of
candidates.  If it contains a @samp{%s} construct, that get replaced
by the number of completions shown in the completion list buffer.  To
suppress the display of the heading line, customize this variable to
@code{nil}.  The string that is the value of this variable can have
text properties to change the visual appearance of the heading line;
some useful properties @code{face} or @code{cursor-intangible}
(@pxref{Special Properties,,Properties with Special Meanings, elisp,
The Emacs Lisp Reference Manual}).

@vindex completions-highlight-face
When @code{completions-highlight-face} names a face, the current
completion candidate, the one that will be selected by typing
@kbd{@key{RET}} or clicking the mouse, will be highlighted using that
face.  The default value of this variable is
@code{completions-highlight}; the value is @code{nil} disables this
highlighting.  This feature uses the special text property
@code{cursor-face}.

@node Minibuffer History
@section Minibuffer History
@cindex minibuffer history
@cindex history of minibuffer input
@cindex completion, walking through candidates

  Everything you type in the minibuffer is saved in a @dfn{minibuffer
history list} so you can easily use it again later.  This includes
completion candidates (such as file names, buffer names, command
names, etc.@:) and any other kind of minibuffer input.  You can use
the following commands to quickly fetch an earlier or alternative
response into the minibuffer:

@table @kbd
@item M-p
Move to the previous item in the minibuffer history, an earlier
argument (@code{previous-history-element}).
@item M-n
Move to the next item in the minibuffer history
(@code{next-history-element}).
@item @key{UP}
@itemx @key{DOWN}
Like @kbd{M-p} and @kbd{M-n}, but move to the previous or next line of
a multi-line item before going to the previous history item
(@code{previous-line-or-history-element} and
@code{next-line-or-history-element}) .
@item M-r @var{regexp} @key{RET}
Move to an earlier item in the minibuffer history that
matches @var{regexp} (@code{previous-matching-history-element}).
@item M-s @var{regexp} @key{RET}
Move to a later item in the minibuffer history that matches
@var{regexp} (@code{next-matching-history-element}).
@end table

@kindex M-p @r{(minibuffer history)}
@kindex M-n @r{(minibuffer history)}
@findex next-history-element
@findex previous-history-element
  While in the minibuffer, @kbd{M-p} (@code{previous-history-element})
moves through the minibuffer history list, one item at a time.  Each
@kbd{M-p} fetches an earlier item from the history list into the
minibuffer, replacing its existing contents.  Typing @kbd{M-n}
(@code{next-history-element}) moves through the minibuffer history
list in the opposite direction, fetching later entries into the
minibuffer.

  If you type @kbd{M-n} in the minibuffer when there are no later
entries in the minibuffer history (e.g., if you haven't previously
typed @kbd{M-p}), Emacs tries fetching from a list of default
arguments: values that you are likely to enter.  You can think of this
as moving through the ``future history''.

@cindex future history for file names
@cindex minibuffer defaults for file names
@vindex file-name-at-point-functions
  The ``future history'' for file names includes several possible
alternatives you may find useful, such as the file name or the URL at
point in the current buffer.  The defaults put into the ``future
history'' in this case are controlled by the functions mentioned in
the value of the option @code{file-name-at-point-functions}.  By
default, its value invokes the @code{ffap} package (@pxref{FFAP}),
which tries to guess the default file or URL from the text around
point.  To disable this guessing, customize the option to a @code{nil}
value, then the ``future history'' of file names will include only the
file, if any, visited by the current buffer, and the default
directory.

@findex previous-line-or-history-element
@findex next-line-or-history-element
@kindex UP @r{(minibuffer history)}
@kindex DOWN @r{(minibuffer history)}
  The arrow keys @kbd{@key{UP}} and @kbd{@key{DOWN}} work like
@kbd{M-p} and @kbd{M-n}, but if the current history item is longer
than a single line, they allow you to move to the previous or next
line of the current history item before going to the previous or next
history item.

  If you edit the text inserted by the @kbd{M-p} or @kbd{M-n}
minibuffer history commands, this does not change its entry in the
history list.  However, the edited argument does go at the end of the
history list when you submit it.

@findex previous-matching-history-element
@findex next-matching-history-element
@kindex M-r @r{(minibuffer history)}
@kindex M-s @r{(minibuffer history)}
  You can use @kbd{M-r} (@code{previous-matching-history-element}) to
search through older elements in the history list, and @kbd{M-s}
(@code{next-matching-history-element}) to search through newer
entries.  Each of these commands asks for a @dfn{regular expression}
as an argument, and fetches the first matching entry into the
minibuffer.  @xref{Regexps}, for an explanation of regular
expressions.  A numeric prefix argument @var{n} means to fetch the
@var{n}th matching entry.  These commands are unusual, in that they
use the minibuffer to read the regular expression argument, even
though they are invoked from the minibuffer.  An upper-case letter in
the regular expression makes the search case-sensitive (@pxref{Lax
Search}).

  You can also search through the history using an incremental search.
@xref{Isearch Minibuffer}.

  Emacs keeps separate history lists for several different kinds of
arguments.  For example, there is a list for file names, used by all
the commands that read file names.  Other history lists include buffer
names, command names (used by @kbd{M-x}), and command arguments (used
by commands like @code{query-replace}).

@vindex history-length
  The variable @code{history-length} specifies the maximum length of a
minibuffer history list; adding a new element deletes the oldest
element if the list gets too long.  If the value is @code{t}, there is
no maximum length.

@vindex history-delete-duplicates
  The variable @code{history-delete-duplicates} specifies whether to
delete duplicates in history.  If it is non-@code{nil}, adding a new
element deletes from the list all other elements that are equal to it.
The default is @code{nil}.

@node Repetition
@section Repeating Minibuffer Commands
@cindex command history
@cindex history of commands

  Every command that uses the minibuffer once is recorded on a special
history list, the @dfn{command history}, together with the values of
its arguments, so that you can repeat the entire command.  In
particular, every use of @kbd{M-x} is recorded there, since @kbd{M-x}
uses the minibuffer to read the command name.

@findex list-command-history
@table @kbd
@item C-x @key{ESC} @key{ESC}
Re-execute a recent minibuffer command from the command history
 (@code{repeat-complex-command}).
@item M-x list-command-history
Display the entire command history, showing all the commands
@kbd{C-x @key{ESC} @key{ESC}} can repeat, most recent first.
@end table

@kindex C-x ESC ESC
@findex repeat-complex-command
  @kbd{C-x @key{ESC} @key{ESC}} re-executes a recent command that used
the minibuffer.  With no argument, it repeats the last such command.
A numeric argument specifies which command to repeat; 1 means the last
one, 2 the previous, and so on.

  @kbd{C-x @key{ESC} @key{ESC}} works by turning the previous command
into a Lisp expression and then entering a minibuffer initialized with
the text for that expression.  Even if you don't know Lisp, it will
probably be obvious which command is displayed for repetition.  If you
type just @key{RET}, that repeats the command unchanged.  You can also
change the command by editing the Lisp expression before you execute
it.  The executed command is added to the front of the command history
unless it is identical to the most recent item.

  Once inside the minibuffer for @kbd{C-x @key{ESC} @key{ESC}}, you
can use the usual minibuffer history commands (@pxref{Minibuffer
History}) to move through the history list.  After finding the desired
previous command, you can edit its expression as usual and then execute
it by typing @key{RET}.

@vindex isearch-resume-in-command-history
  Incremental search does not, strictly speaking, use the minibuffer.
Therefore, although it behaves like a complex command, it normally
does not appear in the history list for @w{@kbd{C-x @key{ESC} @key{ESC}}}.
You can make incremental search commands appear in the history by
setting @code{isearch-resume-in-command-history} to a non-@code{nil}
value.  @xref{Incremental Search}.

@vindex command-history
  The list of previous minibuffer-using commands is stored as a Lisp
list in the variable @code{command-history}.  Each element is a Lisp
expression that describes one command and its arguments.  Lisp programs
can re-execute a command by calling @code{eval} with the
@code{command-history} element.

@node Passwords
@section Entering passwords
@cindex entering passwords

Sometimes, you may need to enter a password into Emacs.  For instance,
when you tell Emacs to visit a file on another machine via a network
protocol such as FTP, you often need to supply a password to gain
access to the machine (@pxref{Remote Files}).

  Entering a password is similar to using a minibuffer.  Emacs
displays a prompt in the echo area (such as @samp{Password: }); after
you type the required password, press @key{RET} to submit it.  To
prevent others from seeing your password, every character you type is
displayed as an asterisk (@samp{*}) instead of its usual form.

  Most of the features and commands associated with the minibuffer
@emph{cannot} be used when entering a password.  There is no history
or completion, and you cannot change windows or perform any other
action with Emacs until you have submitted the password.

  While you are typing the password, you may press @key{DEL} to delete
backwards, removing the last character entered.  @kbd{C-u} deletes
everything you have typed so far.  @kbd{C-g} quits the password prompt
(@pxref{Quitting}).  @kbd{C-y} inserts the current kill into the
password (@pxref{Killing}).  You may type either @key{RET} or
@key{ESC} to submit the password.  Any other self-inserting character
key inserts the associated character into the password, and all other
input is ignored.

@node Yes or No Prompts
@section Yes or No Prompts

  An Emacs command may require you to answer a yes-or-no question
during the course of its execution.  Such queries come in two main
varieties.

@cindex y or n prompt
  For the first type of yes-or-no query, the prompt ends with
@w{@samp{(y or n)}}.  You answer the query by typing a single key,
either @samp{y} or @samp{n}, which immediately exits the minibuffer
and delivers the response.  For example, if you type @kbd{C-x C-w}
(@kbd{write-file}) to save a buffer, and enter the name of an existing
file, Emacs issues a prompt like this:

@smallexample
File ‘foo.el’ exists; overwrite? (y or n)
@end smallexample

@cindex yes or no prompt
@vindex yes-or-no-prompt
  The second type of yes-or-no query is typically employed if giving
the wrong answer would have serious consequences; it thus features a
longer prompt ending with @samp{(yes or no)} (or the value of
@code{yes-or-no-prompt} if you've customized that).  For example, if
you invoke @kbd{C-x k} (@code{kill-buffer}) on a file-visiting buffer
with unsaved changes, Emacs activates the minibuffer with a prompt
like this:

@smallexample
Buffer foo.el modified; kill anyway? (yes or no)
@end smallexample

@noindent
To answer, you must type @samp{yes} or @samp{no} into the minibuffer,
followed by @key{RET}.

With both types of yes-or-no query the minibuffer behaves as described
in the previous sections; you can recenter the selected window with
@kbd{C-l}, scroll that window (@kbd{C-v} or @kbd{PageDown} scrolls
forward, @kbd{M-v} or @kbd{PageUp} scrolls backward), switch to
another window with @kbd{C-x o}, use the history commands @kbd{M-p}
and @kbd{M-n}, etc.  Type @kbd{C-g} to dismiss the query, and quit the
minibuffer and the querying command (@pxref{Quitting}).

debug log:

solving 4557f41c3f7 ...
found 4557f41c3f7 in https://git.savannah.gnu.org/cgit/emacs.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).