mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	FAQ about xterm-keys in emacs and vim, from Mark Oteiza.
This commit is contained in:
		
							
								
								
									
										25
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								FAQ
									
									
									
									
									
								
							@@ -238,6 +238,31 @@ would be welcome.
 | 
			
		||||
 | 
			
		||||
vim users may also want to set the "ttyfast" option inside tmux.
 | 
			
		||||
 | 
			
		||||
* How do I make ctrl and shift arrow keys work in emacs?
 | 
			
		||||
 | 
			
		||||
The terminal-init-screen function in term/screen.el is called for new frames,
 | 
			
		||||
but it doesn't configure any function keys.
 | 
			
		||||
 | 
			
		||||
If the tmux xterm-keys option is on, it is enough to define the same keys as
 | 
			
		||||
xterm. Add the following to init.el or .emacs to do this:
 | 
			
		||||
 | 
			
		||||
(defadvice terminal-init-screen
 | 
			
		||||
  ;; The advice is named `tmux', and is run before `terminal-init-screen' runs.
 | 
			
		||||
  (before tmux activate)
 | 
			
		||||
  ;; Docstring.  This describes the advice and is made available inside emacs;
 | 
			
		||||
  ;; for example when doing C-h f terminal-init-screen RET
 | 
			
		||||
  "Apply xterm keymap, allowing use of keys passed through tmux."
 | 
			
		||||
  ;; This is the elisp code that is run before `terminal-init-screen'.
 | 
			
		||||
  (if (getenv "TMUX")
 | 
			
		||||
    (let ((map (copy-keymap xterm-function-map)))
 | 
			
		||||
    (set-keymap-parent map (keymap-parent input-decode-map))
 | 
			
		||||
    (set-keymap-parent input-decode-map map))))
 | 
			
		||||
 | 
			
		||||
And ensure .tmux.conf contains "set -g xterm-keys on".
 | 
			
		||||
 | 
			
		||||
Alternatively, the screen.el file can be copied to the load path and
 | 
			
		||||
customized.
 | 
			
		||||
 | 
			
		||||
* Why doesn't elinks set the window title inside tmux?
 | 
			
		||||
 | 
			
		||||
There isn't a way to detect if a terminal supports setting the window title, so
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								examples/xterm-keys.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								examples/xterm-keys.vim
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
" tmux.vim - Set xterm input codes passed by tmux
 | 
			
		||||
" Author:        Mark Oteiza
 | 
			
		||||
" License:       Public domain
 | 
			
		||||
" Description:   Simple plugin that assigns some xterm(1)-style keys to escape
 | 
			
		||||
" sequences passed by tmux when "xterm-keys" is set to "on".  Inspired by an
 | 
			
		||||
" example given by Chris Johnsen at:
 | 
			
		||||
"     https://stackoverflow.com/a/15471820
 | 
			
		||||
"
 | 
			
		||||
" Documentation: help:xterm-modifier-keys man:tmux(1)
 | 
			
		||||
 | 
			
		||||
if exists("g:loaded_tmux") || &cp
 | 
			
		||||
  finish
 | 
			
		||||
endif
 | 
			
		||||
let g:loaded_tmux = 1
 | 
			
		||||
 | 
			
		||||
function! s:SetXtermCapabilities()
 | 
			
		||||
  set ttymouse=sgr
 | 
			
		||||
 | 
			
		||||
  execute "set <xUp>=\e[1;*A"
 | 
			
		||||
  execute "set <xDown>=\e[1;*B"
 | 
			
		||||
  execute "set <xRight>=\e[1;*C"
 | 
			
		||||
  execute "set <xLeft>=\e[1;*D"
 | 
			
		||||
 | 
			
		||||
  execute "set <xHome>=\e[1;*H"
 | 
			
		||||
  execute "set <xEnd>=\e[1;*F"
 | 
			
		||||
 | 
			
		||||
  execute "set <Insert>=\e[2;*~"
 | 
			
		||||
  execute "set <Delete>=\e[3;*~"
 | 
			
		||||
  execute "set <PageUp>=\e[5;*~"
 | 
			
		||||
  execute "set <PageDown>=\e[6;*~"
 | 
			
		||||
 | 
			
		||||
  execute "set <xF1>=\e[1;*P"
 | 
			
		||||
  execute "set <xF2>=\e[1;*Q"
 | 
			
		||||
  execute "set <xF3>=\e[1;*R"
 | 
			
		||||
  execute "set <xF4>=\e[1;*S"
 | 
			
		||||
 | 
			
		||||
  execute "set <F5>=\e[15;*~"
 | 
			
		||||
  execute "set <F6>=\e[17;*~"
 | 
			
		||||
  execute "set <F7>=\e[18;*~"
 | 
			
		||||
  execute "set <F8>=\e[19;*~"
 | 
			
		||||
  execute "set <F9>=\e[20;*~"
 | 
			
		||||
  execute "set <F10>=\e[21;*~"
 | 
			
		||||
  execute "set <F11>=\e[23;*~"
 | 
			
		||||
  execute "set <F12>=\e[24;*~"
 | 
			
		||||
 | 
			
		||||
  execute "set t_kP=^[[5;*~"
 | 
			
		||||
  execute "set t_kN=^[[6;*~"
 | 
			
		||||
endfunction
 | 
			
		||||
 | 
			
		||||
if exists('$TMUX')
 | 
			
		||||
  call s:SetXtermCapabilities()
 | 
			
		||||
		Reference in New Issue
	
	Block a user