Support the Terminal=true desktop entry specification

This commit is contained in:
speedie 2023-06-16 04:39:09 +02:00
parent c8b643dcce
commit b7a4ef5a99

View file

@ -49,6 +49,7 @@ EXECFILE="${EXECFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.exec}"
ICONFILE="${ICONFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.icon}" ICONFILE="${ICONFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.icon}"
DESCFILE="${DESCFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.desc}" DESCFILE="${DESCFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.desc}"
FILEFILE="${FILEFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.file}" FILEFILE="${FILEFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.file}"
TERMFILE="${TERMFILE:-${XDG_CACHE_HOME:-$HOME/.cache}/.term}"
# arrays containing entries # arrays containing entries
declare -a it_title declare -a it_title
@ -56,6 +57,7 @@ declare -a it_icon
declare -a it_exec declare -a it_exec
declare -a it_file declare -a it_file
declare -a it_desc declare -a it_desc
declare -a it_term
# arrays containing arguments # arrays containing arguments
declare -a rl_fm declare -a rl_fm
@ -504,16 +506,17 @@ print_desktop_list() {
it_icon=() it_icon=()
it_exec=() it_exec=()
it_file=() it_file=()
it_term=()
# print data from entries # print data from entries
if [ "$cfiles" = "false" ]; then if [ "$cfiles" = "false" ]; then
printf "Writing cache files because none exist.\nTitle file: '%s'\nDescription file: '%s'\nIcon file: '%s'\nExec file: '%s'\nFile file: '%s'\n" "$TITLEFILE" "$DESCFILE" "$ICONFILE" "$EXECFILE" "$FILEFILE" >> "$LOGFILE" printf "Writing cache files because none exist.\nTitle file: '%s'\nDescription file: '%s'\nIcon file: '%s'\nExec file: '%s'\nFile file: '%s'\nTerm file: '%s'\n" "$TITLEFILE" "$DESCFILE" "$ICONFILE" "$EXECFILE" "$FILEFILE" "$TERMFILE" >> "$LOGFILE"
entry_c="$(find "${desktopdir[@]}" -type f | wc -l)" entry_c="$(find "${desktopdir[@]}" -type f | wc -l)"
cached_c="$(find "${tmpdir[@]}" -type f | wc -l)" cached_c="$(find "${tmpdir[@]}" -type f | wc -l)"
cached="$(find "${tmpdir[@]}" -type f)"; cached="$(find "${tmpdir[@]}" -type f)";
rm -f "$TITLEFILE" "$ICONFILE" "$DESCFILE" "$EXECFILE" "$FILEFILE" rm -f "$TITLEFILE" "$ICONFILE" "$DESCFILE" "$EXECFILE" "$FILEFILE" "$TERMFILE"
for i in $(seq "$cached_c"); do for i in $(seq "$cached_c"); do
# current file # current file
@ -527,18 +530,23 @@ print_desktop_list() {
it_icon[i]="$(sed "4q;d" "$cur_file" | sed "s/Icon://g")" it_icon[i]="$(sed "4q;d" "$cur_file" | sed "s/Icon://g")"
it_exec[i]="$(sed "3q;d" "$cur_file" | sed "s/Executable://g")" it_exec[i]="$(sed "3q;d" "$cur_file" | sed "s/Executable://g")"
it_file[i]="$cur_file" it_file[i]="$cur_file"
it_term[i]="false"
grep -q "Term:true" "$cur_file" && it_term[i]="true"
printf "%s\n" "${it_title[i]}" >> "$TITLEFILE" printf "%s\n" "${it_title[i]}" >> "$TITLEFILE"
printf "%s\n" "${it_icon[i]}" >> "$ICONFILE" printf "%s\n" "${it_icon[i]}" >> "$ICONFILE"
printf "%s\n" "${it_desc[i]}" >> "$DESCFILE" printf "%s\n" "${it_desc[i]}" >> "$DESCFILE"
printf "%s\n" "${it_exec[i]}" >> "$EXECFILE" printf "%s\n" "${it_exec[i]}" >> "$EXECFILE"
printf "%s\n" "${it_file[i]}" >> "$FILEFILE" printf "%s\n" "${it_file[i]}" >> "$FILEFILE"
printf "%s\n" "${it_term[i]}" >> "$TERMFILE"
printf "%d. Title - %s\n" "${i}" "${it_title[i]}" >> "$LOGFILE" printf "%d. Title - %s\n" "${i}" "${it_title[i]}" >> "$LOGFILE"
printf "%d. Description - %s\n" "${i}" "${it_desc[i]}" >> "$LOGFILE" printf "%d. Description - %s\n" "${i}" "${it_desc[i]}" >> "$LOGFILE"
printf "%d. Executable - %s\n" "${i}" "${it_exec[i]}" >> "$LOGFILE" printf "%d. Executable - %s\n" "${i}" "${it_exec[i]}" >> "$LOGFILE"
printf "%d. Icon - %s\n" "${i}" "${it_icon[i]}" >> "$LOGFILE" printf "%d. Icon - %s\n" "${i}" "${it_icon[i]}" >> "$LOGFILE"
printf "%d. File - %s\n" "${i}" "${it_file[i]}" >> "$LOGFILE" printf "%d. File - %s\n" "${i}" "${it_file[i]}" >> "$LOGFILE"
printf "%d. Term - %s\n" "${i}" "${it_term[i]}" >> "$LOGFILE"
done done
print_desktop_list print_desktop_list
@ -602,20 +610,33 @@ exec_program() {
it_exec+=("$p") it_exec+=("$p")
done < "$EXECFILE" done < "$EXECFILE"
# read term
while read -r p; do
it_term+=("$p")
done < "$TERMFILE"
# set exec # set exec
[ -z "${it_exec[1]}" ] && printf "Executable array is empty.\n" >> "$LOGFILE" [ -z "${it_exec[1]}" ] && printf "Executable array is empty.\n" >> "$LOGFILE"
for i in "${!it_title[@]}"; do for i in "${!it_title[@]}"; do
if [ "${it_title[i]}" = "$menusel" ]; then if [ "${it_title[i]}" = "$menusel" ]; then
exec="${it_exec[i]}" exec="${it_exec[i]}"
term="${it_term[i]}"
printf "Executable %s is: '%s'\n" "$i" "${it_exec[i]}" >> "$LOGFILE"
printf "Executable %s term status: '%s'\n" "$i" "${it_term[i]}" >> "$LOGFILE"
break; break;
else else
printf "Executable %s is: '%s'\n" "$i" "${it_exec[i]}" >> "$LOGFILE" printf "Executable %s is: '%s'\n" "$i" "${it_exec[i]}" >> "$LOGFILE"
printf "Executable %s term status: '%s'\n" "$i" "${it_term[i]}" >> "$LOGFILE"
fi fi
done done
# finally run the program # finally run the program
if [ -n "$exec" ]; then if [ -n "$exec" ] && [ "$term" = "false" ]; then
${SHELL:-/bin/sh} -c "$exec" & ${SHELL:-/bin/sh} -c "$exec" &
elif [ -n "$exec" ] && [ "$term" = "true" ]; then
${TERMINAL} -e "$exec" &
else else
printf "No executable found. Try clearing cache." >> "$LOGFILE" printf "No executable found. Try clearing cache." >> "$LOGFILE"
fi fi
@ -661,16 +682,12 @@ cache_desktop() {
return return
fi fi
else else
if [ "$clearcache" != "true" ] && [ -f "$TITLEFILE" ] && [ -f "$ICONFILE" ] && [ -f "$EXECFILE" ] && [ -f "$FILEFILE" ] && [ -f "$DESCFILE" ]; then if [ "$clearcache" != "true" ] && [ -f "$TITLEFILE" ] && [ -f "$ICONFILE" ] && [ -f "$EXECFILE" ] && [ -f "$FILEFILE" ] && [ -f "$DESCFILE" ] && [ -f "$TERMFILE" ]; then
return; return;
fi fi
fi fi
[ -f "$TITLEFILE" ] && rm -f "$TITLEFILE" rm -f "${TITLEFILE}" "${FILEFILE}" "${EXECFILE}" "${ICONFILE}" "${DESCFILE}" "${TERMFILE}"
[ -f "$ICONFILE" ] && rm -f "$ICONFILE"
[ -f "$EXECFILE" ] && rm -f "$EXECFILE"
[ -f "$FILEFILE" ] && rm -f "$FILEFILE"
[ -f "$DESCFILE" ] && rm -f "$DESCFILE"
# find # find
entry="$(find "${desktopdir[@]}" -type f)" entry="$(find "${desktopdir[@]}" -type f)"
@ -689,13 +706,15 @@ cache_desktop() {
name="$(grep "Name=" "$cur_file" | grep -v Generic | head -n 1 | sed "s/Name=//g")" name="$(grep "Name=" "$cur_file" | grep -v Generic | head -n 1 | sed "s/Name=//g")"
desc="$(grep "GenericName=" "$cur_file" | sed "s/GenericName=//g")" desc="$(grep "GenericName=" "$cur_file" | sed "s/GenericName=//g")"
grep -q "Terminal=true" "$cur_file" && term="true" || term="false"
# icon name # icon name
icon_name="$(grep "Icon=" "$cur_file" | head -n 1 | sed "s/Icon=//g")" icon_name="$(grep "Icon=" "$cur_file" | head -n 1 | sed "s/Icon=//g")"
icon="$(printf "%s" "$icons" | grep "/${icon_name}[.]" | head -n 1)" && [ ! -f "$icon" ] && icon="" icon="$(printf "%s" "$icons" | grep "/${icon_name}[.]" | head -n 1)" && [ ! -f "$icon" ] && icon=""
# write the file # write the file
printf "%s\n%s\n%s\n%s\n" "Name:$name" "Description:$desc" "Executable:$exec" "Icon:$icon" > "${tmpdir[*]}/$(basename "$cur_file").entry" printf "%s\n%s\n%s\n%s\n%s\n" "Name:$name" "Description:$desc" "Executable:$exec" "Icon:$icon" "Term:$term" > "${tmpdir[*]}/$(basename "$cur_file").entry"
printf "Entry %s: %s\n%s\n%s\n%s\n" "$i" "Name:$name" "Description:$desc" "Executable:$exec" "Icon:$icon" >> "$LOGFILE" printf "Entry %s:\n%s\n%s\n%s\n%s\n%s\n\n" "$i" "Name: $name" "Description: $desc" "Executable: $exec" "Icon: $icon" "Term: $term" >> "$LOGFILE"
done done
# scan # scan
@ -706,7 +725,7 @@ cache_desktop() {
clear_cache() { clear_cache() {
rm -rf "${tmpdir[*]}" rm -rf "${tmpdir[*]}"
rm -f "${TITLEFILE}" "${FILEFILE}" "${EXECFILE}" "${ICONFILE}" "${DESCFILE}" rm -f "${TITLEFILE}" "${FILEFILE}" "${EXECFILE}" "${ICONFILE}" "${DESCFILE}" "${TERMFILE}"
} }
main() { main() {