emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/mct ea1edfff5e 21/21: Merge branch 'restart-development


From: ELPA Syncer
Subject: [elpa] externals/mct ea1edfff5e 21/21: Merge branch 'restart-development'
Date: Sat, 25 Mar 2023 15:59:02 -0400 (EDT)

branch: externals/mct
commit ea1edfff5e394b2609b11a52ab2fe7659842b310
Merge: 3f15ff6f62 f52ee53d39
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    Merge branch 'restart-development'
    
    I am restarting the development of MCT with the sole intent to keep it
    in good working condition for the handful of users who like it.  I do
    not plan to expand the scope of the package.  Instead, I am removing
    certain features of dubious value and am cleaning up the code (which
    was in a good state, all things considered).
    
    To recap:
    
    - MCT is a layer of interactivity on top of the default Emacs
      minibuffer and the *Completions* buffer.  It treats the two as a
      unified space and provides commands to intuitively move between
      them.
    
    - MCT provides a facility for "live completions" which automatically
      update the *Completions* buffer given certain conditions.  Users
      have access to options for a passlist and blocklist which further
      control what should be live updated.
    
    - On 2022-04-14 I had announced the discontinuation of the project's
      development:
      <https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
      The reason was that Emacs 29 was assuming certain features that MCT
      had.  I thought that Emacs 29 would provide an MCT-equivalent
      experience and was making way for that eventuality.  It turns out
      that I was mistaken: MCT is still more featureful and might show the
      direction for future developments on Emacs 30.
    
    Now the other news:
    
    - I still think 'vertico' by Daniel Mendler is the best User Interface
      for the minibuffer.  Where relevant in my Emacs coaching sessions, I
      always recommend Vertico: <https://protesilaos.com/coach>.  It is
      robust and highly configurable.  What MCT does, Vertico does better.
      My plan for my personal config is to have two modules, one for
      Vertico and another for MCT, so that I can use the former by default
      and the latter when needed.  (Again, I want to maintain MCT but will
      not add major new features.)
    
    - I have removed support for Emacs 27.  This was a mistake from day
      one.  Emacs 27 cannot show the *Completions* buffer in one-column
      view and thus lacks the primary user-facing aspect of MCT.
    
    - I have removed everything that has to do with in-buffer completion
      ('completion-in-region').  While it is nice to have a uniform
      interface for completions in the minibuffer and inside buffers, the
      latter was never good enough.  This is not an MCT problem, but how
      inherently limited the *Completions* are in the scenario where the
      minibuffer is not activated.  I will continue using 'corfu' by
      Daniel Mendler.
    
    - For a brief period of time I experimented with various extensions to
      the core MCT functionality (e.g. integrating with 'avy.el'.  These
      are all removed.  There now is a single 'mct.el' file.  It works
      fine for what it was originally designed to do: enhance the
      minibuffer UI.
---
 Makefile   |  24 ---
 README.md  |  19 ++
 README.org | 490 +++++++-------------------------------------------
 mct-avy.el | 100 -----------
 mct-tcm.el | 121 -------------
 mct.el     | 589 +++++++++++++------------------------------------------------
 6 files changed, 202 insertions(+), 1141 deletions(-)

diff --git a/Makefile b/Makefile
deleted file mode 100644
index b8e8cd1117..0000000000
--- a/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-.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/README.md b/README.md
new file mode 100644
index 0000000000..be45a6b2dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# Minibuffer Confines Transcended (mct.el)
+
+Enhancements for the default minibuffer completion UI of Emacs.  In
+essence, MCT is (i) a very thin layer of interactivity on top of the
+out-of-the-box completion experience, and (ii) glue code that combines
+built-in functionalities to make the default completion framework work
+like that of more featureful third-party options.
+
++ Package name (GNU ELPA): `mct`
++ Official manual: <https://protesilaos.com/emacs/mct>
++ Change log: <https://protesilaos.com/emacs/mct-changelog>
++ Git repo on SourceHut: <https://git.sr.ht/~protesilaos/mct>
+  - Mirrors:
+    + GitHub: <https://github.com/protesilaos/mct>
+    + GitLab: <https://gitlab.com/protesilaos/mct>
++ Mailing list: <https://lists.sr.ht/~protesilaos/general-issues>
++ Video demo: <https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/>
++ Backronym: Minibuffer Confines Transcended; Minibuffer and
+  Completions in Tandem.
diff --git a/README.org b/README.org
index 02904a22d0..1dfedea18d 100644
--- a/README.org
+++ b/README.org
@@ -1,44 +1,50 @@
-#+title: Minibuffer and Completions in Tandem (mct.el)
-#+author: Protesilaos Stavrou
-#+email: info@protesilaos.com
-#+language: en
-#+options: ':t toc:nil author:t email:t num:t
-#+startup: content
-
-#+macro: stable-version 0.5.0
-#+macro: release-date 2022-02-08
-#+macro: development-version 0.6.0-dev
-#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
-#+macro: space @@texinfo:@: @@
-#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
-
-#+export_file_name: mct.texi
-
-#+texinfo_filename: mct.info
-#+texinfo_dir_category: Emacs misc features
-#+texinfo_dir_title: MCT: (mct)
-#+texinfo_dir_desc: Enhancement of the default minibuffer completion
-#+texinfo_header: @set MAINTAINERSITE @uref{https://protesilaos.com,maintainer 
webpage}
-#+texinfo_header: @set MAINTAINER Protesilaos Stavrou
-#+texinfo_header: @set MAINTAINEREMAIL @email{info@protesilaos.com}
-#+texinfo_header: @set MAINTAINERCONTACT 
@uref{mailto:info@protesilaos.com,contact the maintainer}
+#+title:                 Minibuffer Confines Transcended (mct.el)
+#+author:                Protesilaos Stavrou
+#+email:                 info@protesilaos.com
+#+language:              en
+#+options:               ':t toc:nil author:t email:t num:t
+#+startup:               content
+#+macro:                 stable-version 0.5.0
+#+macro:                 release-date 2022-02-08
+#+macro:                 development-version 0.6.0-dev
+#+export_file_name:      mct.texi
+#+texinfo_filename:      mct.info
+#+texinfo_dir_category:  Emacs misc features
+#+texinfo_dir_title:     MCT: (mct)
+#+texinfo_dir_desc:      Enhancement of the default minibuffer completion
+#+texinfo_header:        @set MAINTAINERSITE 
@uref{https://protesilaos.com,maintainer webpage}
+#+texinfo_header:        @set MAINTAINER Protesilaos Stavrou
+#+texinfo_header:        @set MAINTAINEREMAIL @email{info@protesilaos.com}
+#+texinfo_header:        @set MAINTAINERCONTACT 
@uref{mailto:info@protesilaos.com,contact the maintainer}
 
 #+texinfo: @insertcopying
 
-UPDATE 2022-04-14: Development of this package has been discontinued:
-<https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
-
 This manual, written by Protesilaos Stavrou, describes the customization
 options for =mct= (or =mct.el= and variants), and provides every other piece
 of information pertinent to it.
 
 The documentation furnished herein corresponds to stable version
-{{{stable-version}}}, released on {{{release-date}}}.  Any reference to a newer
-feature which does not yet form part of the latest tagged commit, is
-explicitly marked as such.
+{{{stable-version}}}, released on {{{release-date}}}.  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 {{{development-version}}}.
 
++ Package name (GNU ELPA): ~mct~
++ Official manual: <https://protesilaos.com/emacs/mct>
++ Change log: <https://protesilaos.com/emacs/mct-changelog>
++ Git repo on SourceHut: <https://git.sr.ht/~protesilaos/mct>
+  - Mirrors:
+    + GitHub: <https://github.com/protesilaos/mct>
+    + GitLab: <https://gitlab.com/protesilaos/mct>
++ Mailing list: <https://lists.sr.ht/~protesilaos/general-issues>
++ Backronym: Minibuffer Confines Transcended; Minibuffer and
+  Completions in Tandem.
+
+If you are viewing the README.org version of this file, please note
+that the GNU ELPA machinery automatically generates an Info manual out
+of it.
+
 #+toc: headlines 8 insert TOC here, with eight headline levels
 
 * COPYING
@@ -69,7 +75,7 @@ modify this GNU manual.”
 
 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 27 (or higher) so that they work together
+=*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.
@@ -93,28 +99,6 @@ input threshold as well as a slight delay before it pops up 
the
 MCT is highly configurable to adapt to the varying needs of users.  This
 section documents each user option.
 
-** Format of the Completions
-:PROPERTIES:
-:CUSTOM_ID: h:2706287d-c887-4356-a6f4-f6c7f9824ffe
-:END:
-#+vindex: mct-completions-format
-
-Brief: Set the presentation of candidates in the Completions' buffer.
-
-Symbol: ~mct-completions-format~ (=choice= type)
-
-Possible values:
-
-1. ~one-column~ (default---only works on Emacs 28 or higher)
-2. ~horizontal~
-3. ~vertical~
-
-By default, MCT tries to display completion candidates in a single
-column.  This only works for Emacs version 28 or higher.  In older
-versions of Emacs, the choices are between two grid views as explained
-in the built-in user option ~completions-format~, with the fallback being
-the ~horizontal~ style.
-
 ** Live completion
 :PROPERTIES:
 :CUSTOM_ID: h:1a85ed4c-f54d-482b-9915-563f60c64f15
@@ -250,6 +234,9 @@ the ~mct-minimum-input~.  It also bypasses any possible 
delay introduced
 by ~mct-live-update-delay~.  In other words, it immediately displays the
 =*Completions*= buffer and instantly updates it to match user input.
 
+When the ~mct-completion-blocklist~ and the ~mct-completion-passlist~
+are in conflict, the former takes precedence.
+
 [[#h:1f42c4e6-53c1-4e8a-81ef-deab70822fa4][Known completion categories]].
 
 *** Blocklist for commands or completion categories
@@ -274,6 +261,9 @@ The Completions' buffer can still be accessed with commands 
that place
 it in a window (such as ~mct-list-completions-toggle~,
 ~mct-switch-to-completions-top~).
 
+When the ~mct-completion-blocklist~ and the ~mct-completion-passlist~
+are in conflict, the former takes precedence.
+
 Perhaps a less drastic measure is to set ~mct-minimum-input~ to an
 appropriate value.  Or better use ~mct-completion-passlist~.
 
@@ -462,30 +452,7 @@ For example, if the user types =~/= after a long path 
name, everything
 preceding the =~/= is removed so the interactive selection process starts
 again from the user's =$HOME=.
 
-** Alternating backgrounds in the Completions
-:PROPERTIES:
-:CUSTOM_ID: h:187f325e-fb48-4b7f-9508-97f34d2242e8
-:END:
-#+vindex: mct-apply-completion-stripes
-
-Brief: Use alternating backgrounds in the Completions.
-
-Symbol: ~mct-apply-completion-stripes~ (=boolean= type)
-
-By default, the =*Completions*= buffer uses the main background of the
-active theme (more specifically the =:background= attribute of the ~default~
-face).  When set to non-nil, MCT applies applies alternating background
-colors in the Completions' buffer.  These are in a shade of gray that
-contrasts with the main background.
-
-#+vindex: mct-stripe
-Due to the specific nature of this style, there is no basic face that
-can be inherited to achieve a consistent result across themes.  As such,
-it only looks as intended with the =modus-themes= (built into Emacs 28 or
-higher or available as a package).  Other themes would need to add
-support for the ~mct-stripe~ face.
-
-** MCT in the minibuffer and in regular buffers
+** MCT in the minibuffer and completion in regular buffers
 :PROPERTIES:
 :CUSTOM_ID: h:8109fe09-fcce-4212-88eb-943cc72f2c75
 :END:
@@ -499,29 +466,14 @@ Emacs draws a distinction between two types of completion 
sessions:
   minibuffer is not active.  We call this "in-buffer completion" or
   allude to the underlying function: ~completion-in-region~.
 
-The former scenario is what MCT has supported since its inception.
-Starting with version =0.4.0= it also covers the latter case, though only
-experimentally (please report any bugs or point towards areas of
-possible improvement).
-
 #+findex: mct-minibuffer-mode
-#+vindex: mct-minibuffer-mode
-#+findex: mct-region-mode
-#+vindex: mct-region-mode
-To let users fine-tune their setup, MCT provides the ~mct-minibuffer-mode~
-(formerly ~mct-mode~) as well as the global ~mct-region-mode~.
-
-The decoupling between the two modes makes it possible to configure
-interchangeable components in a variety of combinations, such as MCT for
-the minibuffer and the Corfu package for completion-in-region
-([[#h:03227254-d467-4147-b8cf-2fe05a2e279b][Extensions]]).  Or the Vertico 
package for the minibuffer and MCT for
-in-buffer completion 
([[#h:c9ddedea-e279-4233-94dc-f8d32367a954][Alternatives]]).
-
-We jokingly say that since the introduction of ~mct-region-mode~ the
-acronym "MCT" now stands for "Minibuffer Confines Transcended"---the
-original was "Minibuffer and Completions in Tandem".
+The former scenario is what MCT has supported since its inception.
+Enable ~mct-minibuffer-mode~ to get started.  There was a time where
+MCT also supported in-buffer completion but this was discontinued in
+version =1.0.0= of the package as it was not good enough.
 
-[[#h:97eb5898-1e52-4338-bd55-8c52f9d8ccd3][Interaction model of 
mct-region-mode]].
+For in-buffer completion, use the ~corfu~ package by Daniel Mendler
+([[#h:c9ddedea-e279-4233-94dc-f8d32367a954][Alternatives]]).
 
 * Usage
 :PROPERTIES:
@@ -529,12 +481,7 @@ original was "Minibuffer and Completions in Tandem".
 :END:
 
 This section outlines the various patterns of interaction that MCT
-establishes.  Note that completion covers two distinct cases, which are
-reflected in the design of MCT: (i) in the minibuffer and (ii) for
-in-buffer completion ([[#h:8109fe09-fcce-4212-88eb-943cc72f2c75][MCT in the 
minibuffer and in regular buffers]]).
-Most of this section is about the former scenario, which uses the
-~mct-minibuffer-mode~.  The ~mct-region-mode~ is less featureful by
-comparison.
+establishes.
 
 ** Cyclic behaviour for mct-minibuffer-mode
 :PROPERTIES:
@@ -593,25 +540,14 @@ 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~).
 
-#+vindex: mct-display-buffer-action
-By default, the =*Completions*= buffer appears in a window at the bottom
-of the frame.  Users can change its placement by configuring the
-variable ~mct-display-buffer-action~ (its doc string explains how and
-provides sample code).
-
-This is not the same for in-buffer completion performed by
-~mct-region-mode~ ([[#h:97eb5898-1e52-4338-bd55-8c52f9d8ccd3][Interaction 
model of mct-region-mode]]).
-
 ** Selecting candidates with mct-minibuffer-mode
 :PROPERTIES:
 :CUSTOM_ID: h:bb445062-2e39-4082-a868-2123bfb793cc
 :END:
 #+cindex: Candidate selection for minibuffer completion
 
-There are several ways to select a completion candidate.  These pertain
-to ~mct-minibuffer-mode~, as ~mct-region-mode~ only has the meaningful
-action of expanding the given candidate (with =RET= or =TAB= in the
-Completions' buffer ([[#h:97eb5898-1e52-4338-bd55-8c52f9d8ccd3][Cyclic 
behaviour for in-buffer completion]])).
+There are several ways to select a completion candidate with
+~mct-minibuffer-mode~.
 
 1. Suppose that you are typing =mod= with the intent to select the
    =modus-themes.el= buffer.  To complete the candidate follow up =mod= with
@@ -701,67 +637,6 @@ Completions' buffer 
([[#h:97eb5898-1e52-4338-bd55-8c52f9d8ccd3][Cyclic behaviour
    these commands do not cycle between the completions and the
    minibuffer: they stop at the first or last heading.
 
-** Interaction model of mct-region-mode
-:PROPERTIES:
-:CUSTOM_ID: h:97eb5898-1e52-4338-bd55-8c52f9d8ccd3
-:END:
-#+cindex: Interactions for in-buffer completion
-
-When ~mct-region-mode~ is enabled, MCT is used for in-buffer completion.
-In this scenario, the cyclic behaviour is less featureful than when the
-minibuffer is active (due to the specifics of the underlying commands),
-so we cover the differences ([[#h:68c61a76-1d64-4f62-a77a-52e7b66a68fe][Cyclic 
behaviour in the minibuffer]]).
-
-In terms of its interaction model, ~mct-region-mode~ only gets enabled
-manually either by pressing =TAB= or =C-M-i= (~complete-symbol~) in supporting
-major modes.  The =*Completions*= buffer pops up and is narrowed live to
-match any subsequent user input.  While the buffer is visible, we are
-performing ~completion-in-region~, which means that the Completions can be
-narrowed live by typing further.  Furthermore, =C-n= or =C-p= will move the
-point to the top/bottom of the Completions' buffer from where the user
-can select a candidate with =RET=.
-
-In-buffer completion is always invoked manually.  There is no minimum
-input threshold and no delay between updates while live-updating of the
-=*Completions*= buffer is performed.  If the Completions are not visible,
-then no ~completion-in-region~ takes place and thus ~mct-region-mode~ should
-have no effect.
-
-By default, the placement of the Completions for this type of
-interaction is below the current buffer (as opposed to the bottom of the
-frame for ~mct-minibuffer-mode~).  It looks like this:
-
-#+begin_example
-------------------------
-|               |      |
-| Current buffer| Buf  |
-|               |      |
-------------------------
-|               |      |
-|  Completions  | Buf  |
-|               |      |
-------------------------
-|        |      |      |
-|  Buf   | Buf  | Buf  |
-|        |      |      |
-------------------------
-#+end_example
-
-While inside the Completions' buffer, =C-n= and =C-p= move to the next and
-previous line, respectively.  When they reach the top/bottom boundaries
-of the Completions' buffer, they switch focus back to the buffer that
-started the completion.  However, and unlike ~mct-minibuffer-mode~, they
-do not keep the =*Completions*= window around.  This is because we cannot
-tell whether the user wanted to continue with a new completion upon
-returning to the buffer of origin or perform some other motion/command
-(in the minibuffer we can make that assumption because the minibuffer is
-purpose-specific, so for as long as it is active, the completion session
-goes on).  As such, ~completion-in-region~ must be restarted after cycling
-out of the =*Completions*=.
-
-To cancel in-buffer completion, type =C-g= either before switching to the
-Completions' buffer or while inside of it.
-
 * Installation
 :PROPERTIES:
 :CUSTOM_ID: h:1b501ed4-f16c-4118-9a4a-7a5e29143077
@@ -828,7 +703,6 @@ Minimal setup for the minibuffer and in-buffer completion:
 #+begin_src emacs-lisp
 (require 'mct)
 (mct-minibuffer-mode 1)
-(mct-region-mode 1)
 #+end_src
 
 And with more options:
@@ -836,15 +710,13 @@ And with more options:
 #+begin_src emacs-lisp
 (require 'mct)
 
-(setq mct-completion-window-size (cons #'mct--frame-height-fraction 1))
+(setq mct-completion-window-size (cons #'mct-frame-height-third 1))
 (setq mct-remove-shadowed-file-names t) ; works when `file-name-shadow-mode' 
is enabled
 (setq mct-hide-completion-mode-line t)
-(setq mct-apply-completion-stripes t)
 (setq mct-minimum-input 3)
 (setq mct-live-completion t)
 (setq mct-live-update-delay 0.6)
 (setq mct-persist-dynamic-completion t)
-(setq mct-completions-format 'one-column)
 
 ;; This is for commands or completion categories that should always pop
 ;; up the completions' buffer.  It circumvents the default method of
@@ -867,36 +739,7 @@ And with more options:
 ;; disables live completions altogether.
 (setq mct-completion-blocklist nil)
 
-;; You can place the Completions' buffer wherever you want, by following
-;; the syntax of `display-buffer'.  For example, try this:
-
-;; (setq mct-display-buffer-action
-;;       (quote ((display-buffer-reuse-window
-;;                display-buffer-in-side-window)
-;;               (side . left)
-;;               (slot . 99)
-;;               (window-width . 0.3))))
-
 (mct-minibuffer-mode 1)
-
-;; Optionally use MCT for in-buffer completion (though `corfu' is a
-;; better option).
-(mct-region-mode 1)
-
-;;; Integration with Oleh Krehel's `avy' package
-(require 'mct-avy)
-
-(dolist (map (list mct-minibuffer-local-completion-map
-                   mct-minibuffer-completion-list-map))
-  (define-key map (kbd "C-,") #'mct-avy-embark-act)
-  (define-key map (kbd "C-.") #'mct-avy-choose-completion-exit)
-  (define-key map (kbd "C-;") #'mct-avy-choose-completion-dwim))
-
-;; If you are using `mct-region-mode':
-(dolist (map (list mct-region-completion-list-map
-                   mct-region-buffer-map))
-  (define-key map (kbd "C-,") #'mct-avy-embark-act)
-  (define-key map (kbd "C-.") #'mct-avy-region-choose-completion))
 #+end_src
 
 Other useful extras from the Emacs source code (read their doc strings):
@@ -935,15 +778,11 @@ Other useful extras from the Emacs source code (read 
their doc strings):
 ;;; Minibuffer history
 (require 'savehist)
 (setq savehist-file (locate-user-emacs-file "savehist"))
-(setq history-length 10000)
+(setq history-length 500)
 (setq history-delete-duplicates t)
 (setq savehist-save-minibuffer-history t)
 (add-hook 'after-init-hook #'savehist-mode)
 
-;;; Indentation and the TAB key
-(setq-default tab-always-indent 'complete) ; useful for `mct-region-mode'
-(setq-default tab-first-completion 'word-or-paren-or-punct) ; Emacs 27
-
 ;;; Third-party extensions
 
 ;;;; Enable Consult previews in the Completions buffer.
@@ -968,96 +807,6 @@ Other useful extras from the Emacs source code (read their 
doc strings):
       '((file (styles . (basic partial-completion orderless)))))
 #+end_src
 
-* MCT extensions
-:PROPERTIES:
-:CUSTOM_ID: h:a6724485-29f3-4632-854c-41963d2698b7
-:END:
-#+cindex: Experimental MCT code
-
-[ Part of {{{development-version}}} ]
-
-The MCT code repository contains some Elisp files beside =mct.el= which
-extend the functionality of the core package.  These files are named
-like =mct-SCOPE.el=.  They are considered experimental for the time
-being.  Their target audience is developers or users who can tolerate
-the occasional bug.
-
-** MCT and Avy
-:PROPERTIES:
-:CUSTOM_ID: h:18a2a223-8544-4294-b847-012c99003de4
-:END:
-#+cindex: Quick selection with Avy
-
-[ Part of {{{development-version}}} ]
-
-The MCT repository contains the =mct-avy.el= file.  It integrates MCT
-with the =avy= package to choose completion candidates using the
-latter's mode of interaction.  The commands it defines are:
-
-#+findex: mct-avy-choose-completion-exit
-+ ~mct-avy-choose-completion-exit~
-
-#+findex: mct-avy-choose-completion-dwim
-+ ~mct-avy-choose-completion-dwim~
-
-#+findex: mct-avy-choose-completion-jump
-+ ~mct-avy-choose-completion-jump~
-
-#+findex: mct-avy-region-choose-completion
-+ ~mct-avy-region-choose-completion~
-
-#+findex: mct-avy-embark-act
-+ ~mct-avy-embark-act~
-
-Their respective doc strings describe their functionality.
-
-=mct-avy.el= does not bind any keys.  Choose your own with something
-like this:
-
-#+begin_src emacs-lisp
-(dolist (map (list mct-minibuffer-local-completion-map
-                   mct-minibuffer-completion-list-map))
-  (define-key map (kbd "C-;") #'mct-avy-choose-completion-exit)
-  (define-key map (kbd "C-,") #'mct-avy-embark-act)
-  (define-key map (kbd "M-;") #'mct-avy-choose-completion-dwim))
-
-;; If you are using `mct-region-mode':
-(dolist (map (list mct-region-completion-list-map
-                   mct-region-buffer-map))
-  (define-key map (kbd "C-,") #'mct-avy-embark-act)
-  (define-key map (kbd "C-;") #'mct-avy-region-choose-completion))
-#+end_src
-
-=mct-avy.el= is inspired by Omar Antolín Camarena's
-=avy-embark-collect.el=.  The ~mct-avy-choose~ function borrows code
-and/or ideas from that libary: <https://github.com/oantolin/embark/>.
-
-[[#h:03227254-d467-4147-b8cf-2fe05a2e279b][Third-party extensions]].
-
-* Known issues and workarounds
-:PROPERTIES:
-:CUSTOM_ID: h:acfb63f4-c2ae-46ff-a840-9c9a6350e567
-:END:
-
-This section documents known issues and how to address them.
-
-** Avoid global-hl-line-mode in the Completions
-:PROPERTIES:
-:CUSTOM_ID: h:ee6aa793-3129-4cf0-8138-1224b6052546
-:END:
-
-MCT uses its own overlay to highlight the candidate at point.  To ensure
-that it does not interfere with the optional stripes (provided by the
-user option ~mct-apply-completion-stripes~) the highlight's priority is
-set to a custom value.  This, in turn, means that when the user enables
-~global-hl-line-mode~, its highlighted line takes precedence over the MCT
-highlight.  The solution to this conflict is to disable the hl-line
-locally for the =*Completions*= buffer like this:
-
-#+begin_src emacs-lisp
-(add-hook 'completion-list-mode-hook (lambda () (setq-local 
global-hl-line-mode nil)))
-#+end_src
-
 * Keymaps
 :PROPERTIES:
 :CUSTOM_ID: h:b3178edd-f340-444c-8426-fe84f23ac9ea
@@ -1065,16 +814,12 @@ locally for the =*Completions*= buffer like this:
 #+cindex: Keymaps
 #+vindex: mct-completion-list-mode-map
 #+vindex: mct-minibuffer-local-completion-map
-#+vindex: mct-region-buffer-map
-#+vindex: mct-region-completion-list-map
 
 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-region-buffer-map~
-+ ~mct-region-completion-list-map~
 
 You can invoke ~describe-keymap~ to learn more about them.
 
@@ -1188,76 +933,6 @@ Add this to your own configuration file instead:
 (define-key minibuffer-local-filename-completion-map (kbd "DEL") 
#'my-backward-updir)
 #+end_src
 
-** MCT in the current or the other window
-:PROPERTIES:
-:CUSTOM_ID: h:891c7841-9cdc-42df-bba9-45f7409b807c
-:END:
-
-Over at the [[https://git.sr.ht/~abcdw/rde][rde project]], Andrew Tropin 
configures MCT to display the
-Completions' buffer in either of two places:
-
-+ Current window ::  This is the default behaviour.  It means that
-  completions are presented where the user is already focused on,
-  instead of the bottom of the display or some side window.
-
-+ Other window :: The least recently used window when the command that
-  performs completion matches certain categories whose candidates are
-  best shown next to the current window/context.  For example, Imenu
-  (and extensions like ~consult-imenu~) creates a dynamically generated
-  index of "points of interest" in the current buffer, so it is useful
-  to have this displayed in the other window.
-
-Implementation details and particular preferences aside, this is a great
-example of using the various ~display-buffer~ functions to control the
-placement of the =*Completions*= buffer.
-
-#+begin_src emacs-lisp
-(defvar rde-completion-categories-other-window
-  '(imenu)
-  "Completion categories that has to be in other window than
-current, otherwise preview functionallity will fail the party.")
-
-(defvar rde-completion-categories-not-show-candidates-on-setup
-  '(command variable function)
-  "Completion categories that has to be in other window than
-current, otherwise preview functionallity will fail the party.")
-
-(defun rde-display-mct-buffer-pop-up-if-apropriate (buffer alist)
-  "Call `display-buffer-pop-up-window' if the completion category
-one of `rde-completion-categories-other-window', it will make
-sure that we don't use same window for completions, which should
-be in separate window."
-  (if (memq (mct--completion-category)
-            rde-completion-categories-other-window)
-      (display-buffer-pop-up-window buffer alist)
-    nil))
-
-(defun rde-display-mct-buffer-apropriate-window (buffer alist)
-  "Displays completion buffer in the same window, where completion
-was initiated (most recent one), but in case, when compeltion
-buffer should be displayed in other window use least recent one."
-  (let* ((window (if (memq (mct--completion-category)
-                           rde-completion-categories-other-window)
-                     (get-lru-window (selected-frame) nil nil)
-                   (get-mru-window (selected-frame) nil nil))))
-    (window--display-buffer buffer window 'reuse alist)))
-
-(setq mct-display-buffer-action
-      (quote ((display-buffer-reuse-window
-               rde-display-mct-buffer-pop-up-if-apropriate
-               rde-display-mct-buffer-apropriate-window))))
-
-(defun rde-mct-show-completions ()
-  "Instantly shows completion candidates for categories listed in
-`rde-completion-categories-show-candidates-on-setup'."
-  (unless (memq (mct--completion-category)
-                rde-completion-categories-not-show-candidates-on-setup)
-    (setq-local mct-minimum-input 0)
-    (mct--live-completions)))
-
-(add-hook 'minibuffer-setup-hook 'rde-mct-show-completions)
-#+end_src
-
 * Third-party extensions
 :PROPERTIES:
 :CUSTOM_ID: h:03227254-d467-4147-b8cf-2fe05a2e279b
@@ -1288,9 +963,9 @@ these exceptionally well-crafted extras:
   make things prettier and/or more informative, while it can also be
   combined with Marginalia.
 
-MCT does support the use-case of ~completion-in-region~.  This is the kind
-of completion session that does not involve the minibuffer and is
-instead about in-buffer text expansion.  However, you may prefer:
+MCT does not support the use-case of ~completion-in-region~.  This is
+the kind of completion session that is done inside the buffer and does
+not involve the minibuffer.  However, you may prefer:
 
 + [[https://github.com/minad/corfu/][Corfu]] by Daniel Mendler :: An interface 
for the ~completion-in-region~
   which uses a child frame (basically a pop-up) at the position of the
@@ -1300,7 +975,7 @@ instead about in-buffer text expansion.  However, you may 
prefer:
 
 + [[https://github.com/minad/cape][Cape]] also by Daniel :: Additional 
~completion-at-point-functions~
   (CAPFs) that extend those of core Emacs.  These backends can be used
-  by packages that visualise ~completion-in-region~ such as Corfu and MCT.
+  by packages that visualise ~completion-in-region~.
 
 ** Enable Consult previews
 :PROPERTIES:
@@ -1315,28 +990,6 @@ preview the candidate at point.  All we need to enable it 
in the
 (add-hook 'completion-list-mode-hook #'consult-preview-at-point-mode)
 #+end_src
 
-** Avoid conflict between MCT and Corfu
-:PROPERTIES:
-:CUSTOM_ID: h:9b19911c-1dd7-4d4c-b513-feb77237e156
-:END:
-
-Daniel Mendler's =corfu= package provides an alternative to the
-~mct-region-mode~ ([[#h:8109fe09-fcce-4212-88eb-943cc72f2c75][MCT in the 
minibuffer and in regular buffers]]).  Given
-that MCT's implementation is a global minor-mode, chances are that users
-of both will run into weird issues with conflicting functionality.  The
-following snippet from Corfu's README can be added to user configuration
-files to avoid any potential trouble when using commands such as
-~eval-expression~ (bound to =M-:= by default):
-
-#+begin_src emacs-lisp
-(defun corfu-in-minibuffer ()
-  "Enable Corfu in the minibuffer only if Mct/Vertico are not active."
-  (unless (or (mct--minibuffer-p) vertico--input)
-    (corfu-mode 1)))
-
-(add-hook 'minibuffer-setup-hook #'corfu-in-minibuffer 1)
-#+end_src
-
 * Alternatives
 :PROPERTIES:
 :CUSTOM_ID: h:c9ddedea-e279-4233-94dc-f8d32367a954
@@ -1385,9 +1038,7 @@ They all make for a natural complement to the standard 
Emacs experience
   The presence of a fully fledged buffer means that the user can invoke
   all relevant commands at their disposal, such as to write the buffer
   to a file for future review, use Isearch to move around, copy a string
-  or rectangle to a register, and so on.  Also, the placement of such a
-  buffer is configurable (as with all buffers---though refer, in
-  particular, to ~mct-display-buffer-action~).
+  or rectangle to a register, and so on.
 
   Vertico has official extensions which can make it work exactly like
   MCT without any of MCT's drawbacks.  These extensions can also expand
@@ -1401,25 +1052,6 @@ They all make for a natural complement to the standard 
Emacs experience
   prefer MCT over Vertico in terms of the available functionality:
   Vertico is better.
 
-+ [[https://github.com/karthink/elmo][Elmo - Embark Live MOde for Emacs]] by 
Karthik Chikmagalur :: this
-  package is best described as a sibling of MCT both in terms of its
-  functionality and overall interaction model.  In fact, the cyclic
-  motions that are at the core of the MCT experience were first
-  developed as part of my personal Emacs setup to cycle between the
-  minibuffer and Embark's "live completions" buffer.  That was until
-  Emacs28 got some refinements to the presentation of the =*Completions*=
-  buffer which allowed for a vertical, single-column view.
-
-  Elmo can, in principle, have identical functionality with MCT, given
-  that the only substantive difference is that the former uses an Embark
-  buffer to show live-updating completions, while the latter relies on
-  the generic =*Completions*= buffer.
-
-  For users who are on Emacs 27 and who need a single-column view, Elmo
-  is a better choice because MCT can only display such a view on Emacs
-  28 or higher (though it has been meticulously tested with the grid
-  views of Emacs 27 and should work perfectly fine with them).
-
 + Icomplete and fido-mode (built-in, multiple authors) :: Icomplete is
   closer in spirit to Vertico, as it too uses the minibuffer to display
   completion candidates.  By default, it presents the list horizontally,
@@ -1463,7 +1095,7 @@ MCT is meant to be a collective effort.  Every bit of 
help matters.
 
 + 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=).
+  =live-completions=).
 
 * Official sources
 :PROPERTIES:
diff --git a/mct-avy.el b/mct-avy.el
deleted file mode 100644
index c991af427e..0000000000
--- a/mct-avy.el
+++ /dev/null
@@ -1,100 +0,0 @@
-;;; mct-avy.el --- MCT integration with Avy -*- lexical-binding: t -*-
-
-;; Copyright (C) 2022  Free Software Foundation, Inc.
-
-;; Author: Protesilaos Stavrou <info@protesilaos.com>
-;; URL: https://git.sr.ht/~protesilaos/mct
-;; Version: 0.5.0
-;; Package-Requires: ((emacs "27.1") (mct "0.5"))
-
-;; This file is NOT part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at
-;; your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; UPDATE 2022-04-15: Development of this package has been discontinued:
-;; <https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
-;;
-;; MCT extension which provides the means to select a completion
-;; candidate with the `avy' package's mode of interaction.
-;;
-;; Inspired by Omar Antolín Camarena's `avy-embark-collect.el'.  The
-;; `mct-avy-choose' function borrows code or ideas from that library:
-;; <https://github.com/oantolin/embark/>.
-
-;;; Code:
-
-;;;; General utilities
-
-(require 'mct)
-
-(declare-function avy-process "avy" (candidates &optional overlay-fn 
cleanup-fn))
-
-(defun mct-avy-choose (&optional fn)
-  "Use Avy to go to completion candidate and optionally run FN."
-  (cond
-   ((mct--get-completion-window)
-    (mct-switch-to-completions-top)
-    (goto-char
-     (avy-process
-      (save-excursion
-        (let (completions)
-          (goto-char (mct--last-completion-point))
-          (while (not (bobp))
-            (push (point) completions)
-            (previous-completion 1))
-          completions))))
-    (when fn (funcall fn)))
-   (t (user-error "No Completions' buffer available"))))
-
-;;;###autoload
-(defun mct-avy-choose-completion-exit ()
-  "Use Avy to run `mct-choose-completion-exit' on candidate."
-  (interactive)
-  (mct-avy-choose #'mct-choose-completion-exit))
-
-;;;###autoload
-(defun mct-avy-choose-completion-dwim ()
-  "Use Avy to run `mct-choose-completion-dwim' on candidate."
-  (interactive)
-  (mct-avy-choose #'mct-choose-completion-dwim))
-
-;;;###autoload
-(defun mct-avy-choose-completion-jump ()
-  "Use Avy to jump to the selected candidate."
-  (interactive)
-  (mct-avy-choose))
-
-;;;###autoload
-(defun mct-avy-region-choose-completion ()
-  "Use Avy to run `choose-completion' on candidate.
-Intended for use with the MCT region mode for in-buffer
-completion where the minibuffer is not active."
-  (interactive)
-  (mct-avy-choose #'choose-completion))
-
-(declare-function embark-act "embark" (&optional arg))
-
-;;;###autoload
-(defun mct-avy-embark-act ()
-  "Use Avy to run `embark-act' on candidate.
-Requires the `embark' package."
-  (interactive)
-  (if (require 'embark nil t)
-      (mct-avy-choose #'embark-act)
-    (user-error "The `embark' package has not been loaded")))
-
-(provide 'mct-avy)
-;;; mct-avy.el ends here
diff --git a/mct-tcm.el b/mct-tcm.el
deleted file mode 100644
index 0f73b82043..0000000000
--- a/mct-tcm.el
+++ /dev/null
@@ -1,121 +0,0 @@
-;;; mct-tcm.el --- MCT which Treats the Completions as the Minibuffer -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2022  Free Software Foundation, Inc.
-
-;; Author: Protesilaos Stavrou <info@protesilaos.com>
-;; URL: https://git.sr.ht/~protesilaos/mct
-;; Version: 0.5.0
-;; Package-Requires: ((emacs "27.1") (mct "0.5"))
-
-;; This file is NOT part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at
-;; your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; UPDATE 2022-04-15: Development of this package has been discontinued:
-;; <https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
-;;
-;; MCT extension which Treats the Completions as the Minibuffer.  It
-;; intercepts any single character input (without Control or Alt
-;; modifiers) in the Completions' buffer and passes it to the minibuffer
-;; as input.  This practically means that the user can (i) narrow the
-;; list of candidates from the minibuffer, (ii) switch to the
-;; Completions in anticipation of selecting a candidate, (iii) change
-;; their mind and opt to narrow further, (iv) type something to bring
-;; focus back to the minibuffer while narrowing to the given input.
-;;
-;; When the `mct-tcm-mode' is enabled and the above sequence of events
-;; takes place, the current session is treated as if it belongs to the
-;; `mct-completion-passlist' (read its doc string).
-
-;;; Code:
-
-;;;; General utilities
-
-(require 'mct)
-(require 'seq)
-(eval-when-compile (require 'subr-x))
-
-;; FIXME 2022-02-22: Silence message when key binding is undefined.
-;;;###autoload
-(define-minor-mode mct-tcm-mode
-  "MCT extension which Treats the Completions as the Minibuffer.
-It intercepts any single character input (without Control or Alt
-modifiers) in the Completions' buffer and passes it to the
-minibuffer as input.  This practically means that the user
-can (i) narrow the list of candidates from the minibuffer, (ii)
-switch to the Completions in anticipation of selecting a
-candidate, (iii) change their mind and opt to narrow
-further, (iv) type something to bring focus back to the
-minibuffer while narrowing to the given input.
-
-When this mode is enabled and the above sequence of events takes
-place, the current session is treated as if it belongs to the
-`mct-completion-passlist' (read its doc string)."
-  :global t
-  :group 'mct
-  (if mct-tcm-mode
-      (add-hook 'completion-list-mode-hook 
#'mct-tcm--setup-redirect-self-insert)
-    (remove-hook 'completion-list-mode-hook 
#'mct-tcm--setup-redirect-self-insert)))
-
-;; NOTE 2022-02-25: This assumes that `kill-word' is bound to those
-;; keys.  Is there a more general method?
-(defun mct-tcm--kill-word-p (keys)
-  "Return non-nil if KEYS are C-DEL or M-DEL."
-  (or (seq-contains-p keys 'C-backspace)
-      (seq-contains-p keys '134217855)))
-
-(defun mct-tcm--insertable-char-p (char)
-  "Retun non-nil if CHAR can be used with `insert'."
-  (and (char-or-string-p char)
-       (or (memq 'shift (event-modifiers char))
-           (not (event-modifiers char)))))
-
-(defun mct-tcm--redirect-self-insert (&rest _)
-  "Redirect single character keys as input to the minibuffer."
-  (when-let* ((mct-tcm-mode)
-              (keys (this-single-command-keys))
-              (char (aref keys 0))
-              (mini (active-minibuffer-window)))
-    (let* ((delete-char (seq-contains-p keys '127)) ; Same assumption as 
`mct-tcm--kill-word-p'
-           (kill-word (mct-tcm--kill-word-p keys))
-           (del (or delete-char kill-word)))
-      (when (or del (mct-tcm--insertable-char-p char))
-        (select-window mini)
-        (setq-local completion-at-point-functions nil
-                    mct-live-completion t
-                    mct-live-update-delay 0
-                    mct-minimum-input 0)
-        (goto-char (point-max))
-        (let ((empty (string-empty-p (minibuffer-contents))))
-          (cond
-           (kill-word
-            (when empty (push-mark))
-            (kill-word -1))
-           (delete-char
-            (unless empty
-              (delete-char -1)))
-           ;; FIXME 2022-02-25: Emacs 27 inserts twice.  It inserts once
-           ;; even without the `insert' here.
-           (t
-            (insert char))))))))
-
-(defun mct-tcm--setup-redirect-self-insert ()
-  "Set up `mct-tcm--redirect-self-insert'."
-  (when (mct--minibuffer-p)
-    (add-hook 'pre-command-hook #'mct-tcm--redirect-self-insert nil t)))
-
-(provide 'mct-tcm)
-;;; mct-tcm.el ends here
diff --git a/mct.el b/mct.el
index 1fb8ebff31..b743087c0a 100644
--- a/mct.el
+++ b/mct.el
@@ -1,11 +1,11 @@
-;;; mct.el --- Minibuffer and Completions in Tandem -*- lexical-binding: t -*-
+;;; mct.el --- Minibuffer Confines Transcended -*- lexical-binding: t -*-
 
-;; Copyright (C) 2021-2022  Free Software Foundation, Inc.
+;; Copyright (C) 2021-2023  Free Software Foundation, Inc.
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://git.sr.ht/~protesilaos/mct
 ;; Version: 0.5.0
-;; Package-Requires: ((emacs "27.1"))
+;; Package-Requires: ((emacs "28.1"))
 
 ;; This file is NOT part of GNU Emacs.
 
@@ -24,43 +24,52 @@
 
 ;;; Commentary:
 ;;
-;; UPDATE 2022-04-15: Development of this package has been discontinued:
-;; <https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
+;; Enhancements for the default minibuffer completion UI of Emacs.  In
+;; essence, MCT is (i) a very thin layer of interactivity on top of the
+;; out-of-the-box completion experience, and (ii) glue code that combines
+;; built-in functionalities to make the default completion framework work
+;; like that of more featureful third-party options.
 ;;
-;; MCT enhances the default Emacs completion.  It makes the minibuffer
-;; and Completions' buffer work together as part of a singular
-;; completion UI.
-;;
-;; Read the documentation for basic usage and configuration.
+;; + Package name (GNU ELPA): `mct`
+;; + Official manual: <https://protesilaos.com/emacs/mct>
+;; + Change log: <https://protesilaos.com/emacs/mct-changelog>
+;; + Git repo on SourceHut: <https://git.sr.ht/~protesilaos/mct>
+;;   - Mirrors:
+;;     + GitHub: <https://github.com/protesilaos/mct>
+;;     + GitLab: <https://gitlab.com/protesilaos/mct>
+;; + Mailing list: <https://lists.sr.ht/~protesilaos/general-issues>
+;; + Video demo: <https://protesilaos.com/codelog/2021-10-22-emacs-mct-demo/>
+;; + Backronym: Minibuffer Confines Transcended; Minibuffer and
+;;   Completions in Tandem.
 
 ;;; Code:
 
 ;;;; General utilities
 
 (defgroup mct ()
-  "Minibuffer and Completions in Tandem.
+  "Minibuffer Confines Transcended.
 A layer of interactivity that integrates the standard minibuffer
 and the Completions."
   :group 'minibuffer)
 
 (make-obsolete 'mct-completion-windows-regexp 'mct--completions-window-name 
"0.5.0")
 
-(defcustom mct-completion-window-size (cons #'mct--frame-height-fraction 1)
-  "Set the maximum and minimum height of the Completions' buffer.
+(defcustom mct-completion-window-size (cons #'mct-frame-height-third 1)
+  "Set the maximum and minimum height of the Completions buffer.
 
 The value is a cons cell in the form of (max-height . min-height)
 where each value is either a natural number or a function which
 returns such a number.
 
 The default maximum height of the window is calculated by the
-function `mct--frame-height-fraction', which finds the closest
-round number to 1/3 of the frame's height.  While the default
-minimum height is 1.  This means that during live completions the
-Completions' window will shrink or grow to show candidates within
+function `mct-frame-height-third', which finds the closest round
+number to 1/3 of the frame's height.  While the default minimum
+height is 1.  This means that during live completions the
+Completions window will shrink or grow to show candidates within
 the specified boundaries.  To disable this bouncing effect, set
 both max-height and min-height to the same number.
 
-If nil, do not try to fit the Completions' buffer to its window.
+If nil, do not try to fit the Completions buffer to its window.
 
 Also see `mct-live-completion'."
   :type '(choice (const :tag "Disable size constraints" nil)
@@ -78,54 +87,51 @@ For example, if the user types ~/ after a long path name,
 everything preceding the ~/ is removed so the interactive
 selection process starts again from the user's $HOME.
 
-Only works when variable `file-name-shadow-mode' is non-nil."
+Only works when `file-name-shadow-mode' is enabled"
   :type 'boolean
   :group 'mct)
 
 (defcustom mct-hide-completion-mode-line nil
-  "When non-nil, hide the Completions' buffer mode line."
+  "When non-nil, hide the Completions buffer mode line."
   :type 'boolean
   :group 'mct)
 
-(defcustom mct-apply-completion-stripes nil
-  "When non-nil, use alternating backgrounds in the Completions."
-  :type 'boolean
-  :group 'mct)
+(make-obsolete 'mct-apply-completion-stripes nil "1.0.0")
 
 (defcustom mct-live-completion t
-  "Control auto-display and live-update of Completions' buffer.
+  "Control auto-display and live-update of Completions buffer.
 
 When nil, the user has to manually request completions, using the
-regular activating commands.  The Completions' buffer is never
+regular activating commands.  The Completions buffer is never
 updated live to match user input.  Updating has to be handled
 manually.  This is like the out-of-the-box minibuffer completion
 experience.
 
-When set to the value `visible', the Completions' buffer is live
+When set to the value `visible', the Completions buffer is live
 updated only if it is visible.  The actual display of the
 completions is still handled manually.  For this reason, the
 `visible' style does not read the `mct-minimum-input', meaning
 that it will always try to live update the visible completions,
 regardless of input length.
 
-When non-nil (the default), the Completions' buffer is
+When non-nil (the default), the Completions buffer is
 automatically displayed once the `mct-minimum-input' is met and
 is hidden if the input drops below that threshold.  While
 visible, the buffer is updated live to match the user's input.
 
 Note that every command or completion category in the
 `mct-completion-passlist' ignores this option altogether.  This
-means that every such symbol will always show the Completions'
+means that every such symbol will always show the Completions
 buffer automatically and will always update its contents live.
 Same principle for `mct-completion-blocklist', which will always
 disable both the automatic display and live updating of the
-Completions' buffer.
+Completions buffer.
 
 Also see `mct-completion-window-size'."
   :type '(choice
           (const :tag "Disable live-updating" nil)
           (const :tag "Enable live-updating" t)
-          (const :tag "Live update only visible Completions" 'visible))
+          (const :tag "Live update only visible Completions" visible))
   :group 'mct)
 
 (defcustom mct-minimum-input 3
@@ -137,7 +143,7 @@ number of candidates that are being computed."
   :group 'mct)
 
 (defcustom mct-live-update-delay 0.3
-  "Delay in seconds before updating the Completions' buffer.
+  "Delay in seconds before updating the Completions buffer.
 Set this to 0 to disable the delay.
 
 This applies in all cases covered by `mct-live-completion'."
@@ -153,13 +159,16 @@ as `file', `buffer', or what other packages define like 
Consult's
 `consult-location' category.
 
 This means that they ignore `mct-live-completion'.  They do not
-automatically display the Completions' buffer, nor do they update
+automatically display the Completions buffer, nor do they update
 it to match user input.
 
-The Completions' buffer can still be accessed with commands that
+The Completions buffer can still be accessed with commands that
 place it in a window (such as `mct-list-completions-toggle',
 `mct-switch-to-completions-top').
 
+When the `mct-completion-blocklist' and the `mct-completion-passlist'
+are in conflict, the former takes precedence.
+
 Perhaps a less drastic measure is to set `mct-minimum-input' to
 an appropriate value.  Or better use `mct-completion-passlist'.
 
@@ -179,41 +188,15 @@ This means that they ignore the value of 
`mct-live-completion'
 and the `mct-minimum-input'.  They also bypass any possible delay
 introduced by `mct-live-update-delay'.
 
+When the `mct-completion-blocklist' and the `mct-completion-passlist'
+are in conflict, the former takes precedence.
+
 Read the manual for known completion categories."
   :type '(repeat symbol)
   :group 'mct)
 
-(defcustom mct-display-buffer-action
-  '((display-buffer-reuse-window display-buffer-at-bottom))
-  "The action used to display the Completions' buffer.
-
-The value has the form (FUNCTION . ALIST), where FUNCTIONS is
-either an \"action function\" or a possibly empty list of action
-functions.  ALIST is a possibly empty \"action alist\".
-
-Sample configuration:
-
-    (setq mct-display-buffer-action
-          (quote ((display-buffer-reuse-window
-                   display-buffer-in-side-window)
-                  (side . left)
-                  (slot . 99)
-                  (window-width . 0.3))))
-
-See Info node `(elisp) Displaying Buffers' for more details
-and/or the documentation string of `display-buffer'."
-  :type '(cons (choice (function :tag "Display Function")
-                       (repeat :tag "Display Functions" function))
-               alist)
-  :group 'mct)
-
-(defcustom mct-completions-format 'one-column
-  "Set the presentation of candidates in the Completions' buffer.
-See `completions-format' for possible values."
-  :type '(choice (const horizontal) (const vertical) (const one-column))
-  :group 'mct)
-
-(make-obsolete 'mct-region-completions-format 'mct-completions-format "0.5.0")
+(make-obsolete-variable 'mct-display-buffer-action nil "1.0.0")
+(make-obsolete-variable 'mct-completions-format nil "1.0.0")
 
 (defcustom mct-persist-dynamic-completion t
   "When non-nil, keep dynamic completion live.
@@ -224,7 +207,7 @@ is to hide the `*Completions*' buffer after updating the 
list of
 candidates in a non-exiting fashion (e.g. select a directory and
 expect to continue typing the path).  This, however, runs
 contrary to the interaction model of MCT when it performs live
-completions, because the user expects the Completions' buffer to
+completions, because the user expects the Completions buffer to
 remain visible while typing out the path to the file.
 
 When this user option is non-nil (the default) it makes all
@@ -299,14 +282,11 @@ affairs."
 (defvar mct--dynamic-completion-categories '(file)
   "Completion categories that perform dynamic completion.")
 
-;;;; Basics of intersection between minibuffer and Completions' buffer
-
-(define-obsolete-variable-alias
-  'mct-hl-line 'mct-highlight-candidate "0.3.0")
+;;;; Basics of intersection between minibuffer and Completions buffer
 
 (defface mct-highlight-candidate
-  '((t :inherit highlight :extend t))
-  "Face for current candidate in the completions' buffer."
+  '((t :inherit highlight :extend nil))
+  "Face for current candidate in the Completions buffer."
   :group 'mct)
 
 (defun mct--first-line-completion-p ()
@@ -327,7 +307,7 @@ affairs."
     (unless (mct--first-line-completion-p)
       (goto-char (point-min))
       (let ((inhibit-read-only t))
-        (delete-region (point-at-bol) (1+ (point-at-eol)))
+        (delete-region (line-beginning-position) (1+ (line-end-position)))
         (insert (propertize " "
                             'cursor-sensor-functions
                             (list
@@ -336,11 +316,16 @@ affairs."
                                  (goto-char prev))))))
         (put-text-property (point-min) (point) 'invisible t)))))
 
-(defun mct--frame-height-fraction ()
+(defun mct-frame-height-third ()
   "Return round number of 1/3 of `frame-height'.
 Can be used in `mct-completion-window-size'."
   (floor (frame-height) 3))
 
+(define-obsolete-function-alias
+  'mct--frame-height-fraction
+  'mct-frame-height-third
+  "1.0.0")
+
 (defun mct--height (param)
   "Return height of PARAM in number of lines."
   (cond
@@ -351,7 +336,7 @@ Can be used in `mct-completion-window-size'."
    (t 5)))
 
 (defun mct--fit-completions-window (&rest _args)
-  "Fit Completions' buffer to its window."
+  "Fit Completions buffer to its window."
   (when-let* ((window (mct--get-completion-window))
               (size mct-completion-window-size)
               (max (car size))
@@ -363,7 +348,7 @@ Can be used in `mct-completion-window-size'."
 See `mct-minimum-input'."
   (>= (- (point-max) (minibuffer-prompt-end)) mct-minimum-input))
 
-;;;;; Live-updating Completions' buffer
+;;;;; Live-updating Completions buffer
 
 (defvar mct--completions-window-name "\\`\\*Completions.*\\*\\'"
   "Regexp to match window names with completion candidates.")
@@ -392,8 +377,9 @@ See `mct-minimum-input'."
 Meant to be added to `after-change-functions'."
   (when (and
          ;; Check that live completions are enabled by looking at
-         ;; after-change-functions. This check is needed for Consult
-         ;; integration, which refreshes the display asynchronously.
+         ;; `after-change-functions'.  This check is needed for
+         ;; Consult integration, which refreshes the display
+         ;; asynchronously.
          (memq #'mct--live-completions-refresh after-change-functions)
          ;; Update only visible completion windows?
          (or (not (eq mct-live-completion 'visible))
@@ -408,9 +394,9 @@ Meant to be added to `after-change-functions'."
       (mct--live-completions-refresh-immediately))))
 
 (defun mct--setup-live-completions ()
-  "Set up the completions' buffer."
+  "Set up the Completions buffer."
   (cond
-   ((null mct-live-completion))
+   ((or (null mct-live-completion) (mct--blocklist-p)))
    ;; ;; NOTE 2022-02-25: The passlist setup we had here was being
    ;; ;; called too early in `mct--completing-read-advice'.  It would
    ;; ;; fail to filter out the current candidate from the list
@@ -430,7 +416,7 @@ Meant to be added to `after-change-functions'."
 
 (defun mct--setup-passlist ()
   "Set up the minibuffer for `mct-completion-passlist'."
-  (when (and (mct--passlist-p) (mct--minibuffer-p))
+  (when (and (mct--passlist-p) (mct--minibuffer-p) (not (mct--blocklist-p)))
     (setq-local mct-minimum-input 0)
     (setq-local mct-live-update-delay 0)
     (mct--show-completions)))
@@ -444,27 +430,10 @@ Meant to be added to `after-change-functions'."
               (buf (window-buffer win)))
       (buffer-local-value 'mct--active buf)))
 
-(defun mct--region-p ()
-  "Return non-nil if Mct is completing in region."
-  (when-let ((buf (mct--region-current-buffer)))
-    (buffer-local-value 'mct-region-mode buf)))
-
 (defun mct--minibuffer-completion-help-advice (&rest app)
-  "Prepare advice around `display-completion-list'.
-Apply APP by first let binding the `completions-format' to
-`mct-completions-format'."
+  "Prepare APP advice around `display-completion-list'."
   (if (mct--minibuffer-p)
-      (let ((completions-format mct-completions-format))
-        (apply app)
-        (mct--fit-completions-window))
-    (apply app)))
-
-(defun mct--region-completion-help-advice (&rest app)
-  "Prepare advice around `display-completion-list'.
-Apply APP by first let binding the `completions-format' to
-`mct-completions-format'."
-  (if (mct--region-p)
-      (let ((completions-format mct-completions-format))
+      (let ((completions-format 'one-column))
         (apply app)
         (mct--fit-completions-window))
     (apply app)))
@@ -482,72 +451,12 @@ Apply APP by first setting up the minibuffer to work with 
Mct."
         (mct--setup-shadow-files))
     (apply app)))
 
-;;;;; Alternating backgrounds (else "stripes")
-
-;; Based on `stripes.el' (maintained by Štěpán Němec) and the
-;; `embark-collect-zebra-minor-mode' from Omar Antolín Camarena's
-;; Embark:
-;;
-;; 1. <https://gitlab.com/stepnem/stripes-el>
-;; 2. <https://github.com/oantolin/embark>
-(defface mct-stripe
-  '((default :extend t)
-    (((class color) (min-colors 88) (background light))
-     :background "#f0f0f0")
-    (((class color) (min-colors 88) (background dark))
-     :background "#191a1b"))
-  "Face for alternating backgrounds in the Completions' buffer."
-  :group 'mct)
-
-(defun mct--remove-stripes ()
-  "Remove `mct-stripe' overlays."
-  (remove-overlays nil nil 'face 'mct-stripe))
-
-(defun mct--add-stripes ()
-  "Overlay alternate rows with the `mct-stripe' face."
-  (when (derived-mode-p 'completion-list-mode)
-    (mct--remove-stripes)
-    (save-excursion
-      (goto-char (point-min))
-      (when (overlays-at (point)) (forward-line))
-      (while (not (eobp))
-        (condition-case nil
-            (forward-line 1)
-          (user-error (goto-char (point-max))))
-        (unless (eobp)
-          (let ((pt (point)))
-            (condition-case nil
-                (forward-line 1)
-              (user-error (goto-char (point-max))))
-            ;; We set the overlay this way and give it a low priority so
-            ;; that `mct--highlight-overlay' and/or the active region
-            ;; can override it.
-            (let ((stripe (make-overlay pt (point))))
-              (overlay-put stripe 'priority -100)
-              (overlay-put stripe 'face 'mct-stripe))))))))
-
 ;;;; Commands and helper functions
 
-;; TODO 2021-11-17: We must `autoload' instead of `declare-function' for
-;; things to work on Emacs 27.  Perhaps we should keep the latter but
-;; add (eval-when-compile (require 'text-property-search))?  That should
-;; work for packages, but not if we just `eval-buffer', right?
-
-(autoload 'text-property-search-backward "text-property-search")
-(autoload 'text-property-search-forward "text-property-search")
-(autoload 'prop-match-beginning "text-property-search")
-(autoload 'prop-match-end "text-property-search")
-
-;; (declare-function text-property-search-backward "text-property-search" 
(property &optional value predicate not-current))
-;; (declare-function text-property-search-forward "text-property-search" 
(property &optional value predicate not-current))
-;; (declare-function prop-match-beginning "text-property-search" (cl-x))
-;; (declare-function prop-match-end "text-property-search" (cl-x))
-
-;; We need this to make things work on Emacs 27.
-(defun mct--one-column-p ()
-  "Test if we have a one-column view available."
-  (and (eq mct-completions-format 'one-column)
-       (>= emacs-major-version 28)))
+(declare-function text-property-search-backward "text-property-search" 
(property &optional value predicate not-current))
+(declare-function text-property-search-forward "text-property-search" 
(property &optional value predicate not-current))
+(declare-function prop-match-beginning "text-property-search" (cl-x))
+(declare-function prop-match-end "text-property-search" (cl-x))
 
 ;;;;; Focus minibuffer and/or show completions
 
@@ -567,37 +476,27 @@ Apply APP by first setting up the minibuffer to work with 
Mct."
       (buffer-name (window-buffer window))))))
 
 (defun mct--show-completions ()
-  "Show the completions' buffer."
-  (let ((display-buffer-alist
-         (cons (cons mct--completions-window-name mct-display-buffer-action)
-               display-buffer-alist))
-        ;; don't ring the bell in `minibuffer-completion-help'
+  "Show the Completions buffer."
+  (let (;; don't ring the bell in `minibuffer-completion-help'
         ;; when <= 1 completion exists.
         (ring-bell-function #'ignore)
         (message-log-max nil)
         (inhibit-message t))
-    (save-excursion
-      (pcase (and completion-in-region-mode completion-in-region--data)
-        (`(,start ,end ,collection . ,plist)
-         (let ((minibuffer-completion-table collection)
-               (minibuffer-completion-predicate (plist-get plist :predicate))
-               (completion-extra-properties plist))
-           (minibuffer-completion-help start end)))
-        (_ (minibuffer-completion-help))))))
+    (minibuffer-completion-help)))
 
 ;;;###autoload
 (defun mct-focus-mini-or-completions ()
-  "Focus the active minibuffer or the completions' window.
+  "Focus the active minibuffer or the Completions window.
 
 If both the minibuffer and the Completions are present, this
 command will first move per invocation to the former, then the
 latter, and then continue to switch between the two.
 
 The continuous switch is essentially the same as running
-`mct-focus-minibuffer' and `switch-to-completions' in
+`mct-focus-minibuffer' and `switch-to-Completions in
 succession.
 
-What constitutes a completions' window is ultimately determined
+What constitutes a Completions window is ultimately determined
 by `mct--completions-window-name'."
   (interactive nil mct-minibuffer-mode)
   (let* ((mini (active-minibuffer-window))
@@ -610,13 +509,13 @@ by `mct--completions-window-name'."
 
 ;;;###autoload
 (defun mct-list-completions-toggle ()
-  "Toggle the presentation of the completions' buffer."
+  "Toggle the presentation of the Completions buffer."
   (interactive nil mct-minibuffer-mode)
   (if (mct--get-completion-window)
       (minibuffer-hide-completions)
     (mct--show-completions)))
 
-;;;;; Cyclic motions between minibuffer and completions' buffer
+;;;;; Cyclic motions between minibuffer and Completions buffer
 
 (defun mct--completion-at-point-p ()
   "Return non-nil if there is a completion at point."
@@ -629,7 +528,7 @@ by `mct--completions-window-name'."
 (defun mct--arg-completion-point-p (arg)
   "Return non-nil if ARGth next completion exists."
   (save-excursion
-    (mct--next-completion arg)
+    (next-completion arg)
     (mct--completion-at-point-p)))
 
 (defun mct--first-completion-point ()
@@ -646,17 +545,6 @@ by `mct--completions-window-name'."
     (next-completion -1)
     (point)))
 
-(defun mct--completions-line-boundary (boundary)
-  "Determine if current line has reached BOUNDARY.
-BOUNDARY is a line position at the top or bottom of the
-Completions' buffer.  See `mct--first-completion-point' or
-`mct--last-completion-point'.
-
-This check only applies when `completions-format' is not assigned
-a `one-column' value."
-  (and (= (line-number-at-pos) (line-number-at-pos boundary))
-       (not (mct--one-column-p))))
-
 (defun mct--completions-no-completion-line-p (arg)
   "Check if ARGth line has a completion candidate."
   (save-excursion
@@ -664,40 +552,26 @@ a `one-column' value."
     (null (mct--completion-at-point-p))))
 
 (defun mct--switch-to-completions ()
-  "Subroutine for switching to the completions' buffer."
+  "Subroutine for switching to the Completions buffer."
   (unless (mct--get-completion-window)
     (mct--show-completions))
   (switch-to-completions))
 
-(defun mct--restore-old-point-in-grid (line)
-  "Restore old point in window if LINE is on its line."
-  (unless (mct--one-column-p)
-    (let (old-line old-point)
-      (when-let ((window (mct--get-completion-window)))
-        (setq old-point (window-old-point window)
-              old-line (line-number-at-pos old-point))
-        (when (= (line-number-at-pos line) old-line)
-          (if (eq old-point (point-min))
-              (goto-char (mct--first-completion-point))
-            (goto-char old-point)))))))
-
 (defun mct-switch-to-completions-top ()
-  "Switch to the top of the completions' buffer."
-  (interactive nil mct-minibuffer-mode mct-region-mode)
+  "Switch to the top of the Completions buffer."
+  (interactive nil mct-minibuffer-mode)
   (mct--switch-to-completions)
-  (goto-char (mct--first-completion-point))
-  (mct--restore-old-point-in-grid (point)))
+  (goto-char (mct--first-completion-point)))
 
 (defun mct-switch-to-completions-bottom ()
-  "Switch to the bottom of the completions' buffer."
-  (interactive nil mct-minibuffer-mode mct-region-mode)
+  "Switch to the bottom of the Completions buffer."
+  (interactive nil mct-minibuffer-mode)
   (mct--switch-to-completions)
   (goto-char (point-max))
   (next-completion -1)
-  (goto-char (point-at-bol))
+  (goto-char (line-beginning-position))
   (unless (mct--completion-at-point-p)
     (next-completion 1))
-  (mct--restore-old-point-in-grid (point))
   (recenter
    (- -1
       (min (max 0 scroll-margin)
@@ -708,7 +582,7 @@ a `one-column' value."
   "Return non-nil if ARGth line is empty."
   (unless (mct--arg-completion-point-p arg)
     (save-excursion
-      (goto-char (point-at-bol))
+      (goto-char (line-beginning-position))
       (and (not (bobp))
               (or (beginning-of-line (1+ arg)) t)
               (save-match-data
@@ -719,33 +593,12 @@ a `one-column' value."
 ARG is a numeric argument for `next-completion', as described in
 `mct-next-completion-or-mini'."
   (or (eobp)
-      (mct--completions-line-boundary (mct--last-completion-point))
       (= (save-excursion (next-completion arg) (point)) (point-max))
+      (= (save-excursion (forward-line arg) (point)) (point-max))
       ;; The empty final line case which should avoid candidates with
       ;; spaces or line breaks...
       (mct--empty-line-p arg)))
 
-(defun mct--next-completion (arg)
-  "Routine to move to the next ARGth completion candidate."
-  (if (not (mct--one-column-p))
-      ;; Retaining the column number ensures that things work
-      ;; intuitively in a grid view.
-      (let ((col (current-column)))
-        ;; The `when' is meant to skip past lines that do not
-        ;; contain completion candidates, such as those with
-        ;; `completions-group-format'.
-        (when (mct--completions-no-completion-line-p (or arg 1))
-          (if arg
-              (setq arg 2)
-            (setq arg (1+ arg))))
-        (vertical-motion (or arg 1))
-        (unless (eq col (save-excursion (goto-char (point-at-bol)) 
(current-column)))
-          (line-move-to-column col))
-        (when (or (> (current-column) col)
-                  (not (mct--completion-at-point-p)))
-          (next-completion -1)))
-    (next-completion (or arg 1))))
-
 (defun mct-next-completion-or-mini (&optional arg)
   "Move to the next completion or switch to the minibuffer.
 This performs a regular motion for optional ARG candidates, but
@@ -755,7 +608,7 @@ the minibuffer."
   (let ((count (or arg 1)))
     (if (mct--bottom-of-completions-p count)
         (mct-focus-minibuffer)
-      (mct--next-completion count))))
+      (next-completion count))))
 
 (defun mct--motion-below-point-min-p (arg)
   "Return non-nil if backward ARG motion exceeds `point-min'."
@@ -768,32 +621,10 @@ the minibuffer."
 ARG is a numeric argument for `previous-completion', as described in
 `mct-previous-completion-or-mini'."
   (or (bobp)
-      (mct--completions-line-boundary (mct--first-completion-point))
       (mct--motion-below-point-min-p arg)
       ;; FIXME 2021-12-27: Why do we need this now?  Regression upstream?
       (eq (line-number-at-pos) 1)))
 
-(defun mct--previous-completion (arg)
-  "Routine to move to the previous ARGth completion candidate."
-  (if (not (mct--one-column-p))
-      ;; Retaining the column number ensures that things work
-      ;; intuitively in a grid view.
-      (let ((col (current-column)))
-        ;; The `when' is meant to skip past lines that do not
-        ;; contain completion candidates, such as those with
-        ;; `completions-group-format'.
-        (when (mct--completions-no-completion-line-p (or (- arg) -1))
-          (if arg
-              (setq arg 2)
-            (setq arg (1+ arg))))
-        (vertical-motion (or (- arg) -1))
-        (unless (eq col (save-excursion (goto-char (point-at-bol)) 
(current-column)))
-          (line-move-to-column col))
-        (when (or (> (current-column) col)
-                  (not (mct--completion-at-point-p)))
-          (next-completion -1)))
-    (previous-completion (or (abs arg) 1))))
-
 (defun mct-previous-completion-or-mini (&optional arg)
   "Move to the previous completion or switch to the minibuffer.
 This performs a regular motion for optional ARG candidates, but
@@ -803,12 +634,12 @@ the minibuffer."
   (let ((count (if (natnump arg) arg 1)))
     (if (mct--top-of-completions-p count)
         (mct-focus-minibuffer)
-      (mct--previous-completion count))))
+      (previous-completion count))))
 
 (defun mct-next-completion-group (&optional arg)
   "Move to the next completion group.
 If ARG is supplied, move that many completion groups at a time."
-  (interactive "p" mct-minibuffer-mode mct-region-mode)
+  (interactive "p" mct-minibuffer-mode)
   (dotimes (_ (or arg 1))
     (when-let (group (save-excursion
                        (text-property-search-forward 'face
@@ -822,7 +653,7 @@ If ARG is supplied, move that many completion groups at a 
time."
 (defun mct-previous-completion-group (&optional arg)
   "Move to the previous completion group.
 If ARG is supplied, move that many completion groups at a time."
-  (interactive "p" mct-minibuffer-mode mct-region-mode)
+  (interactive "p" mct-minibuffer-mode)
   (dotimes (_ (or arg 1))
     ;; skip back, so if we're at the top of a group, we go to the previous 
one...
     (forward-line -1)
@@ -894,16 +725,16 @@ In any other prompt use `mct-choose-completion-no-exit'."
   "Edit the current completion candidate inside the minibuffer.
 
 The current candidate is the one at point while inside the
-Completions' buffer.
+Completions buffer.
 
 When point is in the minibuffer, the current candidate is
 determined as follows:
 
-+ The one at the last known position in the Completions'
++ The one at the last known position in the Completions
   window (if the window is deleted and produced again, this value
   is reset).
 
-+ The first candidate in the Completions' buffer.
++ The first candidate in the Completions buffer.
 
 A candidate is recognised for as long as point is not past its
 last character."
@@ -932,22 +763,22 @@ followed by exiting the minibuffer with that candidate."
 
 ;;;;; Miscellaneous commands
 
-;; This is needed to circumvent `mct--setup-clean-completions' with regard to
+;; This is needed to circumvent `mct--setup-clean-Completions with regard to
 ;; `cursor-sensor-functions'.
 (defun mct-beginning-of-buffer ()
   "Go to the top of the Completions buffer."
-  (interactive nil mct-minibuffer-mode mct-region-mode)
+  (interactive nil mct-minibuffer-mode)
   (goto-char (mct--first-completion-point)))
 
 (defun mct-keyboard-quit-dwim ()
-  "Control the exit behaviour for completions' buffers.
+  "Control the exit behaviour for Completions buffers.
 
-If in a completions' buffer and unless the region is active, run
+If in a Completions buffer and unless the region is active, run
 `abort-recursive-edit'.  Otherwise run `keyboard-quit'.
 
 If the region is active, deactivate it.  A second invocation of
 this command is then required to abort the session."
-  (interactive nil mct-minibuffer-mode mct-region-mode)
+  (interactive nil mct-minibuffer-mode)
   (when (derived-mode-p 'completion-list-mode)
     (cond
      ((null (active-minibuffer-window))
@@ -969,12 +800,9 @@ Apply APP while inhibiting modification hooks."
     (apply app)))
 
 (defun mct--setup-appearance ()
-  "Set up variables for the appearance of the Completions' buffer."
+  "Set up variables for the appearance of the Completions buffer."
   (when mct-hide-completion-mode-line
-    (setq-local mode-line-format nil))
-  (if mct-apply-completion-stripes
-      (mct--add-stripes)
-    (mct--remove-stripes)))
+    (setq-local mode-line-format nil)))
 
 ;;;;; Shadowed path
 
@@ -1000,13 +828,11 @@ Apply APP while inhibiting modification hooks."
 ;;;;; Highlight current candidate
 
 (defvar-local mct--highlight-overlay nil
-  "Overlay to highlight candidate in the Completions' buffer.")
+  "Overlay to highlight candidate in the Completions buffer.")
 
 (defvar mct--overlay-priority -50
   "Priority used on the `mct--highlight-overlay'.
-This value means that it takes precedence over lines that have
-the `mct-stripe' face, while it is overriden by the active
-region.")
+This value means that it is overriden by the active region.")
 
 ;; This is for Emacs 27 which does not have a completion--string text
 ;; property.
@@ -1029,9 +855,7 @@ region.")
   "Return end of completion candidate."
   (if-let ((string (mct--completion-at-point-p)))
       (save-excursion
-        (if (mct--one-column-p)
-            (1+ (point-at-eol))
-          (prop-match-end (mct--completions-text-property-search))))
+        (1+ (line-end-position)))
     (point)))
 
 (defun mct--overlay-make ()
@@ -1054,7 +878,7 @@ region.")
   (mct--overlay-move mct--highlight-overlay))
 
 (defun mct--setup-highlighting ()
-  "Highlight the current completion in the Completions' buffer."
+  "Highlight the current completion in the Completions buffer."
   (add-hook 'post-command-hook #'mct--completions-candidate-highlight nil t))
 
 ;;;;; Keymaps
@@ -1119,8 +943,6 @@ region.")
 
 ;;;;; Dynamic completion
 
-;; TODO 2022-01-29: Research how things work for relevant cases in
-;; completion-in-region and adapt accordingly.
 (defun mct--persist-dynamic-completion (&rest _)
   "Persist completion, per `mct-persist-dynamic-completion'."
   (when (and (not (mct--symbol-in-list mct-completion-blocklist))
@@ -1163,211 +985,44 @@ region.")
     (advice-remove #'minibuffer-completion-help 
#'mct--minibuffer-completion-help-advice)
     (advice-remove #'minibuf-eldef-setup-minibuffer #'mct--stealthily))
   (mct--setup-dynamic-completion-persist)
-  (mct--setup-shared))
-
-(define-obsolete-function-alias 'mct-mode 'mct-minibuffer-mode "0.4.0")
-
-;;;;; mct-region-mode declaration
-
-;;;;;; Live completions
-
-(defun mct--region-current-buffer ()
-  "Return current buffer of completion in region."
-  (and completion-in-region--data
-       (marker-buffer (nth 0 completion-in-region--data))))
-
-(defun mct--region-live-completions (&rest _)
-  "Update the *Completions* buffer.
-Meant to be added to `after-change-functions'."
-  (when-let (buf (mct--region-current-buffer))
-    (while-no-input
-      (condition-case nil
-          (save-match-data
-            (mct--show-completions))
-        (quit (keyboard-quit))))))
-
-(defun mct--region-live-update ()
-  "Hook up `mct--region-live-completions'."
-  (add-hook 'after-change-functions #'mct--region-live-completions nil t))
-
-;;;;;; Minor mode specification
+  (mct--setup-message-advices))
 
-(defvar mct-region-buffer-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap next-line] #'mct-switch-to-completions-top)
-    (define-key map [remap previous-line] #'mct-switch-to-completions-bottom)
-    ;; TODO: Either keep the TAB=completion-at-point binding or add our own
-    ;; command which is compatible with orderless completion.
-    (define-key map (kbd "TAB") #'ignore)
-    map)
-  "Derivative of `completion-in-region-map'.")
-
-(defun mct--region-setup-completion-in-region ()
-  "Set up Mct for `completion-in-region'."
-  (if completion-in-region-mode
-      (progn
-        (setcdr (assq #'completion-in-region-mode 
minor-mode-overriding-map-alist)
-                (make-composed-keymap mct-region-buffer-map 
completion-in-region-mode-map))
-        (mct--region-current-buffer)
-        ;; NOTE: Ignore the predicate in order to support orderless style.
-        ;; TODO: This override should be guarded by a customizable variable,
-        ;; since it is intrusive. See also `corfu-quit-at-boundary'.
-        (setq completion-in-region-mode--predicate (lambda () t))
-        (mct--region-live-update))
-    ;; Teardown
-    (remove-hook 'after-change-functions #'mct--region-live-completions t)))
-
-(defun mct-next-completion-or-quit (&optional arg)
-  "Move to next completion or bury the Completions' buffer.
-
-This performs a regular motion for optional ARG candidates, but
-when point can no longer move in that direction it buries the
-Completions' buffer.
-
-This is a counterpart of `mct-next-completion-or-mini' that is
-meant for the case of completion in region (i.e. not in the
-minibuffer)."
-  (interactive nil mct-region-mode)
-  (let ((count (or arg 1)))
-    (cond
-     ((mct--bottom-of-completions-p count)
-      (minibuffer-hide-completions))
-     (t
-      (mct--next-completion count)))))
-
-(defun mct-previous-completion-or-quit (&optional arg)
-  "Move to previous completion or bury the Completions' buffer.
-
-This performs a regular motion for optional ARG candidates, but
-when point can no longer move in that direction it buries the
-Completions' buffer.
-
-This is a counterpart of `mct-previous-completion-or-mini' that
-is meant for the case of completion in region (i.e. not in the
-minibuffer)."
-  (interactive nil mct-region-mode)
-  (let ((count (if (natnump arg) arg 1)))
-    (cond
-     ((mct--top-of-completions-p count)
-      (minibuffer-hide-completions))
-     (t
-      (mct--previous-completion count)))))
-
-(defvar mct-region-completion-list-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [remap next-line] #'mct-next-completion-or-quit)
-    (define-key map [remap previous-line] #'mct-previous-completion-or-quit)
-    (define-key map (kbd "n") #'mct-next-completion-or-quit)
-    (define-key map (kbd "p") #'mct-previous-completion-or-quit)
-    (define-key map [remap backward-paragraph] #'mct-previous-completion-group)
-    (define-key map [remap forward-paragraph] #'mct-next-completion-group)
-    (define-key map (kbd "M-n") #'mct-next-completion-group)
-    (define-key map (kbd "M-p") #'mct-previous-completion-group)
-    (define-key map (kbd "TAB") #'choose-completion)
-    (define-key map (kbd "RET") #'choose-completion)
-    (define-key map [remap beginning-of-buffer] #'mct-beginning-of-buffer)
-    map)
-  "Derivative of `completion-list-mode-map'.")
-
-(defun mct--region-setup-completion-list-keymap ()
-  "Set up completion list keymap."
-  (use-local-map
-   (make-composed-keymap mct-region-completion-list-map
-                         (current-local-map))))
-
-(defun mct--region-setup-completion-list ()
-  "Set up the completion-list for Mct."
-  (when (mct--region-p)
-    (setq-local completion-show-help nil
-                completion-wrap-movement nil ; Emacs 29
-                truncate-lines t)
-    (mct--setup-clean-completions)
-    (mct--setup-appearance)
-    (mct--region-setup-completion-list-keymap)
-    (mct--setup-highlighting)
-    (cursor-sensor-mode)))
-
-(defun mct--region-completion-done (&rest app)
-  "Apply APP before disabling completion in region."
-  (apply app)
-  (completion-in-region-mode -1))
-
-;; UPDATE 2022-01-01 13:12 +0200: Actually this is not related to mct.
-;; I can reproduce it in emacs -Q with just those:
-;;
-;; (electric-indent-mode 1)
-;; (setq-default tab-always-indent 'complete)
-;;
-;; FIXME 2022-01-01: I experienced a bug which is as follows:
-;;
-;; + (electric-indent-mode 1)
-;; + (setq-default tab-always-indent 'complete)
-;; + visit an Org file with an elisp src block that includes comments
-;; + go to the end of a comment's line and hit RET
-;; + the block temporarily changes background to secondary-selection
-;;   (same as when you type C-c '), seems to be trying to perform
-;;   completion, and then ultimately does what RET is supposed to do.
-;;
-;; Disabling electric-indent-mode fixes the issue, though that is beside
-;; the point.
-
-;; FIXME 2022-01-03: This does not work with either M-x shell or M-x
-;; eshell.  Not on Emacs 29, not on Emacs 27.  Try to tab-complete with
-;; 'cd' and it will not be possible to switch to the Completions'
-;; buffer, even if it works the first time.
-
-;;;###autoload
-(define-minor-mode mct-region-mode
-  "Set up interactivity over the default `completion-in-region'."
-  :global t
-  (if mct-region-mode
-      (progn
-        (advice-add #'completion--done :around #'mct--region-completion-done)
-        (advice-add #'minibuffer-completion-help :around 
#'mct--region-completion-help-advice)
-        (add-hook 'completion-list-mode-hook 
#'mct--region-setup-completion-list)
-        (add-hook 'completion-in-region-mode-hook 
#'mct--region-setup-completion-in-region))
-    (advice-remove #'completion--done #'mct--region-completion-done)
-    (advice-remove #'minibuffer-completion-help 
#'mct--region-completion-help-advice)
-    (remove-hook 'completion-list-mode-hook 
#'mct--region-setup-completion-list)
-    (remove-hook 'completion-in-region-mode-hook 
#'mct--region-setup-completion-in-region))
-  (mct--setup-shared))
+(make-obsolete 'mct-region-mode nil "1.0.0")
 
 ;; Adapted from Omar Antolín Camarena's live-completions library:
 ;; <https://github.com/oantolin/live-completions>.
-(defun mct--shared-honor-inhibit-message (&rest app)
-  "Honor `inhibit-message' while applying APP."
-  (unless (and (or (mct--region-p) (mct--minibuffer-p)) inhibit-message)
+(defun mct--honor-inhibit-message (&rest app)
+  "Honor variable `inhibit-message' while applying APP."
+  (unless (and (mct--minibuffer-p) inhibit-message)
     (apply app)))
 
 ;; Thanks to Omar Antolín Camarena for providing the messageless and
 ;; stealthily.  Source: <https://github.com/oantolin/emacs-config>.
-(defun mct--shared-messageless (&rest app)
+(defun mct--messageless (&rest app)
   "Set `minibuffer-message-timeout' to 0 while applying APP."
-  (if (or (mct--region-p) (mct--minibuffer-p))
+  (if (mct--minibuffer-p)
       (let ((minibuffer-message-timeout 0))
         (apply app))
     (apply app)))
 
-(defun mct--setup-shared ()
+(defun mct--setup-message-advices ()
   "Silence the minibuffer and the Completions."
-  (if (or mct-region-mode mct-minibuffer-mode)
+  (if mct-minibuffer-mode
       (progn
-        ;; NOTE 2022-01-09: Only `choose-completion' is relevant for
-        ;; completion-in-region.
         (dolist (fn '(exit-minibuffer
                       choose-completion
                       minibuffer-force-complete
                       minibuffer-complete-and-exit
                       minibuffer-force-complete-and-exit))
-          (advice-add fn :around #'mct--shared-messageless))
-        (advice-add #'minibuffer-message :around 
#'mct--shared-honor-inhibit-message))
+          (advice-add fn :around #'mct--messageless))
+        (advice-add #'minibuffer-message :around #'mct--honor-inhibit-message))
     (dolist (fn '(exit-minibuffer
                   choose-completion
                   minibuffer-force-complete
                   minibuffer-complete-and-exit
                   minibuffer-force-complete-and-exit))
-      (advice-remove fn #'mct--shared-messageless))
-    (advice-remove #'minibuffer-message #'mct--shared-honor-inhibit-message)))
+      (advice-remove fn #'mct--messageless))
+    (advice-remove #'minibuffer-message #'mct--honor-inhibit-message)))
 
 (provide 'mct)
 ;;; mct.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]