2011-10-15 18 views
29

क्या कोई तरीका है कि आप Node.js में क्लिपबोर्ड पर प्रतिलिपि बना सकते हैं? कोई मॉड्यूल या विचार क्या कभी? मैं डेस्कटॉप अनुप्रयोग पर Node.js का उपयोग कर रहा हूँ। उम्मीद है कि यह साफ हो जाता है कि मैं इसे हासिल करने में सक्षम क्यों होना चाहता हूं।Node.js में क्लिपबोर्ड पर कॉपी करें?

उत्तर

13

एक क्लिपबोर्ड एक ऑपरेटिंग सिस्टम के लिए निहित नहीं है। यह ऑपरेटिंग सिस्टम चलने वाली किसी भी विंडो सिस्टम का निर्माण है। इसलिए यदि आप उदाहरण के लिए एक्स पर काम करना चाहते हैं, तो आपको Xlib और/या XCB से बाइंडिंग की आवश्यकता होगी। नोड के लिए एक्सलिब बाइंडिंग वास्तव में मौजूद हैं: https://github.com/mixu/nwm। हालांकि मुझे यकीन नहीं है कि यह आपको एक्स क्लिपबोर्ड तक पहुंच प्रदान करता है, आप अपना खुद का लेखन समाप्त कर सकते हैं। आपको खिड़कियों के लिए अलग-अलग बाइंडिंग की आवश्यकता होगी।

संपादित करें: आप कुछ hacky क्या करना चाहते हैं, तो आप भी xclip इस्तेमाल कर सकते हैं:

var exec = require('child_process').exec; 

var getClipboard = function(func) { 
    exec('/usr/bin/xclip -o -selection clipboard', function(err, stdout, stderr) { 
    if (err || stderr) return func(err || new Error(stderr)); 
    func(null, stdout); 
    }); 
}; 

getClipboard(function(err, text) { 
    if (err) throw err; 
    console.log(text); 
}); 
2

मैं ऐसा करने में एक अलग एप्लिकेशन बनाकर ऐसा करने में कामयाब रहा। यह निश्चित रूप से सबसे अच्छा तरीका नहीं है, लेकिन यह काम करता है।

मैं विंडोज पर हूँ और एक VB.NET आवेदन बनाया: Node.js में फिर

Module Module1 

    Sub Main() 
     Dim text = My.Application.CommandLineArgs(0) 
     My.Computer.Clipboard.SetText(text) 
     Console.Write(text) ' will appear on stdout 
    End Sub 
End Module 

, मैं child_process.exec इस्तेमाल किया VB.NET अनुप्रयोग चलाने के लिए, डेटा एक के रूप में पारित कॉपी करने के लिए के साथ कमांड लाइन तर्क:

require('child_process').exec(
    "CopyToClipboard.exe \"test foo bar\"", 

    function(err, stdout, stderr) { 
     console.log(stdout); // to confirm the application has been run 
    } 
); 
+0

क्या आपको लगता है कि आप सीधे कमांड लाइन के भीतर ऐसा कर सकते हैं? इस के लिए एक ऐप लिखना मुझे मैक, लिनक्स और विंडोज के लिए संकलित करने की जरूरत है। – Tower

+0

@rFactor: मुझे मैक/लिनक्स के साथ कोई अनुभव नहीं है, मुझे डर है, और मुझे अंतर्निहित क्लिपबोर्ड कमांड से अवगत नहीं है। – pimvdb

+1

विंडोज, आईआईआरसी पर एक 'क्लिप' कमांड है। –

1

मैक इस USECASE के लिए एक देशी कमांड लाइन pbcopy है: लिनक्स के लिए

require('child_process').exec(
    'echo "test foo bar" | pbcopy', 

    function(err, stdout, stderr) { 
     console.log(stdout); // to confirm the application has been run 
    } 
); 

एक ही कोड लेकिन pbcopyXclip (apt get install xclip)

+0

दिलचस्प! क्या आपको लगता है कि ऐसा करने के लिए एक विंडोज तरीका भी है? और मेरे प्रोग्राम में xclip को बंडल करने के बारे में क्या है क्योंकि मैं उपयोगकर्ता को xclip इंस्टॉल करने के लिए नहीं कहूंगा। – Tower

