मैं एक "बेकार" .Xmodmap कैसे लिख सकता हूं


14

वर्तमान में मेरे पास एक .Xmodmapफ़ाइल है जो मेरे Commandको बदल देती है Ctrl, फिर मेरे (मैं एक मैक पर लिनक्स चला रहा हूं) Ctrlको बदल देता हूं Super

यह काफी अच्छी तरह से काम करता है, जब केवल एक बार चलता है, लेकिन क्रमिक रूप से चलता है (उदाहरण के लिए जब मैं अपने डेस्कटॉप वातावरण (दालचीनी) को फिर से शुरू करता हूं तो यह .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केवल उन कुंजियों को प्रभावित करता है जिन्हें आप बदल रहे हैं, आप क्या अलग करना चाहते हैं?
गिल्स एसओ- बुराई को रोकना '

जब मैं .Xmodmap का उपयोग करता हूं तो यह कुंजी सेट करता है, अगर मैं इसे फिर से चलाता हूं तो यह उन्हें वापस स्विच करता है। मैं एक .Xmodmap बनाना चाहता हूं, जो कि स्वेप्ड कंट्रोल और कमांड कीज में कोई फर्क नहीं पड़ता। कभी-कभी जब DE को पुनः आरंभ करें .Xmodmap फिर से चलाया जाता है जिसके परिणामस्वरूप एक झुंझलाहट होती है।
coteyr

2
@ कोटियर मुझे लगता है कि आप जिस शब्द की तलाश कर रहे हैं वह " आलंबन " है
जोसेफ आर।

जवाबों:


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 20

@ coteyr - क्या यह आपके लिए काम कर रहा है?
SLM

नहीं वास्तव में मैं अभी भी प्रयोग कर रहा हूं।
coteyr

अपडेट: यह काम करने लगता है, अधिकांश भाग के लिए मुझे अभी भी चीजों को थोड़ा मोड़ना है लेकिन कम से कम सेटिंग्स को क्रमिक रन पर रीसेट नहीं किया जाना चाहिए।
coteyr

@ कोटियर - अगर यह पैन नहीं करता है तो मुझे लगता है कि मेरे पास एक और तरीका है जो काम कर सकता है, लेकिन यह अधिक शामिल है, इसलिए मैं वास्तव में इसे लिखना नहीं चाहता अगर यह काम करता है। उत्तर देते समय कृपया मेरे उपयोगकर्ता नाम के @ चिह्न को शामिल करें ताकि मुझे पता हो कि आपने उत्तर दिया है, अन्यथा मुझे वापस आना होगा और जांच करनी होगी और शायद आप भूल जाएंगे।
स्लम

0

सिस्टम> प्राथमिकताएं> स्टार्टअप एप्लिकेशन पर जाएं और जोड़ें xmodmap ~/.Xmodmapxmodmap कमांड जोड़ें


यह डेम पुनः आरंभ होने पर हर बार xmodmap चलाने का कारण बनता है, यह पहले से ही काम करता है, और सेटिंग्स को सेट करने का कारण बनता है, फिर वापस सेट करें। उदाहरण के लिए, कंप्यूटर प्रारंभ करें, लॉग इन करें, DE लॉन्च किया गया है, xmodmap चलाया जाता है, DE क्रैश होता है, DE प्रारंभ होता है, xmodmap चलाया जाता है। अब मेरा कीबोर्ड फिर से गड़बड़ हो गया है।
coteyr 19

Xev के बारे में क्या? crunchbanglinux.org/wiki/xev-determine_custom_keybindings
PMint 7'13

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

ठीक है, मैं जो व्यवहार करता हूं, वह यह है कि आपका कोड आदर्श है , जबकि मेरा कोड स्टेटफुल है। क्या आप मुझे बता रहे हैं कि आपका कोड और मेरा, दोनों आपके लिए पहचान का व्यवहार करते हैं? अगर ऐसा है, तो मुझे लगता है कि आपको किसी प्रकार की बग का सामना करना पड़ रहा होगा। मेरे पास एक सुझाव है: स्पष्ट रूप xmodmap ~/.Xmodmapसे एक xterm से चलने का प्रयास करें , और देखें कि क्या आपका कोड वास्तव में बार-बार आवेदन के साथ चाबियाँ स्वैप करता है। हो सकता है कि जब आपकी दालचीनी फिर से शुरू हो जाती है, तो यह आपके व्यवहार के मूल व्यवहार पर निर्भर करता है।
billyjmc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.