Des raccourcis clavier en veux-tu en voilà

Ranger sauce Emacs

Ce qu’il y a de bien avec les logiciels bien écrit, c’est que même lorsqu’ils sont conçu dans une certaine optique, leur adaptation reste possible à la marge, permettant au plus grand nombre d’en profiter. C’est le cas par exemple de l’explorateur de fichier ranger.

Il s’agit d’un explorateur de fichier en mode texte (ncurse) écrit en python (compatible python2 ou 3) et utilisant comme seul paradigme de navigation le principe des colonnes de Miller. La plupart des barbus l’apprécient pour sa légèreté, tout en offrant un nombre de fonctionnalité impressionnant dans une interface rafraîchissante.

Malheureusement, il a été conçu principalement par des gens utilisant vi, connu pour ses raccourcis tout sauf évidents. Heureusement, les raccourcis sont personnalisables.

Voici donc ma petite contribution pour ne plus se torturer l’esprit trop longtemps sur des choses simples, tout en bénéficiant de la puissance de ranger. Cette config est à ajouter à votre fichier ~/.config/ranger/rc.conf

map <A-x>       console
map <C-x>k      tab_close
map <C-x>b<any> tab_open name=%any
map <C-x><C-f>  console cd

copymap <C-n> <C-t>
copymap yy    <A-w>
copymap pp    <C-y>
copymap dd    <C-w>
copymap q     <C-x><C-c>
copymap <C-c> <C-g>

copycmap <ESC> <C-g>

map *         tag_toggle
map t<any>    tag_toggle tag=%any
map gm        eval import getpass; fm.cd('/run/media/' + getpass.getuser())

La dernière ligne n’est pas nécessaire si vos médias amovibles sont montés dans /media/ ou /mnt/ (options déjà proposées par ranger).

Tmux, des onglets dans le terminal

Pendant un long moment, j’ai utilisé un hack du module perl tabs développé par Yoran pour ajouter des onglets à rxvt-unicode. Mais lorsque j’ai changé de PC, très récemment, impossible de refaire fonctionner ce module.

Comme en parallèle, pour le boulot, j’avais commencé à m’intéresser sérieusement aux multiplexeurs de terminaux et en particulier à tmux.

Sauf que voilà, rebelote, tmux est fourni en natif avec des raccourcis claviers… étranges. Cette fois-ci, pourtant, une option existe bien pour demander l’utilisation de raccourcis à la emacs. Mais d’autres choses m’ennuyaient (pourquoi utiliser C-b comme préfixe de commande plutôt que de s’harmoniser avec screen et son C-a ?). Comme j’ai horreur d’apprendre dix milles choses différentes, je me suis attelé à sa reconfiguration, que voilà.

Cette configuration est à placer dans votre fichier ~/.tmux.conf. Je la découpe néanmoins en trois parties distinct pour plus de clarté selon ce que vous souhaitez récupérer ou pas.

Configuration générale

Il s’agissait principalement ici de dire à tmux de ne surtout pas fonctionner comme un shell de connexion, d’utiliser bash de la manière la plus simple et de fixer la taille des lignes d’écran sauvegardées.

set-option -g default-command /bin/bash
set-option -g set-titles on
set-option -g set-titles-string "[#S@#H] #W"
set-option -g default-terminal "screen-256color"
set-option -g history-limit 10000
set-option -g prefix C-a

set-window-option -g automatic-rename on

Raccourcis clavier

Il s’agissait principalement ici de trouver, à mon sens, un peu plus de logique dans les touches utilisées. Je me suis également rapproché de l’usage courant que j’ai sous awesome ou emacs pour naviguer entre les panneaux/fenêtres.

unbind-key C-b
unbind-key (
unbind-key )
unbind-key [
unbind-key ]
unbind-key '"'
unbind-key '$'
unbind-key !
unbind-key ,

bind-key    C-a     send-prefix

bind-key    =       splitw -v
bind-key    b       breakp
bind-key    c       clock-mode
bind-key    n       switch-client -n
bind-key    p       switch-client -p
bind-key    r       command-prompt -I "#W" "rename-window '%%'"
bind-key    s       command-prompt -I "#P" "joinp -h -s:'%%'"
bind-key    t       new-window
bind-key    y       choose-buffer
bind-key    O       select-pane -t :.-
bind-key    R       command-prompt -I "#S" "rename-session '%%'"
bind-key    S       command-prompt -I "#P" "joinp -v -s:'%%'"
bind-key    C-r     refresh-client
bind-key    C-y     paste-buffer
bind-key    PPage   copy-mode
bind-key -n M-t     new-window
bind-key -n M-left  previous-window
bind-key -n M-right next-window

Thème de couleurs

# default statusbar colors
set-option -g status-bg black
set-option -g status-fg white
set-option -g status-attr default
set-option -g status-left "#[fg=green][#S]"
set-option -g status-left-length 30
set-option -g status-right "(#T) %d/%m/%Y %H:%M"
# default window title colors
set-window-option -g window-status-bg black
set-window-option -g window-status-fg white
# active window title colors
set-window-option -g window-status-current-bg red
set-window-option -g window-status-current-fg white
# pane border
set-option -g pane-border-fg black
set-option -g pane-active-border-fg red
# message text
set-option -g message-bg black
set-option -g message-fg yellow
# pane number display
set-option -g display-panes-active-colour red
set-option -g display-panes-colour white
# clock
set-window-option -g clock-mode-colour green