You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xplr/src/config.yml

1109 lines
29 KiB
YAML

version: v0.5.0
general:
show_hidden: false
read_only: false
initial_sorting:
- sorter: ByCanonicalIsDir
reverse: true
- sorter: ByIRelativePath
reverse: false
prompt:
format: "> "
cursor:
format:
logs:
info:
format: "INFO"
style:
fg: LightBlue
success:
format: "SUCCESS"
style:
fg: Green
error:
format: "ERROR"
style:
fg: Red
table:
header:
cols:
- format: ' index'
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
- format: '╭─ path'
- format: size
- format: type
style:
fg: null
bg: null
add_modifier:
bits: 1
sub_modifier:
bits: 0
height: 1
row:
cols:
- format: '{{#if isBeforeFocus}}-{{else}} {{/if}}{{{relativeIndex}}}│{{{index}}}'
- format: >
{{{tree}}}{{{prefix}}}{{{meta.icon}}}{{#if (ne meta.icon "")}} {{/if}}{{{relativePath}}}{{#if isDir}}/{{/if}}{{{suffix}}}
{{#if isSymlink}}-> {{#if isBroken}}×{{else}}{{{symlink.absolutePath}}}{{/if}}{{#if symlink.isDir}}/{{/if}}{{/if}}
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
- format: '{{humansize size}}'
- format: '{{#if isSymlink}}{{{symlink.mimeEssence}}}{{else}}{{{mimeEssence}}}{{/if}}'
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
height: 0
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
tree:
- format: ├─
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
- format: ├─
- format: ╰─
col_spacing: 3
col_widths:
- percentage: 10
- percentage: 50
- percentage: 20
- percentage: 20
default_ui:
prefix: ' '
suffix: ''
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
focus_ui:
prefix: ▸[
suffix: ']'
style:
fg: Blue
bg: null
add_modifier:
bits: 1
sub_modifier:
bits: 0
selection_ui:
prefix: ' {'
suffix: '}'
style:
fg: LightGreen
bg: null
add_modifier:
bits: 1
sub_modifier:
bits: 0
sort_and_filter_ui:
separator:
format: " "
sort_direction_identifiers:
forward:
format: "↓"
reverse:
format: "↑"
sorter_identifiers:
ByRelativePath:
format: "rel"
ByIRelativePath:
format: "[i]rel"
ByExtension:
format: "ext"
ByIsDir:
format: "dir"
ByIsFile:
format: "file"
ByIsSymlink:
format: "sym"
ByIsBroken:
format: ""
ByIsReadonly:
format: "ro"
ByMimeEssence:
format: "mime"
BySize:
format: "size"
ByCanonicalAbsolutePath:
format: "[c]abs"
ByICanonicalAbsolutePath:
format: "[ci]abs"
ByCanonicalExtension:
format: "[c]ext"
ByCanonicalIsDir:
format: "[c]dir"
ByCanonicalIsFile:
format: "[c]file"
ByCanonicalIsReadonly:
format: "[c]ro"
ByCanonicalMimeEssence:
format: "[c]mime"
ByCanonicalSize:
format: "[c]size"
BySymlinkAbsolutePath:
format: "[s]abs"
ByISymlinkAbsolutePath:
format: "[si]abs"
BySymlinkExtension:
format: "[s]ext"
BySymlinkIsDir:
format: "[s]dir"
BySymlinkIsFile:
format: "[s]file"
BySymlinkIsReadonly:
format: "[s]ro"
BySymlinkMimeEssence:
format: "[s]mime"
BySymlinkSize:
format: "[s]size"
filter_identifiers:
RelativePathIs:
format: "rel=="
IRelativePathIs:
format: "[i]rel=="
RelativePathIsNot:
format: "rel!="
IRelativePathIsNot:
format: "[i]rel!="
RelativePathDoesStartWith:
format: "rel=^"
IRelativePathDoesStartWith:
format: "[i]rel=^"
RelativePathDoesNotStartWith:
format: "rel!^"
IRelativePathDoesNotStartWith:
format: "[i]rel!^"
RelativePathDoesContain:
format: "rel=~"
IRelativePathDoesContain:
format: "[i]rel=~"
RelativePathDoesNotContain:
format: "rel!~"
IRelativePathDoesNotContain:
format: "[i]rel!~"
RelativePathDoesEndWith:
format: "rel=$"
IRelativePathDoesEndWith:
format: "[i]rel=$"
RelativePathDoesNotEndWith:
format: "rel!$"
IRelativePathDoesNotEndWith:
format: "[i]rel!$"
AbsolutePathIs:
format: "abs=="
IAbsolutePathIs:
format: "[i]abs=="
AbsolutePathIsNot:
format: "abs!="
IAbsolutePathIsNot:
format: "[i]abs!="
AbsolutePathDoesStartWith:
format: "abs=^"
IAbsolutePathDoesStartWith:
format: "[i]abs=^"
AbsolutePathDoesNotStartWith:
format: "abs!^"
IAbsolutePathDoesNotStartWith:
format: "[i]abs!^"
AbsolutePathDoesContain:
format: "abs=~"
IAbsolutePathDoesContain:
format: "[i]abs=~"
AbsolutePathDoesNotContain:
format: "abs!~"
IAbsolutePathDoesNotContain:
format: "[i]abs!~"
AbsolutePathDoesEndWith:
format: "abs=$"
IAbsolutePathDoesEndWith:
format: "[i]abs=$"
AbsolutePathDoesNotEndWith:
format: "abs!$"
IAbsolutePathDoesNotEndWith:
format: "[i]abs!$"
node_types:
directory:
style:
fg: Cyan
bg: null
add_modifier:
bits: 1
sub_modifier:
bits: 0
meta:
icon: ð
file:
style:
fg: null
bg: null
add_modifier:
bits: 0
sub_modifier:
bits: 0
meta:
icon: ƒ
symlink:
style:
fg: Magenta
bg: null
add_modifier:
bits: 4
sub_modifier:
bits: 0
meta:
icon: §
mime_essence: {}
extension: {}
special: {}
modes:
builtin:
selection_ops:
name: selection ops
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
c:
help: copy here
messages:
- BashExec: |
(while IFS= read -r line; do
if cp -vr "${line:?}" ./; then
echo "LogSuccess: $line copied to $PWD" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to copy $line to $PWD" >> "${XPLR_PIPE_MSG_IN:?}"
fi
done < "${XPLR_PIPE_SELECTION_OUT:?}")
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
echo ClearSelection >> "${XPLR_PIPE_MSG_IN:?}"
read -p "[enter to continue]"
- SwitchMode: default
m:
help: move here
messages:
- BashExec: |
(while IFS= read -r line; do
if mv -v "${line:?}" ./; then
echo "LogSuccess: $line moved to $PWD" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to move $line to $PWD" >> "${XPLR_PIPE_MSG_IN:?}"
fi
done < "${XPLR_PIPE_SELECTION_OUT:?}")
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
read -p "[enter to continue]"
- SwitchMode: default
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- SwitchMode: default
create_file:
name: create file
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
enter:
help: create file
messages:
- BashExecSilently: |
PTH="${XPLR_INPUT_BUFFER:?}"
if touch "${PTH:?}"; then
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
echo "LogSuccess: $PTH created" >> "${XPLR_PIPE_MSG_IN:?}"
echo "FocusPath: $PTH" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to create $PTH" >> "${XPLR_PIPE_MSG_IN:?}"
echo Refresh >> "${XPLR_PIPE_MSG_IN:?}"
fi
- SwitchMode: default
backspace:
help: remove last character
messages:
- RemoveInputBufferLastCharacter
ctrl-w:
help: remove last word
messages:
- RemoveInputBufferLastWord
ctrl-u:
help: remove line
messages:
- SetInputBuffer: ""
esc:
help: cancel
messages:
- SwitchMode: default
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- BufferInputFromKey
create_directory:
name: create directory
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
enter:
help: create directory
messages:
- BashExecSilently: |
PTH="${XPLR_INPUT_BUFFER:?}"
if mkdir -p "${PTH:?}"; then
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
echo "LogSuccess: $PTH created" >> "${XPLR_PIPE_MSG_IN:?}"
echo "FocusPath: $PTH" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to create $PTH" >> "${XPLR_PIPE_MSG_IN:?}"
echo Refresh >> "${XPLR_PIPE_MSG_IN:?}"
fi
- SwitchMode: default
backspace:
help: remove last character
messages:
- RemoveInputBufferLastCharacter
ctrl-w:
help: remove last word
messages:
- RemoveInputBufferLastWord
ctrl-u:
help: remove line
messages:
- SetInputBuffer: ""
esc:
help: cancel
messages:
- SwitchMode: default
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- BufferInputFromKey
create:
name: create
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
ctrl-c:
help: terminate
messages:
- Terminate
d:
help: create directory
messages:
- SwitchMode: create directory
- SetInputBuffer: ''
esc:
help: cancel
messages:
- SwitchMode: default
f:
help: create file
messages:
- SwitchMode: create file
- SetInputBuffer: ''
on_alphabet: null
on_number: null
on_special_character: null
default:
help: null
messages:
- SwitchMode: default
rename:
name: rename
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
enter:
help: rename
messages:
- BashExecSilently: |
SRC="${XPLR_FOCUS_PATH:?}"
TARGET="${XPLR_INPUT_BUFFER:?}"
if mv -v "${SRC:?}" "${TARGET:?}"; then
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
echo "LogSuccess: $SRC renamed to $TARGET" >> "${XPLR_PIPE_MSG_IN:?}"
echo "FocusPath: $TARGET" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to rename $SRC to $TARGET" >> "${XPLR_PIPE_MSG_IN:?}"
fi
- SwitchMode: default
backspace:
help: remove last character
messages:
- RemoveInputBufferLastCharacter
ctrl-w:
help: remove last word
messages:
- RemoveInputBufferLastWord
ctrl-u:
help: remove line
messages:
- SetInputBuffer: ""
esc:
help: cancel
messages:
- SwitchMode: default
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- BufferInputFromKey
filter:
name: filter
key_bindings:
on_key:
ctrl-x:
help: remove last filter
messages:
- RemoveLastNodeFilter
- SetInputBuffer: ""
- Explore
backspace:
help: remove last character
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- RemoveInputBufferLastCharacter
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-w:
help: remove last word
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- RemoveInputBufferLastWord
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-u:
help: remove line
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- SetInputBuffer: ""
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-r:
help: reset filters
messages:
- SetInputBuffer: ""
- ResetNodeFilters
- Explore
ctrl-l:
help: clear filters
messages:
- SetInputBuffer: ""
- ClearNodeFilters
- Explore
enter:
help: apply filter
messages:
- SwitchMode: default
esc:
help: cancel
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- SwitchMode: default
- Explore
ctrl-c:
help: terminate
messages:
- Terminate
default:
help: null
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- BufferInputFromKey
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
sort:
name: sort
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
backspace:
help: remove last sorter
messages:
- RemoveLastNodeSorter
- Explore
'!':
help: reverse sorters
messages:
- ReverseNodeSorters
- Explore
ctrl-r:
help: reset sorters
messages:
- ResetNodeSorters
- Explore
ctrl-l:
help: clear sorters
messages:
- ClearNodeSorters
- Explore
r:
help: by relative path
messages:
- AddNodeSorter:
sorter: ByIRelativePath
- Explore
R:
help: by relative path reverse
messages:
- AddNodeSorter:
sorter: ByIRelativePath
reverse: true
- Explore
e:
help: by canonical extension
messages:
- AddNodeSorter:
sorter: ByCanonicalExtension
- Explore
E:
help: by canonical extension reverse
messages:
- AddNodeSorter:
sorter: ByCanonicalExtension
reverse: true
- Explore
n:
help: by node type
messages:
- AddNodeSorter:
sorter: ByCanonicalIsDir
- AddNodeSorter:
sorter: ByCanonicalIsFile
- AddNodeSorter:
sorter: ByIsSymlink
- Explore
N:
help: by node type reverse
messages:
- AddNodeSorter:
sorter: ByCanonicalIsDir
reverse: true
- AddNodeSorter:
sorter: ByCanonicalIsFile
reverse: true
- AddNodeSorter:
sorter: ByIsSymlink
reverse: true
- Explore
m:
help: by canonical mime essence
messages:
- AddNodeSorter:
sorter: ByCanonicalMimeEssence
- Explore
M:
help: by canonical mime essence reverse
messages:
- AddNodeSorter:
sorter: ByCanonicalMimeEssence
reverse: true
- Explore
s:
help: by size
messages:
- AddNodeSorter:
sorter: BySize
- Explore
S:
help: by size reverse
messages:
- AddNodeSorter:
sorter: BySize
reverse: true
- Explore
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- SwitchMode: default
default:
name: default
help: null
extra_help: null
key_bindings:
remaps:
/: ctrl-f
h: left
j: down
k: up
l: right
v: space
V: ctrl-a
tab: ctrl-i
on_key:
'#':
help: null
messages:
- PrintAppStateAndQuit
s:
help: sort
messages:
- SwitchMode: sort
f:
help: filter
messages:
- SwitchMode: filter
- SetInputBuffer: ''
- Explore
.:
help: show hidden
messages:
- ToggleNodeFilter:
filter: RelativePathDoesNotStartWith
input: .
- Explore
':':
help: action
messages:
- SwitchMode: action
'?':
help: global help menu
messages:
- BashExec: |
${PAGER:-less} "${XPLR_PIPE_GLOBAL_HELP_MENU_OUT}"
'~':
help: go home
messages:
- BashExecSilently: |
echo "ChangeDirectory: ${HOME:?}" >> "${XPLR_PIPE_MSG_IN:?}"
G:
help: go to bottom
messages:
- FocusLast
ctrl-c:
help: terminate
messages:
- Terminate
ctrl-f:
help: search
messages:
- SwitchMode: search
- SetInputBuffer: ''
- Explore
d:
help: delete
messages:
- SwitchMode: delete
down:
help: down
messages:
- FocusNext
enter:
help: quit with result
messages:
- PrintResultAndQuit
g:
help: go to
messages:
- SwitchMode: go to
left:
help: back
messages:
- Back
r:
help: rename
messages:
- SwitchMode: rename
- BashExecSilently: |
echo "SetInputBuffer: $(basename ${XPLR_FOCUS_PATH})" >> "${XPLR_PIPE_MSG_IN:?}"
right:
help: enter
messages:
- Enter
space:
help: toggle selection
messages:
- ToggleSelection
- FocusNext
ctrl-a:
help: select all
messages:
- ToggleSelectAll
up:
help: up
messages:
- FocusPrevious
ctrl-o:
help: last visited path
messages:
- LastVisitedPath
ctrl-i: # Actually means tab
help: next visited path
messages:
- NextVisitedPath
ctrl-l:
help: clear selection
messages:
- ClearSelection
ctrl-r:
help: refresh screen
messages:
- ClearScreen
- Refresh
q:
help: quit
messages:
- Quit
on_alphabet: null
on_number:
help: input
messages:
- ResetInputBuffer
- SwitchMode: number
- BufferInputFromKey
on_special_character: null
default:
help: null
messages:
- SwitchMode: default
go_to:
name: go to
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
ctrl-c:
help: terminate
messages:
- Terminate
g:
help: top
messages:
- FocusFirst
- SwitchMode: default
x:
help: open in gui
messages:
- BashExecSilently: |
OPENER="$(which xdg-open)"
${OPENER:-open} "${XPLR_FOCUS_PATH:?}" &> /dev/null
- SwitchMode: default
on_alphabet: null
on_number: null
on_special_character: null
default:
help: null
messages:
- SwitchMode: default
number:
name: number
help: null
extra_help: null
key_bindings:
remaps:
j: down
k: up
on_key:
backspace:
help: remove last character
messages:
- RemoveInputBufferLastCharacter
ctrl-w:
help: remove last word
messages:
- RemoveInputBufferLastWord
ctrl-u:
help: remove line
messages:
- SetInputBuffer: ""
ctrl-c:
help: terminate
messages:
- Terminate
down:
help: to down
messages:
- FocusNextByRelativeIndexFromInput
- SwitchMode: default
enter:
help: to index
messages:
- FocusByIndexFromInput
- SwitchMode: default
up:
help: to up
messages:
- FocusPreviousByRelativeIndexFromInput
- SwitchMode: default
on_alphabet: null
on_number:
help: input
messages:
- BufferInputFromKey
on_special_character: null
default:
help: null
messages:
- SwitchMode: default
delete:
name: delete
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
d:
help: delete
messages:
- BashExec: |
(while IFS= read -r line; do
if [ -d "$line" ]; then
if rmdir -v "${line:?}"; then
echo "LogSuccess: $line deleted" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to delete $line" >> "${XPLR_PIPE_MSG_IN:?}"
fi
else
if rm -v "${line:?}"; then
echo "FocusNext" >> "${XPLR_PIPE_MSG_IN:?}"
echo "LogSuccess: $line deleted" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to delete $line" >> "${XPLR_PIPE_MSG_IN:?}"
fi
fi
done < "${XPLR_PIPE_RESULT_OUT:?}")
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
read -p "[enter to continue]"
- SwitchMode: default
D:
help: force delete
messages:
- BashExec: |
(while IFS= read -r line; do
if rm -rfv "${line:?}"; then
echo "FocusNext" >> "${XPLR_PIPE_MSG_IN:?}"
echo "LogSuccess: $line deleted" >> "${XPLR_PIPE_MSG_IN:?}"
else
echo "LogError: Failed to delete $line" >> "${XPLR_PIPE_MSG_IN:?}"
fi
done < "${XPLR_PIPE_RESULT_OUT:?}")
echo Explore >> "${XPLR_PIPE_MSG_IN:?}"
read -p "[enter to continue]"
- SwitchMode: default
- Explore
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- SwitchMode: default
action:
name: action to
help: null
extra_help: null
key_bindings:
remaps: {}
on_number:
help: go to index
messages:
- ResetInputBuffer
- SwitchMode: number
- BufferInputFromKey
on_key:
"!":
help: shell
messages:
- Call:
command: bash
- Explore
- SwitchMode: default
c:
help: create
messages:
- SwitchMode: create
e:
help: open in editor
messages:
- BashExec: |
${EDITOR:-vi} "${XPLR_FOCUS_PATH:?}"
- SwitchMode: default
s:
help: selection operations
messages:
- SwitchMode: selection ops
l:
help: logs
messages:
- BashExec: |
cat "${XPLR_PIPE_LOGS_OUT}"
read -p "[enter to continue]"
- SwitchMode: default
ctrl-c:
help: terminate
messages:
- Terminate
default:
messages:
- SwitchMode: default
search:
name: search
help: null
extra_help: null
key_bindings:
remaps: {}
on_key:
backspace:
help: remove last character
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- RemoveInputBufferLastCharacter
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-w:
help: remove last word
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- RemoveInputBufferLastWord
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-u:
help: remove line
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- SetInputBuffer: ""
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
ctrl-c:
help: terminate
messages:
- Terminate
down:
help: down
messages:
- FocusNext
enter:
help: focus
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- SwitchMode: default
- Explore
esc:
help: cancel
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- SwitchMode: default
- Explore
left:
help: back
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- Back
- SetInputBuffer: ''
- Explore
right:
help: enter
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- Enter
- SetInputBuffer: ''
- Explore
up:
help: up
messages:
- FocusPrevious
on_alphabet: null
on_number: null
on_special_character: null
default:
help: null
messages:
- RemoveNodeFilterFromInput: IRelativePathDoesContain
- BufferInputFromKey
- AddNodeFilterFromInput: IRelativePathDoesContain
- Explore
custom: {}