是否可以从 bash 脚本调用复制命令(就像用户按下Cmd+一样)?C基本上我想编写一个使用全局热键运行的简单脚本,它应该从活动应用程序中获取当前选择,替换某些内容并粘贴结果。这可能吗?
到目前为止,我能想到的最好的方法是使用pbpaste
and pbcopy
,但如果可能的话,我想自动化它。
是否可以从 bash 脚本调用复制命令(就像用户按下Cmd+一样)?C基本上我想编写一个使用全局热键运行的简单脚本,它应该从活动应用程序中获取当前选择,替换某些内容并粘贴结果。这可能吗?
到目前为止,我能想到的最好的方法是使用pbpaste
and pbcopy
,但如果可能的话,我想自动化它。
如果您只是想修改文本选择,您可以使用 AppleScript。
osascript -e 'try
set old to the clipboard
end try
try
delay 0.3
tell application "System Events" to keystroke "c" using command down
delay 0.2
set text item delimiters to linefeed
set input to (paragraphs of (the clipboard as text)) as text
set the clipboard to do shell script "shopt -u xpg_echo; echo -n " & quoted form of input & " | rev" without altering line endings
tell application "System Events" to keystroke "v" using command down
delay 0.05
end try
try
set the clipboard to old
end try'
如果脚本使用具有除命令以外的其他修饰键的快捷方式运行,则第一个延迟用于释放修饰键。第二个延迟也可以减少到 0.05 左右,但是长选择或例如 web 视图通常需要更长的延迟。如果没有第三次延迟,the clipboard
有时会old
在粘贴文本之前设置为。
the clipboard as text
并do shell script
默认将行尾转换为回车。shopt -u xpg_echo
需要,因为echo
insh
默认情况下解释单引号内的反斜杠。如果输入长于getconf ARG_MAX
字节,则不能使用echo
,必须将其写入临时文件或使用pbpaste
.
pbpaste
并pbcopy
在使用的环境中默认用问号替换非 ASCII 字符do shell script
您可以通过设置LC_CTYPE
来防止这种情况发生UTF-8
。
告诉系统事件单击菜单栏项通常会更慢,并且在没有菜单栏或全屏窗口的应用程序中不起作用。
另一种选择是创建 Automator 服务。但是它们在运行之前也有小的延迟。存在一个错误,即服务的快捷方式在菜单栏上显示一次服务菜单之前并不总是有效。当最前面的应用程序没有菜单栏或服务菜单时,这些服务不可用。