首頁>Apple>source

由於我的双手用途有限,因此我使用語音控製来控製我的大部分文字. (我用它来讲這个問题。)語音控製可以添加自定義命令,包括將執行Automator工作流程的命令.反過来,Automator可以執行任意JavaScript或AppleScript. (我更類似JavaScript).我想要做的是建立一个指令碼,该指令碼將在活動的任何應用程式中获取当前選定的文字,對其进行處理,然後將選定的文字替換為適当位置.例如,設想建立一个"连字元此"命令,该命令將轉換這樣的選定文字(" Mac Voice Control指令碼")並將其更改為" Mac-Voice-Control-scripting".編寫JavaScript或AppleScript来轉換字元串很容易.問题是如何获取当前應用程式的当前選定文字,無論它是什麼。

在Automator中,您可以建立一个"快速操作"工作流,该工作流應傳遞当前選定的文字並允许您替換它.但是,實際上,至少在Big Sur中,我無法使该工作流从任何應用程式接收文字.给定標準 run() 功能, input 陣列的长度始终為0。

如何建立可由語音控製中的自定義命令執行的工作流,该命令可以接收,處理和替換当前應用程式中当前選擇的文字?

最新回復
  • 5月前
    1 #

    對不起,我對此一無所知 JavaScript,但是我確實為您提供了一種仅使用AppleScript而不需要Automator的解決方案。

    下面的AppleScript代碼將在任何應用程式中使用選定的文字,將空格替換為连字元,然後將原始選定的文字替換為新的帶有连字元的文字。

    -- Copies Selected Text To The Clipboard
    tell application "System Events" to keystroke "c" using {command down}
    delay 0.1
    -- Uses The Text From The Clipboard And Replaces Space Characters With A Hyphen
    set hyphenatedText to hyphenateText(the clipboard, " ", "-")
    delay 0.1
    -- Inserts The New Hyphenated Text Replacing The Original Selected Text
    tell application "System Events" to keystroke hyphenatedText
    (* 
    someText is the selected text containing the characters to be replaced
    replaceTheseListItems are characters from original text which you want replaced
    replacementListItems replacement text characters 
    *)
    on hyphenateText(someText, replaceTheseListItems, replacementListItems)
        set originalText to someText
        set AppleScript's text item delimiters to replaceTheseListItems
        set tempText to text items of originalText
        set text item delimiters to replacementListItems
        set cleanedText to tempText as text
    end hyphenateText
    

    將AppleScript代碼儲存為.scpt檔案(连字元選定的Text.scpt).然後打開Finder並選擇新的指令碼檔案.一旦選擇了檔案並啟用了語音控製,只需說出"使此檔案可說"即可.当新的听寫命令對话框打開時,為其分配一个新的語音命令

    出於演示目的,我將此指令碼檔案添加到了指令碼選單中並从那裏執行

  • 如何確定MacBook Pro是否達到峰值?
  • imac:我的Mac的使用者介面全天隨機冻結5-10秒我如何找出問题所在?