[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/mct bd105cc7b4 17/23: Handle C-DEL and M-DEL in mct-tcm
From: |
ELPA Syncer |
Subject: |
[elpa] externals/mct bd105cc7b4 17/23: Handle C-DEL and M-DEL in mct-tcm |
Date: |
Fri, 25 Feb 2022 07:57:38 -0500 (EST) |
branch: externals/mct
commit bd105cc7b44fc18a365b3ca8baa117e4f72b1de8
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Handle C-DEL and M-DEL in mct-tcm
For a discussion, see issue 25:
<https://gitlab.com/protesilaos/mct/-/issues/25>.
---
mct-tcm.el | 49 +++++++++++++++++++++++++++++++++----------------
1 file changed, 33 insertions(+), 16 deletions(-)
diff --git a/mct-tcm.el b/mct-tcm.el
index b2100ae032..119770c290 100644
--- a/mct-tcm.el
+++ b/mct-tcm.el
@@ -65,28 +65,45 @@ place, the current session is treated as if it belongs to
the
(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)))
- (when (and (char-or-string-p char)
- (or (memq 'shift (event-modifiers char))
- (not (event-modifiers char))))
- (select-window mini)
- (goto-char (point-max))
- (setq-local completion-at-point-functions nil)
- (setq-local mct-live-completion t)
- (setq-local mct-live-update-delay 0)
- (setq-local mct-minimum-input 0)
- ;; FIXME 2022-02-24: Why does Emacs 27 insert twice? In other
- ;; words, why does it add the character even if the `insert' is
- ;; commented out?
- (when (>= emacs-major-version 28)
- (if (eq char 127) ; DEL or <backspace>
- (delete-char -1)
- (insert char))))))
+ (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)))
+ (t
+ (insert char))))))))
(defun mct-tcm--setup-redirect-self-insert ()
"Set up `mct-tcm--redirect-self-insert'."
- [elpa] externals/mct 038ff66a54 06/23: Refine mct-tcm interaction model, (continued)
- [elpa] externals/mct 038ff66a54 06/23: Refine mct-tcm interaction model, ELPA Syncer, 2022/02/25
- [elpa] externals/mct a551ab0fdb 05/23: Require mct library, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 9e11607409 14/23: Minor rewording, ELPA Syncer, 2022/02/25
- [elpa] externals/mct dea21e4701 23/23: Warn about mct extensions directory, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 79416f1ca8 08/23: Fix indentation, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 6b6b9c3a9f 18/23: Require subr-x only at compile time, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 35384917af 01/23: Add prototype for continuous input, ELPA Syncer, 2022/02/25
- [elpa] externals/mct f9394ede61 10/23: Add FIXME for weird Emacs 27 bug, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 7ebf1826b5 02/23: Put "continuous input" code in its own file, ELPA Syncer, 2022/02/25
- [elpa] externals/mct cf9af9118a 12/23: Remove superfluous 'declare-function', ELPA Syncer, 2022/02/25
- [elpa] externals/mct bd105cc7b4 17/23: Handle C-DEL and M-DEL in mct-tcm,
ELPA Syncer <=
- [elpa] externals/mct b37bdeb0bf 21/23: Move mct-tcm.el to "extensions" directory, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 3193a95c30 11/23: Simplify &rest in private function, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 1d254a0bb7 16/23: Handle backspace or DEL in mct-tcm, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 973ab321a8 20/23: Add FIXME for Emacs 27, ELPA Syncer, 2022/02/25
- [elpa] externals/mct 8ee4e6d799 09/23: Set mct-live-completion to non-nil, not visible, ELPA Syncer, 2022/02/25
- [elpa] externals/mct e50b222fdf 22/23: Merge branch 'experiment-continuous-input', ELPA Syncer, 2022/02/25