मैं टर्मिनल में चल रहे node.js प्रोग्राम से Vim
खोलने में सक्षम होना चाहता हूं, कुछ सामग्री बनाएं, सहेजें और Vim
से बाहर निकलें, और फिर फ़ाइल की सामग्री को पकड़ें।मैं node.js से टर्मिनल एप्लिकेशन कैसे खोलूं?
मैं इस तरह कुछ करने के लिए कोशिश कर रहा हूँ:
filename = '/tmp/tmpfile-' + process.pid
editor = process.env['EDITOR'] ? 'vi'
spawn editor, [filename], (err, stdout, stderr) ->
text = fs.readFileSync filename
console.log text
हालांकि, जब इस चलाता है, यह सिर्फ टर्मिनल लटका हुआ है।
मैंने इसे exec
के साथ भी आजमाया है और एक ही परिणाम मिला है।
अद्यतन:
इस तथ्य यह है कि इस प्रक्रिया को एक आदेश readline चल के साथ एक प्रॉम्प्ट पर टाइप किया से शुरू की है द्वारा जटिल है। मैंने पूरी तरह से एक फाइल में अपने नवीनतम संस्करण के प्रासंगिक भागों को निकाला। यहाँ अपनी संपूर्णता में यह है:
{spawn} = require 'child_process'
fs = require 'fs'
tty = require 'tty'
rl = require 'readline'
cli = rl.createInterface process.stdin, process.stdout, null
cli.prompt()
filename = '/tmp/tmpfile-' + process.pid
proc = spawn 'vim', [filename]
#cli.pause()
process.stdin.resume()
indata = (c) ->
proc.stdin.write c
process.stdin.on 'data', indata
proc.stdout.on 'data', (c) ->
process.stdout.write c
proc.on 'exit',() ->
tty.setRawMode false
process.stdin.removeListener 'data', indata
# Grab content from the temporary file and display it
text = fs.readFile filename, (err, data) ->
throw err if err?
console.log data.toString()
# Try to resume readline prompt
cli.prompt()
जिस तरह से यह ऊपर शो के रूप में काम करता है, कि यह सेकंड के एक जोड़े के लिए एक संकेत से पता चलता है, और फिर विम करने के लिए लॉन्च किया गया, लेकिन TTY में गड़बड़ है। मैं फ़ाइल को संपादित और सहेज सकता हूं, और सामग्री सही ढंग से मुद्रित की जाती है। बाहर निकलने पर टर्मिनल पर मुद्रित जंक का एक गुच्छा भी है, और रीडलाइन कार्यक्षमता बाद में टूट जाती है (कोई ऊपर/नीचे तीर नहीं, कोई टैब पूरा नहीं होता है)।
यदि मैं cli.pause()
लाइन को अनमोल करता हूं, तो टीटीई विम में ठीक है, लेकिन मैं सम्मिलित मोड में फंस गया हूं, और Esc
कुंजी काम नहीं करता है। अगर मैंने Ctrl-C
मारा तो यह बच्चे और अभिभावक प्रक्रिया को छोड़ देता है।
आप उपयोग के मामले पर कुछ प्रकाश डाला सकता है? क्या आप अपने आदेशों को चलाकर या डिस्क पर फ़ाइल लिखकर विम से बातचीत करना चाहते हैं? –
क्या उपयोगकर्ता को सामग्री बनाने के लिए संपादक का उपयोग करने के लिए कहने का इरादा है? या आप 'vode' को पूरी तरह से 'node.js' के भीतर से ड्राइव करने का इरादा रखते हैं? – sarnold
मैं 'vim' खोलने में सक्षम होना चाहता हूं ताकि मैं सामग्री बना सकूं, और जब समाप्त हो जाए, बाहर निकलें, और नोड अस्थायी फ़ाइल की सामग्री को पकड़ ले, जिसे मैं नोड से HTTP अनुरोध के हिस्से के रूप में भेजूंगा। – mkopala