version: v0.7.2 layouts: custom: {} builtin: default: Horizontal: config: horizontal_margin: 0 vertical_margin: 0 constraints: - Percentage: 70 - Percentage: 30 splits: - Vertical: config: margin: 0 constraints: - Length: 3 - Min: 1 - Length: 3 splits: - SortAndFilter: ~ - Table: ~ - InputAndLogs: ~ - Vertical: config: constraints: - Percentage: 50 - Percentage: 50 splits: - Selection: ~ - HelpMenu: ~ no_help: Horizontal: config: constraints: - Percentage: 70 - Percentage: 30 splits: - Vertical: config: constraints: - Length: 3 - Min: 1 - Length: 3 splits: - SortAndFilter: ~ - Table: ~ - InputAndLogs: ~ - Selection: ~ no_selection: Horizontal: config: constraints: - Percentage: 70 - Percentage: 30 splits: - Vertical: config: constraints: - Length: 3 - Min: 1 - Length: 3 splits: - SortAndFilter: ~ - Table: ~ - InputAndLogs: ~ - HelpMenu: ~ no_help_no_selection: Vertical: config: constraints: - Length: 3 - Min: 1 - Length: 3 splits: - SortAndFilter: ~ - Table: ~ - InputAndLogs: ~ general: show_hidden: false read_only: false initial_layout: default initial_mode: default 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_modifiers: null sub_modifiers: null - format: '╭──── path' - format: size - format: type style: add_modifiers: [Bold] 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}} - format: '{{#unless isDir}}{{humansize size}}{{/unless}}' - format: '{{#if isSymlink}}{{{symlink.mimeEssence}}}{{else}}{{{mimeEssence}}}{{/if}}' height: 0 tree: - format: ├─ - format: ├─ - format: ╰─ col_spacing: 0 col_widths: - Percentage: 10 - Percentage: 50 - Percentage: 20 - Percentage: 20 default_ui: prefix: ' ' suffix: '' focus_ui: prefix: ▸[ suffix: ']' style: fg: Blue add_modifiers: [Bold] selection_ui: prefix: ' {' suffix: '}' style: fg: LightGreen add_modifiers: [Bold] panel_ui: default: borders: [Top, Right, Bottom, Left] sort_and_filter_ui: separator: format: " › " style: add_modifiers: [Dim] default_identifier: style: add_modifiers: [Bold] 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 add_modifiers: [Bold] meta: icon: ð file: meta: icon: ƒ symlink: style: fg: Magenta add_modifiers: [Italic] 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]" - SwitchModeBuiltin: 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]" - SwitchModeBuiltin: default ctrl-c: help: terminate messages: - Terminate default: messages: - SwitchModeBuiltin: 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 - SwitchModeBuiltin: 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: - SwitchModeBuiltin: 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 - SwitchModeBuiltin: 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: - SwitchModeBuiltin: 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: - SwitchModeBuiltin: create directory - SetInputBuffer: '' esc: help: cancel messages: - SwitchModeBuiltin: default f: help: create file messages: - SwitchModeBuiltin: create file - SetInputBuffer: '' on_alphabet: null on_number: null on_special_character: null default: help: null messages: - SwitchModeBuiltin: 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 - SwitchModeBuiltin: 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: - SwitchModeBuiltin: default ctrl-c: help: terminate messages: - Terminate default: messages: - BufferInputFromKey relative_path_does_not_contain: name: relative path does not contain key_bindings: on_key: backspace: help: remove last character messages: - RemoveNodeFilterFromInput: IRelativePathDoesNotContain - RemoveInputBufferLastCharacter - AddNodeFilterFromInput: IRelativePathDoesNotContain - Explore ctrl-w: help: remove last word messages: - RemoveNodeFilterFromInput: IRelativePathDoesNotContain - RemoveInputBufferLastWord - AddNodeFilterFromInput: IRelativePathDoesNotContain - Explore ctrl-u: help: remove line messages: - RemoveNodeFilterFromInput: IRelativePathDoesNotContain - SetInputBuffer: "" - AddNodeFilterFromInput: IRelativePathDoesNotContain - Explore enter: help: apply filter messages: - SwitchModeBuiltin: default esc: help: cancel messages: - RemoveNodeFilterFromInput: IRelativePathDoesNotContain - SwitchModeBuiltin: default - Explore ctrl-c: help: terminate messages: - Terminate default: messages: - RemoveNodeFilterFromInput: IRelativePathDoesNotContain - BufferInputFromKey - AddNodeFilterFromInput: IRelativePathDoesNotContain - Explore relative_path_does_contain: name: relative path does contain key_bindings: 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 enter: help: apply filter messages: - SwitchModeBuiltin: default esc: help: cancel messages: - RemoveNodeFilterFromInput: IRelativePathDoesContain - SwitchModeBuiltin: default - Explore ctrl-c: help: terminate messages: - Terminate default: help: null messages: - RemoveNodeFilterFromInput: IRelativePathDoesContain - BufferInputFromKey - AddNodeFilterFromInput: IRelativePathDoesContain - Explore filter: name: filter key_bindings: on_key: backspace: help: remove last filter messages: - RemoveLastNodeFilter - Explore r: help: relative does contain messages: - SwitchModeBuiltin: relative_path_does_contain - SetInputBuffer: "" - AddNodeFilterFromInput: IRelativePathDoesContain - Explore R: help: relative does not contain messages: - SwitchModeBuiltin: relative_path_does_not_contain - SetInputBuffer: "" - AddNodeFilterFromInput: IRelativePathDoesNotContain - Explore ctrl-r: help: reset filters messages: - ResetNodeFilters - Explore ctrl-u: help: clear filters messages: - ClearNodeFilters - Explore ctrl-c: help: terminate messages: - Terminate default: messages: - SwitchModeBuiltin: default 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-u: 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: - SwitchModeBuiltin: 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: - SwitchModeBuiltin: sort f: help: filter messages: - SwitchModeBuiltin: filter .: help: show hidden messages: - ToggleNodeFilter: filter: RelativePathDoesNotStartWith input: . - Explore ':': help: action messages: - SwitchModeBuiltin: action '?': help: global help menu messages: - BashExec: | cat -- "${XPLR_PIPE_GLOBAL_HELP_MENU_OUT}" | ${PAGER:-less} '~': 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: - SwitchModeBuiltin: search - SetInputBuffer: '' - Explore ctrl-w: help: switch layout messages: - SwitchModeBuiltin: switch_layout d: help: delete messages: - SwitchModeBuiltin: delete down: help: down messages: - FocusNext enter: help: quit with result messages: - PrintResultAndQuit g: help: go to messages: - SwitchModeBuiltin: go to left: help: back messages: - Back r: help: rename messages: - SwitchModeBuiltin: 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/unselect 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-u: 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 - SwitchModeBuiltin: number - BufferInputFromKey on_special_character: null default: help: null messages: - SwitchModeBuiltin: 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 - SwitchModeBuiltin: default f: help: follow symlink messages: - FollowSymlink - SwitchModeBuiltin: default x: help: open in gui messages: - BashExecSilently: | if [ -z "$OPENER" ]; then if command -v xdg-open; then OPENER=xdg-open elif command -v open; then OPENER=open else echo 'LogError: $OPENER not found' >> "${XPLR_PIPE_MSG_IN:?}" exit 1 fi fi $OPENER "${XPLR_FOCUS_PATH:?}" &> /dev/null & - SwitchModeBuiltin: default - ClearScreen - Refresh on_alphabet: null on_number: null on_special_character: null default: help: null messages: - SwitchModeBuiltin: 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 - SwitchModeBuiltin: default enter: help: to index messages: - FocusByIndexFromInput - SwitchModeBuiltin: default up: help: to up messages: - FocusPreviousByRelativeIndexFromInput - SwitchModeBuiltin: default on_alphabet: null on_number: help: input messages: - BufferInputFromKey on_special_character: null default: help: null messages: - SwitchModeBuiltin: 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]" - SwitchModeBuiltin: 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]" - SwitchModeBuiltin: default - Explore ctrl-c: help: terminate messages: - Terminate default: messages: - SwitchModeBuiltin: default action: name: action to help: null extra_help: null key_bindings: remaps: {} on_number: help: go to index messages: - ResetInputBuffer - SwitchModeBuiltin: number - BufferInputFromKey on_key: "!": help: shell messages: - Call: command: bash args: - "-i" - Explore - SwitchModeBuiltin: default c: help: create messages: - SwitchModeBuiltin: create e: help: open in editor messages: - BashExec: | ${EDITOR:-vi} -- "${XPLR_FOCUS_PATH:?}" - SwitchModeBuiltin: default s: help: selection operations messages: - SwitchModeBuiltin: selection_ops l: help: logs messages: - BashExec: | cat -- "${XPLR_PIPE_LOGS_OUT}" | ${PAGER:-less} - SwitchModeBuiltin: default ctrl-c: help: terminate messages: - Terminate default: messages: - SwitchModeBuiltin: default search: name: search help: null extra_help: null key_bindings: remaps: ctrl-n: down ctrl-p: up on_key: tab: help: toggle selection messages: - ToggleSelection - FocusNext 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 - SwitchModeBuiltin: default - Explore esc: help: cancel messages: - RemoveNodeFilterFromInput: IRelativePathDoesContain - SwitchModeBuiltin: 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 switch_layout: name: switch layout help: null extra_help: null key_bindings: on_key: 1: help: default messages: - SwitchLayoutBuiltin: default - SwitchMode: default 2: help: no help menu messages: - SwitchLayoutBuiltin: no_help - SwitchMode: default 3: help: no selection panel messages: - SwitchLayoutBuiltin: no_selection - SwitchMode: default 4: help: no help or selection messages: - SwitchLayoutBuiltin: no_help_no_selection - SwitchMode: default ctrl-c: help: terminate messages: - Terminate default: messages: - SwitchMode: default custom: {}