branch: externals/mct commit 295bac0bac666375d0aca8cf3a473675e6d10b2f Author: Philip Kaludercic <phil...@posteo.net> Commit: Protesilaos Stavrou <i...@protesilaos.com>
Generate mct.info and mct.texi using a Makefile --- .gitignore | 2 + Makefile | 24 ++ mct.info | 1008 ------------------------------------------------------------ mct.texi | 525 ------------------------------- 4 files changed, 26 insertions(+), 1533 deletions(-) diff --git a/.gitignore b/.gitignore index cb62d01..bfd141a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.elc *-autoloads.el *-pkg.el +mct.info +mct.texi \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b8e8cd1 --- /dev/null +++ b/Makefile @@ -0,0 +1,24 @@ +.POSIX: +.SUFFIXES: .el .elc + +EMACS = emacs +MAKEINFO = makeinfo +COMPILE = mct.elc + +all: compile mct.info + +.PHONY: compile +compile: $(COMPILE) + +.PHONY: clean +clean: + rm -f $(COMPILE) mct.texi mct.info + +mct.texi: README.org + $(EMACS) -Q --batch $< -f org-texinfo-export-to-texinfo --kill + +mct.info: mct.texi + $(MAKEINFO) $< + +.el.elc: + $(EMACS) -Q --batch -L . -f batch-byte-compile $^ diff --git a/mct.info b/mct.info deleted file mode 100644 index 53028c0..0000000 --- a/mct.info +++ /dev/null @@ -1,1008 +0,0 @@ -This is mct.info, produced by makeinfo version 6.8 from mct.texi. - -Copyright (C) 2021 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation License, - Version 1.3 or any later version published by the Free Software - Foundation; with no Invariant Sections, with the Front-Cover Texts - being “A GNU Manual,” and with the Back-Cover Texts as in (a) - below. A copy of the license is included in the section entitled - “GNU Free Documentation License.” - - (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and - modify this GNU manual.” - -INFO-DIR-SECTION Emacs misc features -START-INFO-DIR-ENTRY -* Minibuffer and Completions in Tandem: (mct). Enhancement of the default minibuffer completion. -END-INFO-DIR-ENTRY - - -File: mct.info, Node: Top, Next: Overview of mctel, Up: (dir) - -Minibuffer and Completions in Tandem (mct.el) -********************************************* - -Copyright (C) 2021 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this - document under the terms of the GNU Free Documentation License, - Version 1.3 or any later version published by the Free Software - Foundation; with no Invariant Sections, with the Front-Cover Texts - being “A GNU Manual,” and with the Back-Cover Texts as in (a) - below. A copy of the license is included in the section entitled - “GNU Free Documentation License.” - - (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and - modify this GNU manual.” - - This manual, written by Protesilaos Stavrou, describes the -customization options for ‘mct.el’, and provides every other piece of -information pertinent to it. - - The documentation furnished herein corresponds to stable version -0.1.0, released on 2021-10-22. Any reference to a newer feature which -does not yet form part of the latest tagged commit, is explicitly marked -as such. - - Current development target is 0.2.0-dev. - -* Menu: - -* Overview of mct.el: Overview of mctel. -* Basic usage:: -* Installation:: -* Sample setup:: -* Keymaps:: -* Extensions:: -* Alternatives:: -* Acknowledgements:: -* GNU Free Documentation License:: -* Indices:: - -— The Detailed Node Listing — - -Basic usage - -* Cyclic behaviour:: -* Selecting candidates:: - -Indices - -* Function index:: -* Variable index:: -* Concept index:: - - - -File: mct.info, Node: Overview of mctel, Next: Basic usage, Prev: Top, Up: Top - -1 Overview of mct.el -******************** - -Minibuffer and Completions in Tandem, also known as “MCT”, “Mct”, ‘mct’, -or ‘mct.el’, is a package that enhances the default minibuffer and -‘*Completions*’ buffer of Emacs 28 (or higher) so that they work -together as part of a unified framework. The idea is to make the -presentation and overall functionality be consistent with other popular, -vertically aligned completion UIs while leveraging built-in -functionality. - - The main feature set that unifies the minibuffer and the -‘*Completions*’ buffer consists of commands that cycle between the two, -making it seem like they are part of a contiguous space (*note Basic -usage::). - - MCT tries to find a middle ground between the frugal defaults and the -more opinionated completion UIs. This is most evident in its approach -on how to present completion candidates. Instead of showing them -outright or only displaying them on demand, MCT implements a minimum -input threshold as well as a slight delay before it pops up the -‘*Completions*’ buffer and starts updating it to respond to user input. - - Customisation options control the input threshold -(‘mct-minimum-input’) and the delay between live updates -(‘mct-live-update-delay’). Similarly, a blocklist and a passlist for -commands are on offer: - - • The blocklist (‘mct-completion-blocklist’) disables the - live-updating functionality for the commands specified therein. - - • The passlist (‘mct-completion-passlist’) always shows the - Completions’ buffer for the designated command without accounting - for the minimum input threshold. - - To inhibit live completion in the first place, ‘mct-live-completion’ -can be set to nil. Given this customization, the Completions’ buffern -is only displayed when requested manually. ‘mct-completion-passlist’ -takes precedence over this option. - - Other customisations: - - • ‘mct-hide-completion-mode-line’ to hide the mode line of the - ‘*Completions*’ buffer. This removes the separation between it and - the minibuffer, further contributing to the idea of a unified space - between the two. - - • ‘mct-remove-shadowed-file-name’ to clear shadowed file names when - ‘file-name-shadow-mode’ is enabled. This means that in prompts - that use file paths (such as ‘find-file’) when you start in, say, - ‘~/Git/mct.el’ and type ‘~/’ the previous file path is removed and - only the new one is inserted. Whereas the default is to keep the - original file name visible yet “shadowed” by a different colour. - - • ‘mct-show-completion-line-numbers’ to always display line numbers - in the Completions’ buffer. This can be helpful to get a sense of - the length of the completion candidates’ list. Though note that - line numbers are displayed ephemerally while using the - ‘mct-choose-completion-number’ command, which is bound to ‘M-g M-g’ - in either the minibuffer or the ‘*Completions*’ buffer. - - • ‘mct-apply-completion-stripes’ applies alternative background - colours in the Completions’ buffer. This is only tested with the - ‘modus-themes’ and will only work nicely if the main background is - pure black or white—other themes would need to add support for the - faces we define or, at least, users must modify the ‘mct-stripe’ - face. - - -File: mct.info, Node: Basic usage, Next: Installation, Prev: Overview of mctel, Up: Top - -2 Basic usage -************* - -* Menu: - -* Cyclic behaviour:: -* Selecting candidates:: - - -File: mct.info, Node: Cyclic behaviour, Next: Selecting candidates, Up: Basic usage - -2.1 Cyclic behaviour -==================== - -When ‘mct-mode’ is enabled, some new keymaps are activated which add -commands for cycling between the minibuffer and the completions. -Suppose the following standard layout: - - ----------------- - | | - | | - | | - | Buffer | - | | - | | - | | - ----------------- - ----------------- - | | - | Completions | - | | - ----------------- - ----------------- - | Minibuffer | - ----------------- - - When inside the minibuffer, pressing ‘C-n’ (or down arrow) takes you -to the top of the completions, while ‘C-p’ (or up arrow) moves to the -bottom. The commands are ‘mct-switch-to-completions-top’ for the former -and ‘mct-switch-to-completions-bottom’ for the latter. If the -‘*Completions*’ are not shown, then the buffer pops up automatically and -point moves to the given position. - - Similarly, while inside the ‘*Completions*’ buffer, ‘C-p’ (or up -arrow) at the top of the buffer switches to the minibuffer, while ‘C-n’ -(or down arrow) at the bottom of the buffer also goes to the minibuffer. -If point is anywhere else inside the buffer, those key bindings perform -a regular line motion. The commands are -‘mct-previous-completion-or-mini’ and ‘mct-next-completion-or-mini’. - - The display of the ‘*Completions*’ can be toggled at any time from -inside the minibuffer with ‘C-l’ (mnemonic is “[l]ist completions” and -the command is ‘mct-list-completions-toggle’). - - -File: mct.info, Node: Selecting candidates, Prev: Cyclic behaviour, Up: Basic usage - -2.2 Selecting candidates -======================== - -There are several ways to select a completion candidate. - - 1. Suppose that you are typing ‘mod’ with the intent to select the - ‘modus-themes.el’ buffer. To complete the first candidate follow - up ‘mod’ with the ‘TAB’ key. This is how you would do it with the - default minibuffer. If done fast enough, no completions will be - shown (depending on your minimum input threshold and the - live-update delay). - - 2. Upon cycling through the completions, type ‘RET’ to select the - candidate at point and exit the minibuffer. This works for all - types of completion prompts. - - 3. For certain contexts where selecting a candidate does not - necessarily mean that the process has to be finalised (e.g. when - using ‘find-file’) selection in the ‘*Completions*’ buffer can be - done with ‘TAB’ which completes the item at point but does not exit - the minibuffer. The command is instead renewed to update the list - of completions with the new candidates. - - 4. Select a candidate by its line number by typing ‘M-g M-g’ in either - the minibuffer or the ‘*Completions*’ buffer. This calls the - command ‘mct-choose-completion-number’ which internally enables - line numbers and always makes the completions’ buffer visible. - - 5. In prompts that allow the selection of multiple candidates - (internally via the ‘completing-read-multiple’ function) a ‘[CRM]’ - label is added to the text of the prompt. The user thus knows that - pressing ‘M-RET’ in the ‘*Completions*’ will append the candidate - at point to the list of selections and keep the completions - available so that another item may be selected. Any of the - aforementioned applicable methods can confirm the final selection. - If, say, you want to pick a total of three candidates, do ‘M-RET’ - for the first two and ‘RET’ for the last one. In contexts that are - not CRM-powered, the ‘M-RET’ has the same effect as ‘RET’. - - NOTE 2021-10-22: this assumes the ‘crm-separator’ to be constant - (the comma ‘,’ character) but some commands ‘let’ bind it to - something else, so the behaviour does not work as expected. One - such case is ‘org-set-tags-command’ which uses ‘:’ as a separator. - - 1. Type ‘M-e’ (‘mct-edit-completion’) in the completions’ buffer to - place the current candidate in the minibuffer, without exiting the - session. This allows you to edit the text before confirming it. - - -File: mct.info, Node: Installation, Next: Sample setup, Prev: Basic usage, Up: Top - -3 Installation -************** - -MCT is not in any package archive for the time being, though I plan to -submit it to GNU ELPA (as such, any non-trivial patches require -copyright assignment to the Free Software Foundation). Users can rely -on ‘straight.el’, ‘quelpa’, or equivalent to fetch the source. Below -are the essentials for those who prefer the manual method. - - Assuming your Emacs files are found in ‘~/.emacs.d/’, execute the -following commands in a shell prompt: - - cd ~/.emacs.d - - # Create a directory for manually-installed packages - mkdir manual-packages - - # Go to the new directory - cd manual-packages - - # Clone this repo and name it "mct" - git clone https://gitlab.com/protesilaos/mct.el.git mct - - Finally, in your ‘init.el’ (or equivalent) evaluate this: - - ;; Make Elisp files in that directory available to the user. - (add-to-list 'load-path "~/.emacs.d/manual-packages/mct") - - Everything is in place to set up the package. - - -File: mct.info, Node: Sample setup, Next: Keymaps, Prev: Installation, Up: Top - -4 Sample setup -************** - -Minimal setup: - - (require 'mct) - (mct-mode 1) - - And with more options: - - (require 'mct) - - (setq mct-remove-shadowed-file-names t) ; works when `file-name-shadow-mode' is enabled - (setq mct-hide-completion-mode-line t) - (setq mct-show-completion-line-numbers nil) - (setq mct-apply-completion-stripes t) - (setq mct-minimum-input 3) - (setq mct-live-update-delay 0.6) - - ;; NOTE: `mct-completion-blocklist' can be used for commands with lots - ;; of candidates, depending also on how low `mct-minimum-input' is. - ;; With the settings shown here this is not required, otherwise I would - ;; use something like this: - ;; - ;; (setq mct-completion-blocklist - ;; '( describe-symbol describe-function describe-variable - ;; execute-extended-command insert-char)) - (setq mct-completion-blocklist nil) - - ;; This is for commands that should always pop up the completions' - ;; buffer. It circumvents the default method of waiting for some user - ;; input (see `mct-minimum-input') before displaying and updating the - ;; completions' buffer. - (setq mct-completion-passlist - '(imenu - Info-goto-node - Info-index - Info-menu - vc-retrieve-tag)) - - (mct-mode 1) - - Other useful extras from the Emacs source code (read their doc -strings): - - (setq enable-recursive-minibuffers t) - (setq minibuffer-eldef-shorten-default t) - - (file-name-shadow-mode 1) - (minibuffer-depth-indicate-mode 1) - (minibuffer-electric-default-mode 1) - - ;;; Temporary window height - - ;; Evaluate: (info "(emacs) Temporary Displays") - ;; - ;; Or read: ;; <https://www.gnu.org/software/emacs/manual/html_node/emacs/Temporary-Displays.html>. - - (setq temp-buffer-max-height (lambda (buf) (/ (window-height) 4))) - ;; OR - ;; (setq temp-buffer-max-height (lambda (buf) (/ (frame-height) 4))) - - (temp-buffer-resize-mode 1) - - -File: mct.info, Node: Keymaps, Next: Extensions, Prev: Sample setup, Up: Top - -5 Keymaps -********* - -MCT defines its own keymaps, which extend those that are active in the -minibuffer and the ‘*Completions*’ buffer, respectively: - - • ‘mct-completion-list-mode-map’ - • ‘mct-minibuffer-local-completion-map’ - • ‘mct-minibuffer-local-filename-completion-map’ - - You can invoke ‘describe-keymap’ to learn more about them. - - If you want to edit any key bindings, do it in those keymaps, not in -those they extend and override (the names of the original ones are the -same as above, minus the ‘mct-’ prefix). - - -File: mct.info, Node: Extensions, Next: Alternatives, Prev: Keymaps, Up: Top - -6 Extensions -************ - -MCT only tweaks the default minibuffer. To get more out of it, consider -these exceptionally well-crafted extras: - -‘consult’ - Adds several commands that make interacting with the minibuffer - more powerful. There also are several packages that build on it, - such as ‘consult-dir’. -‘embark’ - Provides configurable contextual actions for completions and many - other constructs inside buffers. -‘marginalia’ - Displays informative annotations for all known types of completion - candidates. -‘orderless’ - A completion style that matches a variety of patterns (regexp, - flex, initialism, etc.) regardless of the order they appear in. - - -File: mct.info, Node: Alternatives, Next: Acknowledgements, Prev: Extensions, Up: Top - -7 Alternatives -************** - -The only alternative I have used that is conceptually close to MCT is -‘vertico’. Vertico is a more mature and feature-rich package, while its -maintainer, Daniel Mendler, is an accomplished programmer. Whereas MCT -is mostly an excuse to practice my Elisp skills. - - -File: mct.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Alternatives, Up: Top - -8 Acknowledgements -****************** - -MCT is meant to be a collective effort. Every bit of help matters. - -Author/maintainer - Protesilaos Stavrou. - -Contributions to code or documentation - Philip Kaludercic. - -Ideas and user feedback - Philip Kaludercic, Manuel Uberti. - -Inspiration for certain features - ‘icomplete.el’ (built-in—multiple authors), Daniel Mendler - (‘vertico’), Omar Antolín Camarena (‘embark’, ‘live-completions’), - Štěpán Němec (‘stripes.el’). - - -File: mct.info, Node: GNU Free Documentation License, Next: Indices, Prev: Acknowledgements, Up: Top - -Appendix A GNU Free Documentation License -***************************************** - - Version 1.3, 3 November 2008 - - Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. - <https://fsf.org/> - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - functional and useful document “free” in the sense of freedom: to - assure everyone the effective freedom to copy and redistribute it, - with or without modifying it, either commercially or - noncommercially. Secondarily, this License preserves for the - author and publisher a way to get credit for their work, while not - being considered responsible for modifications made by others. - - This License is a kind of “copyleft”, which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. We - recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work, in any medium, - that contains a notice placed by the copyright holder saying it can - be distributed under the terms of this License. Such a notice - grants a world-wide, royalty-free license, unlimited in duration, - to use that work under the conditions stated herein. The - “Document”, below, refers to any such manual or work. Any member - of the public is a licensee, and is addressed as “you”. You accept - the license if you copy, modify or distribute the work in a way - requiring permission under copyright law. - - A “Modified Version” of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A “Secondary Section” is a named appendix or a front-matter section - of the Document that deals exclusively with the relationship of the - publishers or authors of the Document to the Document’s overall - subject (or to related matters) and contains nothing that could - fall directly within that overall subject. (Thus, if the Document - is in part a textbook of mathematics, a Secondary Section may not - explain any mathematics.) The relationship could be a matter of - historical connection with the subject or with related matters, or - of legal, commercial, philosophical, ethical or political position - regarding them. - - The “Invariant Sections” are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in the - notice that says that the Document is released under this License. - If a section does not fit the above definition of Secondary then it - is not allowed to be designated as Invariant. The Document may - contain zero Invariant Sections. If the Document does not identify - any Invariant Sections then there are none. - - The “Cover Texts” are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. A - Front-Cover Text may be at most 5 words, and a Back-Cover Text may - be at most 25 words. - - A “Transparent” copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, that is suitable for revising the document - straightforwardly with generic text editors or (for images composed - of pixels) generic paint programs or (for drawings) some widely - available drawing editor, and that is suitable for input to text - formatters or for automatic translation to a variety of formats - suitable for input to text formatters. A copy made in an otherwise - Transparent file format whose markup, or absence of markup, has - been arranged to thwart or discourage subsequent modification by - readers is not Transparent. An image format is not Transparent if - used for any substantial amount of text. A copy that is not - “Transparent” is called “Opaque”. - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and standard-conforming - simple HTML, PostScript or PDF designed for human modification. - Examples of transparent image formats include PNG, XCF and JPG. - Opaque formats include proprietary formats that can be read and - edited only by proprietary word processors, SGML or XML for which - the DTD and/or processing tools are not generally available, and - the machine-generated HTML, PostScript or PDF produced by some word - processors for output purposes only. - - The “Title Page” means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, “Title - Page” means the text near the most prominent appearance of the - work’s title, preceding the beginning of the body of the text. - - The “publisher” means any person or entity that distributes copies - of the Document to the public. - - A section “Entitled XYZ” means a named subunit of the Document - whose title either is precisely XYZ or contains XYZ in parentheses - following text that translates XYZ in another language. (Here XYZ - stands for a specific section name mentioned below, such as - “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) - To “Preserve the Title” of such a section when you modify the - Document means that it remains a section “Entitled XYZ” according - to this definition. - - The Document may include Warranty Disclaimers next to the notice - which states that this License applies to the Document. These - Warranty Disclaimers are considered to be included by reference in - this License, but only as regards disclaiming warranties: any other - implication that these Warranty Disclaimers may have is void and - has no effect on the meaning of this License. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow the - conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies (or copies in media that commonly - have printed covers) of the Document, numbering more than 100, and - the Document’s license notice requires Cover Texts, you must - enclose the copies in covers that carry, clearly and legibly, all - these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the title - equally prominent and visible. You may add other material on the - covers in addition. Copying with changes limited to the covers, as - long as they preserve the title of the Document and satisfy these - conditions, can be treated as verbatim copying in other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a machine-readable - Transparent copy along with each Opaque copy, or state in or with - each Opaque copy a computer-network location from which the general - network-using public has access to download using public-standard - network protocols a complete Transparent copy of the Document, free - of added material. If you use the latter option, you must take - reasonably prudent steps, when you begin distribution of Opaque - copies in quantity, to ensure that this Transparent copy will - remain thus accessible at the stated location until at least one - year after the last time you distribute an Opaque copy (directly or - through your agents or retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of copies, - to give them a chance to provide you with an updated version of the - Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with the - Modified Version filling the role of the Document, thus licensing - distribution and modification of the Modified Version to whoever - possesses a copy of it. In addition, you must do these things in - the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of previous - versions (which should, if there were any, be listed in the - History section of the Document). You may use the same title - as a previous version if the original publisher of that - version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has fewer than five), unless they release you - from this requirement. - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document’s - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section Entitled “History”, Preserve its Title, - and add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on the - Title Page. If there is no section Entitled “History” in the - Document, create one stating the title, year, authors, and - publisher of the Document as given on its Title Page, then add - an item describing the Modified Version as stated in the - previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in the - “History” section. You may omit a network location for a work - that was published at least four years before the Document - itself, or if the original publisher of the version it refers - to gives permission. - - K. For any section Entitled “Acknowledgements” or “Dedications”, - Preserve the Title of the section, and preserve in the section - all the substance and tone of each of the contributor - acknowledgements and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, unaltered - in their text and in their titles. Section numbers or the - equivalent are not considered part of the section titles. - - M. Delete any section Entitled “Endorsements”. Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section to be Entitled - “Endorsements” or to conflict in title with any Invariant - Section. - - O. Preserve any Warranty Disclaimers. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option designate - some or all of these sections as invariant. To do this, add their - titles to the list of Invariant Sections in the Modified Version’s - license notice. These titles must be distinct from any other - section titles. - - You may add a section Entitled “Endorsements”, provided it contains - nothing but endorsements of your Modified Version by various - parties—for example, statements of peer review or that the text has - been approved by an organization as the authoritative definition of - a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end of - the list of Cover Texts in the Modified Version. Only one passage - of Front-Cover Text and one of Back-Cover Text may be added by (or - through arrangements made by) any one entity. If the Document - already includes a cover text for the same cover, previously added - by you or by arrangement made by the same entity you are acting on - behalf of, you may not add another; but you may replace the old - one, on explicit permission from the previous publisher that added - the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination all - of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice, and that you preserve all - their Warranty Disclaimers. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections Entitled - “History” in the various original documents, forming one section - Entitled “History”; likewise combine any sections Entitled - “Acknowledgements”, and any sections Entitled “Dedications”. You - must delete all sections Entitled “Endorsements.” - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the documents - in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow this - License in all other respects regarding verbatim copying of that - document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of a - storage or distribution medium, is called an “aggregate” if the - copyright resulting from the compilation is not used to limit the - legal rights of the compilation’s users beyond what the individual - works permit. When the Document is included in an aggregate, this - License does not apply to the other works in the aggregate which - are not themselves derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one half - of the entire aggregate, the Document’s Cover Texts may be placed - on covers that bracket the Document within the aggregate, or the - electronic equivalent of covers if the Document is in electronic - form. Otherwise they must appear on printed covers that bracket - the whole aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License, and all the license notices in the - Document, and any Warranty Disclaimers, provided that you also - include the original English version of this License and the - original versions of those notices and disclaimers. In case of a - disagreement between the translation and the original version of - this License or a notice or disclaimer, the original version will - prevail. - - If a section in the Document is Entitled “Acknowledgements”, - “Dedications”, or “History”, the requirement (section 4) to - Preserve its Title (section 1) will typically require changing the - actual title. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense, or distribute it is void, - and will automatically terminate your rights under this License. - - However, if you cease all violation of this License, then your - license from a particular copyright holder is reinstated (a) - provisionally, unless and until the copyright holder explicitly and - finally terminates your license, and (b) permanently, if the - copyright holder fails to notify you of the violation by some - reasonable means prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is - reinstated permanently if the copyright holder notifies you of the - violation by some reasonable means, this is the first time you have - received notice of violation of this License (for any work) from - that copyright holder, and you cure the violation prior to 30 days - after your receipt of the notice. - - Termination of your rights under this section does not terminate - the licenses of parties who have received copies or rights from you - under this License. If your rights have been terminated and not - permanently reinstated, receipt of a copy of some or all of the - same material does not give you any rights to use it. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - <https://www.gnu.org/licenses/>. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License “or any later version” applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If the - Document does not specify a version number of this License, you may - choose any version ever published (not as a draft) by the Free - Software Foundation. If the Document specifies that a proxy can - decide which future versions of this License can be used, that - proxy’s public statement of acceptance of a version permanently - authorizes you to choose that version for the Document. - - 11. RELICENSING - - “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any - World Wide Web server that publishes copyrightable works and also - provides prominent facilities for anybody to edit those works. A - public wiki that anybody can edit is an example of such a server. - A “Massive Multiauthor Collaboration” (or “MMC”) contained in the - site means any set of copyrightable works thus published on the MMC - site. - - “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 - license published by Creative Commons Corporation, a not-for-profit - corporation with a principal place of business in San Francisco, - California, as well as future copyleft versions of that license - published by that same organization. - - “Incorporate” means to publish or republish a Document, in whole or - in part, as part of another Document. - - An MMC is “eligible for relicensing” if it is licensed under this - License, and if all works that were first published under this - License somewhere other than this MMC, and subsequently - incorporated in whole or in part into the MMC, (1) had no cover - texts or invariant sections, and (2) were thus incorporated prior - to November 1, 2008. - - The operator of an MMC Site may republish an MMC contained in the - site under CC-BY-SA on the same site at any time before August 1, - 2009, provided the MMC is eligible for relicensing. - -ADDENDUM: How to use this License for your documents -==================================================== - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and license -notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.3 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have Invariant Sections, Front-Cover Texts and Back-Cover -Texts, replace the “with...Texts.” line with this: - - with the Invariant Sections being LIST THEIR TITLES, with - the Front-Cover Texts being LIST, and with the Back-Cover Texts - being LIST. - - If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - - If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of free -software license, such as the GNU General Public License, to permit -their use in free software. - - -File: mct.info, Node: Indices, Prev: GNU Free Documentation License, Up: Top - -B Indices -********* - -* Menu: - -* Function index:: -* Variable index:: -* Concept index:: - - -File: mct.info, Node: Function index, Next: Variable index, Up: Indices - -B.1 Function index -================== - -ndex, Prev: Function index, Up: Indices - -B.2 Variable index -================== - -@samp{M-g M-g} in either the minibuffer or the -@samp{*Completions*} buffer. -@end itemize - -@vindex mct-apply-completion-stripes -@vindex mct-stripe -@itemize -@item -@code{mct-apply-completion-stripes} applies alternative background colours in -the Completions' buffer. This is only tested with the @samp{modus-themes} -and will only work nicely if the main background is pure black or -white---other themes would need to add support for the faces we define -or, at least, users must modify the @code{mct-stripe} face. -@end itemize - -@node Basic usage -@chapter Basic usage - -@menu -* Cyclic behaviour:: -* Selecting candidates:: -@end menu - -@node Cyclic behaviour -@section Cyclic behaviour - -@cindex Cyclic behaviour - -When @code{mct-mode} is enabled, some new keymaps are activated which add -commands for cycling between the minibuffer and the completions. -Suppose the following standard layout: - -@example ------------------ -| | -| | -| | -| Buffer | -| | -| | -| | ------------------ ------------------ -| | -| Completions | -| | ------------------ ------------------ -| Minibuffer | ------------------ -@end example - -@findex mct-switch-to-completions-top -@findex mct-switch-to-completions-bottom -When inside the minibuffer, pressing @samp{C-n} (or down arrow) takes you to -the top of the completions, while @samp{C-p} (or up arrow) moves to the bottom. -The commands are @code{mct-switch-to-completions-top} for the former and -@code{mct-switch-to-completions-bottom} for the latter. If the @samp{*Completions*} -are not shown, then the buffer pops up automatically and point moves to -the given position. - -@findex mct-previous-completion-or-mini -@findex mct-next-completion-or-mini -Similarly, while inside the @samp{*Completions*} buffer, @samp{C-p} (or up arrow) at -the top of the buffer switches to the minibuffer, while @samp{C-n} (or down -arrow) at the bottom of the buffer also goes to the minibuffer. If -point is anywhere else inside the buffer, those key bindings perform a -regular line motion. The commands are @code{mct-previous-completion-or-mini} -and @code{mct-next-completion-or-mini}. - -@findex mct-list-completions-toggle -The display of the @samp{*Completions*} can be toggled at any time from inside -the minibuffer with @samp{C-l} (mnemonic is ``[l]ist completions'' and the -command is @code{mct-list-completions-toggle}). - -@node Selecting candidates -@section Selecting candidates - -@cindex Candidate selection - -There are several ways to select a completion candidate. - -@enumerate -@item -Suppose that you are typing @samp{mod} with the intent to select the -@samp{modus-themes.el} buffer. To complete the first candidate follow up -@samp{mod} with the @samp{TAB} key. This is how you would do it with the default -minibuffer. If done fast enough, no completions will be shown -(depending on your minimum input threshold and the live-update -delay). - -@item -Upon cycling through the completions, type @samp{RET} to select the -candidate at point and exit the minibuffer. This works for all types -of completion prompts. - -@item -For certain contexts where selecting a candidate does not necessarily -mean that the process has to be finalised (e.g. when using @code{find-file}) -selection in the @samp{*Completions*} buffer can be done with @samp{TAB} which -completes the item at point but does not exit the minibuffer. The -command is instead renewed to update the list of completions with the -new candidates. - -@item -Select a candidate by its line number by typing @samp{M-g M-g} in either the -minibuffer or the @samp{*Completions*} buffer. This calls the command -@code{mct-choose-completion-number} which internally enables line numbers -and always makes the completions' buffer visible. - -@item -In prompts that allow the selection of multiple candidates -(internally via the @code{completing-read-multiple} function) a @samp{[CRM]} label -is added to the text of the prompt. The user thus knows that -pressing @samp{M-RET} in the @samp{*Completions*} will append the candidate at -point to the list of selections and keep the completions available so -that another item may be selected. Any of the aforementioned -applicable methods can confirm the final selection. If, say, you -want to pick a total of three candidates, do @samp{M-RET} for the first two -and @samp{RET} for the last one. In contexts that are not CRM-powered, the -@samp{M-RET} has the same effect as @samp{RET}. - -NOTE 2021-10-22: this assumes the @code{crm-separator} to be constant (the -comma @samp{,} character) but some commands @code{let} bind it to something else, -so the behaviour does not work as expected. One such case is -@code{org-set-tags-command} which uses @samp{:} as a separator. -@end enumerate - -@findex mct-edit-completion -@enumerate -@item -Type @samp{M-e} (@code{mct-edit-completion}) in the completions' buffer to place -the current candidate in the minibuffer, without exiting the session. -This allows you to edit the text before confirming it. -@end enumerate - -@node Installation -@chapter Installation - -MCT is not in any package archive for the time being, though I plan to -submit it to GNU ELPA (as such, any non-trivial patches require -copyright assignment to the Free Software Foundation). Users can rely -on @samp{straight.el}, @samp{quelpa}, or equivalent to fetch the source. Below are -the essentials for those who prefer the manual method. - -Assuming your Emacs files are found in @samp{~/.emacs.d/}, execute the -following commands in a shell prompt: - -@example -cd ~/.emacs.d - -# Create a directory for manually-installed packages -mkdir manual-packages - -# Go to the new directory -cd manual-packages - -# Clone this repo and name it "mct" -git clone https://gitlab.com/protesilaos/mct.el.git mct -@end example - -Finally, in your @samp{init.el} (or equivalent) evaluate this: - -@lisp -;; Make Elisp files in that directory available to the user. -(add-to-list 'load-path "~/.emacs.d/manual-packages/mct") -@end lisp - -Everything is in place to set up the package. - -@node Sample setup -@chapter Sample setup - -@cindex Sample configuration - -Minimal setup: - -@lisp -(require 'mct) -(mct-mode 1) -@end lisp - -And with more options: - -@lisp -(require 'mct) - -(setq mct-remove-shadowed-file-names t) ; works when `file-name-shadow-mode' is enabled -(setq mct-hide-completion-mode-line t) -(setq mct-show-completion-line-numbers nil) -(setq mct-apply-completion-stripes t) -(setq mct-minimum-input 3) -(setq mct-live-update-delay 0.6) - -;; NOTE: `mct-completion-blocklist' can be used for commands with lots -;; of candidates, depending also on how low `mct-minimum-input' is. -;; With the settings shown here this is not required, otherwise I would -;; use something like this: -;; -;; (setq mct-completion-blocklist -;; '( describe-symbol describe-function describe-variable -;; execute-extended-command insert-char)) -(setq mct-completion-blocklist nil) - -;; This is for commands that should always pop up the completions' -;; buffer. It circumvents the default method of waiting for some user -;; input (see `mct-minimum-input') before displaying and updating the -;; completions' buffer. -(setq mct-completion-passlist - '(imenu - Info-goto-node - Info-index - Info-menu - vc-retrieve-tag)) - -(mct-mode 1) -@end lisp - -Other useful extras from the Emacs source code (read their doc strings): - -@lisp -(setq enable-recursive-minibuffers t) -(setq minibuffer-eldef-shorten-default t) - -(file-name-shadow-mode 1) -(minibuffer-depth-indicate-mode 1) -(minibuffer-electric-default-mode 1) - -;;; Temporary window height - -;; Evaluate: (info "(emacs) Temporary Displays") -;; -;; Or read: ;; <https://www.gnu.org/software/emacs/manual/html_node/emacs/Temporary-Displays.html>. - -(setq temp-buffer-max-height (lambda (buf) (/ (window-height) 4))) -;; OR -;; (setq temp-buffer-max-height (lambda (buf) (/ (frame-height) 4))) - -(temp-buffer-resize-mode 1) -@end lisp - -@node Keymaps -@chapter Keymaps - -@cindex Keymaps -@vindex mct-completion-list-mode-map -@vindex mct-minibuffer-local-completion-map -@vindex mct-minibuffer-local-filename-completion-map - -MCT defines its own keymaps, which extend those that are active in the -minibuffer and the @samp{*Completions*} buffer, respectively: - -@itemize -@item -@code{mct-completion-list-mode-map} -@item -@code{mct-minibuffer-local-completion-map} -@item -@code{mct-minibuffer-local-filename-completion-map} -@end itemize - -You can invoke @code{describe-keymap} to learn more about them. - -If you want to edit any key bindings, do it in those keymaps, not in -those they extend and override (the names of the original ones are the -same as above, minus the @samp{mct-} prefix). - -@node Extensions -@chapter Extensions - -@cindex Extra packages - -MCT only tweaks the default minibuffer. To get more out of it, consider -these exceptionally well-crafted extras: - -@table @asis -@item @samp{consult} -Adds several commands that make interacting with the -minibuffer more powerful. There also are several packages that build -on it, such as @samp{consult-dir}. -@item @samp{embark} -Provides configurable contextual actions for completions and -many other constructs inside buffers. -@item @samp{marginalia} -Displays informative annotations for all known types of -completion candidates. -@item @samp{orderless} -A completion style that matches a variety of patterns -(regexp, flex, initialism, etc.) regardless of the order they appear -in. -@end table - -@node Alternatives -@chapter Alternatives - -@cindex Alternatives to MCT - -The only alternative I have used that is conceptually close to MCT is -@samp{vertico}. Vertico is a more mature and feature-rich package, while its -maintainer, Daniel Mendler, is an accomplished programmer. Whereas MCT -is mostly an excuse to practice my Elisp skills. - -@node Acknowledgements -@chapter Acknowledgements - -@cindex Contributors - -MCT is meant to be a collective effort. Every bit of help matters. - -@table @asis -@item Author/maintainer -Protesilaos Stavrou. - -@item Contributions to code or documentation -Philip Kaludercic. - -@item Ideas and user feedback -Philip Kaludercic, Manuel Uberti. - -@item Inspiration for certain features -@samp{icomplete.el} (built-in---multiple -authors), Daniel Mendler (@samp{vertico}), Omar Antolín Camarena (@samp{embark}, -@samp{live-completions}), Štěpán Němec (@samp{stripes.el}). -@end table - -@node GNU Free Documentation License -@appendix GNU Free Documentation License - -@include doclicense.texi - -@node Indices -@chapter Indices - -@menu -* Function index:: -* Variable index:: -* Concept index:: -@end menu - -@node Function index -@section Function index - -@printindex fn - -@node Variable index -@section Variable index - -@printindex vr - -@node Concept index -@section Concept index - -@printindex cp - -@bye \ No newline at end of file