Como posso escrever um “idempotente” .Xmodmap

14

Atualmente eu tenho um arquivo .Xmodmap que muda meu Comando para Ctrl , então muda minha Ctrl para Super (estou executando o Linux em um Mac).

Funciona muito bem, quando executado somente uma vez, mas em execuções sucessivas (por exemplo, quando eu reinicio meu ambiente de desktop (Cinnamon) ele recarrega o arquivo .Xmodmap ) ele basicamente redefine as configurações revertendo as alterações. Efetivamente alternando entre minha configuração desejada e a configuração original.

Como posso escrever um arquivo .Xmodmap que só define as configurações uma vez, mas não as altera em execuções sucessivas? Aqui está o meu arquivo .Xmodmap existente:

clear control
clear mod4

keycode 105 =
keycode 206 =

keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Control_R NoSymbol Control_R
keycode 37 = Super_L NoSymbol Super_L

add control = Control_L
add control = Control_R
    
por coteyr 04.11.2013 / 20:19

3 respostas

7

Redefina o mapa para seu estado original antes de aplicar seus mods. Uma redefinição completa demora uma eternidade, então o melhor que eu posso encontrar é a diferença.

Este código usa .Xmodmap{.orig,.reset,.mods} , onde se .orig não existir, ele é definido para o estado atual e calcula .reset para restaurar esse estado de onde quer que seja necessário. antes de aplicar .mods .

#!/bin/sh
# file xmodmap-reset

#     rm ~/.Xmodmap.orig
# beforehand to take current setup as baseline for Xmodmap.mods changes

stem=~/.Xmodmap
orig=${stem}.orig
reset=${stem}.reset
mods=${stem}.mods

# implement -pme like -pke
#
xmodmap-pme () {
  xmodmap -pm \
  | sed '
        1d
        / [^ ]/!d
        s/^[^ ][^ ]*/clear &\nadd & =/
        s/([^ ]*//g
    '
}

# save baseline if none atm
test -a $orig || {
    xmodmap  -pke
    xmodmap-pme
} > $orig

# payload, diff for commands to reset to baseline from current
{
    xmodmap  -pke
    xmodmap-pme
} \
| {
    diff -u0 $orig - \
    | sed -n '
        1,/^@@/d
        s/^[^+]clear/clear/p
        s/^-//p
      '
} > $reset
xmodmap $reset

# finally ready to apply the mods
test -a $mods && xmodmap $mods

(editar: limpeza)

    
por 08.11.2013 / 15:31
0

Ir para o sistema > Preferências > Aplicativos de inicialização e adicione xmodmap ~/.Xmodmap .

    
por 07.11.2013 / 19:33
0

Ainda estou confuso quanto ao que você quer, mas acho que é isso:

Se você colocar isso no seu ~/.Xmodmap ,

clear control
clear mod4

keysym Super_L = Control_L
keysym Control_L = Super_L

add control = Control_L
add control = Control_R
add mod4 = Super_L
add mod4 = Super_R

então toda vez que xmodmap ~/.Xmodmap for executado, então a esquerda Ctrl e a troca de chaves . Então, na primeira invocação, a tecla Ctrl age como se você tivesse pressionado , mas na segunda invocação, ela continuava atuando como um Ctrl chave novamente.

    
por 07.11.2013 / 23:26