4

为 Apple 快捷指令融入「修饰键」的思路

 1 year ago
source link: https://sspai.com/post/82166
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为 Apple 快捷指令融入「修饰键」的思路

1
为 Apple 快捷指令融入「修饰键」的思路

Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


本文旨在分享对快捷指令设计思路的理解,所以作为教学来看会显得很啰嗦,请根据需求跳着看。

快捷指令自推出解决了很多我的个人需求,不过作为低代码编程工具,它仍然有很多不足,例如不能对应用程序的 GUI 和流程进行精心的设计,为了照顾到尽可能完整的需求,我们可能会把一些大多数时候用不到的步骤微调作为选项加入到其中作为菜单选项,导致每一次运行都要去多操作一些选项步骤使得指令使用起来变更繁琐。

1

某快捷指令的一个操作步骤,我运行时 95% 的情况是使用第一项「新行」。

在我看来,从快捷指令的设计出发点来说,这些徒增的步骤本身就是最初需要去解决的问题。

也有一些朋友会把这些比较少使用到的分支专门做一个其他的快捷指令。但是这么做会让快捷指令库中的指令数量变得更多,不便于管理暂且不提,每次对该系列的指令做修改的时候需要把每个相关的指令都修改一遍,最最麻烦的是对于极少使用的指令,很容易会忘记它的存在

然而某一天晚上我突然想到了「修饰键」——在 macOS 中,某些应用程序或者右键菜单项在用户按住 Option 的时候会发生变化,比如系统界面左上角的 Apple 选项中的第一项「关于本机」在按住 Option 时会变成「系统信息…」,这种略有神秘感的功能设计是使桌面平台能够具备优秀效率的一个关键特性。

97407df3c80b01a85af31e1ab0b78472.gif

macOS菜单栏的修饰键提示

那么如果在快捷指令中也能利用修饰键来引导到其他的程序分支呢?

😝因为是躺在床上想到的,所以先在 iOS 上尝试

在 iOS 中,实体按键只有那么几个,而且其实都蛮重要的,所以并不能把任何的实体按键作为快捷指令的「修饰键」(技术上也实现不了)。

最初,我想到的是可以用一个文件来记录修饰键的状态:

  1. 启动一个快捷指令,把某个文本文件如「修饰键状态.txt」的内容改为「1」
  2. 启动另一个有实用功能的快捷指令,在最开始的步骤判断「修饰键状态.txt」内容是否为「1」,如果是则执行一条经过微调的程序分支。
  3. 在该分支解释时,该分支要在确认开始执行的开头就把「修饰键状态.txt」的内容再改回「0」,而非结尾。

建议这里的「修饰」指令中要加一个手机振动反馈作为触发成功的提示,并且再次点击还要能够进行逆向操作,作为区分,在还原的时候最好能提供一个不同的反馈方式,比如说 2 次振动,如果该操作是使用「轻点背部」这样的辅助功能实现。

作为参考,这里提供一个快捷指令可以直接搬走用。安装该快捷指令并成功运行后,会自动引导你安装用于开关修饰键的实用快捷指令。

 

随后,你可以在系统「辅助功能」➡️「触控」➡️「轻点背面」中设置该指令的触发条件。

1

我的方案是振动一次代表状态切换为了 1,振动两次代表切换为了 0。如果有使用小白点的习惯也可以把该指令绑定到小白点上,具体操作不做赘述。

这里有一个例子:

 

1

除此之外,还有一个方法是使用手机的陀螺仪朝向来作为「类修饰键」的状态触发条件。

这里需要一个 App,请注意国区没有:

 

「Actions」是一个快捷指令的函数功能扩展,它可以为快捷指令补足一些实用的功能。其中有一个功能就是获取当前手机设备的朝向。

1

它具有两个和手机朝向有关的模块:

  • Is Device Orientation:需要预先设定你目标的朝向,并输出一个布尔
  • Get Device Orientation:直接输出该 iOS 设备当前的朝向,以文本形式表现

为了方便理解这做个示意图给你们参考,这里的英文就是该操作模块定义的方向名:

1

如果使用这个方案,建议多尝试几种朝向在不同应用场景下的表现,我个人有每天起床前都会在床上看一会儿手机的坏习惯,所以除了 PortraitUpsideDown 这一种状态,其他非正常朝向都有在躺着用手机的时候触发的可能性。并且众多 App 中只有「语音备忘录」支持在 PortraitUpsideDown 朝向状态下的 UI 旋转适配。

根据我个人的理解,在 iOS 中修饰键仅适用于对快捷指令有一定依赖性的重度需求,且分支行为相似度较高的情况下使用的:

  • 对于非重度用户来说,未必能记得住自己的快捷指令的具体步骤,因此修饰键的步骤可能会直接遗忘,所以多做一级菜单会更合理。
  • 执行操作步骤上看起来相似但是行为和功能不一样的操作指令没有必要用修饰键来进行分支,这种归类逻辑对人而言是不合理的。iOS提供了多种快捷指令的运行入口,行为和目的上完全不同的功能应该多开一个指令并对这些入口善加利用。
  • 对于 iOS 来说使用率频率超过 25% 的分支,是否要使用修饰键需要着重考虑,因为严格来说目前还没有一个高效合理的修饰键执行方案,而在 macOS 这样的桌面平台上自然是想怎么安排都行。

另外,对于 iPadOS 用户来说各种使用方向都是有可能存在的,并且调转屏幕方向远比可单手握持的手机更麻烦,所以使用重力感应来实现「类修饰键」方案显然是不可靠的。如果你有一台 iPad,那么最好使用系统辅助功能中的「键盘」-「全键盘控制」来直接引入快捷键。

🤔️好了,那 Mac 咋办?

