73 lines
2.1 KiB
Bash
Executable file
73 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# A simple utility script for neomutt to use your favorite cli
|
|
# file manager to work with files in neomutt.
|
|
# Can add attachments to emails or save attachments in a chosen directory.
|
|
#
|
|
# Use it as `neomutt-filer attach <my-base-dir>`
|
|
# or `neomutt-filer saveto <my-base-dir>`
|
|
#
|
|
# Can be bound to neomutt macros like the following:
|
|
#
|
|
# macro compose A '<enter-command>source "neomutt-filer attach"|<enter>' "Attach with file manager"
|
|
# macro attach S '<enter-command>source "neomutt-filer saveto"|<enter>' "Save attachment to dir"
|
|
#
|
|
# read more at the following GH issues:
|
|
# https://github.com/neomutt/neomutt/issues/1515 -- switch folders with external program
|
|
# https://github.com/neomutt/neomutt/issues/1669 -- attach files with fzf
|
|
|
|
_file_picker() {
|
|
if command -v vifm >/dev/null 2>&1; then
|
|
vifm --choose-files - "$@"
|
|
# yazi & ranger untested
|
|
elif command -v yazi >/dev/null 2>&1; then
|
|
yazi "$@" --chooser-file -
|
|
elif command -v ranger >/dev/null 2>&1; then
|
|
ranger --choosefiles - "$@"
|
|
elif command -v fzf >/dev/null 2>&1; then
|
|
fzf -m --prompt='Choose one/multiple file(s) to attach >' "$@"
|
|
fi
|
|
}
|
|
_dir_picker() {
|
|
if command -v vifm >/dev/null 2>&1; then
|
|
vifm --choose-dir - --on-choose exit "$@"
|
|
# yazi & ranger untested
|
|
# elif command -v yazi >/dev/null 2>&1; then
|
|
# yazi "$@" --chooser-file -
|
|
# elif command -v ranger >/dev/null 2>&1; then
|
|
# ranger --choosefiles - "$@"
|
|
elif command -v fzf >/dev/null 2>&1; then
|
|
find "$@" -type d -print | fzf --prompt='Choose dir >'
|
|
fi
|
|
}
|
|
|
|
attachfile() {
|
|
_file_picker "$@" |
|
|
while IFS=$'\n' read -r attachment; do
|
|
printf "push '<attach-file>%s<enter>'\n" "$attachment"
|
|
done
|
|
}
|
|
|
|
savetodir() {
|
|
_dir_picker "$@" | xargs printf "push '<save-entry>%s<enter>y<enter>'\n"
|
|
}
|
|
|
|
_usage() {
|
|
echo """
|
|
Usage: neomutt-filer <subcommand> [options...]
|
|
Subcommands:
|
|
attach Pick files to attach
|
|
saveto Pick a directory to save into
|
|
"""
|
|
}
|
|
|
|
case "${1:-}" in
|
|
attach)
|
|
shift
|
|
attachfile "$@"
|
|
;;
|
|
saveto)
|
|
shift
|
|
savetodir "$@"
|
|
;;
|
|
-h | --help | *) _usage ;;
|
|
esac
|