Add the ability to run a command for the bookmark.

Typing in @GNU:xdg-open https://gnu.org will create a bookmark called
GNU which opens up gnu.org in your browser. '@' will show bookmarks and
'@c' will clear bookmarks.
This commit is contained in:
Jacob 2023-06-25 19:43:17 +02:00
parent 53dca773a7
commit 88bbfa2cb9

View file

@ -300,21 +300,25 @@ parse() {
command -v run_single_char_func > /dev/null && run_single_char_func "${sout:0:1}" command -v run_single_char_func > /dev/null && run_single_char_func "${sout:0:1}"
command -v run_output_func > /dev/null && run_output_func "${sout}" command -v run_output_func > /dev/null && run_output_func "${sout}"
# parse
case "${sout:0:1}" in
"#") EXEC="term" ;;
"?") EXEC="man" ;;
"@") EXEC="mark" ;;
esac
printf "Run launcher output: '%s'\n" "$sout" >> "$LOGFILE" printf "Run launcher output: '%s'\n" "$sout" >> "$LOGFILE"
# check for keywords
printf "%s" "$sout" | grep -qE "$WEB_GREP" && EXEC=web
printf "%s" "$sout" | grep -qE "$MAGNET_GREP" && EXEC=torrent
case "$(printf "%s" "$sout" | awk '{ print $1 }')" in case "$(printf "%s" "$sout" | awk '{ print $1 }')" in
"magnet") EXEC=torrent ;; "magnet") EXEC=torrent ;;
"www") EXEC=web ;; "www") EXEC=web ;;
"?") ;; "?") ;;
esac esac
# parse
case "${sout:0:1}" in
"#") EXEC="term" ;;
"?") EXEC="man" ;;
"@") EXEC="mark" ;;
esac
case "$sout" in case "$sout" in
"?") "?")
print_help "$@" print_help "$@"
@ -333,10 +337,6 @@ parse() {
printf "Type: '%s'\n" "$EXEC" >> "$LOGFILE" printf "Type: '%s'\n" "$EXEC" >> "$LOGFILE"
# check for keywords
printf "%s" "$sout" | grep -qE "$WEB_GREP" && EXEC=web
printf "%s" "$sout" | grep -qE "$MAGNET_GREP" && EXEC=torrent
exec_cmd "$args" exec_cmd "$args"
[ "$MULTISELECT" != "true" ] && break [ "$MULTISELECT" != "true" ] && break
done < /tmp/spmenu_out done < /tmp/spmenu_out
@ -347,7 +347,7 @@ bookmark_path() {
command -v run_file_bookmark_list_func > /dev/null && \ command -v run_file_bookmark_list_func > /dev/null && \
run_file_bookmark_list_func "$file" run_file_bookmark_list_func "$file"
printf "%s\n" "$file" printf "%s\n" "${file%%:*}"
done < "$BOOKMARKFILE" done < "$BOOKMARKFILE"
} }
@ -358,27 +358,10 @@ print_bookmarks() {
command -v run_pre_bookmark_list_func > /dev/null && run_pre_bookmark_list_func "$sout" command -v run_pre_bookmark_list_func > /dev/null && run_pre_bookmark_list_func "$sout"
command -v run_single_char_pre_bookmark_list_func > /dev/null && run_single_char_pre_bookmark_list_func "${sout:0:1}" command -v run_single_char_pre_bookmark_list_func > /dev/null && run_single_char_pre_bookmark_list_func "${sout:0:1}"
case "${sout:0:1}" in
"#") EXEC="term" ;;
"?") EXEC="man" ;;
"@") EXEC="mark" ;;
esac
printf "Run launcher output: '%s'\n" "$sout" >> "$LOGFILE" printf "Run launcher output: '%s'\n" "$sout" >> "$LOGFILE"
case "$(printf "%s" "$sout" | awk '{ print $1 }')" in sout_e="$(grep -- "$sout" "$BOOKMARKFILE" | tail -n 1)"
"magnet") EXEC=torrent ;; printf "%s\n" "${sout_e#*:}" | ${SHELL:-"/bin/sh"} &
"www") EXEC=web ;;
"?") ;;
esac
printf "Type: '%s'\n" "$EXEC" >> "$LOGFILE"
# check for keywords
printf "%s" "$sout" | grep -qE "$WEB_GREP" && EXEC=web
printf "%s" "$sout" | grep -qE "$MAGNET_GREP" && EXEC=torrent
exec_cmd "$args"
[ "$MULTISELECT" != "true" ] && break [ "$MULTISELECT" != "true" ] && break
done < /tmp/spmenu_out done < /tmp/spmenu_out
@ -399,7 +382,7 @@ exec_cmd() {
# execute it # execute it
case "$EXEC" in case "$EXEC" in
"mark") printf "%s\n" "$sout" | sed "s/@//g" >> "$BOOKMARKFILE"; parse; exit 0 ;; "mark") printf "%s\n" "$sout" | sed -- "s/@//g" >> "$BOOKMARKFILE"; parse; exit 0 ;;
"shell") printf "%s" "$sout" | ${SHELL:-"/bin/sh"} & ;; "shell") printf "%s" "$sout" | ${SHELL:-"/bin/sh"} & ;;
"term") $TERMINAL -e "$(printf "%s" "$sout" | sed "s/#//g")" & ;; "term") $TERMINAL -e "$(printf "%s" "$sout" | sed "s/#//g")" & ;;
"web") $BROWSER "$(printf "%s" "$sout" | sed "s/www //g")" & ;; "web") $BROWSER "$(printf "%s" "$sout" | sed "s/www //g")" & ;;