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 soit en mesure d'y parvenir.
8 réponses
Un presse-papiers n'est pas inhérent à un système d'exploitation. C'est une construction de n'importe quel 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);
});
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
)
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
}
);
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.
Chemin le plus court sous Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
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 a été très utile lorsque je faisais beaucoup de travail dans le REPL pour un projet parallèle. Inutile de dire que copy-paste
n'est qu'un utilitaire de ligne de commande - c'est pas destiné au travail sur serveur.
Consultez clipboardy
. Il vous permet de copier / coller multiplateforme. Il est plus activement maintenu que le module copy-paste
mentionné dans une autre réponse et corrige de nombreux problèmes de ce module.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
Questions connexes
De nouvelles questions
javascript
Pour des questions concernant la programmation dans ECMAScript (JavaScript / JS) et ses divers dialectes / implémentations (hors ActionScript). Veuillez inclure toutes les balises pertinentes dans votre question; par exemple, [node.js], [jquery], [json], etc.