mirror of
https://github.com/jarun/nnn.git
synced 2024-11-25 04:11:29 +00:00
f3c29fe81a
Most *.desktop entries have same name as their application name so this is not an issue most of the time. However in the case of Neovim, the application name is "Neovim" while the desktop entry is "nvim.desktop" Since dmenu is case sensitive by default this means that searching "neovim" will not show any results since the N is not capitalized and the desktop entry name is "nvim" fzf doesn't have this issue since its case-insensitive/fuzzy by default. Making dmenu case-insensitive solves this. Also fix the indentation to be consistent with the rest of the script.
54 lines
1.4 KiB
Bash
Executable file
54 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
# Description: Sets the xdg-open's default application for the current entry's file
|
|
# type. ${XDG_DATA_DIRS} and ${XDG_DATA_HOME} are set to the recommended
|
|
# defaults if unset, as specified in XDG Base Directory Specification
|
|
# - http://specifications.freedesktop.org/basedir-spec/.
|
|
#
|
|
# Dependencies: xdg-utils, fzf or dmenu (GUI)
|
|
#
|
|
# Shell: POSIX compliant
|
|
# Author: lwnctd
|
|
|
|
# set to 1 to enable GUI apps
|
|
GUI="${GUI:-0}"
|
|
|
|
if [ "$GUI" -ne 0 ] && command -v dmenu > /dev/null 2>& 1; then
|
|
menu="dmenu -i -l 7"
|
|
elif command -v fzf > /dev/null 2>& 1; then
|
|
menu="fzf -e --tiebreak=begin"
|
|
fi
|
|
|
|
if [ -z "$1" ] || [ -z "$menu" ] > /dev/null 2>& 1; then
|
|
exit 1
|
|
fi
|
|
|
|
ftype=$(xdg-mime query filetype "$2/$1")
|
|
|
|
if [ -z "$ftype" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
dirs=${XDG_DATA_DIRS:-/usr/local/share:/usr/share}
|
|
dirs=${dirs}:${XDG_DATA_HOME:-$HOME/.local/share}:
|
|
|
|
while [ -n "$dirs" ]; do
|
|
d=${dirs%%:*}
|
|
if [ -n "$d" ] && [ -d "$d"/applications ]; then
|
|
set -- "$@" "$d"/applications
|
|
fi
|
|
dirs=${dirs#*:}
|
|
done
|
|
|
|
app=$(find "$@" -iname '*.desktop' -exec grep '^Name=' {} + \
|
|
| sort -u -t ':' -k 1,1 \
|
|
| sed -E 's;.+/(.+desktop):Name=(.+);\2:\1;' \
|
|
| sort -t ':' -k 1,1 \
|
|
| column -t -s ':' -o "$(printf '\t')" \
|
|
| $menu \
|
|
| cut -f 2)
|
|
|
|
if [ -n "$app" ]; then
|
|
xdg-mime default "$app" "$ftype"
|
|
fi
|