Node.js में क्लिपबोर्ड पर कॉपी करें?


86

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

जवाबों:


18

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

संपादित करें: यदि आप कुछ हैक करना चाहते हैं, तो आप भी 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);
});

कॉपी के बराबर क्रोमियम होना () कमाल का होगा।

94

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

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

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


REPL में त्वरित डेटा परिवर्तनों के लिए यह बहुत उपयोगी है।
विलियम

73

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

const clipboardy = require('clipboardy');

// Copy
clipboardy.writeSync('🦄');

// Paste
clipboardy.readSync();
//🦄

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

1
@PonmudiVN विंडोज 32-बिट समर्थन तय किया गया है: github.com/sindresorhus/clipboardy/commit/…
सिंध्रे सोरहूस

मैं स्थापित NPM किया çlipboardycypress.I में एक बटन क्लिपबोर्ड सामग्री मिलना चाहिए कि बटन पर क्लिक करने पर ही, मेरे वेब अनुप्रयोग में है, लेकिन यह अपरिभाषित देता है, किसी भी आदानों की बहुत सराहना कर रहे हैं stackoverflow.com/questions/61650737/...
soccerway

30

यहाँ एक मॉड्यूल है जो प्रदान करता है copyऔर 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(OSX के लिए), xclip(लिनक्स के लिए), और clip(विंडोज़ के लिए) कॉल करता है ।

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


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

1
SO पॉलिसी के लिए अपना स्वयं का कोड जोड़ना चाह सकते हैं
बजे

16

विंडोज में सबसे छोटा तरीका:

const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));

1
काम करता है! धन्यवाद ... लेकिन utilपहले की आवश्यकता है ।
लिकर

2
धन्यवाद! मेरे लिए "उपयोग" निर्भरता कार्यों की कोई आवश्यकता नहीं है जैसे: आवश्यकता ('child_process')। स्पॉन ('क्लिप')। stdin.end ("content_for_the_clipboard");
डेरामिस

मैं ReferenceError: util is not definedपहली बार बिना शामिल हो गया , const util = require("util")मैंने दोनों इलेक्ट्रोन में परीक्षण किया और बिना किसी भाग्य के प्रक्रिया प्रदान की। कहा जा रहा है कि नोड 12.14.1 सीएलआई से इसने काम किया। मुझे लगता है कि यह कहना सुरक्षित है कि आपको उपयोग के मामले के आधार पर उपयोग को परिभाषित करना चाहिए।
बनारसी

यह लगभग काम करता है: यह स्ट्रिंग को इसके चारों ओर एकल उद्धरणों के साथ कॉपी करता है। क्या किसी को पता है कि इस व्यवहार को कैसे रोका जाए?
m4cbeth

3

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

मैं विंडोज पर हूं और VB.NET एप्लिकेशन बनाया है:

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

फिर Node.js में, मैं child_process.execVB.NET एप्लिकेशन को चलाता था, जिसमें डेटा को कमांड लाइन तर्क के रूप में कॉपी किया जाता था:

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

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

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

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

मैं कमांड 'इको "टेस्ट फू बार का उपयोग करता हूँ | क्लिप ', यह काम करता है। लेकिन परिणाम में एक लाइन ब्रेक \ n है, इससे मेरा काम टूट जाता है ...
LIXer

3

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

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

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

Linux के लिए समान कोड लेकिन Xclip ( ) के pbcopyसाथ बदलेंapt get install xclip


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

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

echo fooo | clipकाम कर सकते हैं, लेकिन परिणाम में एक '\ n' शामिल होगा, जो कि प्राइमल स्ट्रिंग के अंतिम भाग में होगा, यह मेरी उम्मीद से बाहर है।
लिकर

-5

इस ज़ीरोक्लिपबोर्ड की जाँच करें

npm zeroclipboard स्थापित करें


यह ब्राउज़र के लिए प्रतीत होता है, न कि NodeJS डेस्कटॉप अनुप्रयोग के लिए।
स्कॉट रिपी

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