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.

72
Tower 15 oct. 2011 à 18:50

8 réponses

Meilleure réponse

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);
});
15
chjj 16 déc. 2011 à 09:47

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)

1
FGRibreau 16 oct. 2011 à 10:55

Vérifiez ce zeroclipboard

npm install zeroclipboard

-4
Damodaran 21 déc. 2012 à 09:07

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
    }
);
2
pimvdb 15 oct. 2011 à 15:35

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.

76
Pier 18 mai 2017 à 21:23

Chemin le plus court sous Windows:

const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
8
Community 15 mars 2020 à 07:24

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.

30
Xavi 5 oct. 2014 à 19:46

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();
//🦄
52
Ecstabis 21 juil. 2018 à 20:48
7778539