「べき等」の.Xmodmapを記述する方法


14

現在、私は.Xmodmap私の変更ファイルCommandにしCtrl、その後、私は変更CtrlするSuper(私は、Mac上でLinuxを実行しています)。

1回実行するだけで連続して実行すると(たとえば、デスクトップ環境(Cinnamon)を再起動すると.Xmodmapファイルがリロードされる)、基本的に変更を元に戻すことで設定がリセットされます。希望するセットアップと元のセットアップを効果的に切り替えます。

.Xmodmap設定を1回だけ設定し、連続した実行で元に戻さないファイルを作成するにはどうすればよいですか?ここに私の既存の.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は、変更しているキーにのみ影響します。別の方法で何をしたいですか?
ジル 'SO-悪であるのをやめる'

.Xmodmapを使用するとキーが設定され、再度実行すると、キーが元に戻ります。制御キーとコマンドキーが入れ替わった結果に関係なく、.Xmodmapを作成します。時々、再起動するとDE .Xmodmapが再度実行され、迷惑になります。
coteyr

2
@coteyrあなたが探している言葉は「べき」だと思う
ジョセフR.

回答:


7

modを適用する前に、マップを元の状態にリセットします。完全なリセットには永遠に時間がかかるので、私が思いつくのは違います。

このコードは.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

更新:これは機能しているようです。ほとんどの場合、私はまだ少し調整する必要がありますが、少なくとも設定は連続した実行でリセットされません。
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キーはを押したように動作しますが、2回目の呼び出しでは、Ctrlキーとしての動作を再開します。


これはまさに私が望んでいないことです
coteyr

私は、正反対を望み、コマンドのように振る舞うコマンドとコマンドのように振る舞うコントロールの結果に関係なく、すべての呼び出しが必要です。
coteyr

わかりました、まあ、これは私が混乱している理由です、なぜならあなたの元の投稿はあなたが望むものを正確に行うように見えるので
...-billyjmc

しかし、そうではありません。
coteyr

まあ、私が観察する動作は、あなたのコード i 等であるのに対して、私のコードはステートフルです。あなたのコードと私のコードの両方があなたのために同じように振る舞うと私に言っていますか?その場合、何らかのバグが発生しているに違いないと思います。私は提案があります:xmodmap ~/.Xmodmapxtermから明示的に実行してみて、コードが本当に繰り返しアプリケーションとキーを交換するかどうかを確認してください。おそらく、Cinnamonの再起動時にキーが元の動作に戻るのは、あなたが考えている理由ではないでしょうか?
billyjmc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.