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