- Timestamp:
- 07/12/08 23:22:25 (4 months ago)
- Location:
- dotfiles
- Files:
-
- 12 added
- 11 removed
- 7 modified
-
git/cho45-gitconfig (modified) (1 diff)
-
vim/cho45/.vim/after (added)
-
vim/cho45/.vim/after/ftplugin (added)
-
vim/cho45/.vim/after/ftplugin/actionscript_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/html_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/javascript_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/objc_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/perl_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/rails_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/ruby_snippets.vim (added)
-
vim/cho45/.vim/after/ftplugin/sh_snippets.vim (added)
-
vim/cho45/.vim/autoload/Align.vim (modified) (54 diffs)
-
vim/cho45/.vim/doc/Align.txt (modified) (28 diffs)
-
vim/cho45/.vim/doc/snippets_emu.txt (added)
-
vim/cho45/.vim/doc/tags (modified) (7 diffs)
-
vim/cho45/.vim/ftplugin/perl.vim (modified) (1 diff)
-
vim/cho45/.vim/plugin/AlignMaps.vim (deleted)
-
vim/cho45/.vim/plugin/AlignPlugin.vim (deleted)
-
vim/cho45/.vim/plugin/cecutil.vim (deleted)
-
vim/cho45/.vim/plugin/css_pre_compile.vim (deleted)
-
vim/cho45/.vim/plugin/efm_perl.pl (deleted)
-
vim/cho45/.vim/plugin/genutils.vim (deleted)
-
vim/cho45/.vim/plugin/perl-support.vim (deleted)
-
vim/cho45/.vim/plugin/pmdesc3.pl (deleted)
-
vim/cho45/.vim/plugin/refe.vim (deleted)
-
vim/cho45/.vim/plugin/snippetsEmu.vim (added)
-
vim/cho45/.vim/plugin/wrapper.sh (deleted)
-
vim/cho45/.vim/plugin/yankring.vim (deleted)
-
vim/cho45/.vimrc (modified) (6 diffs)
-
zsh/cho45/.zsh/mine.zshrc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
dotfiles/git/cho45-gitconfig
r15535 r15708 7 7 di = diff 8 8 co = checkout 9 ci = !sh -c 'git commit -av && [ "$(git config --bool svn-remote.svn.autodcommit)" = "true" ] && $HOME/.screen/asyncrun.rb git svn dcommit && echo "dcommit done!"'9 ci = !sh -c 'git commit -av && [ \"$(git config --bool svn-remote.svn.autodcommit)\" = "true" ] && $HOME/.screen/asyncrun.rb "git svn dcommit && echo dcommit done"' 10 10 cii = commit -v 11 11 svn-ad = config svn-remote.svn.autodcommit true -
dotfiles/vim/cho45/.vim/autoload/Align.vim
r4521 r15708 1 1 " Align: tool to align multiple fields based on one or more separators 2 2 " Author: Charles E. Campbell, Jr. 3 " Date: Feb 23, 20064 " Version: 29d ASTRO-ONLY3 " Date: Mar 06, 2008 4 " Version: 33 5 5 " GetLatestVimScripts: 294 1 :AutoInstall: Align.vim 6 " GetLatestVimScripts: 1066 1 cecutil.vim7 " Copyright: Copyright (C) 1999-200 5Charles E. Campbell, Jr. {{{16 " GetLatestVimScripts: 1066 1 :AutoInstall: cecutil.vim 7 " Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1 8 8 " Permission is hereby granted to use and distribute this code, 9 9 " with or without modifications, provided that this copyright … … 15 15 " of this software. 16 16 " 17 " Usage: Functions {{{118 " AlignCtrl(style,..list..)19 "20 " "default" : Sets AlignCtrl to its default values and clears stack21 " AlignCtrl "Ilp1P1=<" '='22 "23 " Separators24 " "=" : all alignment demarcation patterns (separators) are25 " equivalent and simultaneously active. The list of26 " separators is composed of such patterns27 " (regular expressions, actually).28 " "C" : cycle through alignment demarcation patterns29 " "<" : separators aligned to left if of differing lengths30 " ">" : separators aligned to right if of differing lengths31 " "|" : separators aligned to center if of differing lengths32 "33 " Alignment/Justification34 " "l" : left justify (no list needed)35 " "r" : right justify (no list needed)36 " "c" : center (no list needed)37 " Justification styles are cylic: ie. "lcr" would38 " mean first field is left-justifed,39 " second field is centered,40 " third field is right-justified,41 " fourth field is left-justified, etc.42 " "-" : skip this separator+ws+field43 " "+" : repeat last alignment/justification indefinitely44 " ":" : no more alignment/justifcation45 "46 " Map Support47 " "m" : next call to Align will AlignPop at end.48 " AlignCtrl will AlignPush first.49 "50 " Padding51 " "p" : current argument supplies pre-field-padding parameter;52 " ie. that many blanks will be applied before53 " the field separator. ex. call AlignCtrl("p2").54 " Can have 0-9 spaces. Will be cycled through.55 " "P" : current argument supplies post-field-padding parameter;56 " ie. that many blanks will be applied after57 " the field separator. ex. call AlignCtrl("P3")58 " Can have 0-9 spaces. Will be cycled through.59 "60 " Initial White Space61 " "I" : preserve first line's leading whitespace and re-use62 " subsequently63 " "W" : preserve leading whitespace on every line64 " "w" : don't preserve leading whitespace65 "66 " Selection Patterns67 " "g" : restrict alignment to pattern68 " "v" : restrict alignment to not-pattern69 "70 " If no arguments are supplied, AlignCtrl() will list71 " current settings.72 "73 " [range]Align(..list..)74 " Takes a range and performs the specified alignment on the75 " text. The range may be :line1,line2 etc, or visually selected.76 " The list is a list of patterns; the current s:AlignCtrl77 " will be used ('=' or 'C').78 "79 " Usage: Commands {{{180 " AlignCtrl : lists current alignment settings81 " AlignCtrl style ..list.. : set alignment separators82 " AlignCtrl {gv} pattern : apply alignment only to lines which match (g)83 " or don't match (v) the given pattern84 " [range]Align ..list.. : applies Align() over the specified range85 " The range may be specified via86 " visual-selection as well as the usual87 " [range] specification. The ..list..88 " is a list of alignment separators.89 "90 17 " Romans 1:16,17a : For I am not ashamed of the gospel of Christ, for it is {{{1 91 18 " the power of God for salvation for everyone who believes; for the Jew first, … … 98 25 finish 99 26 endif 100 let g:loaded_align = "v 29d"27 let g:loaded_align = "v33" 101 28 let s:keepcpo = &cpo 102 29 set cpo&vim 103 104 " debugging support 30 "DechoTabOn 31 32 " --------------------------------------------------------------------- 33 " Debugging Support: 105 34 "if !exists("g:loaded_Decho") "Decho 106 35 " runtime plugin/Decho.vim … … 108 37 109 38 " --------------------------------------------------------------------- 110 111 39 " AlignCtrl: enter alignment patterns here {{{1 112 40 " … … 143 71 fun! Align#AlignCtrl(...) 144 72 145 " call Dfunc("AlignCtrl( )")73 " call Dfunc("AlignCtrl(...) a:0=".a:0) 146 74 147 75 " save options that will be changed … … 159 87 echomsg "Align needs at least Vim version 6.2 to clear visual-mode selection" 160 88 endif 161 else 89 elseif exists("s:dovisclear") 90 " call Decho("clearing visual mode a:0=".a:0." a:1<".a:1.">") 162 91 let clearvmode= visualmode(1) 163 92 endif 164 93 94 " set up a list akin to an argument list 165 95 if a:0 > 0 166 let style = a:1 96 let A= s:QArgSplitter(a:1) 97 else 98 let A=[0] 99 endif 100 101 if A[0] > 0 102 let style = A[1] 167 103 168 104 " Check for bad separator patterns (zero-length matches) … … 170 106 if style !~# '[gv]' 171 107 let ipat= 2 172 while ipat <= a:0173 if "" =~ a:{ipat}174 echoerr "AlignCtrl: separator<". a:{ipat}."> matches zero-length string"108 while ipat <= A[0] 109 if "" =~ A[ipat] 110 echoerr "AlignCtrl: separator<".A[ipat]."> matches zero-length string" 175 111 let &ic= keep_ic 176 112 " call Dret("AlignCtrl") … … 182 118 endif 183 119 184 " call Decho("AlignCtrl() a:0=".a:0)120 " call Decho("AlignCtrl() A[0]=".A[0]) 185 121 if !exists("s:AlignStyle") 186 122 let s:AlignStyle= "l" … … 196 132 endif 197 133 198 if a:0== 0134 if A[0] == 0 199 135 " ---------------------- 200 136 " List current selection … … 220 156 " Process alignment control settings 221 157 " ---------------------------------- 158 " call Decho("process the alignctrl settings") 222 159 " call Decho("style<".style.">") 223 160 … … 228 165 " clear AlignCtrl stack 229 166 while s:AlignCtrlStackQty > 0 230 call Align Pop()167 call Align#AlignPop() 231 168 endwhile 232 169 unlet s:AlignCtrlStackQty … … 236 173 call Align#AlignCtrl("g") 237 174 call Align#AlignCtrl("v") 238 let &ic= keep_ic 239 let @/ = keep_search 175 let s:dovisclear = 1 176 let &ic = keep_ic 177 let @/ = keep_search 240 178 " call Dret("AlignCtrl") 241 179 return … … 245 183 " map support: Do an AlignPush now and the next call to Align() 246 184 " will do an AlignPop at exit 185 " call Decho("style case m: do AlignPush") 247 186 call Align#AlignPush() 248 187 let s:DoAlignPop= 1 … … 251 190 " = : record a list of alignment patterns that are equivalent 252 191 if style =~# "=" 253 " call Decho("AlignCtrl: record list ofalignment patterns")192 " call Decho("style case =: record list of equiv alignment patterns") 254 193 let s:AlignCtrl = '=' 255 if a:0>= 2194 if A[0] >= 2 256 195 let s:AlignPatQty= 1 257 let s:AlignPat_1 = a:2196 let s:AlignPat_1 = A[2] 258 197 let ipat = 3 259 while ipat <= a:0260 let s:AlignPat_1 = s:AlignPat_1.'\|'. a:{ipat}198 while ipat <= A[0] 199 let s:AlignPat_1 = s:AlignPat_1.'\|'.A[ipat] 261 200 let ipat = ipat + 1 262 201 endwhile … … 267 206 "c : cycle through alignment pattern(s) 268 207 elseif style =~# 'C' 269 " call Decho("AlignCtrl: cycle through alignment pattern(s)")208 " call Decho("style case C: cycle through alignment pattern(s)") 270 209 let s:AlignCtrl = 'C' 271 if a:0>= 2272 let s:AlignPatQty= a:0- 1210 if A[0] >= 2 211 let s:AlignPatQty= A[0] - 1 273 212 let ipat = 1 274 while ipat < a:0275 let s:AlignPat_{ipat}= a:{ipat+1}213 while ipat < A[0] 214 let s:AlignPat_{ipat}= A[ipat+1] 276 215 " call Decho("AlignCtrl<".s:AlignCtrl."> AlignQty=".s:AlignPatQty." AlignPat_".ipat."<".s:AlignPat_{ipat}.">") 277 216 let ipat= ipat + 1 … … 282 221 if style =~# 'p' 283 222 let s:AlignPrePad= substitute(style,'^.*p\(\d\+\).*$','\1','') 223 " call Decho("style case p".s:AlignPrePad.": pre-separator padding") 284 224 if s:AlignPrePad == "" 285 225 echoerr "AlignCtrl: 'p' needs to be followed by a numeric argument' … … 293 233 if style =~# 'P' 294 234 let s:AlignPostPad= substitute(style,'^.*P\(\d\+\).*$','\1','') 235 " call Decho("style case P".s:AlignPostPad.": post-separator padding") 295 236 if s:AlignPostPad == "" 296 237 echoerr "AlignCtrl: 'P' needs to be followed by a numeric argument' … … 303 244 304 245 if style =~# 'w' 246 " call Decho("style case w: ignore leading whitespace") 305 247 let s:AlignLeadKeep= 'w' 306 248 elseif style =~# 'W' 249 " call Decho("style case w: keep leading whitespace") 307 250 let s:AlignLeadKeep= 'W' 308 251 elseif style =~# 'I' 252 " call Decho("style case w: retain initial leading whitespace") 309 253 let s:AlignLeadKeep= 'I' 310 254 endif … … 312 256 if style =~# 'g' 313 257 " first list item is a "g" selector pattern 314 if a:0 < 2 258 " call Decho("style case g: global selector pattern") 259 if A[0] < 2 315 260 if exists("s:AlignGPat") 316 261 unlet s:AlignGPat … … 318 263 endif 319 264 else 320 let s:AlignGPat= a:2265 let s:AlignGPat= A[2] 321 266 " call Decho("s:AlignGPat<".s:AlignGPat.">") 322 267 endif 323 268 elseif style =~# 'v' 324 269 " first list item is a "v" selector pattern 325 if a:0 < 2 270 " call Decho("style case v: global selector anti-pattern") 271 if A[0] < 2 326 272 if exists("s:AlignVPat") 327 273 unlet s:AlignVPat … … 329 275 endif 330 276 else 331 let s:AlignVPat= a:2277 let s:AlignVPat= A[2] 332 278 " call Decho("s:AlignVPat<".s:AlignVPat.">") 333 279 endif … … 336 282 "[-lrc+:] : set up s:AlignStyle 337 283 if style =~# '[-lrc+:]' 284 " call Decho("style case [-lrc+:]: field justification") 338 285 let s:AlignStyle= substitute(style,'[^-lrc:+]','','g') 339 " call Decho("AlignStyle<".s:AlignStyle.">")286 " call Decho("AlignStyle<".s:AlignStyle.">") 340 287 endif 341 288 342 289 "[<>|] : set up s:AlignSep 343 290 if style =~# '[<>|]' 291 " call Decho("style case [-lrc+:]: separator justification") 344 292 let s:AlignSep= substitute(style,'[^<>|]','','g') 345 293 " call Decho("AlignSep ".s:AlignSep) … … 356 304 let &ic= keep_ic 357 305 358 " call Dret("AlignCtrl ")306 " call Dret("AlignCtrl ".s:AlignCtrl.'p'.s:AlignPrePad.'P'.s:AlignPostPad.s:AlignLeadKeep.s:AlignStyle) 359 307 return s:AlignCtrl.'p'.s:AlignPrePad.'P'.s:AlignPostPad.s:AlignLeadKeep.s:AlignStyle 360 308 endfun … … 375 323 376 324 " --------------------------------------------------------------------- 377 " Align: align selected text based on alignment pattern(s) {{{1 378 fun! Align#Align(...) range 379 " call Dfunc("Align()") 325 " Align#Align: align selected text based on alignment pattern(s) {{{1 326 fun! Align#Align(hasctrl,...) range 327 " call Dfunc("Align#Align(hasctrl=".a:hasctrl.",...) a:0=".a:0) 328 329 " sanity check 330 if string(a:hasctrl) != "0" && string(a:hasctrl) != "1" 331 echohl Error|echo 'usage: Align#Align(hasctrl<'.a:hasctrl.'> (should be 0 or 1),"separator(s)" (you have '.a:0.') )'|echohl None 332 " call Dret("Align#Align") 333 return 334 endif 335 336 " set up a list akin to an argument list 337 if a:0 > 0 338 let A= s:QArgSplitter(a:1) 339 else 340 let A=[0] 341 endif 342 343 " if :Align! was used, then the first argument is (should be!) an AlignCtrl string 344 " Note that any alignment control set this way will be temporary. 345 let hasctrl= a:hasctrl 346 " call Decho("hasctrl=".hasctrl) 347 if a:hasctrl && A[0] >= 1 348 " call Decho("Align! : using A[1]<".A[1]."> for AlignCtrl") 349 if A[1] =~ '[gv]' 350 let hasctrl= hasctrl + 1 351 call Align#AlignCtrl('m') 352 call Align#AlignCtrl(A[1],A[2]) 353 " call Decho("Align! : also using A[2]<".A[2]."> for AlignCtrl") 354 elseif A[1] !~ 'm' 355 call Align#AlignCtrl(A[1]."m") 356 else 357 call Align#AlignCtrl(A[1]) 358 endif 359 endif 380 360 381 361 " Check for bad separator patterns (zero-length matches) 382 let ipat= 1 383 while ipat <= a:0384 if "" =~ a:{ipat}385 echoerr "Align: separator<". a:{ipat}."> matches zero-length string"386 " call Dret("Align ")362 let ipat= 1 + hasctrl 363 while ipat <= A[0] 364 if "" =~ A[ipat] 365 echoerr "Align: separator<".A[ipat]."> matches zero-length string" 366 " call Dret("Align#Align") 387 367 return 388 368 endif … … 396 376 set noic report=10000 397 377 378 if A[0] > hasctrl 398 379 " Align will accept a list of separator regexps 399 if a:0 > 0 400 " call Decho("a:0=".a:0.": accepting list of separator regexp") 380 " call Decho("A[0]=".A[0].": accepting list of separator regexp") 401 381 402 382 if s:AlignCtrl =~# "=" 403 " call Decho("AlignCtrl: record list of alignment patterns") 383 "= : consider all separators to be equivalent 384 " call Decho("AlignCtrl: record list of equivalent alignment patterns") 404 385 let s:AlignCtrl = '=' 405 let s:AlignPat_1 = a:1386 let s:AlignPat_1 = A[1 + hasctrl] 406 387 let s:AlignPatQty= 1 407 let ipat = 2 408 while ipat <= a:0409 let s:AlignPat_1 = s:AlignPat_1.'\|'. a:{ipat}388 let ipat = 2 + hasctrl 389 while ipat <= A[0] 390 let s:AlignPat_1 = s:AlignPat_1.'\|'.A[ipat] 410 391 let ipat = ipat + 1 411 392 endwhile … … 413 394 " call Decho("AlignCtrl<".s:AlignCtrl."> AlignPat<".s:AlignPat_1.">") 414 395 396 elseif s:AlignCtrl =~# 'C' 415 397 "c : cycle through alignment pattern(s) 416 elseif s:AlignCtrl =~# 'C'417 398 " call Decho("AlignCtrl: cycle through alignment pattern(s)") 418 399 let s:AlignCtrl = 'C' 419 let s:AlignPatQty= a:0400 let s:AlignPatQty= A[0] - hasctrl 420 401 let ipat = 1 421 while ipat <= a:0422 let s:AlignPat_{ipat}= a:{ipat}402 while ipat <= s:AlignPatQty 403 let s:AlignPat_{ipat}= A[(ipat + hasctrl)] 423 404 " call Decho("AlignCtrl<".s:AlignCtrl."> AlignQty=".s:AlignPatQty." AlignPat_".ipat."<".s:AlignPat_{ipat}.">") 424 405 let ipat= ipat + 1 … … 438 419 let endcol = virtcol("'<")-1 439 420 endif 421 " call Decho("begcol=".begcol." endcol=".endcol) 440 422 let begline = a:firstline 441 423 let endline = a:lastline … … 444 426 let endline = a:firstline 445 427 endif 428 " call Decho("begline=".begline." endline=".endline) 446 429 let fieldcnt = 0 447 430 if (begline == line("'>") && endline == line("'<")) || (begline == line("'<") && endline == line("'>")) 448 431 let vmode= visualmode() 432 " call Decho("vmode=".vmode) 449 433 if vmode == "\<c-v>" 450 let ragged = ( col("'>") > strlen(getline("'>")) || col("'<") > strlen(getline("'<")) ) 434 if exists("g:Align_xstrlen") && g:Align_xstrlen 435 let ragged = ( col("'>") > s:Strlen(getline("'>")) || col("'<") > s:Strlen(getline("'<")) ) 436 else 437 let ragged = ( col("'>") > strlen(getline("'>")) || col("'<") > strlen(getline("'<")) ) 438 endif 451 439 else 452 440 let ragged= 1 … … 458 446 let begcol= 0 459 447 endif 460 " call Decho(" Align()lines[".begline.",".endline."] col[".begcol.",".endcol."] ragged=".ragged." AlignCtrl<".s:AlignCtrl.">")448 " call Decho("lines[".begline.",".endline."] col[".begcol.",".endcol."] ragged=".ragged." AlignCtrl<".s:AlignCtrl.">") 461 449 462 450 " Keep user options 463 451 let etkeep = &et 464 452 let pastekeep= &paste 465 set et paste453 setlocal et paste 466 454 467 455 " convert selected range of lines to use spaces instead of tabs … … 489 477 let txt = getline(line) 490 478 " call Decho(" ") 491 " call Decho(" Line ".line." <".txt.">")479 " call Decho("Pass".pass.": Line ".line." <".txt.">") 492 480 493 481 " AlignGPat support: allows a selector pattern (akin to g/selector/cmd ) 494 482 if exists("s:AlignGPat") 495 " call Decho(" AlignGPat<".s:AlignGPat.">")483 " call Decho("Pass".pass.": AlignGPat<".s:AlignGPat.">") 496 484 if match(txt,s:AlignGPat) == -1 497 " call Decho(" skipping")485 " call Decho("Pass".pass.": skipping") 498 486 let line= line + 1 499 487 continue … … 503 491 " AlignVPat support: allows a selector pattern (akin to v/selector/cmd ) 504 492 if exists("s:AlignVPat") 505 " call Decho(" AlignGPat<".s:AlignGPat.">")493 " call Decho("Pass".pass.": AlignVPat<".s:AlignVPat.">") 506 494 if match(txt,s:AlignVPat) != -1 507 " call Decho(" skipping")495 " call Decho("Pass".pass.": skipping") 508 496 let line= line + 1 509 497 continue … … 513 501 " Always skip blank lines 514 502 if match(txt,'^\s*$') != -1 515 " call Decho(" skipping")503 " call Decho("Pass".pass.": skipping") 516 504 let line= line + 1 517 505 continue … … 519 507 520 508 " Extract visual-block selected text (init bgntxt, endtxt) 521 let txtlen= strlen(txt) 509 if exists("g:Align_xstrlen") && g:Align_xstrlen 510 let txtlen= s:Strlen(txt) 511 else 512 let txtlen= strlen(txt) 513 endif 522 514 if begcol > 0 523 515 " Record text to left of selected area 524 516 let bgntxt= strpart(txt,0,begcol) 525 " call Decho(" record text to left: bgntxt<".bgntxt.">")517 " call Decho("Pass".pass.": record text to left: bgntxt<".bgntxt.">") 526 518 elseif s:AlignLeadKeep == 'W' 527 519 let bgntxt= substitute(txt,'^\(\s*\).\{-}$','\1','') 528 " call Decho(" retaining all leading ws: bgntxt<".bgntxt.">")520 " call Decho("Pass".pass.": retaining all leading ws: bgntxt<".bgntxt.">") 529 521 elseif s:AlignLeadKeep == 'w' || !exists("bgntxt") 530 522 " No beginning text 531 523 let bgntxt= "" 532 " call Decho(" no beginning text")524 " call Decho("Pass".pass.": no beginning text") 533 525 endif 534 526 if ragged … … 540 532 endif 541 533 " call Decho(" ") 542 " call Decho("bgntxt<".bgntxt.">") 543 " call Decho(" txt<". txt .">") 544 " call Decho("endtxt<".endtxt.">") 534 " call Decho("Pass".pass.": bgntxt<".bgntxt.">") 535 " call Decho("Pass".pass.": txt<". txt .">") 536 " call Decho("Pass".pass.": endtxt<".endtxt.">") 537 if !exists("s:AlignPat_{1}") 538 echohl Error|echo "no separators specified!"|echohl None 539 " call Dret("Align#Align") 540 return 541 endif 545 542 546 543 " Initialize for both passes … … 558 555 let alignophold = " " 559 556 let alignop = "l" 560 " call Decho(" initial alignstyle<".alignstyle."> seppat<".seppat.">")557 " call Decho("Pass".pass.": initial alignstyle<".alignstyle."> seppat<".seppat.">") 561 558 562 559 " Process each field on the line … … 566 563 if s:AlignCtrl == 'C' && doend == 1 567 564 let seppat = s:AlignPat_{ipat} 568 " call Decho(" processing field: AlignCtrl=".s:AlignCtrl." ipat=".ipat." seppat<".seppat.">")565 " call Decho("Pass".pass.": processing field: AlignCtrl=".s:AlignCtrl." ipat=".ipat." seppat<".seppat.">") 569 566
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)