"idempotent".Xmodmap을 작성하는 방법


14

현재 내가 가지고 .Xmodmap내 변경 파일 Command에를 Ctrl, 그 다음 나의 변경 Ctrl하기 Super(I 맥에서 리눅스를 실행하는거야).

한 번만 실행하지만 연속 실행 (예 : 데스크탑 환경 (Cinnamon)을 다시 시작하면 .Xmodmap파일을 다시로드 할 때 )이 잘 작동합니다. 기본적으로 변경 사항을 되돌려 설정을 재설정합니다. 원하는 설정과 원래 설정간에 효과적으로 전환합니다.

.Xmodmap설정을 한 번만 설정하고 연속 실행시 다시 변경하지 않는 파일을 작성하려면 어떻게 해야합니까? 내 기존 .Xmodmap파일 은 다음과 같습니다 .

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

질문을 이해하지 못합니다. 나는 여기서“모달”이 무엇을 의미하는지 전혀 모른다. 이것은 .Xmodmap변경하는 키에만 영향을 미칩니다. 다르게하고 싶은 것은 무엇입니까?
Gilles 'SO- 악마 그만해

.Xmodmap을 사용할 때 키를 설정하고 다시 실행하면 키가 다시 전환됩니다. 스왑 된 제어 및 명령 키의 결과에 관계없이 .Xmodmap을 만들고 싶습니다. 때로는 다시 시작할 때 DE .Xmodmap이 다시 실행되어 성가신 결과가 발생합니다.
coteyr

2
@coteyr 생각 당신이 찾고있는 단어는 " 나무 등 "
조셉 R.

답변:


7

개조를 적용하기 전에 맵을 원래 상태로 재설정하십시오. 완전 리셋은 영원히 걸리므로 내가 생각해 낼 수있는 최선은 디핑입니다.

이 코드는 존재하지 않는 .Xmodmap{.orig,.reset,.mods}경우 .orig현재 상태로 설정된 위치를 사용하고 .reset어디에서나 해당 상태를 복원하도록 계산 합니다. 신청하기 전에 .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

(편집 : 정리)


나는 이것을 시도하고있다. 여태까지는 그런대로 잘됐다.
coteyr

@ coteyr-이것이 당신을 위해 일하고 있습니까?
slm

실제로 나는 아직도 실험하고 있지 않다.
coteyr

Upadate : 이것은 작동하는 것 같습니다. 대부분 여전히 여전히 약간 조정해야하지만 최소한 연속 실행에서 설정이 재설정되지는 않습니다.
coteyr

@ coteyr-이것이 확장되지 않으면 작동 할 수있는 다른 방법이 있다고 생각하지만 더 관련이 있으므로 작업이 수행되면 실제로 작성하고 싶지 않습니다. 답장을 보내면 내 사용자 이름 앞에 @ 기호를 포함시켜 답장을 보내십시오. 그렇지 않으면 다시 와서 확인하고 잊어 버릴 것입니다.
slm

0

시스템> 환경 설정> 시작 애플리케이션으로 이동하여 추가하십시오 xmodmap ~/.Xmodmap. xmodmap 명령 추가


이로 인해 DE가 다시 시작될 때마다 xmodmap이 실행되고 이미 작동하며 설정이 설정된 다음 다시 설정됩니다. 예를 들어 컴퓨터 시작, 로그인, DE 시작, xmodmap 실행, DE 충돌, DE 시작, xmodmap 실행 이제 키보드가 다시 엉망입니다.
coteyr


0

나는 아직도 당신이 원하는 것에 대해 약간 혼란 스럽지만, 나는 이것을 생각합니다 :

당신이 당신이를 넣어 경우 ~/.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

매번 xmodmap ~/.Xmodmap실행될 때마다 왼쪽 Ctrl과 왼쪽 키 스왑 이 실행 됩니다. 따라서 첫 번째 호출에서 Ctrl키는을 누른 것처럼 작동 하지만 두 번째 호출에서는 Ctrl키로 다시 작동 합니다.


이것은 내가 원치 않는 것입니다
coteyr

나는 명령과 같은 역할을하는 제어 및 제어와 같은 명령을 초래하는 결과에 관계없이 모든 호출을 원합니다.
coteyr

나는 혼란 스러워요 왜 당신이 게시 당신이 원하는 것을 정확하게 할 것으로 보여 좋아요,이입니다 ...
billyjmc

그러나 그렇지 않습니다.
coteyr

글쎄, 내가 관찰 한 행동은 코드 dem 등성이있는 반면 내 코드는 상태가 좋다는 것입니다. 코드와 내 코드가 동일하게 작동한다고 말하고 있습니까? 이 경우라면 일종의 버그가 발생했다고 생각합니다. 나는 xmodmap ~/.Xmodmapxterm에서 명시 적으로 실행 하고 코드가 실제로 반복되는 응용 프로그램으로 키를 교체하는지 확인하십시오. Cinnamon이 다시 시작될 때 키가 원래 동작으로 되돌아 갈 수도 있습니다.
billyjmc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.