+1

मैंने पाया कि विंडोज़ में कुछ है: 'echo fooo | clip'। अब, उपयोगकर्ता को कुछ इंस्टॉल करने के लिए बिना पूछे लिनक्स में यह कैसे है? – Tower

+0

'echo fooo | क्लिप 'काम कर सकता है, लेकिन परिणाम में अंतिम प्रारंभिक स्ट्रिंग पर' \ n 'होगा, यह मेरी अपेक्षा से बाहर है। – LIXer

21

यहां एक मॉड्यूल है जोप्रदान करता है 10 और paste कार्य: https://github.com/xavi-/node-copy-paste

जब require("copy-paste").global() निष्पादित किया जाता है, दो वैश्विक कार्यों जोड़े जाते हैं:

> copy("hello") // Asynchronously adds "hello" to clipbroad 
> Copy complete 
> paste() // Synchronously returns clipboard contents 
'hello' 

उल्लेख अन्य जवाब में से कई की तरह, कॉपी और नोड में पेस्ट आप एक बाहरी के लिए बाहर कॉल करने की आवश्यकता करने के लिए कार्यक्रम। node-copy-paste के मामले में, यह pbcopy/pbpaste (ओएसएक्स के लिए), xclip (लिनक्स के लिए), और clip (विंडोज़ के लिए) पर कॉल करता है।

यह मॉड्यूल बहुत उपयोगी था जब मैं एक साइड प्रोजेक्ट के लिए आरईपीएल में बहुत से काम कर रहा था। कहने की जरूरत नहीं है, copy-paste केवल एक कमांड लाइन उपयोगिता है - यह सर्वर के काम के लिए नहीं है।

+2

यह सबसे अच्छा जवाब है। यह क्रॉस-प्लेटफ़ॉर्म है और जिस तरह से इसे करना चाहिए, वैसे ही काम करता है। – gilly3

40

ओएस एक्स के लिए:

function pbcopy(data) { 
    var proc = require('child_process').spawn('pbcopy'); 
    proc.stdin.write(data); proc.stdin.end(); 
} 

write() एक बफर या एक स्ट्रिंग ले सकते हैं। एक स्ट्रिंग के लिए डिफ़ॉल्ट एन्कोडिंग utf-8 होगा।

-3

जांच इस zeroclipboard

NPM Windows में

+0

यह एक ब्राउज़र के लिए प्रतीत होता है, नोडजेएस डेस्कटॉप एप्लिकेशन नहीं। –

+0

यह फ़्लैश का भी उपयोग करता है, जो एक बुरा विचार की तरह लगता है। – CallMeNorm

5

सबसे छोटा रास्ता zeroclipboard स्थापित:

require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard")); 
+1

काम करता है! धन्यवाद ... लेकिन पहले 'उपयोग' की आवश्यकता है। – LIXer

+0

धन्यवाद! "उपयोग" निर्भरता की आवश्यकता मेरे लिए काम नहीं करती है: आवश्यकता है ('child_process')। spawn ('clip')। stdin.end ("content_for_the_clipboard"); – darmis

7

चेक बाहर clipboardy। यह आपको क्रॉस-प्लेटफॉर्म कॉपी/पेस्ट करने देता है। यह copy-paste मॉड्यूल mentioned से दूसरे उत्तर में अधिक सक्रिय रूप से बनाए रखा गया है और यह उस मॉड्यूल के कई मुद्दों को हल करता है।

const clipboardy = require('clipboardy'); 

// Copy 
clipboardy.writeSync(''); 

// Paste 
clipboardy.readSync(''); 
+1

यह मॉड्यूल पूरी तरह से काम करता है और अच्छी तरह से बनाए रखा जाता है। – SamVerschueren

+0

यह "कॉपी-पेस्ट" मॉड्यूल से बेहतर है क्योंकि यह डबल बाइट वर्णों का भी समर्थन करता है। लेकिन इसमें विंडोज 32 बिट ओएस के साथ समस्या है। –

+1

@PonmudiVN विंडोज 32-बिट समर्थन तय किया गया है: https://github.com/sindresorhus/clipboardy/commit/3be3ee6b9b9cd736623fcc8ebb1aa9e0c42371b4 –

संबंधित मुद्दे