repo: Remove traces of tmux configuration
While I never disliked tmux I have not been using it for absolute ages now, ever since starting to multiplex with wezterm. Wezterm can (at least with my current setup) *not* replace all tmux functionality - especially running multiple sessions in a detachable way on a remote server - but I have never needed those in a long time now. Detachable sessions I can create instead with `abduco`.
This commit is contained in:
parent
0237b7d569
commit
2c1487ab93
17 changed files with 3 additions and 539 deletions
README.md
bootstrap
nvim/.config/nvim/lua/core
sh/.config/sh
terminal
|
@ -53,13 +53,12 @@ Enjoy!
|
|||
* [`waybar`](https://github.com/Alexays/Waybar) - Easily customizable statusbar for wayland
|
||||
* [`bemenu`](https://github.com/Cloudef/bemenu) - Extended dmenu replacement for wayland, X11 and ncurses
|
||||
* [`fontconfig`] - System-wide font replacements and styling settings
|
||||
* [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator (fast, understandable and lua configurable)
|
||||
* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer (slowly migrating away in favor of wezterm)
|
||||
* [`wezterm`](https://wezfurlong.org/wezterm/) - Terminal emulator and multiplexer (fast, understandable and lua configurable)
|
||||
* [`nvim`](https://neovim.io/) - Neovim configuration
|
||||
* [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager
|
||||
* [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser
|
||||
* [`pass`](pass/README.md) - Password management suite
|
||||
* [`bibtex`] - LateX/BibteX/pandoc plaintext writing & reference suite
|
||||
* [`bibtex`] - LateX/BibteX/pandoc plaintext writing & reference suite (slowly migrating toward [typst](https://typst.app))
|
||||
* [`git`](git/README.md) - distributed version control system.
|
||||
* [`office`](office/README.md) - office/productivity software for writing e-mail and setting appointments
|
||||
|
||||
|
|
|
@ -311,7 +311,6 @@ tidy-viewer CLI csv pretty printer that uses column styling A
|
|||
timew Timewarrior, A command line time tracking application R
|
||||
tinyxxd Standalone version of the hex dump utility that comes with ViM R
|
||||
tlp Linux Advanced Power Management R
|
||||
tmux Terminal multiplexer R
|
||||
toilet free replacement for the FIGlet utility. A
|
||||
topgrade-bin Invoke the upgrade procedure of multiple package managers A
|
||||
traceroute Tracks the route taken by packets over an IP network R
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 32.
|
|
@ -113,7 +113,7 @@ map("t", "\\\\", [[<C-\><C-n>]], { desc = "exit terminal mode" })
|
|||
map("n", "<leader>/", ":noh<cr>", { desc = "remove highlights" })
|
||||
|
||||
-- split buffers vertically/horizontally with the leader \ or - (mirrors my
|
||||
-- tmux setup)
|
||||
-- multiplexer setup)
|
||||
map("n", "<leader>-", ":sp<cr>", { desc = "open horiz split" })
|
||||
map("n", "<leader>\\", ":vsp<cr>", { desc = "open vert split" })
|
||||
-- open actual new tab with leader-T
|
||||
|
|
|
@ -61,7 +61,6 @@ fi
|
|||
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
|
||||
export SQLITE_HISTORY="$XDG_STATE_HOME/sqlite_history"
|
||||
export TEXMFVAR="$XDG_CACHE_HOME/texlive/texmf-var"
|
||||
export TMUX_PLUGIN_MANAGER_PATH="$XDG_DATA_HOME/tmux"
|
||||
export VAGRANT_HOME="$XDG_DATA_HOME/vagrant"
|
||||
export WINEPREFIX="$XDG_DATA_HOME/wine"
|
||||
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
exist() { type "$1" >/dev/null 2>&1; }
|
||||
|
||||
# alias tmux to follow xdg-specification
|
||||
# shellcheck disable=2139
|
||||
alias tmux="tmux -f ${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf"
|
||||
|
||||
# fzf
|
||||
if exist fzf; then
|
||||
# fzf select a tmux session to connect to, with pane preview
|
||||
alias tm='_fzf_tmux_attach_start_session'
|
||||
alias tl=tm
|
||||
else
|
||||
alias tm='tmux_attach_start'
|
||||
# show a list of running tmux sessions
|
||||
alias tl='tmux list-sessions -F "#{session_name}" 2>/dev/null '
|
||||
fi
|
||||
|
||||
_fzf_tmux_list_sessions() {
|
||||
tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf \
|
||||
--layout=reverse \
|
||||
--height=50% \
|
||||
--border \
|
||||
--prompt="Session> " \
|
||||
--preview="tmux_pane_tree {}" \
|
||||
--preview-window=right:80% \
|
||||
--print-query
|
||||
}
|
||||
|
||||
_fzf_tmux_attach_start_session() {
|
||||
if [ -z "$1" ]; then
|
||||
result=$(_fzf_tmux_list_sessions)
|
||||
case "$?" in
|
||||
0)
|
||||
# found a session, attaching
|
||||
tmux_attach_start "$(echo "$result" | tail --lines=1)"
|
||||
;;
|
||||
1)
|
||||
# did not find a session, creating
|
||||
result=$(echo "$result" | head --lines=1)
|
||||
# if . was only thing entered, create one for current dir
|
||||
if [ "$result" = "." ]; then
|
||||
tmux_attach_start
|
||||
# create for query name
|
||||
else
|
||||
tmux_attach_start "$result"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
tmux_attach_start "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
unset choice
|
||||
unset -f exist
|
|
@ -1,13 +0,0 @@
|
|||
rename-window dot-git
|
||||
send-keys "cd ~/.dotfiles; while true; do [[ -z $(git status -s) ]] && { fd -t f --hidden | entr -cd tea issue ;} || { fd -t f --hidden | entr -cd git -c color.ui=always diff ;} ; done"
|
||||
split-window -h "cd ~/.dotfiles; while true; do fd -t f --hidden --exclude .git/objects | entr -cd git -c color.ui=always status; done"
|
||||
split-window -v
|
||||
send-keys "cd ~/.dotfiles; clear" C-m L C-m
|
||||
select-pane -t 1
|
||||
split-window -v "cd ~/.dotfiles; while true; do fd -t f --hidden --exclude .git/objects | entr -cd git -c color.ui=always log --graph --date=short --decorate --oneline --all --remotes; done"
|
||||
select-pane -t 4
|
||||
new-window -n code
|
||||
send-keys "cd ~/.dotfiles; v ." C-m zo
|
||||
new-window -n test
|
||||
select-window -t 1
|
||||
attach-session -t . -c ~/.dotfiles
|
|
@ -1,9 +0,0 @@
|
|||
rename-window server
|
||||
send-keys "mopidy" C-m
|
||||
new-window -n player
|
||||
send-keys "ncmpcpp" C-m
|
||||
new-window -n mixer
|
||||
send-keys "pulsemixer" C-m
|
||||
new-window -n bluetooth
|
||||
send-keys "bluetoothctl" C-m
|
||||
select-window -t 2
|
|
@ -1,7 +0,0 @@
|
|||
rename-window notes
|
||||
send-keys vm Space $WIKIROOT Space $LIBRARY C-m
|
||||
new-window -n notepad
|
||||
send-keys cd Space $WIKIROOT C-m
|
||||
send-keys v C-m
|
||||
send-keys Space w w
|
||||
attach-session -t . -c $WIKIROOT
|
|
@ -1,10 +0,0 @@
|
|||
rename-window mail
|
||||
send-keys "neomutt" C-m
|
||||
new-window -n news
|
||||
send-keys "newsboat" C-m
|
||||
split-window -h
|
||||
send-keys "tut" C-m
|
||||
new-window -n matrix
|
||||
send-keys "gomuks" C-m
|
||||
new-window -n signal
|
||||
send-keys "siggo" C-m
|
|
@ -1,4 +0,0 @@
|
|||
rename-window stats
|
||||
send-keys "cd ~/documents/records; v workout.md" C-m
|
||||
new-window -n routine
|
||||
send-keys "cd ~/documents/records; sc-im workout.csv" C-m
|
|
@ -1,15 +0,0 @@
|
|||
rename-window focus
|
||||
send-keys tasksh C-m "+TODAY" C-m
|
||||
new-window -n dash
|
||||
send-keys "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task next" C-m
|
||||
split-window -h -l 71
|
||||
send-keys "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task summary" C-m
|
||||
split-window -v "cd ${XDG_DATA_HOME:-~/.local/share}/task/; fd . | entr -c task status:pending or +ACTIVE burndown"
|
||||
select-pane -t 1
|
||||
split-window -v -l 5
|
||||
send-keys "t" Space
|
||||
new-window -n journal
|
||||
send-keys "calcurse" C-m
|
||||
split-window -h -l 35% "ls ~/documents/records/jrnl.md | entr -c jrnl -5"
|
||||
split-window -v -l 10%
|
||||
select-window -t 2
|
|
@ -1,183 +0,0 @@
|
|||
# Layout of this conf file:
|
||||
# 1. Global Settings
|
||||
# 2. Plugins
|
||||
# 3. Keybinds
|
||||
# 4. Theme
|
||||
|
||||
# For rapid change prototyping, disabled normally:
|
||||
# bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "config reloaded."
|
||||
|
||||
######################
|
||||
### 1. GLOBAL SETTINGS
|
||||
######################
|
||||
|
||||
# show that activity happens but don't display a huge 'activity happening' notification
|
||||
setw -g monitor-activity on
|
||||
set -g visual-activity off
|
||||
|
||||
# Start counting windows and panes at 1
|
||||
set -g base-index 1
|
||||
setw -g pane-base-index 1
|
||||
set -g renumber-windows on
|
||||
|
||||
# Terminal improvements
|
||||
set-window-option -g automatic-rename on
|
||||
set-option -g set-titles on
|
||||
set -g mouse on
|
||||
# allow truecolor support
|
||||
set -g default-terminal 'xterm-256color'
|
||||
set -ga terminal-overrides ',xterm-256color:Tc'
|
||||
set -g status-keys vi
|
||||
set-window-option -g mode-keys vi
|
||||
set -g history-limit 10000
|
||||
|
||||
# Screen size is based on the smallest client looking at the current windows, not the smallest
|
||||
# client connected to the overall session. If two clients are connected to the same session but not
|
||||
# looking at the same window, why would they care about each others screen size?
|
||||
setw -g aggressive-resize on
|
||||
|
||||
# No delay for escape key press
|
||||
set -sg escape-time 0
|
||||
|
||||
# to enable autoread option in neovim
|
||||
set-option -g focus-events on
|
||||
|
||||
####################
|
||||
## 2. PLUGINS ##
|
||||
####################
|
||||
|
||||
set -g @tpm_plugins ' \
|
||||
tmux-plugins/tpm \
|
||||
tmux-plugins/tmux-sensible \
|
||||
christoomey/vim-tmux-navigator \
|
||||
Morantron/tmux-fingers \
|
||||
'
|
||||
|
||||
set -g @fingers-key F
|
||||
|
||||
# make sure tpm is installed
|
||||
if-shell "test ! -d $TMUX_PLUGIN_MANAGER_PATH/tpm" \
|
||||
"run 'git clone https://github.com/tmux-plugins/tpm $TMUX_PLUGIN_MANAGER_PATH/tpm && $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins'" \
|
||||
|
||||
# optinally add this to install plugins on each start -- adds small lag to startup
|
||||
# "run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins"
|
||||
|
||||
#####################
|
||||
## 3. KEYBINDINGS ##
|
||||
#####################
|
||||
|
||||
# Unbind some defaults
|
||||
unbind '"'
|
||||
unbind %
|
||||
|
||||
# Custom modifier key
|
||||
set -g prefix C-a
|
||||
unbind-key C-b
|
||||
bind-key -r C-a send-prefix
|
||||
|
||||
# Window Navigation - Prefix + Vim Keys
|
||||
bind-key -r C-h select-window -t :-
|
||||
bind-key -r C-l select-window -t :+
|
||||
|
||||
# Resize Panes
|
||||
bind-key -r H resize-pane -L 3
|
||||
bind-key -r J resize-pane -D 1
|
||||
bind-key -r K resize-pane -U 1
|
||||
bind-key -r L resize-pane -R 3
|
||||
|
||||
bind-key -r C-H resize-pane -L 10
|
||||
bind-key -r C-J resize-pane -D 5
|
||||
bind-key -r C-K resize-pane -U 5
|
||||
bind-key -r C-L resize-pane -R 10
|
||||
|
||||
# Send Pane to a new window (but stay on current window), join it back into the current window
|
||||
bind-key B break-pane -d
|
||||
bind-key C-b command-prompt -p "join pane from: " "join-pane -h -s '%%'"
|
||||
|
||||
# Swap panes within the current window (swaps pane # entered with currently selected pane)
|
||||
bind-key b display-panes\; command-prompt -p "pane #: " "swap-pane -t '%%'"
|
||||
|
||||
# Kill tabs quicker
|
||||
bind-key x kill-pane
|
||||
bind-key C-x kill-window
|
||||
|
||||
# Split Window into panes - automatically handled by plugin
|
||||
bind-key '\' split-window -h -c '#{pane_current_path}'
|
||||
bind-key '-' split-window -v -c '#{pane_current_path}'
|
||||
|
||||
# Open a sessions chooser
|
||||
bind C-s split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
||||
|
||||
# Make visual selections act a little more like vim
|
||||
bind-key -T copy-mode-vi v send -X begin-selection
|
||||
bind-key -T copy-mode-vi V send -X select-line
|
||||
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel 'wl-copy' \; send -X rectangle-off
|
||||
bind-key -T copy-mode-vi 'C-v' send -X begin-selection \; send -X rectangle-on
|
||||
|
||||
#####################
|
||||
## 4. THEME ##
|
||||
#####################
|
||||
|
||||
# Status update interval
|
||||
set -g status-interval 1
|
||||
# Clock mode
|
||||
set -g clock-mode-colour colour24
|
||||
set -g clock-mode-style 24
|
||||
|
||||
# This tmux statusbar config was created by tmuxline.vim
|
||||
# on Wed, 13 Mar 2019
|
||||
|
||||
set -g message-command-style bg="#2e2e2e",fg="#c8c8c8"
|
||||
set -g message-style bg="#2e2e2e",fg="#c8c8c8"
|
||||
set -g pane-active-border-style fg="#2e2e2e"
|
||||
set -g pane-border-style fg="#2e2e2e"
|
||||
set -g status-justify "centre"
|
||||
set -g status "on"
|
||||
set -g status-style "none"
|
||||
set -g status-style "none"
|
||||
set -g status-left-length "100"
|
||||
set -g status-right-length "100"
|
||||
setw -g window-status-style fg="#c8c8c8",bg="#2e2e2e","none"
|
||||
setw -g window-status-activity-style bg="#2e2e2e",fg="#c8c8c8","underscore"
|
||||
setw -g window-status-separator ""
|
||||
set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e] #S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
||||
set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics] #[fg=#c8c8c8,bg=#2e2e2e] #{?client_prefix,#[fg=colour232]#[bg=brightblue],} #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] %d-%b-%y #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #H "
|
||||
setw -g window-status-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[default] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
||||
setw -g window-status-current-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
||||
|
||||
########################
|
||||
## 5. Nested Sessions ##
|
||||
########################
|
||||
# from: https://github.com/samoshkin/tmux-config/blob/master/tmux/tmux.conf
|
||||
# all credit to samoshkin
|
||||
|
||||
# Session is considered to be remote when we ssh into host
|
||||
if-shell 'test -n "$SSH_CLIENT"' \
|
||||
'source-file $XDG_CONFIG_HOME/tmux/tmux.remote.conf'
|
||||
|
||||
# We want to have single prefix key "C-a", usable both for local and remote session
|
||||
# we don't want to "C-a" + "a" approach either
|
||||
# Idea is to turn off all key bindings and prefix handling on local session,
|
||||
# so that all keystrokes are passed to inner/remote session
|
||||
|
||||
# see: toggle on/off all keybindings · Issue #237 · tmux/tmux - https://github.com/tmux/tmux/issues/237
|
||||
|
||||
# Also, change some visual styles when window keys are off
|
||||
bind -T root F12 \
|
||||
set prefix None \;\
|
||||
set key-table off \;\
|
||||
set status-style fg="colour245",bg="colour238" \;\
|
||||
set window-status-current-format "#[fg=$color_window_off_status_bg,bg=$color_window_off_status_current_bg]$separator_powerline_right#[default] #I:#W# #[fg=$color_window_off_status_current_bg,bg=$color_window_off_status_bg]$separator_powerline_right#[default]" \;\
|
||||
set window-status-current-style fg="colour232",bg="colour254","bold" \;\
|
||||
if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\
|
||||
refresh-client -S \;\
|
||||
|
||||
bind -T off F12 \
|
||||
set -u prefix \;\
|
||||
set -u key-table \;\
|
||||
set -u status-style \;\
|
||||
set -u window-status-current-style \;\
|
||||
set -u window-status-current-format \;\
|
||||
refresh-client -S
|
||||
|
||||
run -b "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm"
|
|
@ -1,10 +0,0 @@
|
|||
# show status bar at bottom for remote session,
|
||||
set -g status-position bottom
|
||||
|
||||
# Set port of SSH remote tunnel, where tmux will pipe buffers to transfer on local machine for copy
|
||||
set -g @copy_backend_remote_tunnel_port 11988
|
||||
|
||||
# In remote mode we don't show "clock" and "battery status" widgets
|
||||
set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e][SSH]#S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
||||
set -g status-right "#{prefix_highlight} $wg_is_keys_off $wg_is_zoomed #{sysstat_cpu} | #{sysstat_mem} | #{sysstat_loadavg} | $wg_user_host | #{online_status}"
|
||||
set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#{prefix_highlight} #H "
|
|
@ -1,12 +0,0 @@
|
|||
#compdef _tmux_attach_start
|
||||
#
|
||||
# Requires tmux_attach_start script in path
|
||||
#
|
||||
# Enables completion for zsh of tmux_attach_start function
|
||||
# with currently open sessions, or tmux options.
|
||||
|
||||
_tmux_attach_start() {
|
||||
_alternative \
|
||||
"sessions:user sessions:($(tmux list-sessions -F'#{session_name}' 2>/dev/null))"
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
setup() {
|
||||
fut="$BATS_TEST_DIRNAME/../tmux_attach_start"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
rm -rf $BATS_TMPDIR/xdg/*
|
||||
}
|
||||
|
||||
@test "runs correctly if invoked without arguments" {
|
||||
run $fut
|
||||
echo "$BATS_TEST_DIRNAME/../tmux_attach_start"
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
@test "Errors out if passed a non-existent session file (and some session name)" {
|
||||
run $fut IDONT_EXIST_HERE.session sessionname
|
||||
echo "STATUS: $output"
|
||||
[ "$status" -eq 1 ]
|
||||
echo "OUTPUT: $output"
|
||||
[ "$output" = "can not source session file: 'IDONT_EXIST_HERE.session' does not exist." ]
|
||||
}
|
||||
|
||||
@test "Runs without errors when session file exists in PWD" {
|
||||
touch $PWD/exists.session
|
||||
run $fut exists.session sessionname
|
||||
rm $PWD/exists.session
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
||||
|
||||
@test "Runs without errors when session file exists in XDG_CONFIG_HOME/tmux/sessions/" {
|
||||
export XDG_CONFIG_HOME=$BATS_TMPDIR
|
||||
mkdir -p $XDG_CONFIG_HOME/tmux/sessions
|
||||
sesdir=$XDG_CONFIG_HOME/tmux/sessions
|
||||
touch $sesdir/exists.session
|
||||
run $fut exists.session sessionname
|
||||
|
||||
[ "$status" -eq 0 ]
|
||||
}
|
|
@ -1,154 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Attach to a tmux session, or create it if it doesnt exist
|
||||
|
||||
if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
|
||||
cat <<-EOF
|
||||
Usage: $0 [FILE] [NAME]
|
||||
Attach to an existing tmux session, or bootstrap a new session.
|
||||
|
||||
If no session exists which fits the criteria, this will create a new one and
|
||||
load it up obeying the commands contained in the FILE argument passed in. It
|
||||
must contain commands which are tmux-command compatible since they will be
|
||||
passed to tmux unmodified. If a session exists and a valid configuration FILE is
|
||||
passed, it will attach itself to the session and execute the session setup inside.
|
||||
|
||||
It will load the default tmux.conf in the following order:
|
||||
- XDG_CONFIG_HOME/tmux/tmux.conf (usually ~/.config/tmux/tmux.conf)
|
||||
- ~/.tmux.conf
|
||||
- /etc/tmux.conf
|
||||
Afterwards, it will apply the contents of the FILE argument passed into the command.
|
||||
|
||||
If no FILE argument is passed it will create an empty session, or attach itself to
|
||||
the session specified.
|
||||
|
||||
If no NAME argument is passed it will automatically create a session name from the
|
||||
FILE argument passed.
|
||||
|
||||
If creating a new session without passing in a FILE argument, and the current directory
|
||||
contains a .tmux.session file, it will automatically use that to set up the session.
|
||||
|
||||
By default, it also looks for valid session files in XDG_CONFIG_HOME/tmux/sessions/
|
||||
This path can be changed by setting the TM_SESSION_PATH environment variable.
|
||||
EOF
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Make tmux obey the XDG specification on startup
|
||||
if [ -e "$XDG_CONFIG_HOME/tmux/tmux.conf" ]; then
|
||||
start="tmux -f $XDG_CONFIG_HOME/tmux/tmux.conf"
|
||||
else
|
||||
start=tmux
|
||||
fi
|
||||
|
||||
_file_exists() {
|
||||
if [ -f "$1" ]; then
|
||||
true
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
_not_in_tmux() {
|
||||
[ -z "$TMUX" ]
|
||||
}
|
||||
|
||||
_session_exists() {
|
||||
if tmux has-session -t "$session_name" >/dev/null 2>&1; then
|
||||
true
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
_create_detached_session() {
|
||||
($start new-session -d -s "$session_name")
|
||||
}
|
||||
|
||||
_load_env_session_file() {
|
||||
if [ -f ./.tmux.session ]; then
|
||||
xargs -L1 tmux <./.tmux.session
|
||||
fi
|
||||
}
|
||||
|
||||
_load_session_file() {
|
||||
if [ -f "$session_file" ]; then
|
||||
xargs -L1 tmux <"$session_file"
|
||||
fi
|
||||
}
|
||||
|
||||
_set_session_file_path() {
|
||||
# Prefer local dir if file exists there, fall back to root dir
|
||||
if _file_exists "${1}"; then
|
||||
session_file="${1}"
|
||||
elif _file_exists "${session_dir}${1}"; then
|
||||
session_file="${session_dir}${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
_set_session_vars() {
|
||||
session_dir=${TM_SESSION_DIR:-"$XDG_CONFIG_HOME/tmux/sessions/"}
|
||||
|
||||
# set up session name and config file - if passed in as arguments
|
||||
if [ "$#" -eq 2 ]; then
|
||||
if ! _file_exists "$1" && ! _file_exists "${session_dir}${1}"; then
|
||||
echo >&2 "can not source session file: '${1}' does not exist."
|
||||
exit 1
|
||||
fi
|
||||
_set_session_file_path "$1"
|
||||
session_name=${2}
|
||||
elif [ "$#" -eq 1 ]; then
|
||||
_set_session_file_path "$1"
|
||||
if ! _file_exists "$session_file"; then
|
||||
session_name=${1}
|
||||
fi
|
||||
fi
|
||||
|
||||
# set default session name if none was passed
|
||||
if [ -z "$session_name" ]; then
|
||||
# only if we have a filename should we append it to the session name
|
||||
if [ -n "$session_file" ]; then
|
||||
fname=/$(basename "$session_file" .session)
|
||||
fi
|
||||
# default to parent directory name / config file name for the session
|
||||
session_name=$(basename "$PWD" | sed 's/[^a-zA-Z0-9\-]//g' | tr . -)"$fname"
|
||||
fi
|
||||
}
|
||||
|
||||
_attach_or_create() {
|
||||
# first create a new session if one doesn't exist
|
||||
if ! _session_exists; then
|
||||
_create_detached_session
|
||||
# look for .tmux.session file if no file has been explicitly passed in
|
||||
# session files always take precedence over environment files when specifically passed in
|
||||
if ! _file_exists "$session_file"; then
|
||||
_load_env_session_file
|
||||
fi
|
||||
fi
|
||||
|
||||
_load_session_file
|
||||
|
||||
# then attach or switch to the session
|
||||
if _not_in_tmux; then
|
||||
$start attach -t "$session_name"
|
||||
else
|
||||
$start switch-client -t "$session_name"
|
||||
fi
|
||||
|
||||
_unset_functions
|
||||
}
|
||||
|
||||
_unset_functions() {
|
||||
unset _set_session_vars
|
||||
unset _set_session_file_path
|
||||
unset _attach_or_create
|
||||
unset _load_session_file
|
||||
unset _create_detached_session
|
||||
unset _session_exists
|
||||
unset _not_in_tmux
|
||||
unset _file_exists
|
||||
}
|
||||
|
||||
_set_session_vars "$@"
|
||||
_attach_or_create
|
||||
exit 0
|
|
@ -1,20 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
# create a tree-style view
|
||||
# of all open tmux panes
|
||||
# and the command they are currently running
|
||||
|
||||
tmux ls -F'#{session_id}' | while read -r s; do
|
||||
S=$(tmux ls -F'#{session_id}#{session_name}: #{T:tree_mode_format}' | grep ^"$s")
|
||||
session_info=${S##$s}
|
||||
session_name=$(echo "$session_info" | cut -d ':' -f 1)
|
||||
if [[ -n "$1" ]] && [[ "$1" == "$session_name" ]]; then
|
||||
echo -e "\033[1;34m$session_info\033[0m"
|
||||
tmux lsw -t"$s" -F'#{window_id}' | while read -r w; do
|
||||
W=$(tmux lsw -t"$s" -F'#{window_id}#{T:tree_mode_format} - #{pane_current_command}' | grep ^"$w")
|
||||
H=$(tmux lsw -t"$s" -F'#{window_id}#H' | grep ^"$w")
|
||||
echo " ${W##$w}" | sed "s/\"${H##$w}\" //"
|
||||
done
|
||||
else
|
||||
echo -e "\033[1m$session_info\033[0m"
|
||||
fi
|
||||
done
|
Loading…
Reference in a new issue