A descontinuação do suporte ao xneur me causou algum sofrimento nos últimos seis meses (com o advento do OpenSUSE 15.1 em minhas áreas de trabalho: quando o xneur é ativado, as janelas perdem o foco e piscam divertidamente com a entrada do teclado) .“Ah, droga, eu comecei a digitar novamente no layout errado” - é obsceno no meu trabalho frequentemente. E não adiciona positivo.Ao mesmo tempo, eu (como engenheiro de design) posso articular claramente o que quero. E eu queria (primeiro do Punto Switcher, e depois, graças ao Windows Vista, finalmente replantando no Linux, do xneur) exatamente um. Percebendo que o lixo na tela está no layout errado (isso geralmente acontece no final da digitação de uma nova palavra), clique em "Pausar / Interromper". E pegue o que imprimi.No momento, o produto possui uma ótima relação (do ponto de vista de mim) funcionalidade / complexidade. É hora de compartilhar.TL.DR
Todos os tipos de detalhes técnicos continuarão, então primeiro - um link de "toque" para os impacientes.Atualmente, o seguinte comportamento está codificado:- “Pausar / Quebrar”: retrocede a última palavra, alterna o layout na janela ativa (entre 0 e 1) e digita novamente.
- Ctrl esquerdo sem nada: alterna o layout na janela ativa (entre 0 e 1).
- “Mudança à esquerda sem nada”: ativa o layout 0 na janela ativa.
- “Mudança à direita sem nada”: ativa o layout nº 1 na janela ativa.
A partir de agora, pretendo personalizar o comportamento. Sem feedback, não é interessante (estou feliz com isso de qualquer maneira). Acredito que em Habré haverá uma porcentagem suficiente da audiência com problemas semelhantes.NB Desde na versão atual, o keylogger está parafusado em "/ dev / input /", o xswitcher deve ser executado com direitos de root:chown root:root xswitcher
chmod +xs xswitcher
Observe: o proprietário do arquivo com suid deve ser root, como quem é o proprietário é suid e ativará a inicialização.Os paranóicos (não sou exceção) podem clonar do GIT e montar no local. Curtiu isso:go get "github.com/micmonay/keybd_event"
go get "github.com/gvalkov/golang-evdev"
zypper install libX11-devel libXmu-devel
apt-get install libx11-dev libxmu-dev
cd "x switcher/src/"
go build -o xswitcher -ldflags "-s -w" --tags static_all src/*.go
O início automático adiciona a gosto (dependendo da DE).Funciona: "não peça mingau" (~ 30 segundos de CPU por dia, ~ 12 MB em RSS).Detalhes
Agora para os detalhes.Todo o repositório foi originalmente dedicado ao meu projeto de estimação, e iniciar outro é muito preguiçoso. Então, tudo é empilhado (apenas em pastas) e coberto com AGPL ("patente vice-versa").O código do xswitcher é escrito em golang, com um mínimo de C. É assumido que essa abordagem dará o mínimo de esforço (até o momento). Mantendo a capacidade de conectar os desaparecidos via cgo.O texto do comentário é apresentado, de onde foi emprestado e por quê. Porque o código xneur “não me inspirou”, loloswitcher tomou como ponto de partida .O uso de "/ dev / input /" tem suas vantagens (tudo pode ser visto, incluindo a tecla pressionada com repetição automática) e os menos. Os contras são:- A repetição automática (eventos com código "2") não se correlaciona com a repetição com X.
- Você não pode ver a entrada pelas interfaces X11 (por exemplo, o VNC funciona).
- Precisa de uma raiz.
Como alternativa, você pode assinar eventos X através de "XSelectExtensionEvent ()". Você pode espiar o código xinput . Por enquanto, não encontrei nada parecido, e o rascunho da implementação deu centenas de linhas de código C de uma só vez. Até agora reservado.A conclusão "voltar" até agora foi feita apertando o teclado virtual. Graças ao autor keybd_event, mas há abstração de alto nível e precisará ser refeita ainda mais. Por exemplo, eu tenho a tecla Win correta, a terceira linha seleciona. E apenas o Win esquerdo é transmitido de volta.Bugs conhecidos
- Não sabemos nada sobre a entrada "composta" (exemplo: ½). Não é necessário no momento.
- Reproduzimos incorretamente a vitória correta. No meu caso, isso quebra o arranjo de sotaques.
- Não há uma análise clara da entrada. Em vez disso, existem várias funções: Compare (), CtrlSequence (), RepeatSequence (), SpaceSequence (). obrigadonsmcanpara atenção: corrigido no código aqui. Com uma certa probabilidade, você pode pegar bugs ao substituir.
Neste local, não sei "como fazer" e terei prazer em dar sugestões. - (Oh, horror) uso competitivo de canais (keyboardEvents, miceEvents).
Conclusão
O código é o procedimento mais simples. E estúpido como eu. Então, estou me confortando com a esperança de que quase qualquer técnico possa terminar o que ele quer. E esse produto, devido a isso, não desaparecerá sem o suporte, como a maioria por diversão.Boa sorte