tmux: add a prefix option overruling shortcut if defined
Previously, it was not possible to set an arbitrary tmux prefix since CTRL was hardcoded in the module. To avoid breaking existing configs, a new option was implemented that conveniently uses the tmux terminology but defaults to null and does not affect previous behavior when set to null. The behavior for the shortcut option was not completely replicated, i.e., it does not bind "b" to send-prefix but stick to the default of the prefix binding sending prefix (C-b C-b instead of C-b b) and it does not bind repetition of the prefix (C-b C-b) to `last-window`, both of these bring the option closer to the default tmux configuration. Fixes #1237
This commit is contained in:
parent
e87bccabc3
commit
a1162e04b3
|
@ -68,13 +68,21 @@ let
|
||||||
bind -r L resize-pane -R ${toString cfg.resizeAmount}
|
bind -r L resize-pane -R ${toString cfg.resizeAmount}
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.shortcut != defaultShortcut) ''
|
${if cfg.prefix != null
|
||||||
# rebind main key: C-${cfg.shortcut}
|
then ''
|
||||||
unbind C-${defaultShortcut}
|
# rebind main key: ${cfg.prefix}
|
||||||
set -g prefix C-${cfg.shortcut}
|
unbind C-${defaultShortcut}
|
||||||
bind ${cfg.shortcut} send-prefix
|
set -g prefix ${cfg.prefix}
|
||||||
bind C-${cfg.shortcut} last-window
|
bind ${cfg.prefix} send-prefix
|
||||||
''}
|
''
|
||||||
|
else optionalString (cfg.shortcut != defaultShortcut) ''
|
||||||
|
# rebind main key: C-${cfg.shortcut}
|
||||||
|
unbind C-${defaultShortcut}
|
||||||
|
set -g prefix C-${cfg.shortcut}
|
||||||
|
bind ${cfg.shortcut} send-prefix
|
||||||
|
bind C-${cfg.shortcut} last-window
|
||||||
|
''
|
||||||
|
}
|
||||||
|
|
||||||
${optionalString cfg.disableConfirmationPrompt ''
|
${optionalString cfg.disableConfirmationPrompt ''
|
||||||
bind-key & kill-window
|
bind-key & kill-window
|
||||||
|
@ -238,6 +246,15 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
prefix = mkOption {
|
||||||
|
default = null;
|
||||||
|
example = "C-a";
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
description = ''
|
||||||
|
Set the prefix key. Overrules the "shortcut" option when set.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
shortcut = mkOption {
|
shortcut = mkOption {
|
||||||
default = defaultShortcut;
|
default = defaultShortcut;
|
||||||
example = "a";
|
example = "a";
|
||||||
|
|
|
@ -5,4 +5,6 @@
|
||||||
tmux-secure-socket-enabled = ./secure-socket-enabled.nix;
|
tmux-secure-socket-enabled = ./secure-socket-enabled.nix;
|
||||||
tmux-disable-confirmation-prompt = ./disable-confirmation-prompt.nix;
|
tmux-disable-confirmation-prompt = ./disable-confirmation-prompt.nix;
|
||||||
tmux-default-shell = ./default-shell.nix;
|
tmux-default-shell = ./default-shell.nix;
|
||||||
|
tmux-shortcut-without-prefix = ./shortcut-without-prefix.nix;
|
||||||
|
tmux-prefix = ./prefix.nix;
|
||||||
}
|
}
|
||||||
|
|
32
tests/modules/programs/tmux/prefix.conf
Normal file
32
tests/modules/programs/tmux/prefix.conf
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# ============================================= #
|
||||||
|
# Start with defaults from the Sensible plugin #
|
||||||
|
# --------------------------------------------- #
|
||||||
|
run-shell @sensible_rtp@
|
||||||
|
# ============================================= #
|
||||||
|
|
||||||
|
set -g default-terminal "screen"
|
||||||
|
set -g base-index 0
|
||||||
|
setw -g pane-base-index 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set -g status-keys emacs
|
||||||
|
set -g mode-keys emacs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# rebind main key: C-a
|
||||||
|
unbind C-b
|
||||||
|
set -g prefix C-a
|
||||||
|
bind C-a send-prefix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
setw -g aggressive-resize off
|
||||||
|
setw -g clock-mode-style 12
|
||||||
|
set -s escape-time 500
|
||||||
|
set -g history-limit 2000
|
||||||
|
|
26
tests/modules/programs/tmux/prefix.nix
Normal file
26
tests/modules/programs/tmux/prefix.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
prefix = "C-a";
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super: {
|
||||||
|
tmuxPlugins = super.tmuxPlugins // {
|
||||||
|
sensible = super.tmuxPlugins.sensible // { rtp = "@sensible_rtp@"; };
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.tmux.conf
|
||||||
|
assertFileContent home-files/.tmux.conf \
|
||||||
|
${./prefix.conf}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
33
tests/modules/programs/tmux/shortcut-without-prefix.conf
Normal file
33
tests/modules/programs/tmux/shortcut-without-prefix.conf
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# ============================================= #
|
||||||
|
# Start with defaults from the Sensible plugin #
|
||||||
|
# --------------------------------------------- #
|
||||||
|
run-shell @sensible_rtp@
|
||||||
|
# ============================================= #
|
||||||
|
|
||||||
|
set -g default-terminal "screen"
|
||||||
|
set -g base-index 0
|
||||||
|
setw -g pane-base-index 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set -g status-keys emacs
|
||||||
|
set -g mode-keys emacs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# rebind main key: C-a
|
||||||
|
unbind C-b
|
||||||
|
set -g prefix C-a
|
||||||
|
bind a send-prefix
|
||||||
|
bind C-a last-window
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
setw -g aggressive-resize off
|
||||||
|
setw -g clock-mode-style 12
|
||||||
|
set -s escape-time 500
|
||||||
|
set -g history-limit 2000
|
||||||
|
|
27
tests/modules/programs/tmux/shortcut-without-prefix.nix
Normal file
27
tests/modules/programs/tmux/shortcut-without-prefix.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
shortcut = "a";
|
||||||
|
prefix = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(self: super: {
|
||||||
|
tmuxPlugins = super.tmuxPlugins // {
|
||||||
|
sensible = super.tmuxPlugins.sensible // { rtp = "@sensible_rtp@"; };
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.tmux.conf
|
||||||
|
assertFileContent home-files/.tmux.conf \
|
||||||
|
${./shortcut-without-prefix.conf}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue