Annotation of embedaddon/tmux/FAQ, revision 1.1

1.1     ! misho       1: tmux frequently asked questions
        !             2: 
        !             3: ******************************************************************************
        !             4: * PLEASE NOTE: most display problems are due to incorrect TERM! Before       *
        !             5: * reporting problems make SURE that TERM settings are correct inside and     *
        !             6: * outside tmux.                                                              *
        !             7: *                                                                            *
        !             8: * Inside tmux TERM must be "screen" or similar (such as "screen-256color").  *
        !             9: * Don't bother reporting problems where it isn't!                            *
        !            10: *                                                                            *
        !            11: * Outside, it must match your terminal: particularly, use "rxvt" for rxvt    *
        !            12: * and derivatives.                                                           *
        !            13: ******************************************************************************
        !            14: 
        !            15: * How is tmux different from GNU screen?
        !            16: 
        !            17: tmux and GNU screen have many similarities. Some of the main differences I am
        !            18: aware of are (bearing in mind I haven't used screen for a few years now):
        !            19: 
        !            20: - tmux uses a client-server model. Each server has single Unix domain socket in
        !            21:   /tmp and within one server there are multiple sessions which may be attached
        !            22:   to multiple clients (terminals).
        !            23: 
        !            24:   This has advantages, notably: windows may be linked simultaneously to
        !            25:   multiple sessions; windows may be moved freely between sessions; and a client
        !            26:   may be switched between sessions easily (C-b D). There is one major
        !            27:   disadvantage: if the server crashes, game over, all sessions die. In
        !            28:   practice, however, tmux is quite stable and gets more so as people report any
        !            29:   bugs they hit :-).
        !            30: 
        !            31:   This model is different from screen, where typically each new screen instance
        !            32:   is independent. tmux supports the same behaviour by using multiple servers
        !            33:   with the -L option but it is not typically recommended.
        !            34: 
        !            35: - Different command interfaces. One of the goals of tmux is that the shell
        !            36:   should be easily usable as a scripting language - almost all tmux commands
        !            37:   can be used from the shell and behave identically whether used from the
        !            38:   shell, from a key binding or from the command prompt. Personally I also find
        !            39:   tmux's command interface much more consistent and clearer, but this is
        !            40:   subjective.
        !            41: 
        !            42: - tmux calls window names (what you see in the status line) "names", screen
        !            43:   calls them "titles".
        !            44: 
        !            45: - tmux has a multiple paste buffers. Not a major one but comes in handy quite a
        !            46:   lot.
        !            47: 
        !            48: - tmux supports automatically renaming windows to the running application
        !            49:   without gross hacks using escape sequences. Its even on by default.
        !            50: 
        !            51: - tmux has a choice of vi or emacs key layouts. Again, not major, but I use
        !            52:   emacs so if tmux did support only one key set it would be emacs and then all
        !            53:   the vi users would get humpy. Key bindings may be completely reconfigured in
        !            54:   any case.
        !            55: 
        !            56: - tmux has an option to limit the window size.
        !            57: 
        !            58: - tmux has search in windows (C-b f).
        !            59: 
        !            60: - The window split (pane) model is different. tmux has two objects, windows and
        !            61:   panes; screen has just windows. This difference has several implications:
        !            62: 
        !            63:   * In screen you can have a window appear in several layouts, in tmux a pane
        !            64:   can only be in one window (fixing this is a big todo item but quite
        !            65:   invasive).
        !            66: 
        !            67:   * tmux layouts are immutable and do not get changed unless you modify them.
        !            68: 
        !            69:   * In tmux, all panes are closed when you kill a window.
        !            70: 
        !            71:   * tmux panes do not have individual names, titles and so on.
        !            72: 
        !            73:   I think tmux's model is much easier to manage and navigate within a window,
        !            74:   but breaking panes off from and joining them to windows is more clumsy.
        !            75: 
        !            76:   tmux also has support for preset pane layouts.
        !            77: 
        !            78: - tmux's status line syntax is more readable and easier to use. I think it'd be
        !            79:   hard for anyone to argue with this. tmux doesn't support running a command
        !            80:   constantly and always using the last line of its output, commands must be run
        !            81:   again each time.
        !            82: 
        !            83: - tmux has modern, easily extended code. Again hard to argue screen is better
        !            84:   if you have looked at the code.
        !            85: 
        !            86: - tmux depends on libevent. I don't see this as a disadvantage: libevent is
        !            87:   small and portable, and on modern systems with current package management
        !            88:   systems dependencies are not an issue. libevent brings advantages in code
        !            89:   simplicity and performance.
        !            90: 
        !            91: - screen allows the window to be bigger than the terminal and can pan around
        !            92:   it. tmux limits the size to the largest attached client. This is a big todo
        !            93:   item for tmux but it is not trivial.
        !            94: 
        !            95: - screen has builtin serial and telnet support; this is bloat and is unlikely
        !            96:   to be added to tmux.
        !            97: 
        !            98: - Environment handling is different.
        !            99: 
        !           100: - tmux tends to be more demanding on the terminal so tends to show up terminal
        !           101:   and application bugs which screen does not.
        !           102: 
        !           103: - screen has wider platform support, for example IRIX, and for odd terminals.
        !           104: 
        !           105: * I found a bug! What do I do?
        !           106: 
        !           107: Check the latest version of tmux from Git to see if the problem is still
        !           108: reproducible.  Sometimes the length of time between releases means a lot of
        !           109: fixes can be sitting in Git and the problem might already be fixed.
        !           110: 
        !           111: Please send bug reports by email to nicholas.marriott@gmail.com or
        !           112: tmux-users@googlegroups.com. Please include as much of the following
        !           113: information as possible:
        !           114: 
        !           115: - the version of tmux you are running;
        !           116: - the operating system you are using and its version;
        !           117: - the terminal emulator you are using and the TERM setting when tmux was
        !           118:   started;
        !           119: - a description of the problem;
        !           120: - if the problem is repeatable, the steps to repeat the problem;
        !           121: - for screen corruption issues, a screenshot and the output of "infocmp $TERM"
        !           122:   from outside tmux are often very useful.
        !           123: 
        !           124: * Why doesn't tmux do $x?
        !           125: 
        !           126: Please send feature requests by email to tmux-users@googlegroups.com.
        !           127: 
        !           128: * Why do you use the screen terminal description inside tmux? It sucks.
        !           129: 
        !           130: It is already widely available. It is planned to change to something else such
        !           131: as xterm-xfree86 at some point, if possible.
        !           132: 
        !           133: * I don't see any colour in my terminal! Help!
        !           134: 
        !           135: On some platforms, common terminal descriptions such as xterm do not include
        !           136: colour. screen ignores this, tmux does not. If the terminal emulator in use
        !           137: supports colour, use a value for TERM which correctly lists this, such as
        !           138: xterm-color.
        !           139: 
        !           140: * tmux freezes my terminal when I attach to a session. I even have to kill -9
        !           141:   the shell it was started from to recover!
        !           142: 
        !           143: Some consoles really really don't like attempts to set the window title. Tell
        !           144: tmux not to do this by turning off the "set-titles" option (you can do this
        !           145: in .tmux.conf):
        !           146: 
        !           147:      set -g set-titles off
        !           148: 
        !           149: If this doesn't fix it, send a bug report.
        !           150: 
        !           151: * Why is C-b the prefix key? How do I change it?
        !           152: 
        !           153: The default key is C-b because the prototype of tmux was originally developed
        !           154: inside screen and C-b was chosen not to clash with the screen meta key. It
        !           155: also has the advantage of not interfering with the use of C-a for start-of-line
        !           156: in emacs and the shell (although it does interfere with previous-character).
        !           157: 
        !           158: Changing is simple: change the "prefix-key" option, and - if required - move
        !           159: the binding of the "send-prefix" command from C-b (C-b C-b sends C-b by
        !           160: default) to the new key. For example:
        !           161: 
        !           162:        set -g prefix C-a
        !           163:        unbind C-b
        !           164:        bind C-a send-prefix
        !           165: 
        !           166: * How do I use UTF-8?
        !           167: 
        !           168: When running tmux in a UTF-8 capable terminal, UTF-8 must be turned on in tmux;
        !           169: as of release 0.9, tmux attempts to autodetect a UTF-8-capable terminal by
        !           170: checking the LC_ALL, LC_CTYPE and LANG environment variables. list-clients may
        !           171: be used to check if this is detected correctly; if not, the -u command-line
        !           172: flag may be specified when creating or attaching a client to a tmux session:
        !           173: 
        !           174:        $ tmux -u new
        !           175: 
        !           176: Since the 1.0 release, tmux will turn on UTF-8 related options automatically
        !           177: (ie status-utf8, and utf8) if the above conditions are met.
        !           178: 
        !           179: * How do I use a 256 colour terminal?
        !           180: 
        !           181: Provided the underlying terminal supports 256 colours, it is usually sufficient
        !           182: to add the following to ~/.tmux.conf:
        !           183: 
        !           184:        set -g default-terminal "screen-256color"
        !           185: 
        !           186: Note that some platforms do not support "screen-256color" ("infocmp
        !           187: screen-256color" will return an error) - in this case see the next entry in
        !           188: this FAQ.
        !           189: 
        !           190: tmux attempts to detect a 256 colour terminal both by looking at the colors
        !           191: terminfo entry and by looking for the string "256col" in the TERM environment
        !           192: variable.
        !           193: 
        !           194: If both these methods fail, the -2 flag may be passed to tmux when attaching
        !           195: to a session to indicate the terminal supports 256 colours.
        !           196: 
        !           197: * vim or $otherprogram doesn't display 256 colours. What's up?
        !           198: 
        !           199: Some programs attempt to detect the number of colours a terminal is capable of
        !           200: by checking the colors terminfo or Co termcap entry. However, this is not
        !           201: reliable, and in any case is missing from the "screen" terminal description
        !           202: used inside tmux.
        !           203: 
        !           204: There are two options (aside from using "screen-256color") to allow programs to
        !           205: recognise they are running on a 256-colour terminal inside tmux:
        !           206: 
        !           207: - Manually force the application to use 256 colours always or if TERM is set to
        !           208:   screen. For vim, you can do this by overriding the t_Co option, see
        !           209:   http://vim.wikia.com/wiki/256_colors_in_vim.
        !           210: - Creating a custom terminfo file that includes colors#256 in ~/.terminfo and
        !           211:   using it instead. These may be compiled with tic(1).
        !           212: 
        !           213: * How do I make Ctrl-PgUp and Ctrl-PgDn work in vim?
        !           214: 
        !           215: tmux supports passing through ctrl (and where supported by the client terminal,
        !           216: alt and shift) modifiers to function keys using xterm(1)-style key sequences.
        !           217: This may be enabled per window, or globally with the tmux command:
        !           218: 
        !           219:        setw -g xterm-keys on
        !           220: 
        !           221: Because the TERM variable inside tmux must be set to "screen", vim will not
        !           222: automatically detect these keys are available; however, the appropriate key
        !           223: sequences can be overridden in .vimrc using the following:
        !           224: 
        !           225:        if &term == "screen"
        !           226:        set t_kN=^[[6;*~
        !           227:        set t_kP=^[[5;*~
        !           228:        endif
        !           229: 
        !           230: And similarly for any other keys for which modifiers are desired.
        !           231: 
        !           232: Please note that the "xterm-keys" setting may affect other programs, in the
        !           233: same way as running them in a standard xterm; for example most shells do not
        !           234: expect to receive xterm(1)-style key sequences so this setting may prevent keys
        !           235: such as ctrl-left and ctrl-right working correctly. tmux also passes through
        !           236: the ctrl (bit 5 set, for example ^[[5~ to ^[[5^) modifier in non-xterm(1) mode;
        !           237: it may be possible to configure vim to accept these, an example of how to do so
        !           238: would be welcome.
        !           239: 
        !           240: vim users may also want to set the "ttyfast" option inside tmux.
        !           241: 
        !           242: * How do I make ctrl and shift arrow keys work in emacs?
        !           243: 
        !           244: The terminal-init-screen function in term/screen.el is called for new frames,
        !           245: but it doesn't configure any function keys.
        !           246: 
        !           247: If the tmux xterm-keys option is on, it is enough to define the same keys as
        !           248: xterm. Add the following to init.el or .emacs to do this:
        !           249: 
        !           250: (defadvice terminal-init-screen
        !           251:   ;; The advice is named `tmux', and is run before `terminal-init-screen' runs.
        !           252:   (before tmux activate)
        !           253:   ;; Docstring.  This describes the advice and is made available inside emacs;
        !           254:   ;; for example when doing C-h f terminal-init-screen RET
        !           255:   "Apply xterm keymap, allowing use of keys passed through tmux."
        !           256:   ;; This is the elisp code that is run before `terminal-init-screen'.
        !           257:   (if (getenv "TMUX")
        !           258:     (let ((map (copy-keymap xterm-function-map)))
        !           259:     (set-keymap-parent map (keymap-parent input-decode-map))
        !           260:     (set-keymap-parent input-decode-map map))))
        !           261: 
        !           262: And ensure .tmux.conf contains "set -g xterm-keys on".
        !           263: 
        !           264: Alternatively, the screen.el file can be copied to the load path and
        !           265: customized.
        !           266: 
        !           267: * Why doesn't elinks set the window title inside tmux?
        !           268: 
        !           269: There isn't a way to detect if a terminal supports setting the window title, so
        !           270: elinks attempts to guess by looking at the environment. Rather than looking for
        !           271: TERM=screen, it uses the STY variable to detect if it is running in screen;
        !           272: tmux does not use this so the check fails. A workaround is to set STY before
        !           273: running elinks.
        !           274: 
        !           275: The following shell function does this, and also clears the window title on
        !           276: exit (elinks, for some strange reason, sets it to the value of TERM):
        !           277: 
        !           278:        elinks() {
        !           279:                STY= `which elinks` $*
        !           280:                echo -ne \\033]0\;\\007;
        !           281:        }
        !           282: 
        !           283: * What is the proper way to escape characters with #(command)?
        !           284: 
        !           285: When using the #(command) construction to include the output from a command in
        !           286: the status line, the command will be parsed twice. First, when it's read by the
        !           287: configuration file or the command-prompt parser, and second when the status
        !           288: line is being drawn and the command is passed to the shell. For example, to
        !           289: echo the string "(test)" to the status line, either single or double quotes
        !           290: could be used:
        !           291: 
        !           292:        set -g status-right "#(echo \\\\(test\\\\))"
        !           293:        set -g status-right '#(echo \\\(test\\\))'
        !           294: 
        !           295: In both cases, the status-right option will be set to the string "#(echo
        !           296: \\(test\\))" and the command executed will be "echo \(test\)".
        !           297: 
        !           298: * tmux uses too much CPU. What do I do?
        !           299: 
        !           300: Automatic window renaming may use a lot of CPU, particularly on slow computers:
        !           301: if this is a problem, turn it off with "setw -g automatic-rename off". If this
        !           302: doesn't fix it, please report the problem.
        !           303: 
        !           304: * I use PuTTY and my tmux window pane separators are all qqqqqqqqq's! 
        !           305: 
        !           306: PuTTY is using a character set translation that doesn't support ACS line
        !           307: drawing. With a Unicode font, try setting PuTTY to use a different translation
        !           308: on the Window -> Translation configuration page. For example, change UTF-8 to
        !           309: ISO-8859-1 or CP437. It may also be necessary to adjust the way PuTTY treats
        !           310: line drawing characters in the lower part of the same configuration page.
        !           311: 
        !           312: * What is the best way to display the load average? Why no #L?
        !           313: 
        !           314: It isn't possible to get the load average portably in code and it is preferable
        !           315: not to add portability goop. The following works on at least Linux, *BSD and OS
        !           316: X:
        !           317: 
        !           318: uptime|awk '{split(substr($0, index($0, "load")), a, ":"); print a[2]}'
        !           319: 
        !           320: * How do I attach the same session to multiple clients but with a different
        !           321:   current window, like screen -x?
        !           322: 
        !           323: One or more of the windows can be linked into multiple sessions manually with
        !           324: link-window, or a grouped session with all the windows can be created with
        !           325: new-session -t.
        !           326: 
        !           327: * Ctrl and arrow keys doesn't work in putty! What do I do?
        !           328: 
        !           329: putty inverts the sense of the cursor key mode on ctrl, which is a bit hard for
        !           330: tmux to detect properly. To get ctrl keys right, change the terminfo settings
        !           331: so kUP5 (Ctrl-Up etc) are the adjusted versions, and disable smkx/rmkx so tmux
        !           332: doesn't change the mode. For example with this line in .tmux.conf (assuming you
        !           333: have TERM set to xterm):
        !           334: 
        !           335: set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"
        !           336: 
        !           337: Note that this will only work in tmux 1.2 and above.
        !           338: 
        !           339: * How can I blank the tmux window?
        !           340: 
        !           341: GNU screen has a feature whereby it will blank the screen after a period of
        !           342: inactivity. To do the same thing in tmux, use the lock-command setting, for
        !           343: example (with GNU bash):
        !           344: 
        !           345: set -g lock-command 'tput civis && read -s -n1'
        !           346: 
        !           347: This will remove the cursor and tell the shell to quit once a key has been
        !           348: pressed. For zsh, use "read -s -k1".
        !           349: 
        !           350: In addition, it's possible to have both blanking and locking (for instance via
        !           351: lock(1) or vlock(1)) by using the following:
        !           352: 
        !           353: bind x set lock-command '/usr/bin/vlock' \; lock-client \; set lock-command 'tput civis && read -s -n1'
        !           354: 
        !           355: * I don't see italics! Or less and vim show italics and reverse the wrong way round!
        !           356: 
        !           357: GNU screen does not support italics and the "screen" terminfo description uses
        !           358: the italics escape sequence incorrectly.
        !           359: 
        !           360: As of tmux 2.1, if default-terminal is set to "screen" or matches "screen-*",
        !           361: tmux will behave like screen and italics will be disabled.
        !           362: 
        !           363: To enable italics, create a new terminfo entry called "tmux" (some platforms
        !           364: may already have this, you can check with "infocmp tmux"):
        !           365: 
        !           366:        $ cat <<EOF|tic -x -
        !           367:        tmux|tmux terminal multiplexer,
        !           368:                ritm=\E[23m, rmso=\E[27m, sitm=\E[3m, smso=\E[7m, Ms@,
        !           369:                use=xterm+tmux, use=screen,
        !           370: 
        !           371:        tmux-256color|tmux with 256 colors,
        !           372:                use=xterm+256setaf, use=tmux,
        !           373:        EOF
        !           374:        $
        !           375: 
        !           376: And tell tmux to use it in ~/.tmux.conf:
        !           377:        
        !           378:        set -g default-terminal "tmux"
        !           379: 
        !           380: If using urxvt, make sure you have an italics capable font enabled. for
        !           381: example, add to ~/.Xdefaults:
        !           382: 
        !           383:        urxvt.italicFont: xft:Bitstream Vera Sans Mono:italic:autohint=true
        !           384: 
        !           385: * How can I make tmux use my terminal's scrollback buffer?
        !           386: 
        !           387: Normally, tmux enables the terminal's "alternate screen". Most terminals (such
        !           388: as xterm) do not save scrollback for the alternate screen. You might prefer
        !           389: tmux to use the normal screen, so it uses your terminal's scrollback
        !           390: buffer. This way, you can access the scrollback buffer as usual, for example
        !           391: using the mouse wheel - although there is no guarantee output inside tmux will
        !           392: always (or ever) be added to the scrollback.
        !           393: 
        !           394: You can make tmux use the normal screen by telling it that your terminal does
        !           395: not have an alternate screen. Put the following in ~/.tmux.conf:
        !           396: 
        !           397:         set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
        !           398: 
        !           399: Adjust if your $TERM does not start with xterm.
        !           400: 
        !           401: tmux will still emulate the alternate screen for applications run under tmux,
        !           402: so you don't really lose anything with this setting. The only disadvantage is
        !           403: that when you exit tmux, it will not restore whatever was there before you
        !           404: started.
        !           405: 
        !           406: * How do I see the default configuration?
        !           407: 
        !           408: Show the default session options by starting a new tmux server with no
        !           409: configuration file:
        !           410: 
        !           411:         $ tmux -Lfoo -f/dev/null start\; show -g
        !           412: 
        !           413: Or the default window options:
        !           414: 
        !           415:         $ tmux -Lfoo -f/dev/null start\; show -gw
        !           416: 
        !           417: * How do I copy a selection from tmux to the system's clipboard?
        !           418: 
        !           419: When running in xterm(1), tmux can automatically send copied text to the
        !           420: clipboard. This is controlled by the set-clipboard option and also needs this
        !           421: X resource to be set:
        !           422: 
        !           423:        XTerm*disallowedWindowOps: 20,21,SetXprop
        !           424: 
        !           425: For rxvt-unicode (urxvt), there is an unofficial Perl extension here:
        !           426: 
        !           427:         http://anti.teamidiot.de/static/nei/*/Code/urxvt/
        !           428: 
        !           429: Otherwise a key binding for copy mode using xclip (or xsel) works:
        !           430: 
        !           431:        bind -temacs-copy C-y copy-pipe "xclip -i >/dev/null"
        !           432: 
        !           433: Or for inside and outside copy mode with the prefix key:
        !           434: 
        !           435:         bind C-y run -b "tmux save-buffer - | xclip -i"
        !           436: 
        !           437: On OS X, look at the pbcopy(1) and pbpaste(1) commands.
        !           438: 
        !           439: * Why don't some commands work inside tmux on OS X?
        !           440: 
        !           441: Apple requires some undocumented, unsupported fiddling to allow commands that
        !           442: interact with the GUI to work. Neither tmux itself nor most shells do this, so
        !           443: an external program is required. This can be found here:
        !           444: 
        !           445:         https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
        !           446: 
        !           447: Affected commands may include say(1), pbcopy(1), pbpaste(1) and ssh(1).
        !           448: 
        !           449: * Why do I see dots around a session when I attach to it?
        !           450: 
        !           451: tmux limits the size of the window to the smallest attached session. If
        !           452: it didn't do this then it would be impossible to see the entire window.
        !           453: The dots mark the size of the window tmux can display.
        !           454: 
        !           455: To avoid this, detach all other clients when attaching:
        !           456: 
        !           457:        $ tmux attach -d
        !           458: 
        !           459: Or from inside tmux by detaching individual clients with C-b D or all
        !           460: using:
        !           461: 
        !           462:        C-b : attach -d

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>