मैं एमएसीएस को सक्रिय करने के लिए मजबूर करना चाहता हूं, कुछ परिस्थितियों में फ्रॉड और 'चोरी' पर ध्यान केंद्रित करने के लिए खरीदा जाना चाहिए। जैसे जब मैं एक ऑर्ग-पोमोडोरो या एक महत्वपूर्ण नियुक्ति अनुस्मारक के दौरान समाप्त करता हूं।
अब, मैं बाहरी निर्भरता को कम करने के लिए ऐसा करने के लिए 'मूल' तरीका खोज रहा हूं। (सिर्फ लिनक्स मेरे लिए ठीक है, क्रॉस-प्लेटफॉर्म बेहतर होगा)।
क्या यह तकनीकी रूप से emacs के अंदर से संभव है?
[संपादित करें] समाधान:
GUI का उपयोग करने पर, यह अच्छी तरह से काम करता है:
(x-focus-frame nil)
[ऐतिहासिक कारणों से ...] मैंने कोशिश की है:
फ़्रेम दृश्यता (काम नहीं करता है)
(make-frame-visible)
और भी:
(make-frame-invisible)
(make-frame-visible)
लेकिन ये केवल तभी काम करते हैं जब Emacs पहले से सक्रिय हो।
फ्रेम उठाना (काम नहीं करता है)
कम फ्रेम वास्तव में emacs छिपाने के लिए लगता है।
(lower-frame)
लेकिन एक टाइमर से फ्रेम उठाना नहीं है। यानी, कुछ नहीं होता।
(raise-frame)
ऐसा लगता है कि इसे उठाने से पहले एक लापता 'सक्रिय-एमएसीएस' है।
[बाहरी समाधान पर ध्यान दें]
वर्तमान में, (वर्कअराउंड / सॉल्यूशन के रूप में?) मैं थोड़ा सा उपयोग करता हूं:
(call-process "activateEmacs")
और संबंधित बैश स्क्रिप्ट: (आपको पहले अपने सिस्टम पर xdotool स्थापित करने की आवश्यकता हो सकती है)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
:। के साथ फ्रेम निलंबित करें M-x (suspend-frame)
। 5 सेकंड में, वह फ्रेम फिर से दिखाई देगा।
(suspend-frame)
और एक अन्य विंडो में क्लिक किए बिना वहां प्रतीक्षा करें। लेकिन अगर आप फ्रेम को निलंबित करते हैं और किसी अन्य एप्लिकेशन में काम करते हैं, तो ईएमएसी फिर से प्रकट नहीं होता है। कम से कम मेरे सिस्टम पर नहीं (फ़ेडरेशन 21 विद मेट डेस्कटॉप)। एक सरल उदाहरण यह है: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
इसे और किसी अन्य एप्लिकेशन पर ऑल्ट-टैब चलाएं। संदेश बफ़र में दिखाई देगा, लेकिन emacs उठाया नहीं जाता है ... विचार?
raise-frame
।