Gibt es eine Möglichkeit, in Node.js in die Zwischenablage zu kopieren? Irgendwelche Module oder Ideen, was auch immer? Ich verwende Node.js in einer Desktop-Anwendung. Hoffentlich klärt das auf, warum ich möchte, dass es dies erreichen kann.
In Node.js in die Zwischenablage kopieren?
Turm
Benjamin Atkin
Für OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
kann einen Puffer oder eine Zeichenkette nehmen. Die Standardcodierung für eine Zeichenfolge ist utf-8.
-
Dies ist so nützlich für schnelle Datentransformationen in der REPL.
– Wilhelm
13. August 2020 um 18:46 Uhr
Sindre Sorhus
Kasse clipboardy
. Damit können Sie plattformübergreifend kopieren/einfügen. Es wird aktiver gepflegt als die copy-paste
Modul, das in einer anderen Antwort erwähnt wurde, und es behebt viele der Probleme dieses Moduls.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
-
Es ist besser als das “Kopieren-Einfügen”-Modul, da es auch Doppelbyte-Zeichen unterstützt. Dies hat jedoch ein Problem mit Windows 32-Bit-Betriebssystemen.
– Ponmudi VN
19. Juli 2017 um 7:53 Uhr
-
@PonmudiVN Windows 32-Bit-Unterstützung wurde behoben: github.com/sindresorhus/clipboardy/commit/…
– Sindre Sorhus
6. Dezember 2017 um 0:21 Uhr
-
Ich habe npm installiert
çlipboardy
in Cypress. Ich habe eine Schaltfläche in meiner Webanwendung, wenn Sie auf diese Schaltfläche klicken, sollte der Inhalt der Zwischenablage angezeigt werden, aber es gibt undefinierte Eingaben werden sehr geschätzt. stackoverflow.com/questions/61650737/…– Fußballplatz
7. Mai 2020 um 6:36 Uhr
Xavi
Hier ist ein Modul, das bietet copy
und paste
Funktionen: https://github.com/xavi-/node-copy-paste
Wann require("copy-paste").global()
ausgeführt wird, werden zwei globale Funktionen hinzugefügt:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Wie viele der anderen erwähnten Antworten müssen Sie zum Kopieren und Einfügen von Knoten ein externes Programm aufrufen. Im Falle des node-copy-paste
ruft es pbcopy/pbpaste
(für OS X), xclip
(für Linux) und clip
(für Windows).
Dieses Modul war sehr hilfreich, als ich viel Arbeit in der REPL für ein Nebenprojekt erledigte. Unnötig zu erwähnen, copy-paste
ist nur ein Befehlszeilendienstprogramm – das ist es nicht für Serverarbeit gedacht.
-
Dies ist die beste Antwort. Es ist plattformübergreifend und funktioniert genau so, wie es sollte.
– gilly3
16. September 2015 um 17:01 Uhr
-
Vielleicht möchten Sie aus Gründen der SO-Richtlinie Ihren eigenen Code hinzufügen
– schlepp
27. Juli 2019 um 11:35 Uhr
Ernst Robert
Kürzester Weg in Windows:
const util = require('util');
require('child_process').spawn('clip').stdin.end(util.inspect('content_for_the_clipboard'));
chjj
Eine Zwischenablage gehört nicht zu einem Betriebssystem. Es ist ein Konstrukt des Fenstersystems, auf dem das Betriebssystem gerade läuft. Wenn Sie also beispielsweise möchten, dass dies unter X funktioniert, benötigen Sie Bindungen an Xlib und/oder XCB. Xlib-Bindungen für den Knoten existieren tatsächlich: https://github.com/mixu/nwm. Obwohl ich nicht sicher bin, ob es Ihnen Zugriff auf die X-Zwischenablage gibt, könnten Sie am Ende Ihre eigene schreiben. Sie benötigen separate Bindungen für Windows.
Bearbeiten: Wenn Sie etwas Hackiges machen möchten, können Sie auch xclip verwenden:
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);
});
-
Ein Chrom-Äquivalent von copy() zu haben, wäre großartig.
– Benutzer7090116
6. April 2020 um 20:27 Uhr
pimvdb
Ich habe es geschafft, indem ich eine andere Anwendung erstellt habe, die dies handhabt. Es ist sicherlich nicht der beste Weg, aber es funktioniert.
Ich bin unter Windows und habe eine VB.NET-Anwendung erstellt:
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
Dann habe ich in Node.js verwendet child_process.exec
So führen Sie die VB.NET-Anwendung aus, wobei die zu kopierenden Daten als Befehlszeilenargument übergeben werden:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
-
Ein Chrom-Äquivalent von copy() zu haben, wäre großartig.
– Benutzer7090116
6. April 2020 um 20:27 Uhr
FGRibreau
Mac hat eine native Befehlszeile pbcopy
für diesen Anwendungsfall:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Gleicher Code für Linux, aber ersetzen pbcopy
mit Xclip (apt get install xclip
)
-
Interessant! Glaubst du, es gibt eine Windows-Möglichkeit, dies auch zu tun? Und was ist mit dem Bündeln von xclip in meinem Programm, da ich den Benutzer nicht bitten möchte, xclip zu installieren.
– Turm
16. Oktober 2011 um 11:45 Uhr
-
Ich habe gefunden, dass es etwas in Windows gibt:
echo fooo | clip
. Nun, wie kann man das unter Linux haben, ohne den Benutzer zu bitten, etwas zu installieren?– Turm
16. Oktober 2011 um 11:52 Uhr
-
echo fooo | clip
kann funktionieren, aber das Ergebnis enthält ein ‘\n’ am Ende der primären Zeichenfolge, es ist außerhalb meiner Erwartung.– LIXer
24. März 2017 um 2:11 Uhr
-
Dies würde nicht funktionieren, wenn die Zeichenfolge nicht-englische Zeichen wie „福星高照“ enthält.
– AeroWang
15. August 2021 um 7:12 Uhr