Existe-t-il un moyen de copier dans le presse-papiers dans Node.js? Des modules ou des idées quoi que ce soit? J'utilise Node.js sur une application de bureau. J'espère que cela explique pourquoi je veux qu'il puisse y parvenir.
Un presse-papiers n'est pas inhérent à un système d'exploitation. C'est une construction du système de fenêtres que le système d'exploitation exécute. Donc, si vous vouliez que cela fonctionne sur X par exemple, vous auriez besoin de liaisons avec Xlib et/ou XCB. Les liaisons Xlib pour le nœud existent réellement: https://github.com/mixu/nwm . Bien que je ne sois pas sûr qu'il vous donne accès au presse-papiers X, vous pourriez finir par écrire le vôtre. Vous aurez besoin de liaisons distinctes pour les fenêtres.
edit: Si vous voulez faire quelque chose de hacky, vous pouvez également utiliser 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);
});
Pour OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
peut prendre un tampon ou une chaîne. L'encodage par défaut d'une chaîne sera utf-8.
Découvrez clipboardy
. Il vous permet de copier/coller multiplateforme. Il est plus activement maintenu que le copy-paste
module mentionné dans une autre réponse et il corrige de nombreux problèmes de ce module.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('????');
// Paste
clipboardy.readSync();
//????
Voici un module qui fournit les fonctions copy
et paste
: https://github.com/xavi-/node-copy-paste
Lorsque require("copy-paste").global()
est exécuté, deux fonctions globales sont ajoutées:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Comme la plupart des autres réponses mentionnées, pour copier et coller dans le nœud, vous devez appeler un programme externe. Dans le cas de node-copy-paste
, il appelle pbcopy/pbpaste
(pour OSX), xclip
(pour linux) et clip
(pour windows).
Ce module était très utile lorsque je faisais beaucoup de travail dans le REPL pour un projet parallèle. Inutile de dire, copy-paste
n'est qu'un utilitaire de ligne de commande - il n'est pas destiné au travail du serveur.
Chemin le plus court sous Windows:
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
J'ai réussi à le faire en créant une application différente qui gère cela. Ce n'est certainement pas la meilleure façon, mais cela fonctionne.
Je suis sous Windows et j'ai créé une application 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
Puis dans Node.js, j'ai utilisé child_process.exec
pour exécuter l'application VB.NET, avec les données à copier passées comme argument de ligne de commande:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac a une ligne de commande native pbcopy
pour ce cas d'utilisation:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Même code pour Linux mais remplacez pbcopy
par Xclip (apt get install xclip
)