emacs - एक एप्पल स्क्रिप्ट को सक्रिय करने की सबसे प्रभावी पद्धति है
applescript elisp (1)
मैं applescript के बारे में नहीं जानता, लेकिन आप ऐसा करने के लिए emacsclient
का उपयोग नहीं कर सकते?
एक बार जब आप अपने मौजूदा एमएसीएस उदाहरण ( एमएक्स server-start
आरईटी server-start
) में server-start
कर चुके हैं, तो आप ऐसा कुछ चला सकते हैं:
emacsclient -e "(call-interactively 'dock)"
एमएक्स में मनमाने ढंग से लिस्पी कोड का मूल्यांकन करने के लिए
समारोह को लॉन्च करने के लिए मिनेबफर को खोलने के बजाए एमएक्स में फ़ंक्शन को सक्रिय करने के लिए एक बेहतर तरीका है? एक विलंब है जो मेरी कुंजीपटल शॉर्टकट के साथ applescript को लॉन्च करने के लिए अपनी उंगली को नियंत्रण कुंजी से दूर ले जाने के लिए आवश्यक है (जिससे कि Emacs इसे कमांड के रूप में पंजीकृत न करें), और फ़ंक्शन के नाम टाइप करने के बाद एक और देरी है मिनीबफर में आदर्श रूप से, मैं मीनबफर को खोलने के बिना किसी विशेष फ़ंक्शन को चलाने के लिए एमाक्स को अंडर-द-हुड को बताना चाहता हूं निम्नलिखित इमैक को सक्रिय करने के लिए एक साधारण सेबस्क्रिप्ट है, और Mx
साथ मिनीबफर खोलें, और फ़ंक्शन ( dock
) का नाम टाइप करें, और रिटर्न कुंजी दबाएं। विधि काम करनी चाहिए कि क्या Emacs वर्तमान में खुली है (छिपी या सामने) या बंद।
एफवाईआई: मेरे जैसे नौसिखिए प्रोग्रामर के लिए, यहां कुंजी कोड के लिए धोखा-पत्र है: https://apple.stackexchange.com/questions/36943/how-do-i-automate-a-key-press-in-applescript / 36947 # 36947? newreg = 9adf36816f4245d69f0900ec09588057
संपादित करें : एएमएसीएस के भीतर एक कुंजीपटल शॉर्टकट सेट करना होगा जो एक फ़ंक्शन (global-set-key (kbd "<f6>") (lambda () (interactive) (dired "/Applications")))
से जुड़ा हुआ है (global-set-key (kbd "<f6>") (lambda () (interactive) (dired "/Applications")))
- उदाहरण के लिए, फ़ंक्शन को सक्रिय करने के लिए F6, और फिर F6 कुंजी के लिए key code 97
उपयोग करें। हालांकि, यह अभी भी सीखना अच्छा होगा कि कैसे मिनैबफर खोलने के बिना नाम से एक Emacs फ़ंक्शन (एक applescript के साथ) चलाना निर्दिष्ट करें
tell application "System Events"
tell application "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/Emacs" to activate
delay .3
key code 53 # escape
key code 7 # x
key code 2 # d
key code 31 # o
key code 8 # c
key code 40 # k
delay .1
key code 36 # return
end tell
या
tell application "System Events"
tell application "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/Emacs" to activate
delay .3
key code 97 # F6
end tell
संपादित करें : संशोधित मसौदा ( init.el
द्वारा उत्तर के आधार पर) - इसके लिए आवश्यक है कि (server-start)
init.el
स्टार्टअप फ़ाइल के अंदर हो (जैसे, init.el
)। यदि emacsclient
जीयूआई पहले से ही चल रहा है, तो उसके पहले एक विराम के बिना emacsclient
चलाएं; ELSE, Emacs GUI लॉन्च करें (लोड करने के लिए सर्वर के लिए 1 सेकंड रोकें) और फिर emacsclient
।
on is_running(appName)
tell application "System Events" to (name of processes) contains appName
end is_running
set EmacsRunning to is_running("Emacs")
if EmacsRunning then
tell application "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/Emacs" to activate
do shell script "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/bin/emacsclient -e '(dired \"/Applications\")'"
else
tell application "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/Emacs" to activate
delay 1
do shell script "/Users/HOME/.0.data/.0.emacs/Emacs.app/Contents/MacOS/bin/emacsclient -e '(dired \"/Applications\")'"
end if