AutoYADM commit: 2025-02-02 22:00:02
This commit is contained in:
parent
6fcf1e36a5
commit
d54b0024dd
2 changed files with 105 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
||||||
[filechooser]
|
[filechooser]
|
||||||
cmd=yazi-wrapper.sh
|
cmd=/usr/local/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
|
||||||
default_dir=$HOME/Downloads
|
default_dir=$HOME
|
||||||
; Uncomment and edit the line below to change the terminal emulator command
|
; Uncomment and edit the line below to change the terminal emulator command
|
||||||
; env=TERMCMD=foot
|
env=TERMCMD=foot
|
||||||
|
|
102
.config/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
Executable file
102
.config/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh
Executable file
|
@ -0,0 +1,102 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# This wrapper script is invoked by xdg-desktop-portal-termfilechooser.
|
||||||
|
#
|
||||||
|
# Inputs:
|
||||||
|
# 1. "1" if multiple files can be chosen, "0" otherwise.
|
||||||
|
# 2. "1" if a directory should be chosen, "0" otherwise.
|
||||||
|
# 3. "0" if opening files was requested, "1" if writing to a file was
|
||||||
|
# requested. For example, when uploading files in Firefox, this will be "0".
|
||||||
|
# When saving a web page in Firefox, this will be "1".
|
||||||
|
# 4. If writing to a file, this is recommended path provided by the caller. For
|
||||||
|
# example, when saving a web page in Firefox, this will be the recommended
|
||||||
|
# path Firefox provided, such as "~/Downloads/webpage_title.html".
|
||||||
|
# Note that if the path already exists, we keep appending "_" to it until we
|
||||||
|
# get a path that does not exist.
|
||||||
|
# 5. The output path, to which results should be written.
|
||||||
|
#
|
||||||
|
# Output:
|
||||||
|
# The script should print the selected paths to the output path (argument #5),
|
||||||
|
# one path per line.
|
||||||
|
# If nothing is printed, then the operation is assumed to have been canceled.
|
||||||
|
|
||||||
|
multiple="$1"
|
||||||
|
directory="$2"
|
||||||
|
save="$3"
|
||||||
|
path="$4"
|
||||||
|
out="$5"
|
||||||
|
cmd="yazi"
|
||||||
|
# "wezterm start --always-new-process" if you use wezterm
|
||||||
|
termcmd="${TERMCMD:-foot}"
|
||||||
|
# change this to "/tmp/xxxxxxx/.last_selected" if you only want to save last selected location
|
||||||
|
# in session (flushed after reset device)
|
||||||
|
last_selected_path_cfg="${XDG_STATE_HOME:-$HOME/.local/state}/xdg-desktop-portal-termfilechooser/last_selected"
|
||||||
|
mkdir -p "$(dirname "$last_selected_path_cfg")"
|
||||||
|
if [ ! -f "$last_selected_path_cfg" ]; then
|
||||||
|
touch "$last_selected_path_cfg"
|
||||||
|
fi
|
||||||
|
last_selected="$(cat "$last_selected_path_cfg")"
|
||||||
|
|
||||||
|
# Restore last selected path
|
||||||
|
if [ -d "$last_selected" ]; then
|
||||||
|
save_to_file=""
|
||||||
|
if [ "$save" = "1" ]; then
|
||||||
|
save_to_file="$(basename "$path")"
|
||||||
|
path="${last_selected}/${save_to_file}"
|
||||||
|
else
|
||||||
|
path="${last_selected}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -z "$path" ]]; then
|
||||||
|
path="$HOME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$save" = "1" ]; then
|
||||||
|
# Save/download file
|
||||||
|
printf '%s' 'xdg-desktop-portal-termfilechooser saving files tutorial
|
||||||
|
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!!! === WARNING! === !!!
|
||||||
|
!!! The contents of *whatever* file you open last in !!!
|
||||||
|
!!! yazi will be *overwritten*! !!!
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
Instructions:
|
||||||
|
1) Move this file wherever you want.
|
||||||
|
2) Rename the file if needed.
|
||||||
|
3) Confirm your selection by opening the file, for
|
||||||
|
example by pressing <Enter>.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
1) This file is provided for your convenience. You
|
||||||
|
could delete it and choose another file to overwrite
|
||||||
|
that.
|
||||||
|
2) If you quit yazi without opening a file, this file
|
||||||
|
will be removed and the save operation aborted.
|
||||||
|
' >"$path"
|
||||||
|
set -- --chooser-file="$out" --cwd-file="$last_selected_path_cfg" "$path"
|
||||||
|
elif [ "$directory" = "1" ]; then
|
||||||
|
# upload files from a directory
|
||||||
|
set -- --cwd-file="$out" "$path"
|
||||||
|
elif [ "$multiple" = "1" ]; then
|
||||||
|
# upload multiple files
|
||||||
|
set -- --chooser-file="$out" --cwd-file="$last_selected_path_cfg" "$path"
|
||||||
|
else
|
||||||
|
# upload only 1 file
|
||||||
|
set -- --chooser-file="$out" --cwd-file="$last_selected_path_cfg" "$path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$termcmd -- $cmd "$@"
|
||||||
|
|
||||||
|
# Save the last selected path for the next time, only upload files from a directory operation is need
|
||||||
|
# because `--cwd-file` will do the same thing for files(s) upload and download operations
|
||||||
|
if [ "$save" = "0" ] && [ "$directory" = "1" ]; then
|
||||||
|
echo "$(head -n 1 <"$out")" >"$last_selected_path_cfg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove file if the save operation aborted
|
||||||
|
if [ "$save" = "1" ] && [ ! -s "$out" ]; then
|
||||||
|
rm "$path"
|
||||||
|
fi
|
Loading…
Add table
Add a link
Reference in a new issue