On Aug 23, 2006, at 4:33 PM, Alan Schussman wrote:
Probably better to grab the comment character from the start of the input. Otherwise there is a more full mapping in the “Continue Line Comment” snippet in the Source bundle.
Grabbing the start of the input works well, and it means setting the comment parameter based on what actually sits at the beginning of the comment scope, so that it will catch "%comment" or "% comment" or "%% comment". Nice.
Yeah, this seems clever. I think we need to make your regex for this a little more lenient though...
The line can be:
text = `ruby "#{ENV["TM_SUPPORT_PATH"]}/bin/rubywrap.rb" #
{flags}`
Here's where I go "huh." That works, but 1) I don't at all get how the input is passed to the command; and 2) if I call on STDIN.read prior to this line (by using it to get the beginning of the input), then that line fails to get any input, and I have to manually pipe the text back into it. What's happening there?
Well, if you call read(), you consume the input, so it's not there to pass on to the child process.
I also added a gsub to the command because it was eating latex math and R symbols ($). There's probably a better solution to that.
Likely because of the Insert as Snippet -- but the e_sn should take care of that.
I am however not sure inserting as snippet is ideal -- I reckon this was to preserve the indent, but maybe better to Replace Text and have the command indent properly.
Excellent -- thanks for pointing out what e_as was doing. When inserting as a snippet, e_sn does the job, and replacing the text instead of inserting as snippet also works, though you're right that it doesn't re-indent before the comment.
Hmm, I think you are still having trouble understanding where to use these:
e_sh(): for data headed to the shell e_sn(): for data about to be shown as a TextMate snippet
Here's the code I just moved into the Source bundle. Let me know if this is working please:
#!/usr/bin/env ruby
$LOAD_PATH << "#{ENV["TM_SUPPORT_PATH"]}/lib" require "escape" require "exit_codes"
ctext = STDIN.read if ctext =~ /^\s*([^\s\w]+\s*)/ cstring = $1 else TextMate.exit_show_tool_tip("Unable to determine comment character.") end
flags = %Q{ -p "#{cstring}"} flags += " --retabify" if ENV["TM_SOFT_TABS"] == "NO"
command = "ruby #{e_sh(ENV["TM_SUPPORT_PATH"])}/bin/rubywrap.rb # {flags}" text = open("| #{command}", "r+") do |wrapper| wrapper << ctext wrapper.close_write wrapper.read end
print e_sn(text)
__END__
James Edward Gray II