用于复制当前文本行的Applescript?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于复制当前文本行的Applescript?相关的知识,希望对你有一定的参考价值。

我想创建一个AppleScript,它将复制克拉当前所在的整条线。然而,在做了相当数量的谷歌搜索之后,我已经空了。有任何想法吗?

答案
(*
Save this as an application
Right click the application and select "Show Package Contents"
Add this to Info.plist between <dict> and </dict>

<key>LSBackgroundOnly</key>
    <true/>

launch the application with spotlight (command space)
*)

tell application "System Events"
    key code 123 using {command down, shift down}
    key code 124 using {command down, shift down}
    keystroke "c" using {command down}
end tell
另一答案

下面是我为Xcode 9编写的一些代码(我最终在更新3-5-18时使用它)。我想要一个我过去25年来使用的每个文本编辑器的功能。没有选择的副本将复制当前行。代码指出插入符号的段落(行)以及是否选择了任何文本。可以修改相同的代码以包含Cut。

我使用Keyboard Maestro执行此代码。添加以下(3)操作。您必须在执行之前禁用“Execute Applescript”宏,否则从代码中发送的Command + C将导致无限循环:禁用宏“当前宏”Execute Applescript“将AppleScript代码粘贴到编辑框中”启用宏“当前的宏”

此外,启用Xcode 9键绑定使Command + L执行选择行。使用“文本”选项卡查看较少的操作。

我还将以下内容添加到DefaultKeyBinding.dict文件中。 https://www.maketecheasier.com/fix-home-end-button-for-external-keyboard-mac/

{
/* Remap Home/End keys to be like Windows */
"UF729" = "moveToBeginningOfLine:"; /* Home */
"UF72B" = "moveToEndOfLine:"; /* End */
"$UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */

/* page up/down and move the caret like Windows*/
"UF72C"  = "pageUp:";
"UF72D"  = "pageDown:";

/* Option Home/End keys Beginning/End of Document like Mac */
"~UF729" = "moveToBeginningOfDocument:"; /* Ctrl + Home */
"~UF72B" = "moveToEndOfDocument:"; /* Ctrl + End */
"$~UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Ctrl + Home */
"$~UF72B" = "moveToEndOfDocumentAndModifySelection:"; /* Shift + Ctrl + End */

/* Ctrl Home/End keys Beginning/End of Document like Mac */
"^UF729" = "moveToBeginningOfDocument:"; /* Ctrl + Home */
"^UF72B" = "moveToEndOfDocument:"; /* Ctrl + End */
"$^UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Ctrl + Home */
"$^UF72B" = "moveToEndOfDocumentAndModifySelection:"; /* Shift + Ctrl + End */
}




use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions
use application "Xcode-beta"

global appName

set appName to "Xcode-beta"

-- for some reason pressing command+C only works ever other time without this
--delay 0.1

tell application appName
    activate

    set theDocuments to every source document

    -- exit if no source documents are found
    if theDocuments is equal to {} then
        -- copy command must go somewhere i.e. the user might have copied an Icon.
        tell application "System Events" to keystroke "c" using {command down}
        do shell script "logger -t 'AS DEBUG' " & "Applescript CopyCurrentLine - exit if no source documents are found"

        return -- exit script
    end if

    -- Note:
    -- window 1 is where source documents live
    -- It sure would've been nice if window contained a reference to its source document but it doesn't

    -- if window has been edited its' name ends with " — Edited" and it needs to be trimed off
    set windowName to name of window 1
    if windowName ends with " — Edited" then
        set windowName to my trimText(windowName, " — Edited", "end")
    end if

    -- try to find the windows' current source document by matching window name to source document name
    repeat with theDoc in theDocuments
        set theDocName to name of theDoc

        if theDocName is equal to windowName then
            exit repeat -- found the document
        else
            set theDocName to "" -- didn't find the document
        end if
    end repeat

    -- exit if the window is not a source document
    if theDocName is equal to "" then
        -- copy command must go somewhere i.e. the user might have copied an Icon.
        tell application "System Events" to keystroke "c" using {command down}
        do shell script "logger -t 'AS DEBUG' " & "Applescript CopyCurrentLine - exit if the window is not a source document"

        return -- exit script
    end if

    --set theDoc to last source document
    set docText to the text of theDoc

    -- get location of selected text
    set {startPos, endPos} to selected character range of theDoc

    if (my isSelectedTextRangeEmpty(theDoc)) then
        -- select current line
        -- I set a keybinding in Xcode so Command+L would call the Command 'Select Line'
        tell application "System Events" to keystroke "l" using {command down}
    end if

    -- copy the selection to the clipboard
    set selectedText to my getSelectedText(theDoc, docText)

    -- restore insertion point to original location
    set selected character range of theDoc to {startPos, endPos}

    set the clipboard to selectedText
end tell

on getSelectedText(theContainer, docText)
    -- get the selected text
    set {startPos, endPos} to selected character range of theContainer

    if {endPos < startPos} then
        return ""
    else
        return (text startPos thru endPos) in docText
    end if
end getSelectedText

on isSelectedTextRangeEmpty(theContainer)
    set selectedCharacterRange to selected character range of theContainer
    set {startPos, endPos} to selectedCharacterRange

    if {endPos < startPos} or ¬
        (selectedCharacterRange is equal to {}) or ¬
        (length of selectedCharacterRange is equal to 0) then
        return true
    else
        return false
    end if
end isSelectedTextRangeEmpty

on trimText(theText, theCharactersToTrim, theTrimDirection)
    -- "beginning", "end", "both"
    set theTrimLength to the length of the theCharactersToTrim
    -- TRIM BEGINNING
    if the theTrimDirection is in {"beginning", "both"} then
        repeat while theText begins with the theCharactersToTrim
            try
                set theText to characters (theTrimLength + 1) thru -1 of theText as string
            on error
                -- the text contains nothing but the trim characters
                return ""
            end try
        end repeat
    end if
    -- TRIM ENDING
    if the theTrimDirection is in {"end", "both"} then
        repeat while theText ends with the theCharactersToTrim
            try
                set theText to characters 1 thru -(theTrimLength + 1) of theText as string
            on error
                -- the text contains nothing but the trim characters
                return ""
            end try
        end repeat
    end if
    return theText
end trimText

以上是关于用于复制当前文本行的Applescript?的主要内容,如果未能解决你的问题,请参考以下文章

如何突出显示离鼠标最近的文本行?

Sed

使用bat文件复制特定文本行?

QTextEdit如何将当前选定的文本行保持在屏幕上的同一位置

如何在文件顶部添加新的文本行?

win32api:在文本行中合并位图