mirror of
https://github.com/davatorium/rofi.git
synced 2025-02-03 15:34:54 -05:00
Merge pull request #321 from DanteFireX/patch-1
added optional history; normalized variable names
This commit is contained in:
commit
94cbe3a005
1 changed files with 70 additions and 18 deletions
|
@ -1,46 +1,98 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
EDITOR=xdg-open
|
# Various options for the file browser script:
|
||||||
|
ROFI_FB_GENERIC_FO="xdg-open" # command used for opening the selection
|
||||||
|
ROFI_FB_PREV_LOC_FILE=~/.local/share/rofi/rofi_fb_prevloc
|
||||||
|
ROFI_FB_HISTORY_FILE=~/.local/share/rofi/rofi_fb_history
|
||||||
|
ROFI_FB_HISTORY_MAXCOUNT=5 # maximum number of history entries
|
||||||
|
# Comment the next variable to always start in the last visited directory,
|
||||||
|
# otherwise rofi_fb will start in the specified directory:
|
||||||
|
ROFI_FB_START_DIR=$HOME # starting directory
|
||||||
|
# Uncomment the following line to disable history:
|
||||||
|
# ROFI_FB_NO_HISTORY=1
|
||||||
|
|
||||||
CUR_DIR=$PWD
|
|
||||||
|
|
||||||
PREV_LOC_FILE=~/.rofi_fb_prevloc
|
# Beginning of the script:
|
||||||
|
# Create the directory for the files of the script
|
||||||
# Read last location, otherwise we default to PWD.
|
if [ ! -d $(dirname "${ROFI_FB_PREV_LOC_FILE}") ]
|
||||||
if [ -f "${PREV_LOC_FILE}" ]
|
|
||||||
then
|
then
|
||||||
CUR_DIR=$(cat "${PREV_LOC_FILE}")
|
mkdir -p "$(dirname "${ROFI_FB_PREV_LOC_FILE}")"
|
||||||
|
fi
|
||||||
|
if [ ! -d $(dirname "${ROFI_FB_HISTORY_FILE}") ]
|
||||||
|
then
|
||||||
|
mkdir -p "$(dirname "${ROFI_FB_HISTORY_FILE}")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize $ROFI_FB_CUR_DIR
|
||||||
|
if [ -d "${ROFI_FB_START_DIR}" ]
|
||||||
|
then
|
||||||
|
ROFI_FB_CUR_DIR="${ROFI_FB_START_DIR}"
|
||||||
|
else
|
||||||
|
ROFI_FB_CUR_DIR="$PWD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Read last location, otherwise we default to $ROFI_FB_START_DIR or $PWD.
|
||||||
|
if [ -f "${ROFI_FB_PREV_LOC_FILE}" ]
|
||||||
|
then
|
||||||
|
ROFI_FB_CUR_DIR=$(cat "${ROFI_FB_PREV_LOC_FILE}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Handle argument.
|
# Handle argument.
|
||||||
if [ -n "$@" ]
|
if [ -n "$@" ]
|
||||||
then
|
then
|
||||||
CUR_DIR="${CUR_DIR}/$@"
|
if [[ "$@" == /* ]]
|
||||||
|
then
|
||||||
|
ROFI_FB_CUR_DIR="$@"
|
||||||
|
else
|
||||||
|
ROFI_FB_CUR_DIR="${ROFI_FB_CUR_DIR}/$@"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If argument is no directory.
|
# If argument is no directory.
|
||||||
if [ ! -d "${CUR_DIR}" ]
|
if [ ! -d "${ROFI_FB_CUR_DIR}" ]
|
||||||
then
|
then
|
||||||
if [ -x "${CUR_DIR}" ]
|
if [ -x "${ROFI_FB_CUR_DIR}" ]
|
||||||
then
|
then
|
||||||
coproc ( "${CUR_DIR}" & > /dev/null 2>&1 )
|
coproc ( "${ROFI_FB_CUR_DIR}" & > /dev/null 2>&1 )
|
||||||
exec 1>&-
|
exec 1>&-
|
||||||
exit;
|
exit;
|
||||||
elif [ -f "${CUR_DIR}" ]
|
elif [ -f "${ROFI_FB_CUR_DIR}" ]
|
||||||
then
|
then
|
||||||
coproc ( ${EDITOR} "${CUR_DIR}" & > /dev/null 2>&1 )
|
if [[ "${ROFI_FB_NO_HISTORY}" -ne 1 ]]
|
||||||
|
then
|
||||||
|
# Append selected entry to history and remove exceeding entries
|
||||||
|
sed -i "s|${ROFI_FB_CUR_DIR}|##deleted##|g" "${ROFI_FB_HISTORY_FILE}"
|
||||||
|
sed -i '/##deleted##/d' "${ROFI_FB_HISTORY_FILE}"
|
||||||
|
echo "${ROFI_FB_CUR_DIR}" >> "${ROFI_FB_HISTORY_FILE}"
|
||||||
|
if [ $(cat "${ROFI_FB_HISTORY_FILE}" | wc -l) -gt ${ROFI_FB_HISTORY_MAXCOUNT} ]
|
||||||
|
then
|
||||||
|
sed -i 1d "${ROFI_FB_HISTORY_FILE}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Open the selected entry with $ROFI_FB_GENERIC_FO
|
||||||
|
coproc ( "${ROFI_FB_GENERIC_FO}" "${ROFI_FB_CUR_DIR}" & > /dev/null 2>&1 )
|
||||||
|
if [ -d "${ROFI_FB_START_DIR}" ]
|
||||||
|
then
|
||||||
|
echo "${ROFI_FB_START_DIR}" > "${ROFI_FB_PREV_LOC_FILE}"
|
||||||
|
fi
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# process current dir.
|
# Process current dir.
|
||||||
if [ -n "${CUR_DIR}" ]
|
if [ -n "${ROFI_FB_CUR_DIR}" ]
|
||||||
then
|
then
|
||||||
CUR_DIR=$(readlink -e "${CUR_DIR}")
|
ROFI_FB_CUR_DIR=$(readlink -e "${ROFI_FB_CUR_DIR}")
|
||||||
echo "${CUR_DIR}" > "${PREV_LOC_FILE}"
|
echo "${ROFI_FB_CUR_DIR}" > "${ROFI_FB_PREV_LOC_FILE}"
|
||||||
pushd "${CUR_DIR}" >/dev/null
|
pushd "${ROFI_FB_CUR_DIR}" >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Output to rofi
|
||||||
|
if [[ "${ROFI_FB_NO_HISTORY}" -ne 1 ]]
|
||||||
|
then
|
||||||
|
tac "${ROFI_FB_HISTORY_FILE}" | grep "${ROFI_FB_CUR_DIR}"
|
||||||
|
fi
|
||||||
echo ".."
|
echo ".."
|
||||||
ls
|
ls
|
||||||
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Add table
Reference in a new issue