Tmux beklenmedik bir şekilde çıktıktan sonra bir terminal oturumunda fare raporlamayı devre dışı bırakın


4

Şu anda iTerm2'yi ve sıklıkla SSH'yi uzak sunuculara kullanıyorum ve bir tmux oturumu başlatıyorum. Tüm bu sunucularda, SSH'ları kullanırken, otomatik olarak fare raporlamasını aşağıdaki gibi yapan bir tmux yapılandırması oluşturuyorum ~/.tmux.conf:setw -g mode-mouse on

Ancak, SSH oturumum aniden bitiyorsa ve tmux'a fare raporlamayı devre dışı bırakma şansı verilmezse, fareyi terminal pencerelerinde herhangi bir yerde kullanmak gibi garip kodlar getirir:

$ 0;94;18M0;94;18m0;19;33M0;14;33m

Bu sorunu yaşayan sadece ben değilim, bkz. Https://code.google.com/p/iterm2/issues/detail?can=2&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner% 20Summary & GroupBy = & sort = & id = 855

Bu sorun için kolay bir çözümün SSH oturumlarımı açmak için kullanılan bir bash betiğinde bir tuzak oluşturmak olduğuna inanıyorum. Tuzak daha sonra SSH'den tmux oturumu sona erdiğinde fare raporlamasını devre dışı bırakabilir.

Sorun şu ki, fare raporlamasını bash içinden nasıl devre dışı bırakabileceğimi bilmiyorum. Konsol kodlarını açıklayan bir makale buldum ancak bu konuda hiç şansım olmadı.

Fare raporlamasını devre dışı bırakmak için terminale nasıl komut gönderebilirim?

Yanıtlar:


4

Bash'den terminale kod göndermek için printfkomutu kullanabilirsiniz . ( echoTabii ki kullanabilirsiniz , ancak printfESC gönderme için açık bir desteğe sahip olduğundan ve komut karakterlerini parametrelerden vb. Ayırmayı kolaylaştırdığından, genellikle terminal komutları göndermek için daha uygundur.)

Tmux, hem de terminal fare takibini destekleyen en popüler programların yanı sıra, XTerm Mouse Reporting (aka “X11 Mouse Reporting”) kullanın.

Fare Raporlama'yı bash'tan devre dışı bırakmak için bu kodu kullanın:

printf '\e[?1000l'

ESC [ ? … l“DEC Özel Mod Sıfırlama (DECRST)” anlamına gelir ( özellik hyerine bir harfle biten aynı kod l).

Ayrıca, devre dışı bırakılabilen, 9bunun yerine kullanılan daha eski bir “X10 Fare Raporlama” protokolü 1000de vardır ESC [ ? 9 l, ancak bildiğim kadarıyla farenin izlenmesi için bu özelliği kullanma olasılığınızın farkında değilsiniz.

Normalde Xterm Control Sequences belgelerini terminal kodları için kanonik referansım olarak kullanıyorum ve hem XTerm'in desteklediği konusunda pratik bir rehber olduğu hem de yaygın olarak desteklenen kodların en kapsamlı belgeleri olduğu için bunu öneriyorum.


Bu sorunu OSX iTerm'in Linux sunucusundaki tmux'a bağlı olarak yaşadım. Çözüldü printf '\e[?1000l', sihir gibi çözüldü.
Thamme Gowda

Bunun için bir takma ad ayarlayabilirsinizalias resetmouse='printf '"'"'\e[?1000l'"'"
jtpereyda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.