Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ctrl+g always immediately unlocks after locking #11

Open
twilwa opened this issue Nov 28, 2024 · 12 comments
Open

Ctrl+g always immediately unlocks after locking #11

twilwa opened this issue Nov 28, 2024 · 12 comments

Comments

@twilwa
Copy link

twilwa commented Nov 28, 2024

zellij --version: ___ 0.41.2

Terminal version: ___ Alacritty 0.13.2, Cosmic Term ??

Operating system: ___ Pop! OS 24.04 alpha epoch 2

Issue description

When pressing ctrl+g inside of nvim or zellij, zellij immediately unlocks, rendering the plugin nonfunctional.

Minimal reproduction

Fresh zellij installation, dump setup from docs, https://zellij.dev/documentation/configuration

Other relevant information

ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:02.103 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:02.105 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:02.108 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:02.108 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:02.134 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:02.427 [id: 0     ] Detected command in pane: N/A!
ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:04.618 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:04.943 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:06.037 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:06.362 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:08.072 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:08.396 [id: 0     ] Detected command in pane: N/A!
ERROR  |zellij_utils::input::layo| 2024-11-28 13:17:34.337 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:34.661 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:37.357 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:38.370 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:38.657 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:38.956 [id: 0     ] Detected command in pane: /home/anon/.atuin/bin/atuin history end --exit=0 -- 019374a2fbd37e2a825af00d735f774a!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:39.280 [id: 0     ] Detected command in pane: /home/anon/.atuin/bin/atuin history end --exit=0 -- 019374a2fbd37e2a825af00d735f774a!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:41.598 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:17:41.643 [id: 0     ] Detected command in pane: N/A!
ERROR  |zellij_utils::input::layo| 2024-11-28 13:19:00.236 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:00.561 [id: 0     ] Detected command in pane: N/A!
ERROR  |zellij_utils::input::layo| 2024-11-28 13:19:17.693 [screen    ] [/home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/layout.rs:1124]: Failed to read layout dir: Os { code: 2, kind: NotFound, message: "No such file or directory" }
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:18.017 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:18.396 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:18.801 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:19.171 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:19.543 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:19.868 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:20.194 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:20.219 [id: 0     ] Detected command in pane: N/A!
DEBUG  |/home/anon/.config/zellij| 2024-11-28 13:19:20.510 [id: 0     ] Detected command in pane: N/A!

these are the logs, so I looked for the file:

~ via S
❯ cd /home/anon/.cargo/registry/src/index.crates.io-6f17d22bba15001f/zellij-utils-0.41.2/src/input/

zellij-utils-0.41.2/src/input via 🦀 v1.81.0
❯ ls
╭────┬───────────────┬──────┬──────────┬────────────────╮
│ # │ name │ type │ size │ modified │
├────┼───────────────┼──────┼──────────┼────────────────┤
│ 0 │ actions.rs │ file │ 31.6 KiB │ 18 years ago │
│ 1 │ command.rs │ file │ 3.7 KiB │ 18 years ago │
│ 2 │ config.rs │ file │ 31.6 KiB │ 18 years ago │
│ 3 │ keybinds.rs │ file │ 4.8 KiB │ 18 years ago │
│ 4 │ layout.rs │ file │ 69.4 KiB │ 18 years ago │
│ 5 │ mod.rs │ file │ 5.5 KiB │ 18 years ago │
│ 6 │ mouse.rs │ file │ 3.3 KiB │ 18 years ago │
│ 7 │ options.rs │ file │ 16.1 KiB │ 18 years ago │
│ 8 │ permission.rs │ file │ 1.9 KiB │ 18 years ago │
│ 9 │ plugins.rs │ file │ 8.1 KiB │ 18 years ago │
│ 10 │ theme.rs │ file │ 4.0 KiB │ 18 years ago │
│ 11 │ unit │ dir │ 4.0 KiB │ 16 minutes ago │
╰────┴───────────────┴──────┴──────────┴────────────────╯

layout.rs is right there, so i'm not sure what it's complaining about. I assumed I messed something up and reinstalled zellij from the top, but the issue doesn't seem to have resolved. Here's config.kdl:

// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
keybinds {
    normal {
        // uncomment this and adjust key if using copy_on_select=false
        // bind "Alt c" { Copy; }
        // Intercept 'Enter'.
        bind "Enter" {
            // Passthru `Enter`.
            WriteChars "\u{000D}";
            // Invoke autolock to immediately assess proper lock state.
            // (This provides a snappier experience compared to
            // solely relying on `reaction_seconds` to elapse.)
            MessagePlugin "autolock" {};
        }
    }
    locked {
        bind "Ctrl g" { SwitchToMode "Normal"; }
        bind "Alt z" {
            // Disable the autolock plugin.
            MessagePlugin "autolock" {payload "disable";};
            // Unlock Zellij.
            SwitchToMode "Normal";
        }
    }
    resize {
        bind "Ctrl n" { SwitchToMode "Normal"; }
        bind "h" "Left" { Resize "Increase Left"; }
        bind "j" "Down" { Resize "Increase Down"; }
        bind "k" "Up" { Resize "Increase Up"; }
        bind "l" "Right" { Resize "Increase Right"; }
        bind "H" { Resize "Decrease Left"; }
        bind "J" { Resize "Decrease Down"; }
        bind "K" { Resize "Decrease Up"; }
        bind "L" { Resize "Decrease Right"; }
        bind "=" "+" { Resize "Increase"; }
        bind "-" { Resize "Decrease"; }
    }
    pane {
        bind "Ctrl p" { SwitchToMode "Normal"; }
        bind "h" "Left" { MoveFocus "Left"; }
        bind "l" "Right" { MoveFocus "Right"; }
        bind "j" "Down" { MoveFocus "Down"; }
        bind "k" "Up" { MoveFocus "Up"; }
        bind "p" { SwitchFocus; }
        bind "n" { NewPane; SwitchToMode "Normal"; }
        bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
        bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
        bind "x" { CloseFocus; SwitchToMode "Normal"; }
        bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
        bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
        bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
        bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
        bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
    }
    move {
        bind "Ctrl h" { SwitchToMode "Normal"; }
        bind "n" "Tab" { MovePane; }
        bind "p" { MovePaneBackwards; }
        bind "h" "Left" { MovePane "Left"; }
        bind "j" "Down" { MovePane "Down"; }
        bind "k" "Up" { MovePane "Up"; }
        bind "l" "Right" { MovePane "Right"; }
    }
    tab {
        bind "Ctrl t" { SwitchToMode "Normal"; }
        bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
        bind "h" "Left" "Up" "k" { GoToPreviousTab; }
        bind "l" "Right" "Down" "j" { GoToNextTab; }
        bind "n" { NewTab; SwitchToMode "Normal"; }
        bind "x" { CloseTab; SwitchToMode "Normal"; }
        bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
        bind "b" { BreakPane; SwitchToMode "Normal"; }
        bind "]" { BreakPaneRight; SwitchToMode "Normal"; }
        bind "[" { BreakPaneLeft; SwitchToMode "Normal"; }
        bind "1" { GoToTab 1; SwitchToMode "Normal"; }
        bind "2" { GoToTab 2; SwitchToMode "Normal"; }
        bind "3" { GoToTab 3; SwitchToMode "Normal"; }
        bind "4" { GoToTab 4; SwitchToMode "Normal"; }
        bind "5" { GoToTab 5; SwitchToMode "Normal"; }
        bind "6" { GoToTab 6; SwitchToMode "Normal"; }
        bind "7" { GoToTab 7; SwitchToMode "Normal"; }
        bind "8" { GoToTab 8; SwitchToMode "Normal"; }
        bind "9" { GoToTab 9; SwitchToMode "Normal"; }
        bind "Tab" { ToggleTab; }
    }
    scroll {
        bind "Ctrl s" { SwitchToMode "Normal"; }
        bind "e" { EditScrollback; SwitchToMode "Normal"; }
        bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
        bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
        bind "j" "Down" { ScrollDown; }
        bind "k" "Up" { ScrollUp; }
        bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
        bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
        bind "d" { HalfPageScrollDown; }
        bind "u" { HalfPageScrollUp; }
        // uncomment this and adjust key if using copy_on_select=false
        // bind "Alt c" { Copy; }
    }
    search {
        bind "Ctrl s" { SwitchToMode "Normal"; }
        bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
        bind "j" "Down" { ScrollDown; }
        bind "k" "Up" { ScrollUp; }
        bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
        bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
        bind "d" { HalfPageScrollDown; }
        bind "u" { HalfPageScrollUp; }
        bind "n" { Search "down"; }
        bind "p" { Search "up"; }
        bind "c" { SearchToggleOption "CaseSensitivity"; }
        bind "w" { SearchToggleOption "Wrap"; }
        bind "o" { SearchToggleOption "WholeWord"; }
    }
    entersearch {
        bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
        bind "Enter" { SwitchToMode "Search"; }
    }
    renametab {
        bind "Ctrl c" { SwitchToMode "Normal"; }
        bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
    }
    renamepane {
        bind "Ctrl c" { SwitchToMode "Normal"; }
        bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
    }
    session {
        bind "Ctrl o" { SwitchToMode "Normal"; }
        bind "Ctrl s" { SwitchToMode "Scroll"; }
        bind "d" { Detach; }
        bind "w" {
            LaunchOrFocusPlugin "session-manager" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
        bind "c" {
            LaunchOrFocusPlugin "configuration" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
        bind "p" {
            LaunchOrFocusPlugin "plugin-manager" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
    }
    tmux {
        bind "[" { SwitchToMode "Scroll"; }
        bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
        bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
        bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
        bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
        bind "c" { NewTab; SwitchToMode "Normal"; }
        bind "," { SwitchToMode "RenameTab"; }
        bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
        bind "n" { GoToNextTab; SwitchToMode "Normal"; }
        bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
        bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
        bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
        bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
        bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
        bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
        bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
        bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
        bind "o" { FocusNextPane; }
        bind "d" { Detach; }
        bind "Space" { NextSwapLayout; }
        bind "x" { CloseFocus; SwitchToMode "Normal"; }
    }
    shared {
        bind "Alt Shift z" {
            // Enable the autolock plugin.
            MessagePlugin "autolock" {payload "enable";};
        }
        //...
    }
    shared_except "locked" {
        // Put keybindings here if they conflict with Vim or others.

        bind "Alt z" {
            // Disable the autolock plugin.
            MessagePlugin "autolock" {payload "disable";};
            // Lock Zellij.
            SwitchToMode "Locked";
        }

        bind "Ctrl h" {
            MoveFocusOrTab "Left";
        }
        bind "Ctrl l" {
            MoveFocusOrTab "Right";
        }
        bind "Ctrl j" {
            MoveFocus "Down";
        }
        bind "Ctrl k" {
            MoveFocus "Up";
        }

         bind "Ctrl d" { HalfPageScrollDown; }
         bind "Ctrl u" { HalfPageScrollUp; }

         bind "Ctrl f" { PageScrollDown; }
         bind "Ctrl b" { PageScrollUp; }

        //...
    
        bind "Ctrl g" { SwitchToMode "Locked"; }
        bind "Ctrl q" { Quit; }
        bind "Alt f" { ToggleFloatingPanes; }
        bind "Alt n" { NewPane; }
        bind "Alt i" { MoveTab "Left"; }
        bind "Alt o" { MoveTab "Right"; }
        bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
        bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
        bind "Alt j" "Alt Down" { MoveFocus "Down"; }
        bind "Alt k" "Alt Up" { MoveFocus "Up"; }
        bind "Alt =" "Alt +" { Resize "Increase"; }
        bind "Alt -" { Resize "Decrease"; }
        bind "Alt [" { PreviousSwapLayout; }
        bind "Alt ]" { NextSwapLayout; }
    }
    shared_except "normal" "locked" {
        bind "Enter" "Esc" { SwitchToMode "Normal"; }
    }
    shared_except "pane" "locked" {
        bind "Ctrl p" { SwitchToMode "Pane"; }
    }
    shared_except "resize" "locked" {
        bind "Ctrl n" { SwitchToMode "Resize"; }
    }
    shared_except "scroll" "locked" {
        bind "Ctrl s" { SwitchToMode "Scroll"; }
    }
    shared_except "session" "locked" {
        bind "Ctrl o" { SwitchToMode "Session"; }
    }
    shared_except "tab" "locked" {
        bind "Ctrl t" { SwitchToMode "Tab"; }
    }
    shared_except "move" "locked" {
        bind "Ctrl h" { SwitchToMode "Move"; }
    }
    shared_except "tmux" "locked" {
        bind "Ctrl b" { SwitchToMode "Tmux"; }
    }
}

// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
plugins {
    autolock location="file:~/.config/zellij/plugins/zellij-autolock.wasm" {
        // Enabled at start?
        is_enabled true
        // Lock when any open these programs open.
        triggers "nvim|vim|git|fzf|zoxide|atuin"
        // Reaction to input occurs after this many seconds. (default=0.3)
        // (An existing scheduled reaction prevents additional reactions.)
        reaction_seconds "0.3"
        // Print to Zellij log? (default=false)
        print_to_log true
    }
    tab-bar location="zellij:tab-bar"
    status-bar location="zellij:status-bar"
    strider location="zellij:strider"
    compact-bar location="zellij:compact-bar"
    session-manager location="zellij:session-manager"
    welcome-screen location="zellij:session-manager" {
        welcome_screen true
    }
    filepicker location="zellij:strider" {
        cwd "/"
    }
    configuration location="zellij:configuration"
    plugin-manager location="zellij:plugin-manager"
    
}

// Plugins to load in the background when a new session starts
load_plugins {
  autolock
  // "file:/path/to/my-plugin.wasm"
  // "https://example.com/my-plugin.wasm"
}

// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// (Requires restart)
// Options:
//   - detach (Default)
//   - quit
//
// on_force_close "quit"

//  Send a request for a simplified ui (without arrow fonts) to plugins
//  Options:
//    - true
//    - false (Default)
//
// simplified_ui true

// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"

// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd ""

// Toggle between having pane frames around the panes
// Options:
//   - true (default)
//   - false
//
// pane_frames true

// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
//   - true (default)
//   - false
//
// auto_layout true

// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// (Requires restart)
// Options:
//   - true (default)
//   - false
//
// session_serialization false

// Whether pane viewports are serialized along with the session, default is false
// (Requires restart)
// Options:
//   - true
//   - false (default)
//
// serialize_pane_viewport true

// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
// (Requires restart)
//
// scrollback_lines_to_serialize 10000

// Define color themes for Zellij
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
//
// themes {
//     dracula {
//         fg 248 248 242
//         bg 40 42 54
//         red 255 85 85
//         green 80 250 123
//         yellow 241 250 140
//         blue 98 114 164
//         magenta 255 121 198
//         orange 255 184 108
//         cyan 139 233 253
//         black 0 0 0
//         white 255 255 255
//     }
// }

// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"

// The name of the default layout to load on startup
// Default: "default"
// (Requires restart)
//
// default_layout "compact"

// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"

// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// (Requires restart)
// Options:
//   - true (default)
//   - false
//
// mouse_mode false

// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// (Requires restart)
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000

// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy"                    // wayland
// copy_command "pbcopy"                     // osx

// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
//   - system (default)
//   - primary
//
// copy_clipboard "primary"

// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false

// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"

// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// (Requires restart)
// Default: false
//
// mirror_session true

// The folder in which Zellij will look for layouts
// (Requires restart)
//
// layout_dir "/path/to/my/layout_dir"

// The folder in which Zellij will look for themes
// (Requires restart)
//
// theme_dir "/path/to/my/theme_dir"

// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false

// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata true

// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false

I feel like I must be missing something, but running it back from the top should have fixed it if so. I haven't reinstalled the nvim side, figured if I can't get consistent lock behavior from zellij then nvim won't do any good.

@twilwa twilwa added the bug Something isn't working label Nov 28, 2024
@twilwa
Copy link
Author

twilwa commented Nov 28, 2024

Dug into it a little bit -- it appears that the "Os" might be the result of a bug in the parsing of home.rs's layout dir. I've set the layout dir in my config.kdl manually and hardcoded it to ~/.config/zellij/layouts, and dumped the default layout there. Doesn't seem to have resolved it though; can't quiiiite tell exactly where the issue is, i'm not a rust guy and my debuggers are acting up a bit.

@fresh2dev
Copy link
Owner

fresh2dev commented Nov 28, 2024

In your config, swap any reference to 'Alt z' with 'Ctrl g'.

The former is what I have configed; they later is the Zellij default key for unlocking.

See this related issue and a link to my dotfiles near the bottom.

#9

@twilwa
Copy link
Author

twilwa commented Nov 29, 2024

Got it, that seems to have resolved. Just adopted your whole zellij+alacritty config, actually, i guess we'll see how it goes, lol. but presumably not a bug, just a misconfiguration, so i'll close here

@twilwa twilwa closed this as completed Nov 29, 2024
@twilwa
Copy link
Author

twilwa commented Nov 30, 2024

it seems that i spoke too soon -- when vim is open, the same behavior is exhibited, despite having adopted your dotfiles, heh. I've tried using alt+z and alt+shift+z as well as swapping back to ctrl+g -- when i go back to my ctrl + g config, i can observe a quick flip between locked and unlocked with nvim open, but in both cases, ctrl + g (or alt z) immediately unlocks. Alt shift z doesn't enable or disable the plugin if i leave it in the config, I experimented with changing it to Ctrl shift g, but same behavior: detects a command, but doesn't enable or disable autolock or change the 'immediate unlock' behavior. I'll drop the config again for ref (current behavior is as described above)

// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
keybinds {
    normal {
        // uncomment this and adjust key if using copy_on_select=false
        // bind "Alt c" { Copy; }
        // Intercept 'Enter'.
        bind "Enter" {
            // Passthru `Enter`.
            WriteChars "\u{000D}";
            // Invoke autolock to immediately assess proper lock state.
            // (This provides a snappier experience compared to
            // solely relying on `reaction_seconds` to elapse.)
            MessagePlugin "autolock" {};
        }
    }
    locked {
      //  bind "Ctrl g" { SwitchToMode "Normal"; }
        bind "Ctrl g" {
            // Disable the autolock plugin.
            MessagePlugin "autolock" {payload "disable";};
            // Unlock Zellij.
            SwitchToMode "Normal";
        }
    }
    resize {
        bind "Ctrl n" { SwitchToMode "Normal"; }
        bind "h" "Left" { Resize "Increase Left"; }
        bind "j" "Down" { Resize "Increase Down"; }
        bind "k" "Up" { Resize "Increase Up"; }
        bind "l" "Right" { Resize "Increase Right"; }
        bind "H" { Resize "Decrease Left"; }
        bind "J" { Resize "Decrease Down"; }
        bind "K" { Resize "Decrease Up"; }
        bind "L" { Resize "Decrease Right"; }
        bind "=" "+" { Resize "Increase"; }
        bind "-" { Resize "Decrease"; }
    }
    pane {
        bind "Ctrl p" { SwitchToMode "Normal"; }
        bind "h" "Left" { MoveFocus "Left"; }
        bind "l" "Right" { MoveFocus "Right"; }
        bind "j" "Down" { MoveFocus "Down"; }
        bind "k" "Up" { MoveFocus "Up"; }
        bind "p" { SwitchFocus; }
        bind "n" { NewPane; SwitchToMode "Normal"; }
        bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
        bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
        bind "x" { CloseFocus; SwitchToMode "Normal"; }
        bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
        bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
        bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
        bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
        bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
    }
    move {
        bind "Ctrl h" { SwitchToMode "Normal"; }
        bind "n" "Tab" { MovePane; }
        bind "p" { MovePaneBackwards; }
        bind "h" "Left" { MovePane "Left"; }
        bind "j" "Down" { MovePane "Down"; }
        bind "k" "Up" { MovePane "Up"; }
        bind "l" "Right" { MovePane "Right"; }
    }
    tab {
        bind "Ctrl t" { SwitchToMode "Normal"; }
        bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
        bind "h" "Left" "Up" "k" { GoToPreviousTab; }
        bind "l" "Right" "Down" "j" { GoToNextTab; }
        bind "n" { NewTab; SwitchToMode "Normal"; }
        bind "x" { CloseTab; SwitchToMode "Normal"; }
        bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
        bind "b" { BreakPane; SwitchToMode "Normal"; }
        bind "]" { BreakPaneRight; SwitchToMode "Normal"; }
        bind "[" { BreakPaneLeft; SwitchToMode "Normal"; }
        bind "1" { GoToTab 1; SwitchToMode "Normal"; }
        bind "2" { GoToTab 2; SwitchToMode "Normal"; }
        bind "3" { GoToTab 3; SwitchToMode "Normal"; }
        bind "4" { GoToTab 4; SwitchToMode "Normal"; }
        bind "5" { GoToTab 5; SwitchToMode "Normal"; }
        bind "6" { GoToTab 6; SwitchToMode "Normal"; }
        bind "7" { GoToTab 7; SwitchToMode "Normal"; }
        bind "8" { GoToTab 8; SwitchToMode "Normal"; }
        bind "9" { GoToTab 9; SwitchToMode "Normal"; }
        bind "Tab" { ToggleTab; }
    }
    scroll {
        bind "Ctrl s" { SwitchToMode "Normal"; }
        bind "e" { EditScrollback; SwitchToMode "Normal"; }
        bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
        bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
        bind "j" "Down" { ScrollDown; }
        bind "k" "Up" { ScrollUp; }
        bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
        bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
        bind "d" { HalfPageScrollDown; }
        bind "u" { HalfPageScrollUp; }
        // uncomment this and adjust key if using copy_on_select=false
        // bind "Alt c" { Copy; }
    }
    search {
        bind "Ctrl s" { SwitchToMode "Normal"; }
        bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
        bind "j" "Down" { ScrollDown; }
        bind "k" "Up" { ScrollUp; }
        bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
        bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
        bind "d" { HalfPageScrollDown; }
        bind "u" { HalfPageScrollUp; }
        bind "n" { Search "down"; }
        bind "p" { Search "up"; }
        bind "c" { SearchToggleOption "CaseSensitivity"; }
        bind "w" { SearchToggleOption "Wrap"; }
        bind "o" { SearchToggleOption "WholeWord"; }
    }
    entersearch {
        bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
        bind "Enter" { SwitchToMode "Search"; }
    }
    renametab {
        bind "Ctrl c" { SwitchToMode "Normal"; }
        bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
    }
    renamepane {
        bind "Ctrl c" { SwitchToMode "Normal"; }
        bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
    }
    session {
        bind "Ctrl o" { SwitchToMode "Normal"; }
        bind "Ctrl s" { SwitchToMode "Scroll"; }
        bind "d" { Detach; }
        bind "w" {
            LaunchOrFocusPlugin "session-manager" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
        bind "c" {
            LaunchOrFocusPlugin "configuration" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
        bind "p" {
            LaunchOrFocusPlugin "plugin-manager" {
                floating true
                move_to_focused_tab true
            };
            SwitchToMode "Normal"
        }
    }
    tmux {
        bind "[" { SwitchToMode "Scroll"; }
        bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
        bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
        bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
        bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
        bind "c" { NewTab; SwitchToMode "Normal"; }
        bind "," { SwitchToMode "RenameTab"; }
        bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
        bind "n" { GoToNextTab; SwitchToMode "Normal"; }
        bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
        bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
        bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
        bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
        bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
        bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
        bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
        bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
        bind "o" { FocusNextPane; }
        bind "d" { Detach; }
        bind "Space" { NextSwapLayout; }
        bind "x" { CloseFocus; SwitchToMode "Normal"; }
    }
    shared {
        bind "Ctrl shift g" {
            // Enable the autolock plugin.
            MessagePlugin "autolock" {payload "enable";};
        }
        //...
    }
    shared_except "locked" {
        // Put keybindings here if they conflict with Vim or others.

        bind "Ctrl g" {
            // Disable the autolock plugin.
            MessagePlugin "autolock" {payload "disable";};
            // Lock Zellij.
            SwitchToMode "Locked";
        }

        bind "Ctrl h" {
            MoveFocusOrTab "Left";
        }
        bind "Ctrl l" {
            MoveFocusOrTab "Right";
        }
        bind "Ctrl j" {
            MoveFocus "Down";
        }
        bind "Ctrl k" {
            MoveFocus "Up";
        }

         bind "Ctrl d" { HalfPageScrollDown; }
         bind "Ctrl u" { HalfPageScrollUp; }

         bind "Ctrl f" { PageScrollDown; }
         bind "Ctrl b" { PageScrollUp; }

        //...
    
        bind "Ctrl g" { SwitchToMode "Locked"; }
        bind "Ctrl q" { Quit; }
        bind "Alt f" { ToggleFloatingPanes; }
        bind "Alt n" { NewPane; }
        bind "Alt i" { MoveTab "Left"; }
        bind "Alt o" { MoveTab "Right"; }
        bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
        bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
        bind "Alt j" "Alt Down" { MoveFocus "Down"; }
        bind "Alt k" "Alt Up" { MoveFocus "Up"; }
        bind "Alt =" "Alt +" { Resize "Increase"; }
        bind "Alt -" { Resize "Decrease"; }
        bind "Alt [" { PreviousSwapLayout; }
        bind "Alt ]" { NextSwapLayout; }
    }
    shared_except "normal" "locked" {
        bind "Enter" "Esc" { SwitchToMode "Normal"; }
    }
    shared_except "pane" "locked" {
        bind "Ctrl p" { SwitchToMode "Pane"; }
    }
    shared_except "resize" "locked" {
        bind "Ctrl n" { SwitchToMode "Resize"; }
    }
    shared_except "scroll" "locked" {
        bind "Ctrl s" { SwitchToMode "Scroll"; }
    }
    shared_except "session" "locked" {
        bind "Ctrl o" { SwitchToMode "Session"; }
    }
    shared_except "tab" "locked" {
        bind "Ctrl t" { SwitchToMode "Tab"; }
    }
    shared_except "move" "locked" {
        bind "Ctrl h" { SwitchToMode "Move"; }
    }
    shared_except "tmux" "locked" {
        bind "Ctrl b" { SwitchToMode "Tmux"; }
    }
}

// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
plugins {
    autolock location="file:~/.config/zellij/plugins/zellij-autolock.wasm" {
        // Enabled at start?
        is_enabled true
        // Lock when any open these programs open.
        triggers "nvim|vim|git|fzf|zoxide|atuin"
        // Reaction to input occurs after this many seconds. (default=0.3)
        // (An existing scheduled reaction prevents additional reactions.)
        reaction_seconds "0.3"
        // Print to Zellij log? (default=false)
        print_to_log true
    }
    tab-bar location="zellij:tab-bar"
    status-bar location="zellij:status-bar"
    strider location="zellij:strider"
    compact-bar location="zellij:compact-bar"
    session-manager location="zellij:session-manager"
    welcome-screen location="zellij:session-manager" {
        welcome_screen true
    }
    filepicker location="zellij:strider" {
        cwd "/"
    }
    configuration location="zellij:configuration"
    plugin-manager location="zellij:plugin-manager"
    
}

// Plugins to load in the background when a new session starts
load_plugins {
  autolock
  // "file:/path/to/my-plugin.wasm"
  // "https://example.com/my-plugin.wasm"
}

// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// (Requires restart)
// Options:
//   - detach (Default)
//   - quit
//
// on_force_close "quit"

//  Send a request for a simplified ui (without arrow fonts) to plugins
//  Options:
//    - true
//    - false (Default)
//
// simplified_ui true

// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"

// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd ""

// Toggle between having pane frames around the panes
// Options:
//   - true (default)
//   - false
//
// pane_frames true

// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
//   - true (default)
//   - false
//
// auto_layout true

// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// (Requires restart)
// Options:
//   - true (default)
//   - false
//
// session_serialization false

// Whether pane viewports are serialized along with the session, default is false
// (Requires restart)
// Options:
//   - true
//   - false (default)
//
// serialize_pane_viewport true

// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
// (Requires restart)
//
// scrollback_lines_to_serialize 10000

// Define color themes for Zellij
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
//
// themes {
//     dracula {
//         fg 248 248 242
//         bg 40 42 54
//         red 255 85 85
//         green 80 250 123
//         yellow 241 250 140
//         blue 98 114 164
//         magenta 255 121 198
//         orange 255 184 108
//         cyan 139 233 253
//         black 0 0 0
//         white 255 255 255
//     }
// }

// Choose the theme that is specified in the themes section.
// Default: default
//
// theme "default"

// The name of the default layout to load on startup
// Default: "default"
// (Requires restart)
//
// default_layout "compact"

// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"

// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// (Requires restart)
// Options:
//   - true (default)
//   - false
//
// mouse_mode false

// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// (Requires restart)
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000

// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy"                    // wayland
// copy_command "pbcopy"                     // osx

// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
//   - system (default)
//   - primary
//
// copy_clipboard "primary"

// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false

// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"

// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// (Requires restart)
// Default: false
//
// mirror_session true

// The folder in which Zellij will look for layouts
// (Requires restart)
//
// layout_dir "/path/to/my/layout_dir"

// The folder in which Zellij will look for themes
// (Requires restart)
//
// theme_dir "/path/to/my/theme_dir"

// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false

// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata true

// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false

@twilwa twilwa reopened this Nov 30, 2024
@pavelkucera
Copy link

I'm experiencing the same behaviour on:

  • MacOS Sequoia 15.1.1
  • zellij 0.41.2
  • zellij-autolock 0.2.1
  • with config from README

Debugging this is a bit ouf my depth, but would love to provide more information if I can.

@fresh2dev
Copy link
Owner

I hope to, one day, more comprehensive docs, or a video tutorial, or some additional resources to help connect-the-dots for folks.

Until then, this project's README and my Zellij config are all I can point to.

I will also say that a key aspect of my Zellij config is that they clear all of Zellij's built-in bindings using:

keybinds clear-defaults=true {
    ...
}

@twilwa, the config you posted does not include this. Perhaps you could try.

@fresh2dev fresh2dev removed the bug Something isn't working label Dec 13, 2024
@fresh2dev
Copy link
Owner

Removing the "bug" label since this is most likely a config issue.

@elythh
Copy link

elythh commented Jan 3, 2025

Until then, this project's README and my Zellij config are all I can point to.

I've tried the exact same keybinds configuration as you linked and I still have the exact same issue with neovim, everything else works fine

@elythh
Copy link

elythh commented Jan 4, 2025

The issue is that neovim doesn't automatically lock the session however locking it manually unlocks it immediatly. Only happens with nvim

@leandrocp
Copy link

The issue is that neovim doesn't automatically lock the session however locking it manually unlocks it immediatly. Only happens with nvim

I'm having this exact same issue, which started after I made some changes to my zsh config (mainly migrating to zinit) so that might be related.

On logs I only see Detected command in pane: N/A which I can confirm running zellij action list-clients:

CLIENT_ID ZELLIJ_PANE_ID RUNNING_COMMAND
1         terminal_1     N/A

No matter what I do or which command I execute (whether I execute nvim or not), I always see N/A so maybe that's a bug upstream? I'd expect to see some command there as in the docs.

@leandrocp
Copy link

In the meantime I'm using autocmds to lock/unlock:

local function zellij(mode)
  vim.schedule(function()
    if vim.env.ZELLIJ ~= nil then
      vim.fn.system({ "zellij", "action", "switch-mode", mode })
    end
  end)
end

vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter" }, {
  group = augroup("zellij_lock"),
  callback = function()
    zellij("locked")
  end,
})

vim.api.nvim_create_autocmd({ "FocusLost", "VimLeave" }, {
  group = augroup("zellij_normal"),
  callback = function()
    zellij("normal")
  end,
})

@fresh2dev
Copy link
Owner

I just released zellij-autolock v0.2.2. In this release, I added more log output to help troubleshoot these sorts of issues. Note that printing to the Zellij log is only enabled when given the option print_to_log true as shown below.

plugins {
    // Define the "autolock" plugin.
    autolock location="file:~/.config/zellij/plugins/zellij-autolock.wasm" {
        // Enabled at start?
        is_enabled true
        // Lock when any open these programs open.
        triggers "nvim|vim|git|fzf|zoxide|atuin"
        // Reaction to input occurs after this many seconds. (default=0.3)
        // (An existing scheduled reaction prevents additional reactions.)
        reaction_seconds "0.3"
        // Print to Zellij log? (default=false)
        print_to_log true
    }
    //...
}
// Load this "headless" plugin on start.
load_plugins {
    autolock
}

If you consistently see nothing but "[autolock] No command detected.", then this plugin will not be able to assess the currently active CLI program and will not be able to autolock. In this case, I recommend upgrading Zellij and using another terminal (e.g., Alacritty).

If that is not the case, please post details of your issue along with pertinent log entries that may help in debugging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants