[TxMt] new command: Universal Un/Comment (BBEdit-ish)

Allan Odgaard allan at macromates.com
Tue Dec 21 17:28:30 UTC 2004


On Dec 21, 2004, at 16:46, Eric Hsu wrote:

> I missed a command from BBEdit that let you comment and uncomment text  
> magically for different languages with the same keystroke  
> (Text->Un/Comment), so I wrote a version for TextMate. [...]

Nice! :)

I changed the extension-grabbing code to this: “($t)=/\.([^.]*)$/” to  
handle paths with multiple dots and I quoted TM_FILEPATH (for paths  
with spaces).

I also added: "cc,mm"=>["//","","/*","*/"] and m+h to the plist,c types.

So it's now: perl -e  
'$a={"cc,mm"=>["//","","/*","*/"],"pl,pm"=>["#",""],"plist,c,m,h"=>["/ 
*","*/"],"html,htm"=>["<!--","-- 
 >"],"tex,ltx"=>["%",""],"php"=>["#","","/*","*/","<!--","-->","/ 
/",""]};while(($k,$v)=each(%$a)){foreach(split(/\s*,\s*/ 
,$k)){$c{"$_"}=$v;}}$_=shift at ARGV;($t)=/\.([^.]*)$/; 
($s,$f, at etc)=@{$c{$t}};$b=0;while(<STDIN>){push at in,$_;($in)=/^([  
\t]*)/;$inl=0;foreach$j(1..(length($in))){$ch=substr($in,$j-1,1);if($ch  
eq"  
"){$inl++;}else{unless($inl%4){$inl+=4;}else{$inl+=$inl%4;}}}unless($i){ 
$ind=$in;$indl=$inl;$i++;}else{if($inl<$indl||$in  
eq""){$ind=$in;$indl=$inl;}}}$i=0; 
foreach(@in){if(chomp){$n="\n";}unless(/\S/){$o.=$_."\n"; 
next;}unless($b){$b=1;foreach$d(@{$c{$t}}){$i=1-$i;$d=quotemeta($d); 
if($i){if(/^\s*$d/){$y=1;$s=$d;}}elsif($y){$f=$d;last;}}}if($y){s/ 
^(\s*)$s(\ )?/$1/;s/(\  
)?$f(\s*)$/$1/;$o.=$_.$n;}else{s/^$ind//;$o.=$ind.$s." $_  
".$f.$n;}}print$o;' "$TM_FILEPATH"

> If there is enough interest, I will release commented source code and  
> make it into a nice .tmbundle.

Sounds like when you do, I should add that bundle to what's included by  
default with TM (if you don't mind)! :)




More information about the textmate mailing list