Search code examples
tmux

How to automatically rename tmux windows to the current directory


I would like to have tmux to automatically rename the window with the current working directory (cwd). As it is by default, it names the tab/window as the name of the current process, such as zsh or vim.

When I open a new window in tmux, the name is reattach-to-use-namespace and then it immediately switches to zsh.

tmux tabs

I'm on OS X 10.10.2, I use zshell, and I have tmux 1.9a.

To be clear, I don't want the entire path in the name of the window, just the current directory, so for example, I want projectName, not /Users/username/Development/projectName.

If you want to see my current tmux.conf, here it is.


Solution

  • Expanding on what Josef wrote, you can put the basename of the directory in the status using a shell snippet:

    # be sure to see note* below
    set -g window-status-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
    set -g window-status-current-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
    
    # status bar updates every 15s by default**, change to 1s here 
    # (this step is optional - a lower latency might have negative battery/cpu usage impacts)
    set -g status-interval 1
    

    *Note that what would be ${pwd##*/} is escaped to ${pwd####*/} since # has special meaning in the format string.

    **See here for an example default tmux config.