mirror of
https://github.com/tmux-plugins/tpm.git
synced 2025-12-18 00:02:56 -05:00
Add function `_get_user_tmux_conf` to helper script `plugin_functions`. Function is searching for the users tmux configuration on multiple places by a prioritized order. The response is used within`_tmux_conf_contents` to read in the content as normally. Add new environment variable `TMUX_PLUGIN_MANAGER_CONFIG_LOCATION` which is optional to be defined. If so it has the highest priority to be loaded, despite if the file exist or not. XDG directory support has been added as well by the second priority location at `$XDG_CONFIG_HOME/tmux/tmux.conf`.
109 lines
2.8 KiB
Bash
109 lines
2.8 KiB
Bash
# using @tpm_plugins is now deprecated in favor of using @plugin syntax
|
|
tpm_plugins_variable_name="@tpm_plugins"
|
|
|
|
# manually expanding tilde char or `$HOME` variable.
|
|
_manual_expansion() {
|
|
local path="$1"
|
|
local expanded_tilde="${path/#\~/$HOME}"
|
|
echo "${expanded_tilde/#\$HOME/$HOME}"
|
|
}
|
|
|
|
_tpm_path() {
|
|
local string_path="$(tmux start-server\; show-environment -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)/"
|
|
_manual_expansion "$string_path"
|
|
}
|
|
|
|
_CACHED_TPM_PATH="$(_tpm_path)"
|
|
|
|
# Get the absolute path to the users configuration file of TMux.
|
|
# This includes a prioritized search on different locations.
|
|
#
|
|
_get_user_tmux_conf() {
|
|
# Define the different possible locations.
|
|
custom_location="$TMUX_PLUGIN_MANAGER_CONFIG_LOCATION"
|
|
xdg_location="$XDG_CONFIG_HOME/tmux/tmux.conf"
|
|
default_location="$HOME/.tmux.conf"
|
|
|
|
# Search for the correct configuration file by priority.
|
|
if [ -n "$custom_location" ]; then
|
|
echo "$custom_location"
|
|
|
|
elif [ -f "$xdg_location" ]; then
|
|
echo "$xdg_location"
|
|
|
|
else
|
|
echo "$default_location"
|
|
fi
|
|
}
|
|
|
|
_tmux_conf_contents() {
|
|
user_config=$(_get_user_tmux_conf)
|
|
cat /etc/tmux.conf "$user_config" 2>/dev/null
|
|
if [ "$1" == "full" ]; then # also output content from sourced files
|
|
local file
|
|
for file in $(_sourced_files); do
|
|
cat $(_manual_expansion "$file") 2>/dev/null
|
|
done
|
|
fi
|
|
}
|
|
|
|
# return files sourced from tmux config files
|
|
_sourced_files() {
|
|
_tmux_conf_contents |
|
|
awk '/^[ \t]*source(-file)? +/ { gsub(/'\''/,""); gsub(/'\"'/,""); print $2 }'
|
|
}
|
|
|
|
# Want to be able to abort in certain cases
|
|
trap "exit 1" TERM
|
|
export TOP_PID=$$
|
|
|
|
_fatal_error_abort() {
|
|
echo >&2 "Aborting."
|
|
kill -s TERM $TOP_PID
|
|
}
|
|
|
|
# PUBLIC FUNCTIONS BELOW
|
|
|
|
tpm_path() {
|
|
if [ "$_CACHED_TPM_PATH" == "/" ]; then
|
|
echo >&2 "FATAL: Tmux Plugin Manager not configured in tmux.conf"
|
|
_fatal_error_abort
|
|
fi
|
|
echo "$_CACHED_TPM_PATH"
|
|
}
|
|
|
|
tpm_plugins_list_helper() {
|
|
# lists plugins from @tpm_plugins option
|
|
echo "$(tmux start-server\; show-option -gqv "$tpm_plugins_variable_name")"
|
|
|
|
# read set -g @plugin "tmux-plugins/tmux-example-plugin" entries
|
|
_tmux_conf_contents "full" |
|
|
awk '/^[ \t]*set(-option)? +-g +@plugin/ { gsub(/'\''/,""); gsub(/'\"'/,""); print $4 }'
|
|
}
|
|
|
|
# Allowed plugin name formats:
|
|
# 1. "git://github.com/user/plugin_name.git"
|
|
# 2. "user/plugin_name"
|
|
plugin_name_helper() {
|
|
local plugin="$1"
|
|
# get only the part after the last slash, e.g. "plugin_name.git"
|
|
local plugin_basename="$(basename "$plugin")"
|
|
# remove ".git" extension (if it exists) to get only "plugin_name"
|
|
local plugin_name="${plugin_basename%.git}"
|
|
echo "$plugin_name"
|
|
}
|
|
|
|
plugin_path_helper() {
|
|
local plugin="$1"
|
|
local plugin_name="$(plugin_name_helper "$plugin")"
|
|
echo "$(tpm_path)${plugin_name}/"
|
|
}
|
|
|
|
plugin_already_installed() {
|
|
local plugin="$1"
|
|
local plugin_path="$(plugin_path_helper "$plugin")"
|
|
[ -d "$plugin_path" ] &&
|
|
cd "$plugin_path" &&
|
|
git remote >/dev/null 2>&1
|
|
}
|