Чи можна скопіювати в буфер обміну в Node.js? Будь-які модулі чи ідеї, що коли-небудь? Я використовую Node.js у настільному додатку. Сподіваюся, це зрозуміло, чому я хочу, щоб це могло цього досягти.
Відповіді:
Буфер обміну не властивий операційній системі. Це конструкція будь-якої віконної системи, в якій працює операційна система. Отже, якщо ви хочете, щоб це працювало, наприклад, на X, вам знадобляться прив'язки до Xlib та / або XCB. Прив'язки Xlib для вузла насправді існують: https://github.com/mixu/nwm . Хоча я не впевнений, чи він надає вам доступ до буфера обміну X, ви можете в кінцевому підсумку написати свій власний. Вам знадобляться окремі палітурки для вікон.
редагувати: якщо ви хочете зробити щось хакі, ви також можете використовувати 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);
});
Для OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
може приймати буфер або рядок. Кодування за замовчуванням для рядка буде utf-8.
Перевірте clipboardy
. Це дозволяє копіювати / вставляти крос-платформні. Він підтримується активніше, ніж copy-paste
модуль, згаданий в іншій відповіді, і виправляє багато проблем цього модуля.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
Ось модуль, який надає 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-copy-paste
, він викликає pbcopy/pbpaste
(для OSX), xclip
(для Linux) та clip
(для Windows).
Цей модуль був дуже корисний, коли я робив багато роботи в REPL для побічного проекту. Само собою зрозуміло, copy-paste
це лише утиліта командного рядка - вона не призначена для роботи на сервері.
Найкоротший спосіб у Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
спочатку потрібно вимагати .
ReferenceError: util is not defined
без попереднього включення, const util = require("util")
протестував як основний Electon, так і процес відтворення без удачі. Це сказано з вузла 12.14.1 CLI, він працював. Я думаю, можна з упевненістю сказати, що ви повинні визначити util, щоб бути у безпеці на основі випадку використання.
Мені вдалося це зробити, створивши інший додаток, який це обробляє. Це, звичайно, не найкращий спосіб, але він працює.
Я працюю в 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
}
);
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
)
echo fooo | clip
. Тепер, як це мати в Linux, не просячи користувача встановити щось?
echo fooo | clip
може працювати, але результат буде містити '\ n' в кінці первинного рядка, це не очікується.
перевірте цей zeroclipboard
npm встановити zeroclipboard