blob: 4119c920fcd5661736bd34ecadeb69fd6c65d1b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
(defvar kj/history-command "fc -R $HISTFILE && fc -l 1"
"History command used to get shell history.")
(defvar kj/history-regexp
(rx bol (* " ")
;; Index
(* digit)
(* " ")
;; Command
(group (1+ (not "\n")))))
(defun kj/get-shell-history ()
(with-temp-buffer
(unless (process-file
"zsh"
nil
(current-buffer)
nil
"-c"
kj/history-command)
(error "Getting history failed: %s" (buffer-string)))
(goto-char (point-min))
(let ((result))
(save-match-data
(while (re-search-forward kj/history-regexp nil t)
(push (match-string-no-properties 1) result)))
result)))
(defun kj/consult-history ()
(interactive)
(if (not
(or (and (minibufferp)
(eq minibuffer-history-variable 'shell-command-history))
(derived-mode-p '(term-mode shell-mode))
))
(call-interactively 'consult-history)
(consult--read
(kj/get-shell-history)
:prompt "Shell history: "
:history t
:sort nil
:initial (if (minibufferp)
(buffer-substring-no-properties
(minibuffer-prompt-end) (point-max))
nil))))
(provide 'kj-history)
|