diff options
| author | Dylan Araps <dylan.araps@gmail.com> | 2026-02-28 21:52:26 +0200 |
|---|---|---|
| committer | Dylan Araps <dylan.araps@gmail.com> | 2026-02-28 21:52:26 +0200 |
| commit | 67a1c24a8661fdcbc48f72f7b65521772065d305 (patch) | |
| tree | 33c1fbfe2452c23773de046b1127f4920aa5a49f /script | |
| parent | 4fb29c95c61256f78e4b501a3c550b4c92a92a4e (diff) | |
dfm: add ranger style bulk rename
Also the ability to embed scripts within dfm.
Diffstat (limited to 'script')
| -rwxr-xr-x | script/bulk-rename | 47 | ||||
| -rwxr-xr-x | script/opener_ext | 27 | ||||
| -rwxr-xr-x | script/opener_mime | 33 |
3 files changed, 107 insertions, 0 deletions
diff --git a/script/bulk-rename b/script/bulk-rename new file mode 100755 index 0000000..3bd6c85 --- /dev/null +++ b/script/bulk-rename @@ -0,0 +1,47 @@ +#!/bin/sh -eu +# +# Interactive bulk file rename using $EDITOR. +# +# Copyright (c) 2026 Dylan Araps +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +case $# in 0) exit; esac +f=${TMPDIR:=/tmp}/.dfm-brn-$$-$# +e() { rm -f "$f" || :; exit "$1"; } +( + printf '%s\n' "$@" > "$f" && + "${EDITOR:=vi}" "$f" && + exec 3<"$f" && + for _ do + IFS= read -r l <&3 + set -- "$@" "mv -f -- '$1' '${l:?line mismatch in rename file}'" + shift + done && { + read -r l <&3 && { + echo "$0: 39: line mismatch in rename file" >&2 + return 1 + } + printf '%s\n' '# This file will be executed when the editor is closed.' \ + '# Clear the file to abort.' "$@" + } > "$f" && + "$EDITOR" "$f" && . "$f" && e 0 +) || e 1 + diff --git a/script/opener_ext b/script/opener_ext new file mode 100755 index 0000000..ce1699a --- /dev/null +++ b/script/opener_ext @@ -0,0 +1,27 @@ +#!/bin/sh -feu +# +# Example DFM_OPENER script using file extension. +# + +case $1 in + *.mkv | *.webm | *.mp4 | *.avi) + exec mpv -- "$1" + ;; + + *.opus | *.mp3 | *.wav | *.flac | *.ogg) + exec mus --no-shuffle -- "$1" + ;; + + *.jpg | *.jpeg | *.gif | *.png | *.CR2) + exec mpv --pause -- "$1" + ;; + + *.svg) + exec inkscape "$1" + ;; + + *?*) + exec "${EDITOR:-vim}" "$1" + ;; +esac + diff --git a/script/opener_mime b/script/opener_mime new file mode 100755 index 0000000..2f7bd52 --- /dev/null +++ b/script/opener_mime @@ -0,0 +1,33 @@ +#!/bin/sh -feu +# +# Example DFM_OPENER script using mimetype. +# + +mime_type=$(file -bi "$1") + +case $mime_type in + audio/*) + exec mpv --no-video "$1" + ;; + + video/*) + exec mpv "$1" + ;; + + image/*) + exec gimp "$1" + ;; + + text/html* | application/pdf*) + exec firefox "$1" + ;; + + text/*) + exec "${EDITOR:=vi}" "$1" + ;; + + *?*) + printf 'error: unhandled mime-type %s\n' "$mime_type" >&2 + ;; +esac + |