/tmux-fzf-session-switch

Easy way to switch, when you have a ton of sessions.

Primary LanguageShellGNU General Public License v3.0GPL-3.0

TMUX FZF Session Switch

preview img

QnA

Can do?

  1. Session + window name fuzzy search and switch.
  2. Create new session

Reason don't use this plugin?

  1. tmux-fzf have more black magic.
  2. tmux-fzf have single shortcut for switch session and many function tmux-fzf had.

Reason use this plugin?

One single shortcut for switch sessions, windows and create new session. This make simple flow, "i want go to ?, press shortcut type ? enter done.", "i want go to ?, press shortcut type ?, Uh! not have that okay press enter create new session with ? name"

Plan

Blazingly fast tmux workflow, built muscle memory, better DX.

Not in plan

Becoming chad, have super black magic power like tmux-fzf

Why I don't create push request to main repo?

"Don't confirm y to create a new session". This one different flow from the original repo. So that's why I don't push request into original repo.

Getting started

  • Video:

  • Install the tpm Tmux Plugin Manager.

  • Put set -g @plugin 'thuanOwa/tmux-fzf-session-switch' into your tmux config

  • Use tpm to install this plugin. Default you can press prefix + I (I is shift + i = I)

  • Prefix + Ctrl + f: Open up fzf in a new tab. (e.g. prefix = ctrl + b. Hold ctrl -> press a -> press f -> done)

  • If you type a name that doesn't exist, you will be prompted to create it.

If this name conflicts with another session name -> add a double/single quotes 'example'

Requirements

Customize

šŸ«°Thanks to @erikw

Search session only

set-option -g @fzf-goto-session-only 'true'

Key binding

set -g @fzf-goto-session 'key binding'

Eg. to override the default session switcher in tmux available at prefix + s`:

set -g @fzf-goto-session 's'

Without prefix

set -g @fzf-goto-session-without-prefix 'true'

Window dimensions

set -g @fzf-goto-win-width WIDTH
set -g @fzf-goto-win-height HEIGHT

Eg.

set -g @fzf-goto-win-width 70
set -g @fzf-goto-win-height 20

Tips

Use in command line

function tmuxSessionSwitch() {
  session=$(tmux list-windows -a | fzf | sed 's/: .*//g')
  tmux switch-client -t "$session"
}
function tmux_kill_uname_session() {
  echo "kill all unname tmux session"
  cd /tmp/
  tmux ls | awk '{print $1}' | grep -o '[0-9]\+' >/tmp/killAllUnnameTmuxSessionOutput.sh
  sed -i 's/^/tmux kill-session -t /' killAllUnnameTmuxSessionOutput.sh
  chmod +x killAllUnnameTmuxSessionOutput.sh
  ./killAllUnnameTmuxSessionOutput.sh
  cd -
  tmux ls
}

use with clear command is the best

alias clear='tmux_kill_uname_session ; clear -x'

Easy to press

  • In my use case, I don't use this keybinding for switch sessions, I use hold space + ; mapping for hold Ctrl + a + f
  • How can I use hold space + ; mapping? -> I use input remapper, also you can see my dotfiles

config in GUI

space: if_single(key(KEY_SPACE), ,timeout=10000)
space + semicolon: KEY_RIGHTCTRL+a+f

input remapper