From c4ef35a3d4dd6e37202f4f9655067ac2fa7888f2 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 16 Dec 2024 20:12:25 +0200 Subject: [PATCH] * lisp/comint.el (comint-complete-input-ring): New command (bug#74694). (comint-mode-map): Bind 'comint-complete-input-ring' to 'C-x '. (cherry picked from commit d2986e79b76d442f8620195a54120d8be3e4583c) --- etc/NEWS | 6 ++++++ lisp/comint.el | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 1fb558ed584..e70da6dca88 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -250,6 +250,12 @@ It removes all the buttons in the specified region. +++ *** Disabling 'button-mode' now removes all buttons in the current buffer. +** Shell + +*** New command to complete the shell history. +'comint-complete-input-ring' ('C-x ') is like 'minibuffer-complete-history' +but completes on comint inputs. + ** Eshell --- diff --git a/lisp/comint.el b/lisp/comint.el index d80bc358881..64c5bec0ce9 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -543,6 +543,7 @@ via PTYs.") (define-key map "\er" 'comint-history-isearch-backward-regexp) (define-key map [?\C-c ?\M-r] 'comint-previous-matching-input-from-input) (define-key map [?\C-c ?\M-s] 'comint-next-matching-input-from-input) + (define-key map [?\C-x up] 'comint-complete-input-ring) (define-key map "\e\C-l" 'comint-show-output) (define-key map "\C-m" 'comint-send-input) (define-key map "\C-d" 'comint-delchar-or-maybe-eof) @@ -1180,6 +1181,24 @@ See also `comint-read-input-ring'." (set-window-configuration conf) (push ch unread-command-events)))))) +(defun comint-complete-input-ring () + "Complete a list of recent inputs entered into the current buffer. +Like `minibuffer-complete-history' but completes on comint inputs. +This function makes `comint-dynamic-list-input-ring' obsolete." + (interactive) + (let ((completions + (if (and (ring-p comint-input-ring) + (not (ring-empty-p comint-input-ring))) + (ring-elements comint-input-ring) + (user-error "No history available"))) + (completion-in-region-mode-predicate + (lambda () (get-buffer-window "*Completions*" 0)))) + (completion-in-region + (comint-line-beginning-position) (point-max) + (completion-table-with-metadata + completions '((category . comint-input) + (display-sort-function . identity) + (cycle-sort-function . identity)))))) (defun comint-regexp-arg (prompt) "Return list of regexp and prefix arg using PROMPT." -- 2.39.5