2012-07-22 42 views
0

我想创建一个可以复制克拉当前所在行的applescript。然而,在做了大量的谷歌搜索之后,我已经空了。有任何想法吗?复制当前文本行的AppleScript?

+0

如果你只是想指定快捷键文本编辑宏,[DefaultKeyBinding.dict(http://lri.me/keybindings.html)常常是一个好得多的选择。 – user495470 2012-07-22 17:06:32

回答

1
(* 
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 
+0

谢谢,太简单了。惊讶我没有意识到,按键组合会产生我想要的结果。 Thx再次。 – maxedison 2012-07-22 15:24:00

0

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

我使用Keyboard Maestro执行此代码。添加下面的(3)动作。在执行它之前,必须禁用“Execute Applescript”宏,否则从代码内发送的Command + C将导致无限循环: 禁用宏“当前宏” 执行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