JXA keystroke无法使用特殊字符
问题描述:
我试图设置一个简单的Apple JXA脚本来将着名的耸肩表情符号写入屏幕(它模拟按键我猜)。我尝试的每件事情都会产生这个“¯\ _(a)_ /¯”。我假设,因为我正在使用按键来模拟按键,并且我没有日文键盘,所以我一直都会这样做。也许我应该将字符串复制到剪贴板?JXA keystroke无法使用特殊字符
这里是我到目前为止的代码:
// 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") +")_/¯");
答
确定,所以将它添加到我的剪贴板,并立即将其粘贴是轻松了许多。这不是我的问题的直接答案,但最终的结果是我想要的。
苹果脚本版本:
# 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' });
答
我会强烈建议服务这种任务,因为他们可以直接操作在几乎任何应用程序的文本;不需要像GUI脚本这样的黑客工具。在Automator中创建一个新的服务非常容易,它将输出一段文本,并且可以在完成时将其绑定到系统偏好设置中的键盘快捷键。这里是你可以很容易地适应一个例子:
我为什么不认为这是我之前,但不知道做了一个服务。我也会试试这个。谢谢! – Francisc0