55 lines
1.2 kB
1
use str
2
use store
3
4
fn history {|&exact=$true &edit-key='tab' &delete-key='ctrl-d' &border='rounded' &down-exit=$true|
5
tmp E:SHELL = 'elvish'
6
7
var fzf-args = [
8
--no-multi
9
--no-sort
10
--read0
11
--print0
12
--info-command="print History"
13
--scheme=history
14
--border=$border
15
--query=$edit:current-command
16
]
17
18
if (not-eq $edit-key $nil) {
19
set fzf-args = [$@fzf-args --expect=$edit-key]
20
}
21
if (not-eq $delete-key $nil) {
22
set fzf-args = [$@fzf-args --expect=$delete-key]
23
}
24
if $exact {
25
set fzf-args = [$@fzf-args --exact]
26
}
27
if $down-exit {
28
set fzf-args = [$@fzf-args --bind 'down:transform:if (<= $E:FZF_POS 1) { print abort } else { print down }']
29
}
30
31
var key line @ignored = (str:split "\x00" (
32
edit:command-history &dedup &newest-first |
33
each {|cmd| printf "%s %s\x00" $cmd[id] $cmd[cmd] } |
34
try {
35
fzf $@fzf-args | slurp
36
} catch {
37
edit:redraw &full=$true
38
return
39
}
40
))
41
edit:redraw &full=$true
42
43
var id command = (str:split &max=2 ' ' $line)
44
45
if (eq $key $delete-key) {
46
store:del-cmd $id
47
edit:notify 'Deleted '$id
48
} else {
49
edit:replace-input $command
50
51
if (not-eq $key $edit-key) {
52
edit:return-line
53
}
54
}
55
}
56