Как скопировать изображение или файл в буфер обмена с помощью JXA? - PullRequest
0 голосов
/ 23 февраля 2020

Мне трудно использовать JavaScript в ScriptEditor

AppleScript скопировать изображение в буфер обмена по пути, как этот

set image to POSIX file ("/Users/lll00lll/Library/Documents/temp.jpg")
set the clipboard to image

Но как перевести вышеуказанный код AppleScript в JavaScript?

JavaScript как это может скопировать строку в буфер обмена, но не изображение или файл

var app = Application('Script Editor');
app.includeStandardAdditions = true;
app.setTheClipboardTo(str);

или использовать Objective- C? Но я не могу отредактировать это как "generalPasteboard.setData "

$.NSPasteboard.generalPasteboard.clearContents;
$.NSPasteboard.generalPasteboard.setStringForType($(str), $.NSPasteboardTypeString);

1 Ответ

1 голос
/ 04 марта 2020

При этом используется мост JS -Obj C для помещения одного или нескольких файлов в буфер обмена. fsCopy может быть передан один путь к файлу или массив путей к файлам и возвращает количество элементов в буфере обмена после завершения операции (очевидно, это должно равняться числу путей к файлам).

ObjC.import('AppKit');


function fsCopy(fs) {
    const pb = $.NSPasteboard.generalPasteboard;
    pb.clearContents;

    [].concat(fs).forEach(f => 
        pb.writeObjects([
            ObjC.unwrap($.NSURL
            .fileURLWithPath(f))
        ])
    );

    return pb.pasteboardItems.count * 1;
}
...