C'è un modo per copiare negli appunti in Node.js? Qualche modulo o idea che cosa mai? Sto usando Node.js su un'applicazione desktop. Spero che chiarisca perché voglio che sia in grado di raggiungere questo obiettivo.Copia negli appunti in Node.js?
risposta
Un blocco appunti non è inerente a un sistema operativo. È un costrutto di qualsiasi sistema di finestre sul quale il sistema operativo è in esecuzione. Quindi, se vuoi che questo funzioni su X, ad esempio, avrai bisogno di collegamenti a Xlib e/o XCB. Esistono effettivamente collegamenti Xlib per il nodo: https://github.com/mixu/nwm. Anche se non sono sicuro che ti dia accesso agli appunti X, potresti finire per scrivere il tuo. Avrai bisogno di collegamenti separati per Windows.
Edit: Se si vuole fare qualcosa hacky, si potrebbe anche usare 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);
});
Sono riuscito a farlo creando un'applicazione diversa che gestisce questo. Non è certamente il modo migliore, ma funziona.
Sono su Windows e creato un'applicazione 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
Poi nel Node.js, ho usato child_process.exec
per eseguire l'applicazione VB.NET, con i dati da copiare passato come argomento della riga di comando:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac ha una linea di comando nativo pbcopy
per questo caso d'uso:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Stesso codice per Linux, ma sostituire pbcopy
con Xclip (apt get install xclip
)
Interessante! Pensi che ci sia un modo per farlo anche con Windows? E per quanto riguarda il bundling di xclip nel mio programma come non vorrei chiedere all'utente di installare xclip. – Tower
Ho trovato che c'è qualcosa in Windows: 'echo fooo | clip'. Ora, come avere questo in Linux senza chiedere all'utente di installare qualcosa? – Tower
'echo fooo | clip' può funzionare, ma il risultato conterrà un '\ n' sull'ultimo della stringa principale, è fuori dalla mia aspettativa. – LIXer
Ecco un modulo che forniscono copy
e paste
funzioni: https://github.com/xavi-/node-copy-paste
Quando require("copy-paste").global()
viene eseguito, sono aggiunti due funzioni globali:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Come molti degli altri risposta accennato, da copiare e incollare nel nodo è necessario chiamare fuori ad un esterno programma. Nel caso di node-copy-paste
, chiama pbcopy/pbpaste
(per OSX), xclip
(per linux) e clip
(per Windows).
Questo modulo è stato molto utile quando stavo facendo un sacco di lavoro nel REPL per un progetto parallelo. Inutile dire che copy-paste
è solo un'utilità da riga di comando - è non destinata al funzionamento del server.
Questa è la migliore risposta. È multipiattaforma e funziona esattamente come dovrebbe. – gilly3
Per OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
può prendere un buffer o una stringa. La codifica predefinita per una stringa sarà utf-8.
controllo questo zeroclipboard
npm installare zeroclipboard
Questo sembra essere per un browser, non un'applicazione desktop NodeJS. –
Anche questo utilizza il flash, che sembra una cattiva idea. – CallMeNorm
via più breve in Windows:
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
Partenza clipboardy
. Ti consente di copiare/incollare multipiattaforma. È mantenuto più attivamente rispetto al modulo copy-paste
mentioned in un'altra risposta e risolve molti dei problemi di quel modulo.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('');
// Paste
clipboardy.readSync('');
Questo modulo funziona perfettamente ed è ben mantenuto. – SamVerschueren
È migliore del modulo "copia-incolla" poiché supporta anche caratteri a doppio byte. Ma questo ha un problema con il sistema operativo Windows 32 bit. –
@PonmudiVN Il supporto per Windows a 32 bit è stato corretto: https://github.com/sindresorhus/clipboardy/commit/3be3ee6b9b9cd736623fcc8ebb1aa9e0c42371b4 –
Pensi di riuscire a farlo direttamente dalla riga di comando? Scrivere un'app per questo significa che ho bisogno di compilarlo per Mac, Linux e Windows. – Tower
@rFactor: non ho alcuna esperienza con Mac/Linux, temo, e non sono a conoscenza di un comando appunti incorporato. – pimvdb
C'è un comando 'clip' su Windows, IIRC. –