macOS 版「快捷指令」是在 iOS 版本推出后数年才推出的,在此之前的替代者是「自动操作」App,为了让曾经的「自动操作」用户可以无缝的迁移到「快捷指令」,macOS 版「快捷指令」更是做到了向下兼容,因此在 Mac 中还提供了一些 iOS 无法使用的曾属于「自动操作」的操作模块。

此外,macOS 版「快捷指令」相比 iOS 版本还提供了将快捷指令固定到菜单栏的功能设计,进一步的便于被启用。

而那些从「自动操作」中继承的这些模块在 iOS 版本的快捷指令中不能被搜索到,但在 iCloud 同步的快捷指令中是可以被看到的,会显示为「此操作只能在 Mac 上运行」,其中之典型就是「运行 Apple Script」操作。

1

说回修饰键,「修饰键」是桌面平台的术语,所以最理想的方式当然是直接使用键盘上的修饰键来触发。但尽管 macOS 拥有远超 iOS 的硬件生态和系统功能自由度,强如 Apple 也没有直接提供查询键盘点击状态的模块。

因此我们不得已需要接触到「代码」,虽然我们不是专业的代码用户,但是我们可以拷贝他人的代码来使用,这里需要用到的正是前面提到的「运行 Apple Script」操作。

在 macOS 上的快捷指令中,会看到该操作模块的内容是一个文本块,可以直接输入 Apple Script 脚本。

1

假设我们需要获取的状态是 option 是否被按住,如果被按住,则会引导快捷指令走向另一个程序分支。做到这一步,我们需要使用如下代码:

use scripting additions
set res to false
global ca
set ca to current application
to isModifierPressed(modifier)
((ca's NSEvent's modifierFlags()) / modifier as integer) mod 2 is equal to 1
end isModifierPressed
if isModifierPressed(ca's NSEventModifierFlagOption) then
set res to true
end if
return res

如果希望使用的是 control 键或者 command 键,请把第 8 行的 NSEventModifierFlagOption 这一部分中末尾的「Option」换成 Shift、Command、Control 即可。

1

尝试运行,会看到这个指令只会返回布尔值,这样你就方便了。

注意,在某些地方按住修饰键并点击快捷指令的时候,也许会触发某些系统功能而直接不会运行快捷指令。

该方案目前还有瑕疵,那就是在 Apple Script 中执行效率十分低下,如果是在快捷指令运行之初确认修饰键的状态,那么会明显感觉到它启动快捷指令额外花费了大约 0.5 秒的时间。

因此,我向「Actions」的开发者提交了添加检测实体按键状态的操作的建议,他提供了积极的回应,并表示在下一个版本就会推出该功能!😁

1

有期待的朋友可以先去下载一个

最开始有这样的想法是因为快捷指令库里的东西实在太多,而且有些指令的作用相似度很高(比如说翻译一句话和查询某一个单词)。躺在床上休息的时候突然想到了这一点便尝试动手执行,遗憾的是在 iOS 上目前还没有一个非常顺手好用的方案,也许未来 iPhone 真如传言所说加了一个新的实体按键来辅助快速操作,但 Apple 是否会为快捷指令带来检测物理按键按下状态还很难说。但是如果你也跟我一样有一堆功能相似的快捷指令苦于管理,也可以试试。

这里再推几个相关的思路作为参考:

  • 在 Mac 上我个人有使用 Paste 来管理剪贴板的习惯,它有一个功能是对文本进行连续的拷贝和粘贴,我构建了一个快捷指令来帮助我把数量比较大的文本拷贝录入,默认情况下运行指令的时候使用的是以行分隔,在按住修饰键 Option 后会弹出一个菜单来进一步确认分隔符。
  • 我在 Windows 上和朋友玩游戏的时候会开着 NvidiaShadowPlay(能将一段时间前发生的事情录制成视频),当有有趣的事情发生的时候我会捕捉片段,然后将录像保存的位置共享到了局域网,在 Mac 上使用快捷指令直接找到该文件夹中刚刚保存的影片并引导进行快速的修剪和分享,默认情况下启动该指令的时候进入的是彩虹六号(游戏名)的录像文件夹,按住修饰键 Option 的情况下运行该指令则会弹窗确认为其他的游戏的文件夹。
  • 我经常在 Mac 上通过 SSH 指令来对其他电脑执行 WoL(网络唤醒),因此我把所有的电脑对应的物理地址录入到了快捷指令的菜单项中,这样可以每次要开机都直接用快捷指令,但是我 90% 的情况下都是在启动玩游戏用的那台 PC,因此我设定按住 Option 的情况下运行快捷指令是直接打开该电脑,并且还补充了一个使用 DDC/CI 来控制副屏转向该电脑的输入源。
  • 在 iOS 拷贝一段外语之后,激活快捷指令后会弹出一个通知显示剪贴板中的内容和译文,在使用「类修饰键」的状态下,会把语句逐个拆分成单词,并弹出菜单来选择单词,随后在词典应用中显示选择的单词的语义说明——下方附上的指令用于快速翻译剪贴板的内容,在拷贝文本后运行该指令会以通知方式返回疑问,按下「是」可以拷贝译文。如果剪贴板是空的或者和上次运行的时候内容相同则会直接打开「翻译」App。在使用「类修饰键」的情况下运行,则会将英文语句中的单词分离成菜单,在选择词汇后会弹出该词汇在系统词典中的词条页。

 

  • 在开车出地下车库的时候,运气不好会发现信号不太行以至于扫码付款的 App 根本无法工作,对于双卡用户来说可能会考虑换一个运营商,在 iOS 17 版本中可以通过修饰键启动扫码支付指令的时候同时更换双卡运营商,如果是比较早版本的 iOS 用户可以更换 4G/5G。

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK