From 622a4d8c13a5037e064cf9caa3e917100f7f5cc9 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Thu, 2 Jul 2026 00:00:47 -0400 Subject: fix(keybindings): retire the two-column F2 and C-x 6 bindings A grazed F2 followed by a stray 2, s, or b invokes two-column mode, which replaces the buffer's mode-line-format with its own retro layout and spawns a 2C/ companion buffer. That's what mangled the modeline in an agent terminal: eat semi-char buffers don't forward F2, so the prefix was armed everywhere. Nothing of mine uses global F2 (markdown-mode's binding lives in its own map), so I unbound both routes to 2C-command. cj/modeline-reset repairs a hijacked buffer. --- modules/keybindings.el | 6 ++++++ tests/test-keybindings-two-column-unbound.el | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/test-keybindings-two-column-unbound.el diff --git a/modules/keybindings.el b/modules/keybindings.el index 7072cb9c..3e51b2dd 100644 --- a/modules/keybindings.el +++ b/modules/keybindings.el @@ -147,6 +147,12 @@ Errors if VAR is unbound, not a non-empty string, or the file does not exist." ;; ---------------------------- General Keybindings ---------------------------- ;; Avoid hostile bindings +;; two-column mode (2C-command): a grazed F2 + a stray 2/s/b replaces the +;; buffer's mode-line-format with 2C's own retro layout and spawns a 2C/ +;; companion buffer. eat semi-char buffers don't forward F2, so the trap +;; is armed everywhere. cj/modeline-reset repairs a hijacked buffer. +(keymap-global-unset "") ;; 2C-command prefix +(keymap-global-unset "C-x 6") ;; 2C-command prefix (same map) (keymap-global-unset "C-x C-f") ;; find-file-read-only (keymap-global-set "C-x C-f" #'find-file) (keymap-global-set "C-z" (make-sparse-keymap)) ;; replace suspend-frame with prefix map diff --git a/tests/test-keybindings-two-column-unbound.el b/tests/test-keybindings-two-column-unbound.el new file mode 100644 index 00000000..f9bc2c52 --- /dev/null +++ b/tests/test-keybindings-two-column-unbound.el @@ -0,0 +1,26 @@ +;;; test-keybindings-two-column-unbound.el --- 2C-command is unbound -*- lexical-binding: t; -*- + +;;; Commentary: +;; Two-column mode's global F2 / C-x 6 prefix replaces a buffer's +;; mode-line-format with its own layout when triggered by a stray +;; keypress (the 2026-07-01 archsetup agent-buffer incident). +;; keybindings.el retires both bindings; these tests pin that. + +;;; Code: + +(require 'ert) + +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) + +(require 'keybindings) + +(ert-deftest test-keybindings-two-column-f2-unbound () + "Normal: F2 no longer reaches the 2C-command prefix." + (should-not (keymap-lookup global-map ""))) + +(ert-deftest test-keybindings-two-column-c-x-6-unbound () + "Normal: C-x 6 no longer reaches the 2C-command prefix." + (should-not (keymap-lookup global-map "C-x 6"))) + +(provide 'test-keybindings-two-column-unbound) +;;; test-keybindings-two-column-unbound.el ends here -- cgit v1.2.3