tmux-plugins / tpm

Tmux Plugin Manager
MIT License
11.9k stars 417 forks source link

add support for variable expansion in config files #233

Open a24k opened 1 year ago

a24k commented 1 year ago

If tmux.conf refers other file by source-file command that uses variable, it'll be better to expand variables into actual values.

Background

In XDG style directory, I'd like to use tmux.conf with variables like following example.

# tmux.conf ------------------------------------------------

TMUX_CONF_PATH="~/.config/tmux"

source "${TMUX_CONF_PATH}/general.conf"
source "${TMUX_CONF_PATH}/plugins.conf"
source "${TMUX_CONF_PATH}/pane.conf"
source "${TMUX_CONF_PATH}/status.conf"

# plugins.conf ---------------------------------------------

TMUX_PLUGIN_MANAGER_PATH="~/.local/share/tmux/plugins"

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

run "${TMUX_PLUGIN_MANAGER_PATH}/tpm/tpm"

It works well about tmux configurations, but tpm can't read @plugin entries from plugins.conf.

Current version of tpm expands ~ to $HOME with _manual_expansion() function, but never expands variables.

Solution

In _sourced_files() function, tpm extract parameter of source-file commands from tmux.conf.

We can put these parameters into echo command and process with bash, then get filenames with parameters expanded. Both single and double quotation marks are must be recognized correctly.

# intermediate script, to be processed with bash

echo "${TMUX_CONF_PATH}/general.conf"
echo "${TMUX_CONF_PATH}/plugins.conf"
echo "${TMUX_CONF_PATH}/pane.conf"
echo "${TMUX_CONF_PATH}/status.conf"
FranklinYu commented 1 year ago

Shameless plug: https://github.com/tmux-plugins/tpm/issues/85#issuecomment-1370493418