Нажатие клавиши JXA не работает со специальными символами

Я пытаюсь настроить простой сценарий Apple JXA, чтобы написать на экране хорошо известный смайлик, пожимающий плечами (я думаю, он имитирует нажатие клавиши). Все, что я пытаюсь сделать, производит это "¯\_(a)_/¯". Я предполагаю, что, поскольку я использую нажатие клавиши для имитации нажатия клавиши, и у меня нет японской клавиатуры, я всегда буду это получать. Может быть, мне следует вместо этого скопировать строку в буфер обмена?

Вот мой код:

// Shrug Script
// ¯\_(ツ)_/¯
//
// contains special character:
// ツ
// KATAKANA LETTER TU
// Unicode: U+30C4, UTF-8: E3 83 84

// thought maybe I needed to decode it ¯\_(ツ)_/¯
function decode_utf8(s) {
  return decodeURIComponent(escape(s));
}

// this is the newer "Script" aka Javascript way
var sysEvents = Application('System Events');

// this didn't work:
// sysEvents.keystroke("¯\\_(ツ)_/¯");

// this doesn't work either
sysEvents.keystroke("¯\\_("+ decode_utf8("\xE3\x83\x84") +")_/¯");

person Francisc0    schedule 01.06.2017    source источник


Ответы (2)


Хорошо, так что добавить его в буфер обмена и сразу же вставить было намного проще. Это не прямой ответ на мой вопрос, но конечный результат - это то, что я хотел.

Версия сценария Apple:

# Shrug Script
# ¯\_(ツ)_/¯
#
# contains special character:
# ツ
# KATAKANA LETTER TU
# Unicode: U+30C4, UTF-8: E3 83 84

set the clipboard to "¯\\_(ツ)_/¯"
tell application "System Events" to keystroke "v" using command down

JXA-версия:

var app = Application.currentApplication()
    app.includeStandardAdditions = true
var seApp = Application('System Events')

// set current app's clipboard  
app.setTheClipboardTo("¯\\_(ツ)_/¯")
// paste!
seApp.keystroke('v', { using: 'command down' });
person Francisc0    schedule 01.06.2017

Я бы настоятельно рекомендовал службы для такого рода задач, поскольку они могут напрямую манипулировать текстом практически в любом приложении; нет необходимости в хакерских хитростях, таких как GUI Scripting. Очень легко создать новую службу в Automator, которая будет выводить фрагмент текста, плюс вы можете привязать ее к сочетанию клавиш в Системных настройках, когда закончите. Вот пример, который вы можете легко адаптировать:

Создание служба osx для вставки текущей даты и времени

person has    schedule 02.06.2017
comment
Я сделал услугу раньше, но не знаю, почему я не рассмотрел его. Я попробую и это. Благодарность! - person Francisc0; 02.06.2017