###############################################################################
#    Byobu f-key keybindings
#      This configuration profile is intended to provide a useful
#      keybindings using the keyboard's f-keys
#
#    Copyright (C) 2008-2011	Dustin Kirkland <kirkland@ubuntu.com>
#				Nick Barcet <nick.barcet@canonical.com>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, version 3 of the License.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
###############################################################################

# Byobu's escape key is ASCII Dec:94, Hex:5E, Oct:136, Char: ctrl-^ -- ctrl-caret
# which is bound to F12
escape ^^^^
register x "^^"						#     | Goes with the F12 definition

# F-keys seem to work well in both gnome-terminal and tty consoles
bindkey -k k1 $BYOBU_BACKEND -t config 0 byobu-config	# F1  | Configuration (along with F9)
							#     | since F1 = Help in gnome-terminal
bindkey -k k2 $BYOBU_BACKEND				# F2  | Create new window
bindkey -k k3 eval 'prev' 'fit'				# F3  | Previous Window
bindkey -k k4 eval 'next' 'fit'				# F4  | Next Window
register r ":source $BYOBU_CONFIG_DIR/profile^M"	#     | Goes with F5 definition
bindkey -k k5 eval 'process x' 'process r'		# F5  | Reload profile
bindkey -k k6 detach					# F6  | Detach from this session
bindkey -k k7 copy					# F7  | Enter copy/scrollback mode
register t "A^[OH^k^h"					#     | Goes with the F8 definition
bindkey -k k8 eval 'process x' 'process t'		# F8  | Re-title a window
bindkey -k k9 $BYOBU_BACKEND -t config 0 byobu-config	# F9  | Configuration
							# F10 | 'toolbar' in gnome-terminal
							# F11 | 'Full Screen' in gnome-terminal
bindkey -k F2 process x					# F12 | Byobu's escape key
bind $ $BYOBU_BACKEND -t status 0 byobu-status-detail	# F12 $ | show detailed status
bind @ $BYOBU_BACKEND -t config 0 byobu-config		# F12 @ | Configuration
bind R process r					# F12 R | Reload profile
register s "[g G$>^h"					# Goes with F12 ~ definition
bind ~ eval 'process x' 'process s' 'exec $SED -i -e "/./,/^$/!d" $BYOBU_RUN_DIR/printscreen' '$BYOBU_BACKEND -t PRINTSCREEN view $BYOBU_RUN_DIR/printscreen' # F12 ~ | write the buffer to file, open in a new window

# Hotkeys for splits (gnome-terminal)
bindkey "^[O1;2Q" eval 'split' 'focus down' 'next' 'focus up' 'layout save byobu' 'layout autosave'	# shift-F2 | horizontal split
bindkey "^[O1;5Q" eval 'split -v' 'focus down' 'next' 'focus up' 'layout save byobu' 'layout autosave'	# ctrl-F2  | vertical split
bindkey "^[O1;2R" focus up						# shift-F3 | focus up
bindkey "^[O1;2S" focus down						# shift-F4 | focus down
bindkey "^[[15;2~" only							# shift-F5 | kill all splits
bindkey "^[[17;5~" remove						# ctrl-F6  | kill this split

# Hotkeys for splits (tty)
bindkey "^[[26~" eval 'split' 'focus down' 'next' 'focus up'		# shift-F2 | horizontal split
									# ctrl-F2  | sadly, does not work in tty :-(
bindkey "^[[28~" focus up						# shift-F3 | focus up
bindkey "^[[29~" focus down						# shift-F4 | focus down
bindkey "^[[31~" only							# shift-F5 | kill all splits
									# ctrl-F6  | sadly, does not work in tty :-(

# Make it more logical how to enter scrollback
register p "^[[5~"
bindkey "^[[5;3~" eval 'msgwait 0' 'msgminwait 0' 'copy' 'process p' 'msgwait 1' 'echo "Byobu scrollback mode (alt-pgup / alt-pgdown)"' # alt-pageup | scrollback
register n "^[[6~"
bindkey "^[[6;3~" eval 'msgwait 0' 'msgminwait 0' 'copy' 'process n' 'msgwait 1' 'echo "Byobu scrollback mode (alt-pgup / alt-pgdown)"' # alt-pagedn | scrollback

# Make socket reconnection a little easier
bindkey "^[[15;5~" eval 'process x' 'process r' 'stuff ". $BYOBU_PREFIX/bin/byobu-reconnect-sockets^M"' # ctrl-F5 | reconnect gpg/ssh/x sockets

# Detach from an auto-launched byobu, but don't log out of the shell
bindkey "^[[17;2~" eval 'exec touch $BYOBU_RUN_DIR/no-logout' 'detach'   # shift-F6 | detach, but don't logout
bindkey "^[[32~" eval 'exec touch $BYOBU_RUN_DIR/no-logout' 'detach'	# shift-F6 | detach, but don't logout

# toggle f-key keybindings off
register d ":source $BYOBU_PREFIX/share/byobu/keybindings/screen-escape-keys^M"
bind ! eval 'process x' 'process d' 'backtick 111 9999999 9999999 byobu-status menu --disable-f-keys'	# F12 ! | toggle on/off f-keys

bindkey "^A" $BYOBU_BACKEND -t ctrl-a byobu-ctrl-a
