mirror of
https://github.com/hydroxycarbamide/dotfiles.git
synced 2025-05-07 21:39:07 -04:00
Add nnn
This commit is contained in:
parent
0ef5de12ac
commit
c0889285ff
58 changed files with 5175 additions and 0 deletions
52
dot_config/nnn/plugins/executable_umounttree
Normal file
52
dot_config/nnn/plugins/executable_umounttree
Normal file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# Description: Autodetects a nnn remote mountpoint (mounted with `c`)
|
||||
# from any of its subfolders and allows unmounting it
|
||||
# from the subdir without navigating to the mountppoint
|
||||
# or entering the remote name. Also works when hovering
|
||||
# the mountpoint directly like vanilla `u`.
|
||||
#
|
||||
# Dependencies: fusermount
|
||||
#
|
||||
# Shell: POSIX compliant
|
||||
# Authors: Kabouik & 0xACE
|
||||
#
|
||||
# TODO:
|
||||
# - Avoid lazy unmount by forcing nnn context to leave the subfolder before fusermount.
|
||||
# Tried `printf "%s" "0c$m" > "$NNN_PIPE"` but it breaks the nnn interface, see #854.
|
||||
|
||||
err=0
|
||||
m=$HOME/.config/nnn/mounts
|
||||
if [ "$PWD" = "$m" ]; then
|
||||
# Allow running the script on hovered directory if user is in ~/.config/nnn/mounts
|
||||
d="$1"
|
||||
else
|
||||
d=$(dirname "$(readlink -f "$1")" | grep -oP "^$m\K.*" | cut -d"/" -f2)
|
||||
fi
|
||||
|
||||
# Test if user is within $m or a subdir, abort if not
|
||||
if [ "$d" = "" ]; then
|
||||
clear && printf "You are not in a remote folder mounted with nnn. Press return to continue. " && read -r _
|
||||
else
|
||||
# Test if $m/$d is a mountpoint and try unmounting if it is
|
||||
mountpoint -q -- "$m/$d"
|
||||
if [ "$?" -eq "1" ]; then
|
||||
clear && printf "Parent '%s' is not a mountpoint. Press return to continue. " "$d" && read -r _
|
||||
else
|
||||
cd "$m" && fusermount -uq "$m/$d" || err=1
|
||||
if [ "$err" -eq "0" ]; then
|
||||
rmdir "$m/$d" && clear && printf "Parent '%s' unmounted." "$d"
|
||||
else
|
||||
clear && printf "Failed to unmount. Try lazy unmount? [Yy/Nn] " && read -r
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# If unmount fails, offer lazy unmount
|
||||
if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then
|
||||
err=0
|
||||
cd "$m" && fusermount -uqz "$m/$d" || err=1
|
||||
if [ "$err" -eq "0" ]; then
|
||||
rmdir "$m/$d" && clear && printf "Parent '%s' unmounted with lazy unmount. " "$d"
|
||||
fi
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue