Есть ли способ скопировать в буфер обмена в Node.js? Любые модули или идеи, что так когда-либо? Я использую Node.js в настольном приложении. Надеюсь, это прояснит, почему я хочу, чтобы это удалось достичь.
Скопировать в буфер обмена в Node.js?
Ответ 1
Буфер обмена не является неотъемлемой частью операционной системы. Это конструкция любой оконной системы, с которой работает операционная система. Поэтому, если вы хотите, чтобы это работало на X, вам понадобятся привязки к Xlib и/или XCB. Xlib привязки для node фактически существуют: https://github.com/mixu/nwm. Хотя я не уверен, дает ли он вам доступ к буферу X, вы можете написать свое собственное. Для окон вам понадобятся отдельные привязки.
edit: Если вы хотите сделать что-то взломанное, вы также можете использовать 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);
});
Ответ 2
Для OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
может принимать буфер или строку. Кодировка по умолчанию для строки будет utf-8.
Ответ 3
Здесь модуль, предоставляющий функции copy
и paste
: https://github.com/xavi-/node-copy-paste
Когда выполняется require("copy-paste").global()
, добавляются две глобальные функции:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Как и многие другие упомянутые ответы, для копирования и вставки в node вам нужно обратиться к внешней программе. В случае node-copy-paste
он вызывает pbcopy/pbpaste
(для OSX), xclip
(для linux) и clip
(для окон).
Этот модуль был очень полезен, когда я много работал в REPL для стороннего проекта. Излишне говорить, что copy-paste
- это только утилита командной строки - она не предназначена для работы сервера.
Ответ 4
Самый короткий путь в Windows:
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
Ответ 5
Отъезд clipboardy
. Он позволяет вам копировать/вставлять кросс-платформу. Он более активно поддерживается, чем модуль copy-paste
упомянутый в другом ответе, и он исправляет многие проблемы этого модуля.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync('🦄');
Ответ 6
Мне это удалось, создав другое приложение, которое обрабатывает это. Это, конечно, не самый лучший способ, но он работает.
Я нахожусь в Windows и создаю приложение 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
Затем в Node.js я использовал child_process.exec
для запуска приложения VB.NET, причем данные, которые нужно скопировать, передавались как аргумент командной строки:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Ответ 7
Mac имеет собственную командную строку pbcopy
для этой утилиты:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Тот же код для Linux, но замените pbcopy
на Xclip (apt get install xclip
)
Ответ 8
проверьте zeroclipboard
npm установить zeroclipboard