यदि प्रोग्राम चल रहा है तो मैं xmonad में हॉटकी के व्यवहार को कैसे बदल सकता हूं?


12

मैं अपनी xmonad.hsकॉन्फ़िगरेशन फ़ाइल में कुछ मुख्य मैपिंग का उपयोग कर रहा हूं :

...
    , modMask = mod4Mask     -- Rebind Mod to the Windows key
...
 [ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
 , ((0, xK_Print), spawn "scrot")
 , ((controlMask, xK_f), spawn "firefox")
 ]

firefoxदबाने पर तीसरी मैपिंग चलती है ctrl+f। मैं कुछ और जटिल करना चाहूंगा:

if (firefox is running):
  focus and maximize firefox window:
else:
  run firefox

और मैं बदलना चाहते हैं ctrl+fकरने के लिए win+f। मैं उसे कैसे कर सकता हूँ?


क्या इस तरह क्रॉसपोस्ट करना (यहां और स्टैकओवरफ्लो पर) वास्तव में एक सामान्य व्यवसाय है?
ДМИТРИЙ МАЛИКОВ

नहीं: यह सक्रिय रूप से हतोत्साहित किया जाता है ...
jasonwryan 19

यह इतना विषय पर बंद है, तो मैं उनसे पूछा कि उनके प्रति से छुटकारा पाने के
माइकल Mrozek

@ dmitry.malikov यह प्रश्न के लिए बेहतर जगह है।
xralf

और भी बेहतर; xralf ने SO प्रति हटा दी। बहुत धन्यवाद
माइकल Mrozek

जवाबों:


8

XMonad के कंट्रीब पैकेज को देखकर , आप पाएंगे XMonad.Actions.WindowGo, जो निम्नलिखित फ़ंक्शन का निर्यात करता है :

runOrRaiseMaster :: String -> Query Bool -> X ()

जो प्रोग्राम को चलाने के लिए एक स्ट्रिंग तर्क लेता है , जैसे "फ़ायरफ़ॉक्स"; और एक बूलियन क्वेरी जिसका उपयोग यह पता लगाने के लिए किया जाता है कि यह पहले से ही चल रहा है , X11 गुणों के माध्यम से, उदाहरण के लिए (className =? "Firefox")( XMonad.Actions.WindowGoपृष्ठ के शीर्ष देखें )।

इसलिए, आपको केवल runOrRaiseMaster "firefox" (className =? "Firefox")उस कुंजी को बांधना है जिसे आप चाहते हैं, जैसा कि इसकेXMonad.Doc.Extending माध्यम से समझाया गया है

((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))

Data.Mapआपके कॉन्फ़िगरेशन के प्रमुख बाइंडिंग के भाग के रूप में (विवरण आपकी सेटिंग के इस तरीके से भिन्न होते हैं, अर्थात, आपके संपूर्ण xmonad.hs, Keybindings जोड़ना देखें )।

ध्यान दें कि XMonad में एक विंडो को अधिकतम करने में कोई वास्तविक अर्थ नहीं है । जब आप चीजों को समझाते हैं, तो आपके पास Mod4+ fकार्य इस प्रकार होंगे:

  • यदि "फ़ायरफ़ॉक्स" से मेल खाने वाले क्लासनाम के साथ एक विंडो है, तो इसे ध्यान केंद्रित किया जाएगा और मास्टर पर सेट किया जाएगा , अर्थात, आपके हाल के लेआउट के आधार पर , बड़ी विंडो होगी
  • अगर कोई विंडो मैच नहीं करती है, तो फ़ायरफ़ॉक्स को स्पॉन किया जाएगा और मास्टर में सेट किया जाएगा ।

Fullकॉलिंग के बाद लेआउट का चयन करके अधिकतमकरण का अनुकरण किया जा सकता है runOrRaiseMaster, जैसा कि यहां वर्णित है :

("M-<F1>", sendMessage $ JumpToLayout "Full")

(ध्यान दें कि यह उदाहरण XMonad.Util.EZConfigआसान कीबाइंडिंग परिभाषाओं को अनुमति देता है)

इन दोनों चीजों का संयोजन भी संभव है। दोनों प्रकार के हैं X (), अर्थात, वे एक्स मोनाड में हैं । का उपयोग करना >>, जो प्रकार का है (साथ :t (>>)में जांचें ghci)

(>>) :: Monad m => m a -> m b -> m b

हमारे पास (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")दो X ()प्रकारों के संयोजन के रूप में X ()भी है, और यह एक कुंजी के लिए बाध्य हो सकता है।

EDIT )कोड लाइन में गुम है>>

EDIT2 modm -> modMask

Edit3 यह xmonad.hsउम्मीद है कि काम करता है।

( आप अच्छे के लिए हास्केल क्यों नहीं सीखते? )


काम के जवाब और अन्य जानकारी और हास्केल ट्यूटोरियल के लिए धन्यवाद। मुझे हास्केल सिंटैक्स और कार्यात्मक प्रतिमान पसंद है। केवल एक चीज जो काम नहीं करती है वह यह है कि >> (sendMessage $ JumptoLayout "Full")कंस्ट्रक्टर के साथ कुछ त्रुटि है। शायद यह कुछ आसान है, जिसे मैं हास्केल सीखने के बाद हल करूंगा।
xralf

मैं भूल गया: अभी तक modmकाम नहीं कर रहा है, मैं अभी भी उपयोग कर रहा हूँ controlMask
xralf

@xralf, (1) एक गुम ब्रैकेट था - क्या यह अब काम करता है? (2) मुझे इसे xmonad.hsठीक करने के लिए आपकी पूरी आवश्यकता होगी ; बेहतर है कि यहां चारों ओर एक नज़र डालें, कॉन्फ़िगर आर्काइव करें और देखें कि दूसरे इसे कैसे करते हैं या उल्लेख किया गया है EZConfig
sr_

ब्रैकेट ने मदद नहीं की। यहाँ xmonad.hs फ़ाइल का उपयोग कर रहा हूँ।
xralf

(1) कोष्ठक अभी भी गलत हैं, X ()कुंजी को बांधने की क्रिया की क्रिया होनी चाहिए (runOrRaiseMaster ...) >> (sendMessage ...), जिसके परिणामस्वरूप ,((...,...), (runOrR...) >> (send...) ) ( (पहले run...)
sr_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.