LINUX.ORG.RU

забиндить кей, если в tmux

 ,


0

1

Не хочу в tmux делать ребинд C-b, а ситуация обстоит таким образом, что в tmux emacs backward char срабатывает со второго раза. Для начала забиндил выполнение функции на C-c -(для проверки). Проблема: не биндится C-b

(global-set-key (kbd "C-c -") 'test-fn)

(defun hlpr-backward-char ()
  (interactive)
  (backward-char)
  (backward-char))
  
(defun test-fn ()
  (interactive)
  (if (equal "" (getenv "TMUX"))
      (message "Test message")
    (global-set-key (kbd "C-b") 'hlpr-backward-char)
    (message "tmux activate")
    ))
★★★★

Последнее исправление: bryak (всего исправлений: 1)

Я перебиндил C-b в tmux на CapsLock. Практически все родственники остались живы.

Проверяй TMUX в init.el и делай
(if (getenv «TMUX») (global-set-key (kbd «C-b») nil))

gentoo1love
()

вот так получилось, только опять же проблема С-b - нажимаю ничего не происходит, на второй раз C-b - прыжок на два символа назад

bryak ★★★★
() автор топика
Ответ на: комментарий от bryak

Не пойму, что ты хочешь? Чтобы работал и backward-char в emacs и в tmux префик по «C-b»? tmux перехватит «C-b» до emacs он не дойдет.

Накостылять можно, конечно. Но не проще ли просто оставить «C-b» emacs-у, а tmux перебиндить?

gentoo1love
()
Ответ на: комментарий от gentoo1love

Это ясно, что tmux перехватывает. Но перебинд вызывает тоже некоторый дискомфорт, как со стороны привычки, так и со стороны того, что ребинд может зацепить какой-то функционал emacs'a. Допустим, многие советуют перебиндить на C-g. А C-g - отмена действия. Тогда надо нажимать дважды C-g. Некоторые советуют на C-\, но это change layout в emacs'e. Сейчас я забиндил префикс на другой, привык к нему, а потом оказывается, что это используется в emacs'e или еще где-то.

Может лучший способ заморочиться на этой трабле и всё-таки «накостылить», чтобы решить этот вопрос раз и навсегда?

Не пойму, что ты хочешь? Чтобы работал и backward-char в emacs и в tmux префик по «C-b»?

ДА!

bryak ★★★★
() автор топика
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от bryak

ребинд может зацепить какой-то функционал emacs'a

См. выше. Перебиндь tmux на CapsLock. Как-нибудь так, чтобы не мигал светодиодом.

xmodmap -e "keycode 66 = F12"
Или не F12, а ScrollLock - любая какой не пользуешься.

ДА!

Ну или костыляй решение сам - xbindkeys или свой keylogger пиши.

gentoo1love
()
Ответ на: комментарий от gentoo1love

Может лучший способ заморочиться на этой трабле и всё-таки «накостылить», чтобы решить этот вопрос раз и навсегда

Костыль здесь будет очень костыльный. Смотри. tmux перехватывает C-b, до emacs он не доходит. Нужно пилить келоггер, который через какой-то сервис будет сообщать emacs-у, что нужно сделать курсор-назад; а тмуксу ничего не делать, если проверка покажет, что в текущем tmux-окне открыт emacs и курсор находится в tmux-панели с emacs-ом, а не в другой (если окно разбито на панели и это желаемое поведение). Это прям 100% золотой хитов костылей.

Но дело твое, конечно. Наверняка есть какая-то настройка в tmux. Он плагины еще поддерживает. Можешь пропатчить tmux, захардкодить туда проверки на emacs. Это даже адекватнее будет, чем костыль с кейлоггером.

gentoo1love
()
Ответ на: комментарий от bryak

Я как и screen, переделал на ctrl-a. Куда удобнее чем дефолтный ctrl-b.

Правда, перестал работать башевский ctrl-a (прыжок в начало команды)

skyman ★★★
()

Повесь на c-b на `, а ` куда-то ещё.

ashot ★★★★
()
Ответ на: комментарий от skyman

перестал работать башевский ctrl-a

Емаксовский, на самом деле. readline по умолчанию работает в режиме emacs, хотя умеет и в vi.

ashot ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.