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中创建一个新的服务非常容易,它将输出一段文本,并且可以在完成时将其绑定到系统偏好设置中的键盘快捷键。这里是你可以很容易地适应一个例子:

Creating an osx service to insert the current date and time

+0

我为什么不认为这是我之前,但不知道做了一个服务。我也会试试这个。谢谢! – Francisc0