System events are certainly the easier (shorter) way to do it:
---
tell application "BBEdit" to tell front window
activate
tell application "System Events" to keystroke end
tell application "System Events" to keystroke return
tell application "System Events" to keystroke tab
end tell
---
Here is at least one way to do it with just BBEdit's capabilities:
---
tell application "BBEdit" to tell front window
set lineNum to startLine of selection
set leng to length of line lineNum
-- Move cursor to end of line
if leng > 0 then
select insertion point after (character (leng) of line lineNum)
end if
-- Find leading whitespace
set theResult to find "(^[\\s]*)" options {search mode:grep}
searching in line (lineNum)
-- Set text to the white space found
set white to ""
if found of theResult then
set white to found text of theResult
end if
-- Add extra indent
set white to white & tab
-- Insert a return plus the white space
set selection to return & white
select insertion point after selection
end tell
---
I assumed you were using tabs for indentation. A little surprisingly,
the BBEdit way executed quicker. The system events way also has issues
if you're holding down any modifier keys (e.g., command, control) as
those keys will be attached to the system events when it does the
keystroke. Not so great. I haven't thoroughly tested either solution
FYI.
-Kendall
On Jan 18, 5:31 pm, Watts Martin <[email protected]> wrote:
> I'm working on a little AppleScript that replicates a trivial but
> cherished feature of another editor -- being able to press Ctrl-Return
> (or whatever) and having it start the new line with an appropriate
> indent.
>
> My script does the right thing now as long as there's nothing on the
> line below where it's executed, but what I'd really like to have
> happen is the equivalent of the Open Line, i.e., when you invoke the
> script at the end of a line that's followed by another one, the second
> line is moved down:
>
> text here
> |
> text here
>
> Since my script currently just inserts a return followed by the
> appropriate number of spaces or tabs to indent one tab stop past the
> start of the line it was invoked on, it makes a cheerful mess of
> things in this case. Using Open Line would be much better, I suspect
> -- but I can't figure out how to do so from the dictionary alone. Is
> there a way to actually invoke the Open Line command with BBEdit's
> dictionary, or do I need to go through System Events to pull this off?
--
You received this message because you are subscribed to the
"BBEdit Talk" discussion group on Google Groups.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
<http://groups.google.com/group/bbedit?hl=en>
If you have a feature request or would like to report a problem,
please email "[email protected]" rather than posting to the group.
Follow @bbedit on Twitter: <http://www.twitter.com/bbedit>