Xcode提供了当前文件的方法折叠选项。但是有没有办法将其应用于项目中的所有.m文件?
这里提供一个目的为此的AppleScript。需要注意的是:
.m
文件不同的文件。 -- Collect all Objective-C file references from the given group.
on handleGroup(theGroup, codeRefs)
tell application "Xcode"
set fileRefs to theGroup's file references
repeat with x in fileRefs
if x's file kind is equal to "sourcecode.c.objc" then
copy x to end of codeRefs
end if
end repeat
set subgroups to theGroup's groups
repeat with x in subgroups
my handleGroup(x, codeRefs)
end repeat
end tell
end handleGroup
on moveFocusToProjectNavigator()
tell application "System Events"
tell process "Xcode"
set frontmost to true
tell menu bar item "Navigate" of menu bar 1
tell menu 1
click menu item "Reveal in Project navigator"
end tell
end tell
end tell
end tell
end moveFocusToProjectNavigator
on moveFocusToNextArea()
tell application "System Events"
tell process "Xcode"
set frontmost to true
tell menu bar item "Navigate" of menu bar 1
tell menu 1
click menu item "Move Focus to Next Area"
end tell
end tell
end tell
end tell
end moveFocusToNextArea
-- Simulate pressing the up arrow.
on selectNextItem()
tell application "System Events"
tell process "Xcode"
key code 126
end tell
end tell
end selectNextItem
on fold(shouldFold)
set theCommand to "Fold Methods & Functions"
if shouldFold is equal to 0 then
set theCommand to "Unfold All"
end if
-- Fold the code by using the menu item.
tell application "System Events"
tell process "Xcode"
set frontmost to true
tell menu bar item "Editor" of menu bar 1
tell menu 1
tell menu item "Code Folding"
tell menu 1
click menu item theCommand
end tell
end tell
end tell
end tell
end tell
end tell
end fold
on run
-- Set to one to fold, zero to unfold.
set shouldFold to 1
tell application "Xcode"
set ws to every workspace document
set theWorkspace to item 1 of ws
tell theWorkspace
set pr to item 1 of projects
set codeRefs to {}
my handleGroup(pr, codeRefs)
-- Open each document and fold the code.
set thePaths to {}
repeat with x in codeRefs
copy x's full path to the end of thePaths
end repeat
end tell
-- If we only have one path, a new workspace won't be opened.
if 1 is equal to (count of thePaths) then
open item 1 of thePaths
my moveFocusToNextArea()
my fold(shouldFold)
else
open thePaths
set ws to every workspace document
set theWorkspace to item 1 of ws
my fold(shouldFold)
repeat (count of theWorkspace's file references) - 1 times
my moveFocusToProjectNavigator()
my selectNextItem()
my moveFocusToNextArea()
my fold(shouldFold)
end repeat
-- If we don't wait before closing the window, the last document
-- won't be folded.
tell application "System Events" to delay 3
tell theWorkspace to close
end if
end tell
end run
为了完整起见,这里提供一种早期的尝试。由于需要逐个按URL打开文档,因此速度相对较慢。
-- Collect all Objective-C file references from the given group.
on handleGroup(theGroup, codeRefs)
tell application "Xcode"
set fileRefs to theGroup's file references
repeat with x in fileRefs
if x's file kind is equal to "sourcecode.c.objc" then
copy x to end of codeRefs
end if
end repeat
set subgroups to theGroup's groups
repeat with x in subgroups
my handleGroup(x, codeRefs)
end repeat
end tell
end handleGroup
on run
tell application "Xcode"
set ws to every workspace document
tell item 1 of ws
set pr to item 1 of projects
set codeRefs to {}
my handleGroup(pr, codeRefs)
-- Open each document and fold the code.
repeat with x in codeRefs
set thePath to x's full path
set doc to open thePath
tell doc
activate
end tell
-- Fold the code by using the menu item.
tell application "System Events"
tell process "Xcode"
set frontmost to true
tell menu bar item "Editor" of menu bar 1
tell menu 1
tell menu item "Code Folding"
tell menu 1
click menu item "Fold Methods & Functions"
end tell
end tell
end tell
end tell
end tell
end tell
end repeat
end tell
end tell
end run
我编写了一个xCode插件,可以轻松完成工作。
插件:https://github.com/ThilinaHewagama/HCTAutoFolding