क्या आप देशी क्विक का उपयोग करके सक्रिय कर सकते हैं / सामने ला सकते हैं? (उदाहरण के लिए जब दूसरे कार्यक्रम में काम कर रहे हों)


16

मैं एमएसीएस को सक्रिय करने के लिए मजबूर करना चाहता हूं, कुछ परिस्थितियों में फ्रॉड और 'चोरी' पर ध्यान केंद्रित करने के लिए खरीदा जाना चाहिए। जैसे जब मैं एक ऑर्ग-पोमोडोरो या एक महत्वपूर्ण नियुक्ति अनुस्मारक के दौरान समाप्त करता हूं।

अब, मैं बाहरी निर्भरता को कम करने के लिए ऐसा करने के लिए 'मूल' तरीका खोज रहा हूं। (सिर्फ लिनक्स मेरे लिए ठीक है, क्रॉस-प्लेटफॉर्म बेहतर होगा)।

क्या यह तकनीकी रूप से 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

4
कोशिश करो raise-frame
टॉम ट्रॉमी

सुझाव के लिए धन्यवाद। फ्रेम को कम करना काम करता है, लेकिन फ्रेम को ऊपर उठाना किसी कारण से इसे फिर से नहीं बढ़ाता है?
सिंह उफिम्त्सेव

मेरा मानना ​​है कि @TomTromey सही है। आप निम्नानुसार परीक्षण कर सकते हैं। सबसे पहले, एक निष्क्रिय टाइमर बनाएं (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 उठाया नहीं जाता है ... विचार?
सिंह उफिम्त्सेव

1
मैं emacs के गुई संस्करण का उपयोग कर रहा हूँ? (टर्मिनल संस्करण नहीं), क्या आप भी गुई का उपयोग कर रहे थे?
लियो उफ्तित्सेव

जवाबों:


16

यदि आप विंडो सिस्टम का उपयोग कर रहे हैं, तो आप उपयोग करने में सक्षम हो सकते हैं x-focus-frame

ध्यान दें:

  • x-focus-frame विंडोज के साथ-साथ लिनक्स के लिए भी काम करता है
  • Emacs 23.1 से पहले, w32-focus-frameविंडोज पर उपयोग करें ।

हाँ सचमुच। (x- फ़ोकस-फ़्रेम nil) emacs विंडो उठाती है। साफ!
लियो उफिम्त्सेव

1

या तो (x-focus-frame nil)या (other-frame 0)यह करना होगा। मुझे यकीन नहीं है कि दोनों के बीच व्यवहार में कोई अंतर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.