[TxMt] update: Universal Un/Comment
Eric Hsu
erichsu at math.sfsu.edu
Wed Dec 22 22:17:02 UTC 2004
hi folks,
I am startled but gratified at the response to the Un/Comment hack.
I added a number of fixes and options people have been asking for and
packaged it up into a .tmbundle so you don't have to copy in the
hideous Perl 1-liner (but you can... attached below). In the bundle,
I also included the source code, which is released as Niceware.
That's like the Perl Artistic License, except that you have to be
nice to me when you criticize the code.
The bundle lives at <http://math.sfsu.edu/hsu/textmate>.
Changes
- I added some options. To invoke them, put them on the command line, e.g.
perl -e '...' "$TM_FILEPATH" first-column comment .tex
- so if you want separate comment/uncomment, make two commands with
one option 'comment' and the other 'uncomment'
- I added a bunch of filetype endings, including the ones in Chris
T's beautiful Ruby script.
- fixed Ollivier Robert's newline bug
- Drew McLellan: I added CSS, but sadly, I can only comment each
line, not the whole thing. I hope that is still useable.
Options
# 'first-column' puts the first comment marker at the line start
# 'comment' always comments (for people who want the smartness, but
not the toggleness)
# 'uncomment' always uncomments. If you foolishly use both comment
and this, comment wins.
# 'comment-whitespace' comments whitespace which we normally skip.
# '.tex' will force the use of TeX style comments. You can substitute
your favorite ending, like '.java' or '.pl'. The leading dot is
important. Last type listed wins.
# 'toggle' changes the comment status line by line. Normally, the
whole thing is a block.
best wishes, Eric
---
If you install the thing as a tmbundle, you can also install it as a command as
Before: do nothing
Command:
~/Library/Application\
Support/TextMate/Bundles/UnComment.tmbundle/comment-toggle.pl
"$TM_FILEPATH"
STDIN: Selected
STDOUT: Replace Selected
To install it as a command as a one-liner, with no path issues:
Before: do nothing
Command:
perl -e
'$markers={"pl,pm,rb"=>["#",""],"plist,c,css,m+h,cp,cpp,h,p,pas,js,htc,c++,h++"=>["/*","*/","//",""],"java,cc,mm"=>["//","","/*","*/"],"html,htm,xml"=>["<!--","-->"],"bib,ltx,tex,ps,eps"=>["%",""],"php"=>["#","","/*","*/","<!--","-->","//",""],"mli,ml,mll,mly"=>["(*","*)"],"script,adb,ads,sql,ddl,dml"=>["--",""],"f,f77"=>["C
",""],"inf,f90"=>["!",""],};$tab=4;while(($k,$v)=each(%$markers)){foreach(split(/\s*,\s*/,$k)){$c{"$_"}=$v;}}$_=shift at ARGV;($type)=/\.([^.]*)$/;foreach$option(@ARGV){if($option=~/^\.(.*)$/){$type=$1;}$opt->{$option}++;}unless($c{"$type"}){$type="pl";}($start,$finish, at etc)=@{$c{$type}};$isntfirst=0;while(<STDIN>){push at in,$_;($indent)=/^([
\t]*)/;$indentl=0;foreach$j(1..(length($indent))){$ch=substr($indent,$j-1,1);if($ch
eq"
"){$indentl++;}else{unless($indentl%$tab){$indentl+=$tab;}else{$indentl+=$indentl%$tab;}}}unless($isntfirst){$indentmin=$indent;$indentminl=$indentl;$isntfirst++;}else{if($indentl<$indentminl||$indent
eq""){$indentmin=$indent;$indentminl=$indentl;}}}$isntfirst=0;foreach(@in){$lineend="";if($opt->{"toggle"}){$iscomment=$isfirstofpair=$isntfirst=0;}if(chomp){$lineend="\n";}unless(/\S/){unless($opt->{"comment-whitespace"}){$out.=$_."\n";next;}}unless($isntfirst){$isntfirst=1;foreach$delimiter(@{$c{"$type"}}){$isfirstofpair=1-$isfirstofpair;$delimiterq=quotemeta($delimiter);if($isfirstofpair){if(/^\s*$delimiterq/){$iscomment=1;$start=$delimiter;$startq=$delimiterq;}}elsif($iscomment){$finish=$delimiter;$finishq=$delimiterq;last;}}}if($opt->{"uncomment"}){$iscomment=1;}if($opt->{"comment"}){$iscomment=0;}if($iscomment){s/^(\s*)$startq(\
)?/$1/;s/(\
)?$finishq(\s*)$/$1/;$out.=$_.$lineend;}else{if($opt->{"first-column"}){$out.=$start;unless($indentmin){$out.="
";}$out.="$_";if($finish){$out.="
".$finish;}$out.=$lineend;}else{s/^$indentmin//;$out.=$indentmin.$start."
$_";if($finish){$out.=" ".$finish;}$out.=$lineend;}}}print$out;'
"$TM_FILEPATH"
STDIN: Selected
STDOUT: Replace Selected
--
Eric Hsu, Assistant Professor of Mathematics
San Francisco State University
erichsu at math.sfsu.edu
http://math.sfsu.edu/hsu
More information about the textmate
mailing list