Modules for Elvish Shell
at main 1.6 kB view raw
1use math 2use os 3use file 4use str 5 6set-env ATUIN_SESSION (atuin uuid) 7unset-env ATUIN_HISTORY_ID 8 9set edit:after-readline = [$@edit:after-readline {|line| 10 try { 11 if (not-eq (str:trim-space $line) '') { 12 set-env ATUIN_HISTORY_ID (atuin history start -- $line) 13 } 14 } catch e { 15 unset-env ATUIN_HISTORY_ID 16 } 17}] 18 19set edit:after-command = [$@edit:after-command {|m| 20 if (has-env ATUIN_HISTORY_ID) { 21 var exit-status = 0 22 if (not-eq $m[error] $nil) { 23 if (has-key $m[error][reason] exit-status) { 24 set exit-status = $m[error][reason][exit-status] 25 } else { 26 set exit-status = 127 27 } 28 } 29 var duration = (exact-num (math:round (* $m[duration] 1000000000))) 30 31 var history-end = { 32 tmp E:ATUIN_LOG = 'error' 33 atuin history end --exit $exit-status --duration $duration -- $E:ATUIN_HISTORY_ID >$os:dev-null 2>&1 34 unset-env ATUIN_HISTORY_ID 35 } 36 37 if $notify-bg-job-success { 38 $history-end 39 } else { 40 $history-end & 41 } 42 } 43}] 44 45fn search {|@argv| 46 var accept-prefix = '__atuin_accept__:' 47 48 var p = (file:pipe) 49 # TODO: Will need an elvish flag in Atuin binary 50 with [E:ATUIN_LOG = 'error'] [E:ATUIN_SHELL_BASH = t] [E:ATUIN_QUERY = $edit:current-command] { 51 atuin search $@argv -i >$os:dev-tty 2>$p; edit:redraw &full=$true 52 } 53 file:close $p[w] 54 var command = (str:trim-space (slurp < $p)) 55 file:close $p[r] 56 57 if (not-eq $command '') { 58 if (str:has-prefix $command $accept-prefix) { 59 edit:replace-input (str:trim-prefix $command $accept-prefix) 60 edit:return-line 61 } else { 62 edit:replace-input $command 63 } 64 } 65} 66 67fn search-up { 68 search --shell-up-key-binding 69}