Modules for Elvish Shell
at main 1.1 kB view raw
1use str 2use store 3 4fn history {|&edit-key='tab' &delete-key='ctrl-d' &down-exit=$true @argv| 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 --query=$edit:current-command 15 $@argv 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 $down-exit { 25 set fzf-args = [$@fzf-args --bind 'down:transform:if (<= $E:FZF_POS 1) { print abort } else { print down }'] 26 } 27 28 var key line @ignored = (str:split "\x00" ( 29 edit:command-history &dedup &newest-first | 30 each {|cmd| printf "%s %s\x00" $cmd[id] $cmd[cmd] } | 31 try { 32 fzf $@fzf-args | slurp 33 } catch { 34 edit:redraw &full=$true 35 return 36 } 37 )) 38 edit:redraw &full=$true 39 40 var id command = (str:split &max=2 ' ' $line) 41 42 if (eq $key $delete-key) { 43 store:del-cmd $id 44 edit:notify 'Deleted '$id 45 } else { 46 edit:replace-input $command 47 48 if (not-eq $key $edit-key) { 49 edit:return-line 50 } 51 } 52}