From fe6f520054cc324911505a6c370a7b5cbe2f6d23 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 22 Feb 2014 17:35:41 +0000 Subject: [PATCH] FAQ about xterm-keys in emacs and vim, from Mark Oteiza. --- FAQ | 25 ++++++++++++++++++++ examples/xterm-keys.vim | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 examples/xterm-keys.vim diff --git a/FAQ b/FAQ index da72d433..6181ad89 100644 --- a/FAQ +++ b/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 diff --git a/examples/xterm-keys.vim b/examples/xterm-keys.vim new file mode 100644 index 00000000..907eb110 --- /dev/null +++ b/examples/xterm-keys.vim @@ -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 =\e[1;*A" + execute "set =\e[1;*B" + execute "set =\e[1;*C" + execute "set =\e[1;*D" + + execute "set =\e[1;*H" + execute "set =\e[1;*F" + + execute "set =\e[2;*~" + execute "set =\e[3;*~" + execute "set =\e[5;*~" + execute "set =\e[6;*~" + + execute "set =\e[1;*P" + execute "set =\e[1;*Q" + execute "set =\e[1;*R" + execute "set =\e[1;*S" + + execute "set =\e[15;*~" + execute "set =\e[17;*~" + execute "set =\e[18;*~" + execute "set =\e[19;*~" + execute "set =\e[20;*~" + execute "set =\e[21;*~" + execute "set =\e[23;*~" + execute "set =\e[24;*~" + + execute "set t_kP=^[[5;*~" + execute "set t_kN=^[[6;*~" +endfunction + +if exists('$TMUX') + call s:SetXtermCapabilities()