merge in trunk and port dnd-tabs code accordingly

This commit is contained in:
Chris Jones 2008-05-22 01:02:02 +01:00
commit fb948176cb
19 changed files with 1119 additions and 855 deletions

1
.bzrignore Normal file
View File

@ -0,0 +1 @@
*.pyc

View File

@ -2,7 +2,9 @@ terminator 0.9:
* Added support for ~/.terminatorrc * Added support for ~/.terminatorrc
* Added kwybindings for terms size and scrollbar manipulation. Thanks * Added kwybindings for terms size and scrollbar manipulation. Thanks
Emmanuel Bretelle. Emmanuel Bretelle.
* Completely revamped config system which now transparently makes use
of gconf settings if they are available, falls back to sensible
defaults if not, and can be overridden entirely by ~/.terminatorrc
terminator 0.8.1: terminator 0.8.1:
* Fixed ChangeLog * Fixed ChangeLog

5
README
View File

@ -1,4 +1,4 @@
Terminator 0.8.1 Terminator 0.9
by Chris Jones <cmsj@tenshu.net> by Chris Jones <cmsj@tenshu.net>
This is a little python script to give me lots of terminals in a single window, saving me valuable laptop screen space otherwise wasted on window decorations and not quite being able to fill the screen with terminals. This is a little python script to give me lots of terminals in a single window, saving me valuable laptop screen space otherwise wasted on window decorations and not quite being able to fill the screen with terminals.
@ -20,4 +20,5 @@ the gedit terminal plugin is part of the gedit-plugins package, which is licence
I am thus licensing Terminator as GPL v2 only. I am thus licensing Terminator as GPL v2 only.
Cristian Grada provided the icon under the same licence. Cristian Grada provided the old icon under the same licence.
Cory Kontros provided the new icon under the CC-by-SA licence.

3
TODO
View File

@ -1,4 +1 @@
* Edit doc/terminatorrc.5 manpage to contain the information about the options * Edit doc/terminatorrc.5 manpage to contain the information about the options
* Write a Tab feature for terminator
* Drag and Drop terms

Binary file not shown.

Before

Width:  |  Height:  |  Size: 845 B

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -2,551 +2,524 @@
<!-- Created with Inkscape (http://www.inkscape.org/) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="172" width="48px"
height="172" height="48px"
id="svg2" id="svg1306"
sodipodi:version="0.32" sodipodi:version="0.32"
inkscape:version="0.45.1" inkscape:version="0.46"
version="1.0" sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"
sodipodi:docbase="/home/cris/Scrivania" sodipodi:docname="utilities-terminal.svg"
sodipodi:docname="terminator_krig_proposal_02a.svg" inkscape:export-filename="/home/andreas/projekt/bild/tango/terminal4.png"
inkscape:export-xdpi="240.00000"
inkscape:export-ydpi="240.00000"
inkscape:output_extension="org.inkscape.output.svg.inkscape"> inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs <defs
id="defs4"> id="defs1308">
<linearGradient <inkscape:perspective
id="linearGradient15900"> sodipodi:type="inkscape:persp3d"
<stop inkscape:vp_x="0 : 24 : 1"
id="stop15902" inkscape:vp_y="0 : 1000 : 0"
offset="0" inkscape:vp_z="48 : 24 : 1"
style="stop-color:#1a1a1a;stop-opacity:0.556701;" /> inkscape:persp3d-origin="24 : 16 : 1"
<stop id="perspective79" />
id="stop15904" <radialGradient
offset="1" inkscape:collect="always"
style="stop-color:#1a1a1a;stop-opacity:0;" /> xlink:href="#linearGradient5060"
</linearGradient> id="radialGradient5031"
<linearGradient gradientUnits="userSpaceOnUse"
id="linearGradient12950"> gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
<stop cx="605.71429"
style="stop-color:#d75c25;stop-opacity:1;" cy="486.64789"
offset="0" fx="605.71429"
id="stop12952" /> fy="486.64789"
<stop r="117.14286" />
style="stop-color:#681e06;stop-opacity:1;"
offset="1"
id="stop12954" />
</linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient5138"> id="linearGradient5060">
<stop <stop
style="stop-color:#1a1a1a;stop-opacity:1;" style="stop-color:black;stop-opacity:1;"
offset="0" offset="0"
id="stop5140" /> id="stop5062" />
<stop <stop
style="stop-color:#1a1a1a;stop-opacity:0;" style="stop-color:black;stop-opacity:0;"
offset="1" offset="1"
id="stop5142" /> id="stop5064" />
</linearGradient> </linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient5060"
id="radialGradient5029"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
cx="605.71429"
cy="486.64789"
fx="605.71429"
fy="486.64789"
r="117.14286" />
<linearGradient <linearGradient
id="linearGradient7104"> id="linearGradient5048">
<stop <stop
id="stop7106" style="stop-color:black;stop-opacity:0;"
offset="0" offset="0"
style="stop-color:#171717;stop-opacity:1;" /> id="stop5050" />
<stop <stop
style="stop-color:#3b3b3b;stop-opacity:1;" id="stop5056"
offset="0.66666669"
id="stop7110" />
<stop
id="stop7108"
offset="1"
style="stop-color:#5f5f5f;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient7096">
<stop
id="stop7098"
offset="0"
style="stop-color:#272727;stop-opacity:1;" />
<stop
style="stop-color:#151515;stop-opacity:1;"
offset="0.5" offset="0.5"
id="stop7100" /> style="stop-color:black;stop-opacity:1;" />
<stop <stop
id="stop7102" style="stop-color:black;stop-opacity:0;"
offset="1" offset="1"
style="stop-color:#575757;stop-opacity:1;" /> id="stop5052" />
</linearGradient>
<linearGradient
id="linearGradient4183">
<stop
id="stop4185"
offset="0"
style="stop-color:#474747;stop-opacity:1;" />
<stop
id="stop4187"
offset="1"
style="stop-color:#2f2f2f;stop-opacity:1;" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
id="linearGradient10966"> xlink:href="#linearGradient5048"
id="linearGradient5027"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
x1="302.85715"
y1="366.64789"
x2="302.85715"
y2="609.50507" />
<linearGradient
inkscape:collect="always"
id="linearGradient6447">
<stop
style="stop-color:#777973;stop-opacity:1;"
offset="0"
id="stop6449" />
<stop
style="stop-color:#777973;stop-opacity:0;"
offset="1"
id="stop6451" />
</linearGradient>
<linearGradient
id="linearGradient4254">
<stop
style="stop-color:#616161;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop4256" />
<stop
style="stop-color:#a0a0a0;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop4258" />
</linearGradient>
<linearGradient
id="linearGradient5176">
<stop
id="stop5178"
offset="0.0000000"
style="stop-color:#a2a59c;stop-opacity:1.0000000;" />
<stop
id="stop5180"
offset="1.0000000"
style="stop-color:#535750;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient2667">
<stop
id="stop2669"
offset="0.0000000"
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop
id="stop2671"
offset="1.0000000"
style="stop-color:#fcfcff;stop-opacity:0.0000000;" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="26.729263"
x2="17.199417"
y1="1.6537577"
x1="11.492236"
gradientTransform="matrix(1.236157,0.000000,0.000000,0.896051,-1.081820,2.830699)"
id="linearGradient2673"
xlink:href="#linearGradient2667"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
id="linearGradient2238">
<stop <stop
style="stop-color:#ffffff;stop-opacity:1;" style="stop-color:#ffffff;stop-opacity:1;"
offset="0" offset="0"
id="stop10968" /> id="stop2240" />
<stop <stop
style="stop-color:#ffffff;stop-opacity:0;" style="stop-color:#ffffff;stop-opacity:0;"
offset="1" offset="1"
id="stop10970" /> id="stop2242" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
id="linearGradient10956"> id="linearGradient2224">
<stop <stop
style="stop-color:#ffbf82;stop-opacity:1;" style="stop-color:#32342f;stop-opacity:0.54639173;"
offset="0" offset="0.0000000"
id="stop10958" /> id="stop2226" />
<stop <stop
style="stop-color:#c21e0f;stop-opacity:1;" style="stop-color:#32342f;stop-opacity:0;"
offset="1" offset="1"
id="stop10960" /> id="stop2228" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
id="linearGradient7040"> id="linearGradient2214">
<stop <stop
style="stop-color:#666666;stop-opacity:1;" style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
offset="0" offset="0.0000000"
id="stop7042" /> id="stop2216" />
<stop <stop
id="stop7048" style="stop-color:#676964;stop-opacity:1.0000000;"
offset="0.5" offset="1.0000000"
style="stop-color:#494949;stop-opacity:1;" /> id="stop2218" />
<stop
style="stop-color:#222222;stop-opacity:1;"
offset="1"
id="stop7044" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
id="linearGradient3134"> id="linearGradient2206">
<stop <stop
style="stop-color:#1f1f1f;stop-opacity:1;" style="stop-color:#777973;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop2208" />
<stop
style="stop-color:#cbccca;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop2210" />
</linearGradient>
<linearGradient
id="linearGradient2198">
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="0" offset="0"
id="stop3136" /> id="stop2200" />
<stop <stop
style="stop-color:#474747;stop-opacity:1;" style="stop-color:#5a0000;stop-opacity:1;"
offset="1" offset="1"
id="stop3138" /> id="stop2202" />
</linearGradient> </linearGradient>
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient3134" xlink:href="#linearGradient2198"
id="linearGradient3140" id="linearGradient2204"
x1="135.12076" x1="23.118565"
y1="169.61938" y1="9.5830288"
x2="134.29579" x2="22.440805"
y2="46.619389" y2="34.225887"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)" /> gradientTransform="matrix(0.9500924,0,0,0.9650936,1.1833929,0.2767092)" />
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient7040" xlink:href="#linearGradient2206"
id="linearGradient7046" id="linearGradient2212"
x1="112.87043" x1="29.870447"
y1="169.61938" y1="32.285740"
x2="112.43217" x2="24.841814"
y2="46.619389" y2="14.157946"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)" /> gradientTransform="matrix(0.957412,0.000000,0.000000,0.952331,1.022766,0.133307)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5176"
id="linearGradient2220"
x1="8.6529236"
y1="9.5865316"
x2="21.305075"
y2="32.497993"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.957412,0.000000,0.000000,0.952331,1.022766,0.133307)" />
<radialGradient <radialGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient10956" xlink:href="#linearGradient2224"
id="radialGradient15848" id="radialGradient2230"
cx="24.041630"
cy="42.242130"
fx="24.041630"
fy="42.242130"
r="17.576654"
gradientTransform="matrix(1.000000,0.000000,0.000000,0.304598,-1.841788e-16,29.37527)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2238"
id="linearGradient2244"
x1="20.338758"
y1="19.636894"
x2="48.845253"
y2="49.730762"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
cx="119.6635" gradientTransform="matrix(0.953506,0.000000,0.000000,0.947873,1.141528,1.205591)" />
cy="85.430122"
fx="119.6635"
fy="85.430122"
r="33.477612" />
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient10966" xlink:href="#linearGradient4254"
id="linearGradient15850" id="linearGradient4260"
x1="11.048059"
y1="9.1463490"
x2="26.178129"
y2="30.343304"
gradientUnits="userSpaceOnUse" gradientUnits="userSpaceOnUse"
x1="118.10041" gradientTransform="matrix(0.9975908,0,0,0.9893614,4.354704e-2,9.1764254e-2)" />
y1="49.383987"
x2="117.75305"
y2="79.951157" />
<linearGradient <linearGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient7104" xlink:href="#linearGradient2214"
id="linearGradient3173" id="linearGradient5719"
x1="113.9577" x1="40.253334"
y1="150.68437" y1="42.318577"
x2="114.0788" x2="36.451904"
y2="164.55688" y2="37.999615"
gradientUnits="userSpaceOnUse" /> gradientUnits="userSpaceOnUse"
<linearGradient gradientTransform="matrix(1.000000,0.000000,0.000000,0.744756,0.000000,9.569132)" />
inkscape:collect="always"
xlink:href="#linearGradient7096"
id="linearGradient3181"
x1="113.9577"
y1="150.68437"
x2="114.0788"
y2="164.55688"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3134"
id="linearGradient4176"
x1="85.828339"
y1="160.75204"
x2="86.765663"
y2="113.1199"
gradientUnits="userSpaceOnUse" />
<radialGradient <radialGradient
inkscape:collect="always" inkscape:collect="always"
xlink:href="#linearGradient4183" xlink:href="#linearGradient6447"
id="radialGradient4181" id="radialGradient6453"
cx="79.321526" cx="37.495606"
cy="145.48856" cy="39.510023"
fx="79.321526" fx="37.495606"
fy="145.48856" fy="39.510023"
r="19.395096" r="2.5100370"
gradientTransform="matrix(1,0,0,1.2960101,0,-40.925212)" gradientTransform="matrix(1.000000,0.000000,0.000000,0.737790,0.000000,9.844321)"
gradientUnits="userSpaceOnUse" /> gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient10966"
id="radialGradient3184"
cx="79.321526"
cy="148.53423"
fx="79.321526"
fy="148.53423"
r="18.395096"
gradientTransform="matrix(1,0,0,1.3121019,0,-43.150001)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10966"
id="linearGradient4165"
x1="91.741142"
y1="165.71468"
x2="91.741142"
y2="154.92818"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5138"
id="linearGradient5144"
x1="79.321526"
y1="162.39238"
x2="79.321526"
y2="129.05859"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5138"
id="linearGradient5148"
gradientUnits="userSpaceOnUse"
x1="79.321526"
y1="162.39238"
x2="79.321526"
y2="129.05859" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient12950"
id="linearGradient12956"
x1="137.27036"
y1="112.90773"
x2="137.67517"
y2="45.952511"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10966"
id="linearGradient13954"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)"
x1="112.87043"
y1="169.61938"
x2="112.43217"
y2="46.619389" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient15900"
id="linearGradient14929"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)"
x1="118.31248"
y1="48.612362"
x2="118.65166"
y2="131.94485" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient15900"
id="linearGradient16878"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)"
x1="118.31248"
y1="48.612362"
x2="118.65166"
y2="131.94485" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient15900"
id="linearGradient16882"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-45.57938,-36.629579)"
x1="84.463188"
y1="45.379578"
x2="120.99507"
y2="140.86775" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient10966"
id="linearGradient16885"
gradientUnits="userSpaceOnUse"
x1="118.10041"
y1="49.383987"
x2="117.75305"
y2="79.951157" />
</defs> </defs>
<sodipodi:namedview <sodipodi:namedview
id="base" id="base"
pagecolor="#ffffff" pagecolor="#ffffff"
bordercolor="#666666" bordercolor="#666666"
borderopacity="1.0" borderopacity="0.19607843"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="4.2674419" inkscape:zoom="1"
inkscape:cx="86.000001" inkscape:cx="24.250101"
inkscape:cy="84.853412" inkscape:cy="27.349621"
inkscape:document-units="px"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
width="172px" showgrid="false"
height="172px" inkscape:grid-bbox="true"
inkscape:window-width="1272" inkscape:document-units="px"
inkscape:window-height="946" inkscape:window-width="1460"
inkscape:window-x="0" inkscape:window-height="1129"
inkscape:window-y="25" /> inkscape:window-x="321"
inkscape:window-y="50"
showguides="true"
inkscape:guide-bbox="true"
inkscape:showpageshadow="false" />
<metadata <metadata
id="metadata7"> id="metadata1311">
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Terminal</dc:title>
<dc:date>2005-10-15</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Andreas Nilsson</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>terminal</rdf:li>
<rdf:li>emulator</rdf:li>
<rdf:li>term</rdf:li>
<rdf:li>command line</rdf:li>
</rdf:Bag>
</dc:subject>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
<dc:contributor>
<cc:Agent>
<dc:title>Jakub Steiner</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work> </cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Attribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
</cc:License>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<g <g
id="layer1"
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer">
id="layer1"> <g
<path id="g5022"
sodipodi:type="arc" transform="matrix(2.454499e-2,0,0,2.086758e-2,46.14369,39.34109)">
style="opacity:0.77348066;fill:#1a1a1a;fill-opacity:0.47953216;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" <rect
id="path5150" y="-150.69685"
sodipodi:cx="86.468666" x="-1559.2523"
sodipodi:cy="151.84741" height="478.35718"
sodipodi:rx="77.564034" width="1339.6335"
sodipodi:ry="7.9673023" id="rect4173"
d="M 164.0327 151.84741 A 77.564034 7.9673023 0 1 1 8.9046326,151.84741 A 77.564034 7.9673023 0 1 1 164.0327 151.84741 z" style="opacity:0.40206185;color:black;fill:url(#linearGradient5027);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
transform="matrix(0.9712991,0,0,1,3.1184969,0)" /> <path
<path sodipodi:nodetypes="cccc"
sodipodi:type="arc" id="path5058"
style="opacity:1;fill:url(#linearGradient3173);fill-opacity:1;stroke:url(#linearGradient3181);stroke-width:2.34342261;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
id="path2194" style="opacity:0.40206185;color:black;fill:url(#radialGradient5029);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
sodipodi:cx="91.741142" <path
sodipodi:cy="158.76022" style="opacity:0.40206185;color:black;fill:url(#radialGradient5031);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
sodipodi:rx="56.825615" d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
sodipodi:ry="6.9128065" id="path5018"
d="M 148.56676 158.76022 A 56.825615 6.9128065 0 1 1 34.915527,158.76022 A 56.825615 6.9128065 0 1 1 148.56676 158.76022 z" sodipodi:nodetypes="cccc" />
transform="matrix(0.9926042,0,0,1.6510688,-4.191546,-110.28481)" /> </g>
<path
sodipodi:type="arc"
style="opacity:1;fill:url(#radialGradient4181);fill-opacity:1;stroke:url(#linearGradient4176);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path3191"
sodipodi:cx="79.321526"
sodipodi:cy="138.25613"
sodipodi:rx="18.395096"
sodipodi:ry="24.13624"
d="M 97.716621 138.25613 A 18.395096 24.13624 0 1 1 60.92643,138.25613 A 18.395096 24.13624 0 1 1 97.716621 138.25613 z"
transform="translate(7.5495758,-5.5149864)" />
<path
transform="matrix(1.0127389,0,0,-0.7959,6.5391103,245.19359)"
d="M 97.716621 138.25613 A 18.395096 24.13624 0 1 1 60.92643,138.25613 A 18.395096 24.13624 0 1 1 97.716621 138.25613 z"
sodipodi:ry="24.13624"
sodipodi:rx="18.395096"
sodipodi:cy="138.25613"
sodipodi:cx="79.321526"
id="path5146"
style="opacity:1;fill:url(#linearGradient5148);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<rect <rect
style="opacity:1;fill:url(#linearGradient7046);fill-opacity:1;stroke:url(#linearGradient3140);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" style="opacity:1.0000000;fill:url(#linearGradient2212);fill-opacity:1.0000000;fill-rule:evenodd;stroke:url(#linearGradient2220);stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"
id="rect2160" id="rect1316"
width="160" width="44.996037"
height="120" height="38.998734"
x="6.8711014" x="1.5026338"
y="11.489811" y="3.5015533"
ry="16.325644" rx="4.8517075"
rx="16.325644" /> ry="4.8517079" />
<rect <rect
ry="7.273283" style="opacity:1;fill:url(#linearGradient2204);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4260);stroke-width:0.99467027;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
rx="7.273283" id="rect1314"
y="68.21653" width="37.088291"
x="19.041515" height="29.005329"
height="14.546566" x="5.4357266"
width="52.06081" y="7.4998446"
id="rect4138" rx="1.6452278"
style="opacity:1;fill:#333333;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> ry="1.6442512" />
<g
id="g2286"
style="opacity:0.25568182">
<path
id="path1345"
d="M 8.0152033,11.500361 L 39.994145,11.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,13.500361 L 39.994145,13.500361"
id="path2264" />
<path
id="path2266"
d="M 8.0152033,15.500361 L 39.994145,15.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,17.500361 L 39.994145,17.500361"
id="path2268" />
<path
id="path2270"
d="M 8.0152033,19.500361 L 39.994145,19.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,21.500361 L 39.994145,21.500361"
id="path2272" />
<path
id="path2274"
d="M 8.0152033,23.500361 L 39.994145,23.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,25.500361 L 39.994145,25.500361"
id="path2276" />
<path
id="path2278"
d="M 8.0152033,27.500361 L 39.994145,27.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,29.500361 L 39.994145,29.500361"
id="path2280" />
<path
id="path2282"
d="M 8.0152033,31.500361 L 39.994145,31.500361"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#181f10;stroke-width:1.00072134;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.0152033,33.500361 L 39.994145,33.500361"
id="path2284" />
</g>
<rect <rect
style="opacity:1;fill:#ff7f2a;fill-opacity:1;stroke:#ffca3a;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" style="opacity:0.76373626;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2244);stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5080" id="rect2232"
width="52.06081" width="42.945141"
height="14.546566" height="37.000587"
x="19.041515" x="2.5542557"
y="64.685196" y="4.5007114"
rx="7.273283" rx="3.7910469"
ry="7.273283" /> ry="3.7910469" />
<text
id="text4130"
y="51.997284"
x="17.630936"
style="font-size:40px;font-style:normal;font-weight:bold;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.51764706;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="51.997284"
x="17.630936"
id="tspan4132"
sodipodi:role="line">&gt; |</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.51764706;font-family:Bitstream Vera Sans"
x="17.630936"
y="49.997284"
id="text6051"><tspan
sodipodi:role="line"
id="tspan6053"
x="17.630936"
y="49.997284">&gt; |</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:bold;fill:#333333;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.51764706;font-family:Bitstream Vera Sans"
x="17.630936"
y="117.99728"
id="text4134"><tspan
sodipodi:role="line"
id="tspan4136"
x="17.630936"
y="117.99728">&gt; |</tspan></text>
<path <path
sodipodi:type="inkscape:offset" style="font-size:18.58501053px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.36798642pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.2786885;font-family:Bitstream Vera Sans Mono"
inkscape:radius="0.65598136" d="M 8.5171086,12.191731 L 8.5171086,11.067756 L 11.823403,12.562073 L 11.823403,13.245026 L 8.5171086,14.749146 L 8.5171086,13.628511 L 11.079912,12.946316 L 8.5171086,12.191731 z M 15.469341,15.881295 L 15.469341,16.607773 L 11.457036,16.607773 L 11.457036,15.881295 L 15.469341,15.881295"
inkscape:original="M 20.84375 9.40625 C 10.681044 9.40625 4.78125 17.649794 4.78125 27.8125 L 4.78125 98.84375 C 4.7896543 99.835787 5.4950627 100.68489 6.46875 100.875 C 44.954336 108.72507 78.917733 98.505116 106.4375 82.28125 C 133.95727 66.057384 155.12315 43.857132 168.40625 27.5625 C 168.74075 27.137983 168.89758 26.600282 168.84375 26.0625 C 167.95384 16.717116 160.09734 9.40625 150.53125 9.40625 L 20.84375 9.40625 z " id="text1340"
style="fill:url(#linearGradient16882);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4" sodipodi:nodetypes="ccccccccccccc" />
id="path16880"
d="M 20.84375,8.75 C 15.585029,8.75 11.360503,10.903968 8.5,14.375 C 5.6394968,17.846032 4.125,22.604207 4.125,27.8125 L 4.125,98.84375 C 4.1360116,100.14355 5.0679936,101.28216 6.34375,101.53125 C 45.012631,109.41871 79.161901,99.126323 106.78125,82.84375 C 134.39979,66.561659 155.59189,44.301732 168.90625,27.96875 C 169.34572,27.411017 169.57072,26.70654 169.5,26 C 168.57861,16.324052 160.43156,8.75 150.53125,8.75 L 20.84375,8.75 z "
transform="matrix(-0.8999662,0,0,-0.604194,165.62654,131.26936)" />
<text
id="text6055"
y="115.99728"
x="17.630936"
style="font-size:40px;font-style:normal;font-weight:bold;fill:#ff7f2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="115.99728"
x="17.630936"
id="tspan6057"
sodipodi:role="line">&gt; |</tspan></text>
<path <path
d="M 152.14111 79.430122 A 32.477612 32.477612 0 1 1 87.185886,79.430122 A 32.477612 32.477612 0 1 1 152.14111 79.430122 z" style="opacity:0.72413791;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.2786885"
sodipodi:ry="32.477612" d="M 23 9.9375 L 23 21 L 7.96875 21 L 7.96875 23 L 23 23 L 23 34.09375 L 25 34.09375 L 25 23 L 40.03125 23 L 40.03125 21 L 25 21 L 25 9.9375 L 23 9.9375 z "
sodipodi:rx="32.477612" id="rect3228" />
sodipodi:cy="79.430122"
sodipodi:cx="119.6635"
id="path11947"
style="opacity:0.41436462;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc"
transform="matrix(1.0828472,0,0,1.0972776,-10.035093,-15.897808)" />
<path <path
sodipodi:type="arc" sodipodi:nodetypes="ccccccc"
style="fill:url(#radialGradient15848);fill-opacity:1;stroke:url(#linearGradient12956);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="opacity:0.53142856;fill:url(#linearGradient2673);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path9985" d="M 7.625388,8 C 7.102102,8 6.05153,8.190188 6.05153,9.0259761 L 6.16958,25.542519 C 23.841567,24.579133 20.294433,17.286426 42,13.633318 L 41.937264,9.2913791 C 41.859002,8.1662868 41.397947,8.0594548 40.327115,8.066071 L 7.625388,8 z "
sodipodi:cx="119.6635" id="path2443" />
sodipodi:cy="79.430122"
sodipodi:rx="32.477612"
sodipodi:ry="32.477612"
d="M 152.14111 79.430122 A 32.477612 32.477612 0 1 1 87.185886,79.430122 A 32.477612 32.477612 0 1 1 152.14111 79.430122 z"
transform="translate(0,-8.5719268)" />
<text
xml:space="preserve"
style="font-size:72px;font-style:normal;font-weight:bold;opacity:0.91160221;fill:#ffffff;fill-opacity:1;stroke:#9f3021;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="89.270012"
y="93.694023"
id="text10974"><tspan
sodipodi:role="line"
id="tspan10976"
x="89.270012"
y="93.694023">+</tspan></text>
<path
transform="matrix(0.9391661,0,0,1.3304334,1.0624274,-59.614986)"
d="M 148.56676 158.76022 A 56.825615 6.9128065 0 1 1 34.915527,158.76022 A 56.825615 6.9128065 0 1 1 148.56676 158.76022 z"
sodipodi:ry="6.9128065"
sodipodi:rx="56.825615"
sodipodi:cy="158.76022"
sodipodi:cx="91.741142"
id="path3186"
style="opacity:0.75138122;fill:none;fill-opacity:1;stroke:url(#linearGradient4165);stroke-width:1.78921373;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<path
sodipodi:type="arc"
style="opacity:0.45856353;fill:url(#linearGradient5144);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4167"
sodipodi:cx="79.321526"
sodipodi:cy="138.25613"
sodipodi:rx="18.395096"
sodipodi:ry="24.13624"
d="M 97.716621 138.25613 A 18.395096 24.13624 0 1 1 60.92643,138.25613 A 18.395096 24.13624 0 1 1 97.716621 138.25613 z"
transform="matrix(1.3248408,0,0,0.3784243,-18.334455,96.351039)" />
<path
transform="matrix(0.6942675,0,0,0.6357059,31.800743,51.524158)"
d="M 97.716621 138.25613 A 18.395096 24.13624 0 1 1 60.92643,138.25613 A 18.395096 24.13624 0 1 1 97.716621 138.25613 z"
sodipodi:ry="24.13624"
sodipodi:rx="18.395096"
sodipodi:cy="138.25613"
sodipodi:cx="79.321526"
id="path2209"
style="opacity:0.31491713;fill:url(#radialGradient3184);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="arc" />
<rect <rect
rx="13.949388" style="opacity:0.71428572999999995;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
ry="13.822799" id="rect1340"
y="13.79904" width="34.026031"
x="9.479969" height="26.057468"
height="115.38154" x="6.9894562"
width="155.25093" y="8.9805145"
id="rect9072" rx="0.11773217"
style="opacity:1;fill:none;fill-opacity:1;stroke:#c2c2c2;stroke-width:1.93181098;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> ry="0.11773217" />
<rect
style="opacity:1;fill:url(#radialGradient6453);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5719);stroke-width:1.00000119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5025"
width="4.0200734"
height="2.9590063"
x="35.485569"
y="37.514935"
rx="0.35819405"
ry="0.56022596" />
<rect
style="opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect6458"
width="2"
height="2"
x="32"
y="38"
rx="0.56022543"
ry="0.56022543" />
<path <path
sodipodi:type="arc" sodipodi:type="arc"
style="fill:url(#linearGradient16885);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="path10964" id="path2300"
sodipodi:cx="117.75305" sodipodi:cx="28.3125"
sodipodi:cy="65.362282" sodipodi:cy="38.75"
sodipodi:rx="16.672998" sodipodi:rx="0.5625"
sodipodi:ry="16.672998" sodipodi:ry="0.5625"
d="M 134.42605 65.362282 A 16.672998 16.672998 0 1 1 101.08005,65.362282 A 16.672998 16.672998 0 1 1 134.42605 65.362282 z" d="M 28.875 38.75 A 0.5625 0.5625 0 1 1 27.75,38.75 A 0.5625 0.5625 0 1 1 28.875 38.75 z"
transform="translate(2.2251497,-9.1225036)" /> transform="translate(4.375000,-6.250000e-2)" />
<path
style="font-size:18.58501053px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.36798642pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.2786885;font-family:Bitstream Vera Sans Mono"
d="M 25.694705,12.191731 L 25.694705,11.067756 L 29.001001,12.562073 L 29.001001,13.245026 L 25.694705,14.749146 L 25.694705,13.628511 L 28.257509,12.946316 L 25.694705,12.191731 z M 32.646939,15.881295 L 32.646939,16.607773 L 28.634633,16.607773 L 28.634633,15.881295 L 32.646939,15.881295"
id="path3221"
sodipodi:nodetypes="ccccccccccccc" />
<path
style="font-size:18.58501053px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.36798642pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.2786885;font-family:Bitstream Vera Sans Mono"
d="M 8.5171086,26.538666 L 8.5171086,25.414691 L 11.823408,26.909008 L 11.823408,27.591961 L 8.5171086,29.096081 L 8.5171086,27.975446 L 11.079916,27.293251 L 8.5171086,26.538666 z M 15.469346,30.22823 L 15.469346,30.954708 L 11.457041,30.954708 L 11.457041,30.22823 L 15.469346,30.22823"
id="path3223"
sodipodi:nodetypes="ccccccccccccc" />
<path
style="font-size:18.58501053px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ff0000;stroke-width:0.36798642pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.2786885;font-family:Bitstream Vera Sans Mono"
d="M 25.694704,26.606311 L 25.694704,25.482336 L 29.001002,26.976653 L 29.001002,27.659606 L 25.694704,29.163726 L 25.694704,28.043091 L 28.257511,27.360896 L 25.694704,26.606311 z M 32.64694,30.295875 L 32.64694,31.022353 L 28.634636,31.022353 L 28.634636,30.295875 L 32.64694,30.295875"
id="path3226"
sodipodi:nodetypes="ccccccccccccc" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 23 KiB

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
terminator (0.9-0ubuntu1) hardy; urgency=low
* New upstream release
-- Chris Jones <cmsj@tenshu.net> Wed, 19 Mar 2008 17:16:25 +0000
terminator (0.8.1-0ubuntu1) hardy; urgency=low terminator (0.8.1-0ubuntu1) hardy; urgency=low
* New upstream release * New upstream release

6
debian/copyright vendored
View File

@ -9,9 +9,13 @@ Upstream Authors:
Huang He Huang He
Kees Cook Kees Cook
Thomas Meire Thomas Meire
Nicolas Valcarcel
Emmanuel Bretelle
Chris Oattes
Artwork: Artwork:
Cristian Grada - Drew our icon and licenced it to us under this licence Cory Kontros - Produced our current icon under the CC-by-SA licence
Cristian Grada - Drew our original icon and licenced it to us under this licence
Translations: Translations:
Thomas Meire Thomas Meire

2
debian/watch vendored
View File

@ -1,2 +1,2 @@
version=3 version=3
https://launchpad.net/terminator/+download .*/terminator_(.+)\.tar\.gz https://launchpad.net/terminator/+download http://launchpad.net/terminator/.*/terminator_(.+)\.tar\.gz

View File

@ -85,7 +85,7 @@ Toggle fullscreen
.SH "SEE ALSO" .SH "SEE ALSO"
.BR gnome\-terminal(1),terminatorrc(5) .BR gnome\-terminal(1),terminatorrc(5)
.SH "AUTHOR" .SH "AUTHOR"
Terminator was written by Chris Jones <cmsj@tenshu.net> Terminator was written by Chris Jones <cmsj@tenshu.net> and others.
.PP .PP
This manual page was written by Chris Jones <cmsj@tenshu.net> This manual page was written by Chris Jones <cmsj@tenshu.net>
for the Ubuntu project (but may be used by others). for the Ubuntu project (but may be used by others).

View File

@ -2,12 +2,49 @@
from distutils.core import setup from distutils.core import setup
from distutils.command.install_data import install_data from distutils.command.install_data import install_data
from distutils.command.build import build
from distutils.dep_util import newer from distutils.dep_util import newer
from distutils.log import info from distutils.log import info
import glob import glob
import os import os
import sys import sys
def import_terminator():
from types import ModuleType
module = ModuleType('terminator')
module_file = open('terminator', 'r')
exec module_file in module.__dict__
return module
APP_VERSION = import_terminator().APP_VERSION
PO_DIR = 'po'
MO_DIR = os.path.join('build', 'mo')
WITHOUT_NLS = sys.platform == 'win32' or os.environ.has_key("WITHOUT_NLS")
class BuildData(build):
def run (self):
build.run (self)
if WITHOUT_NLS:
return
for po in glob.glob (os.path.join (PO_DIR, '*.po')):
lang = os.path.basename(po[:-3])
mo = os.path.join(MO_DIR, lang + '.mo')
directory = os.path.dirname(mo)
if not os.path.exists(directory):
info('creating %s' % directory)
os.makedirs(directory)
if newer(po, mo):
cmd = 'msgfmt -o %s %s' % (mo, po)
info('compiling %s -> %s' % (po, mo))
if os.system(cmd) != 0:
raise SystemExit('Error while running msgfmt')
class InstallData(install_data): class InstallData(install_data):
def run (self): def run (self):
self.data_files.extend (self._compile_po_files ()) self.data_files.extend (self._compile_po_files ())
@ -17,39 +54,24 @@ class InstallData(install_data):
data_files = [] data_files = []
# Don't install language files on win32 # Don't install language files on win32
if sys.platform == 'win32': if WITHOUT_NLS:
return data_files return data_files
PO_DIR = 'po' for mo in glob.glob (os.path.join (MO_DIR, '*.mo')):
for po in glob.glob (os.path.join (PO_DIR,'*.po')): lang = os.path.basename(mo[:-3])
lang = os.path.basename(po[:-3]) dest = os.path.dirname(os.path.join('share', 'locale', lang, 'LC_MESSAGES', 'terminator.mo'))
mo = os.path.join('build', 'mo', lang, 'terminator.mo') data_files.append((dest, [mo]))
directory = os.path.dirname(mo)
if not os.path.exists(directory):
info('creating %s' % directory)
os.makedirs(directory)
if newer(po, mo):
# True if mo doesn't exist
cmd = 'msgfmt -o %s %s' % (mo, po)
info('compiling %s -> %s' % (po, mo))
if os.system(cmd) != 0:
raise SystemExit('Error while running msgfmt')
dest = os.path.dirname(os.path.join('share', 'locale', lang, 'LC_MESSAGES', 'terminator.mo'))
data_files.append((dest, [mo]))
return data_files return data_files
setup(name='Terminator', setup(name='Terminator',
version='0.8.1', version=APP_VERSION,
description='Terminator, the robot future of terminals', description='Terminator, the robot future of terminals',
author='Chris Jones', author='Chris Jones',
author_email='cmsj@tenshu.net', author_email='cmsj@tenshu.net',
url='http://www.tenshu.net/terminator/', url='http://www.tenshu.net/terminator/',
license='GPL v2', license='GNU GPL v2',
scripts=['terminator'], scripts=['terminator'],
data_files=[ data_files=[
('share/applications', ['data/terminator.desktop']), ('share/applications', ['data/terminator.desktop']),
@ -62,6 +84,7 @@ setup(name='Terminator',
('share/icons/hicolor/24x24/apps', glob.glob('data/icons/24x24/apps/*.png')), ('share/icons/hicolor/24x24/apps', glob.glob('data/icons/24x24/apps/*.png')),
('share/icons/hicolor/48x48/apps', glob.glob('data/icons/48x48/apps/*.png')), ('share/icons/hicolor/48x48/apps', glob.glob('data/icons/48x48/apps/*.png')),
], ],
cmdclass={'install_data': InstallData} packages=['terminatorlib'],
cmdclass={'build': BuildData, 'install_data': InstallData}
) )

File diff suppressed because it is too large Load Diff

View File

View File

@ -58,21 +58,17 @@ class TerminatorConfig:
self.sources.append (source) self.sources.append (source)
def __getattr__ (self, keyname): def __getattr__ (self, keyname):
dbg ("Config: Looking for: %s"%keyname) dbg ("TConfig: Looking for: '%s'"%keyname)
for source in self.sources: for source in self.sources:
try: try:
val = getattr (source, keyname) val = getattr (source, keyname)
dbg ("Config: got: %s from a %s"%(val, source.type)) dbg (" TConfig: got: '%s' from a '%s'"%(val, source.type))
return (val) return (val)
except: except:
dbg ("Config: no value found in %s."%source.type)
pass pass
dbg ("Config: Out of sources")
raise (AttributeError)
def set_reconfigure_callback (self, function): dbg (" TConfig: Out of sources")
self.reconfigure_callback = function raise (AttributeError)
return (True)
class TerminatorConfValuestore: class TerminatorConfValuestore:
type = "Base" type = "Base"
@ -80,39 +76,48 @@ class TerminatorConfValuestore:
reconfigure_callback = None reconfigure_callback = None
# Our settings # Our settings
# FIXME: Is it acceptable to not explicitly store the type, but
# instead infer it from defaults[key].__class__.__name__
defaults = { defaults = {
'gt_dir' : [str, '/apps/gnome-terminal'], 'gt_dir' : '/apps/gnome-terminal',
'profile_dir' : [str, '/apps/gnome-terminal/profiles'], 'profile_dir' : '/apps/gnome-terminal/profiles',
'titlebars' : [bool, True], 'titlebars' : True,
'titletips' : [bool, False], 'titletips' : False,
'allow_bold' : [bool, False], 'allow_bold' : False,
'silent_bell' : [bool, True], 'silent_bell' : True,
'background_color' : [str, '#000000'], 'background_color' : '#000000',
'background_darkness' : [float, 0.5], 'background_darkness' : 0.5,
'background_type' : [str, 'solid'], 'background_type' : 'solid',
'backspace_binding' : [str, 'ascii-del'], 'backspace_binding' : 'ascii-del',
'delete_binding' : [str, 'delete-sequence'], 'delete_binding' : 'delete-sequence',
'cursor_blink' : [bool, False], 'cursor_blink' : False,
'emulation' : [str, 'xterm'], 'emulation' : 'xterm',
'font' : [str, 'Serif 10'], 'font' : 'Serif 10',
'foreground_color' : [str, '#AAAAAA'], 'foreground_color' : '#AAAAAA',
'scrollbar_position' : [str, "right"], 'scrollbar_position' : "right",
'scroll_background' : [bool, True], 'scroll_background' : True,
'scroll_on_keystroke' : [bool, False], 'scroll_on_keystroke' : False,
'scroll_on_output' : [bool, False], 'scroll_on_output' : False,
'scrollback_lines' : [int, 100], 'scrollback_lines' : 100,
'focus' : [str, 'sloppy'], 'focus' : 'sloppy',
'exit_action' : [str, 'close'], 'exit_action' : 'close',
'palette' : [str, '#000000000000:#CDCD00000000:#0000CDCD0000:#CDCDCDCD0000:#30BF30BFA38E:#A53C212FA53C:#0000CDCDCDCD:#FAFAEBEBD7D7:#404040404040:#FFFF00000000:#0000FFFF0000:#FFFFFFFF0000:#00000000FFFF:#FFFF0000FFFF:#0000FFFFFFFF:#FFFFFFFFFFFF'], 'palette' : '#000000000000:#CDCD00000000:#0000CDCD0000:#CDCDCDCD0000:#30BF30BFA38E:#A53C212FA53C:#0000CDCDCDCD:#FAFAEBEBD7D7:#404040404040:#FFFF00000000:#0000FFFF0000:#FFFFFFFF0000:#00000000FFFF:#FFFF0000FFFF:#0000FFFFFFFF:#FFFFFFFFFFFF',
'word_chars' : [str, '-A-Za-z0-9,./?%&#:_'], 'word_chars' : '-A-Za-z0-9,./?%&#:_',
'mouse_autohide' : [bool, True], 'mouse_autohide' : True,
'update_records' : True,
'login_shell' : False,
'use_custom_command' : False,
'custom_command' : '',
'use_system_font' : True,
'use_theme_colors' : True,
'http_proxy' : '',
'ignore_hosts' : ['localhost','127.0.0.0/8','*.local'],
'encoding' : 'UTF-8',
'active_encodings' : ['UTF-8', 'ISO-8859-1'],
'overlay_type' : 'rectangle',
} }
def __getattr__ (self, keyname): def __getattr__ (self, keyname):
if self.values.has_key (keyname): if self.values.has_key (keyname):
return self.values[keyname][1] return self.values[keyname]
else: else:
raise (AttributeError) raise (AttributeError)
@ -127,7 +132,7 @@ class TerminatorConfValuestoreRC (TerminatorConfValuestore):
# that can be re-used when rc changes. # that can be re-used when rc changes.
def __init__ (self): def __init__ (self):
self.type = "RCFile" self.type = "RCFile"
self.rcfilename = pwd.getpwuid (os.getuid ())[5] + "/.terminatorrc" self.rcfilename = os.path.join(os.path.expanduser("~"), ".terminatorrc")
if os.path.exists (self.rcfilename): if os.path.exists (self.rcfilename):
rcfile = open (self.rcfilename) rcfile = open (self.rcfilename)
rc = rcfile.readlines () rc = rcfile.readlines ()
@ -138,33 +143,44 @@ class TerminatorConfValuestoreRC (TerminatorConfValuestore):
item = item.strip () item = item.strip ()
if item and item[0] != '#': if item and item[0] != '#':
(key, value) = item.split ("=") (key, value) = item.split ("=")
dbg ("VS_RCFile: Setting value %s to %s"%(key, value)) dbg (" VS_RCFile: Setting value %s to %s"%(key, value))
self.values[key] = [self.defaults[key][0], self.defaults[key][0](value)] if value == 'True':
self.values[key] = True
elif value == 'False':
self.values[key] = False
except: except:
dbg (" VS_RCFile: Exception handling: %s"%item)
pass pass
class TerminatorConfValuestoreGConf (TerminatorConfValuestore): class TerminatorConfValuestoreGConf (TerminatorConfValuestore):
profile = "" profile = ""
client = None client = None
cache = {}
def __init__ (self, profile = None): def __init__ (self, profile = None):
self.type = "GConf" self.type = "GConf"
import gconf
self.client = gconf.client_get_default () self.client = gconf.client_get_default ()
# Grab a couple of values from base class to avoid recursing with our __getattr__ # Grab a couple of values from base class to avoid recursing with our __getattr__
self._gt_dir = self.defaults['gt_dir'][1] self._gt_dir = self.defaults['gt_dir']
self._profile_dir = self.defaults['profile_dir'][1] self._profile_dir = self.defaults['profile_dir']
if not profile: if not profile:
profile = self.client.get_string (self._gt_dir + '/global/default_profile') profile = self.client.get_string (self._gt_dir + '/global/default_profile')
profiles = self.client.get_list (self._gt_dir + '/global/profile_list','string') profiles = self.client.get_list (self._gt_dir + '/global/profile_list','string')
#set up the active encoding list
self.active_encodings = self.client.get_list (self._gt_dir + '/global/active_encodings', 'string')
#need to handle the list of Gconf.value
if profile in profiles: if profile in profiles:
dbg ("VSGConf: Found profile '%s' in profile_list"%profile) dbg (" VSGConf: Found profile '%s' in profile_list"%profile)
self.profile = '%s/%s'%(self._profile_dir, profile) self.profile = '%s/%s'%(self._profile_dir, profile)
elif "Default" in profiles: elif "Default" in profiles:
dbg ("VSGConf: profile '%s' not found, but 'Default' exists"%profile) dbg (" VSGConf: profile '%s' not found, but 'Default' exists"%profile)
self.profile = '%s/%s'%(self._profile_dir, "Default") self.profile = '%s/%s'%(self._profile_dir, "Default")
else: else:
# We're a bit stuck, there is no profile in the list # We're a bit stuck, there is no profile in the list
@ -178,25 +194,69 @@ class TerminatorConfValuestoreGConf (TerminatorConfValuestore):
self.client.add_dir ('/apps/metacity/general', gconf.CLIENT_PRELOAD_RECURSIVE) self.client.add_dir ('/apps/metacity/general', gconf.CLIENT_PRELOAD_RECURSIVE)
self.client.notify_add ('/apps/metacity/general/focus_mode', self.on_gconf_notify) self.client.notify_add ('/apps/metacity/general/focus_mode', self.on_gconf_notify)
self.client.add_dir ('/desktop/gnome/interface', gconf.CLIENT_PRELOAD_RECURSIVE)
self.client.notify_add ('/desktop/gnome/interface/monospace_font_name', self.on_gconf_notify)
# FIXME: Do we need to watch more non-profile stuff here?
def set_reconfigure_callback (self, function):
dbg (" VSConf: setting callback to: %s"%function)
self.reconfigure_callback = function
return (True)
def on_gconf_notify (self, client, cnxn_id, entry, what): def on_gconf_notify (self, client, cnxn_id, entry, what):
dbg (" VSGConf: invalidating cache")
self.cache = {}
dbg (" VSGConf: gconf changed, callback is: %s"%self.reconfigure_callback)
if self.reconfigure_callback: if self.reconfigure_callback:
self.reconfigure_callback () self.reconfigure_callback ()
def __getattr__ (self, key = ""): def __getattr__ (self, key = ""):
ret = None if self.cache.has_key (key):
dbg (" VSGConf: returning cached value: %s"%self.cache[key])
return (self.cache[key])
ret = None
value = None
dbg (' VSGConf: preparing: %s/%s'%(self.profile, key))
# FIXME: Ugly special cases we should look to fix in some other way.
if key == 'font' and self.use_system_font:
value = self.client.get ('/desktop/gnome/interface/monospace_font_name')
elif key == 'focus':
value = self.client.get ('/apps/metacity/general/focus_mode')
elif key == 'http_proxy':
if self.client.get_bool ('/system/http_proxy/use_http_proxy'):
dbg ('HACK: Mangling http_proxy')
if self.client.get_bool ('use_authentication'):
dbg ('HACK: Using proxy authentication')
value = 'http://%s:%s@%s:%s/'%(
self.client.get_string ('/system/http_proxy/authentication_user'),
self.client.get_string ('/system/http_proxy/authentication_password'),
self.client.get_string ('/system/http_proxy/host'),
self.client.get_int ('/system/http_proxy/port'))
else:
dbg ('HACK: Not using proxy authentication')
value = 'http://%s:%s/'%(
self.client.get_string ('/system/http_proxy/host'),
self.client.get_int ('/system/http_proxy/port'))
else:
value = self.client.get ('%s/%s'%(self.profile, key))
dbg ('VSGConf: preparing: %s/%s'%(self.profile, key))
value = self.client.get ('%s/%s'%(self.profile, key))
dbg ('VSGConf: getting: %s'%value)
if value: if value:
funcname = "get_" + self.defaults[key][0].__name__ funcname = "get_" + self.defaults[key].__class__.__name__
dbg (' GConf: picked function: %s'%funcname)
# Special case for str # Special case for str
if funcname == "get_str": if funcname == "get_str":
funcname = "get_string" funcname = "get_string"
# Special case for strlist
if funcname == "get_strlist":
funcname = "get_list"
typefunc = getattr (value, funcname) typefunc = getattr (value, funcname)
ret = typefunc () ret = typefunc ()
self.cache[key] = ret
return (ret) return (ret)
else: else:
raise (AttributeError) raise (AttributeError)
@ -230,4 +290,7 @@ if __name__ == '__main__':
print foo.titletips print foo.titletips
# This should raise AttributeError # This should raise AttributeError
print foo.blimnle #print foo.blimnle
# http_proxy is a value that is allowed to not exist
print "final proxy: %s"%foo.http_proxy

108
terminatorlib/encoding.py Normal file
View File

@ -0,0 +1,108 @@
#!/usr/bin/python
# TerminatorEncoding - charset encoding classes
# Copyright (C) 2006-2008 chantra@debuntu.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 2 only.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"""TerminatorEncoding by Emmanuel Bretelle <chantra@debuntu.org>
TerminatorEncoding supplies a list of possible encoding
values.
This list is taken from gnome-terminal's src/encoding.h
and src/encoding.c
"""
class TerminatorEncoding:
encodings = [
[True, None, _("Current Locale")],
[False, "ISO-8859-1", _("Western")],
[False, "ISO-8859-2", _("Central European")],
[False, "ISO-8859-3", _("South European") ],
[False, "ISO-8859-4", _("Baltic") ],
[False,"ISO-8859-5", _("Cyrillic") ],
[False, "ISO-8859-6", _("Arabic") ],
[False, "ISO-8859-7", _("Greek") ],
[False, "ISO-8859-8", _("Hebrew Visual") ],
[False, "ISO-8859-8-I", _("Hebrew") ],
[False, "ISO-8859-9", _("Turkish") ],
[False, "ISO-8859-10", _("Nordic") ],
[False, "ISO-8859-13", _("Baltic") ],
[False, "ISO-8859-14", _("Celtic") ],
[False, "ISO-8859-15", _("Western") ],
[False, "ISO-8859-16", _("Romanian") ],
[False, "UTF-7", _("Unicode") ],
[False, "UTF-8", _("Unicode") ],
[False, "UTF-16", _("Unicode") ],
[False, "UCS-2", _("Unicode") ],
[False, "UCS-4", _("Unicode") ],
[False, "ARMSCII-8", _("Armenian") ],
[False, "BIG5", _("Chinese Traditional") ],
[False, "BIG5-HKSCS", _("Chinese Traditional") ],
[False, "CP866", _("Cyrillic/Russian") ],
[False, "EUC-JP", _("Japanese") ],
[False, "EUC-KR", _("Korean") ],
[False, "EUC-TW", _("Chinese Traditional") ],
[False, "GB18030", _("Chinese Simplified") ],
[False, "GB2312", _("Chinese Simplified") ],
[False, "GBK", _("Chinese Simplified") ],
[False, "GEORGIAN-PS", _("Georgian") ],
[False, "HZ", _("Chinese Simplified") ],
[False, "IBM850", _("Western") ],
[False, "IBM852", _("Central European") ],
[False, "IBM855", _("Cyrillic") ],
[False, "IBM857", _("Turkish") ],
[False, "IBM862", _("Hebrew") ],
[False, "IBM864", _("Arabic") ],
[False, "ISO2022JP", _("Japanese") ],
[False, "ISO2022KR", _("Korean") ],
[False, "ISO-IR-111", _("Cyrillic") ],
[False, "JOHAB", _("Korean") ],
[False, "KOI8-R", _("Cyrillic") ],
[False, "KOI8-U", _("Cyrillic/Ukrainian") ],
[False, "MAC_ARABIC", _("Arabic") ],
[False, "MAC_CE", _("Central European") ],
[False, "MAC_CROATIAN", _("Croatian") ],
[False, "MAC-CYRILLIC", _("Cyrillic") ],
[False, "MAC_DEVANAGARI", _("Hindi") ],
[False, "MAC_FARSI", _("Persian") ],
[False, "MAC_GREEK", _("Greek") ],
[False, "MAC_GUJARATI", _("Gujarati") ],
[False, "MAC_GURMUKHI", _("Gurmukhi") ],
[False, "MAC_HEBREW", _("Hebrew") ],
[False, "MAC_ICELANDIC", _("Icelandic") ],
[False, "MAC_ROMAN", _("Western") ],
[False, "MAC_ROMANIAN", _("Romanian") ],
[False, "MAC_TURKISH", _("Turkish") ],
[False, "MAC_UKRAINIAN", _("Cyrillic/Ukrainian") ],
[False, "SHIFT-JIS", _("Japanese") ],
[False, "TCVN", _("Vietnamese") ],
[False, "TIS-620", _("Thai") ],
[False, "UHC", _("Korean") ],
[False, "VISCII", _("Vietnamese") ],
[False, "WINDOWS-1250", _("Central European") ],
[False, "WINDOWS-1251", _("Cyrillic") ],
[False, "WINDOWS-1252", _("Western") ],
[False, "WINDOWS-1253", _("Greek") ],
[False, "WINDOWS-1254", _("Turkish") ],
[False, "WINDOWS-1255", _("Hebrew") ],
[False, "WINDOWS-1256", _("Arabic") ],
[False, "WINDOWS-1257", _("Baltic") ],
[False, "WINDOWS-1258", _("Vietnamese") ]
]
def get_list():
return TerminatorEncoding.encodings
get_list = staticmethod(get_list)

83
terminatorlib/freebsd.py Normal file
View File

@ -0,0 +1,83 @@
#!/usr/local/bin/python
#
# Use sysctl() to retrieve the cwd of an arbitrary process on FreeBSD.
# Tested on FreeBSD 7-STABLE/amd64 from April 11 2008.
#
# Be prepared for excitement if the structs are changed.
#
# Blame: Thomas Hurst <tom@hur.st>
#
from ctypes import *
# This is padded awkwardly, see /usr/include/sys/socket.h
class sockaddr_storage(Structure):
_fields_ = [
('ss_len', c_char),
('ss_family', c_char), # /usr/include/sys/_types.h; _uint8_t
('__ss_pad1', c_char * 6), # (sizeof(int64) - sizeof(char) - sizeof(ss_family_t))
('__ss_align', c_longlong),
('__ss_pad2', c_char * 112), # (128(maxsize) - sizeof(char) - sizeof(ss_family_t) -
# sizeof(ss_pad1) - sizeof(int64))
]
# struct kinfo_file, defined in /usr/include/sys/user.h
class kinfo_file(Structure):
_fields_ = [
('kf_structsize', c_int),
('kf_type', c_int),
('kf_fd', c_int),
('kf_ref_count', c_int),
('kf_flags', c_int),
('kf_offset', c_long), # this is a off_t, a pointer
('kf_vnode_type', c_int),
('kf_sock_domain', c_int),
('kf_sock_type', c_int),
('kf_sock_protocol', c_int),
('kf_path', c_char * 1024), # PATH_MAX
('kf_sa_local', sockaddr_storage),
('kf_sa_peer', sockaddr_storage),
]
def get_process_cwd(pid):
libc = CDLL('libc.so')
len = c_uint(sizeof(c_uint))
ver = c_uint(0)
if (libc.sysctlbyname('kern.osreldate', byref(ver), byref(len), None, 0) < 0):
return None
# kern.proc.filedesc added for procstat(1) after these __FreeBSD_versions
if ver.value < 700104 and ver.value < 800019:
return None
# /usr/include/sys/sysctl.h
# CTL_KERN, KERN_PROC, KERN_PROC_FILEDESC
oid = (c_uint * 4)(1, 14, 14, pid)
if libc.sysctl(oid, 4, None, byref(len), None, 0) < 0:
return None
buf = c_char_p(" " * len.value)
if libc.sysctl(oid, 4, buf, byref(len), None, 0) < 0:
return None
kifs = cast(buf, POINTER(kinfo_file))
for i in range(0, len.value / sizeof(kinfo_file)):
kif = kifs[i]
if kif.kf_fd == -1: # KF_FD_TYPE_CWD
return kif.kf_path
if __name__ == '__main__':
import os, sys
print " => %d cwd = %s" % (os.getpid(), get_process_cwd(os.getpid()))
for pid in sys.argv:
try:
pid = int(pid)
except:
pass
else:
print " => %d cwd = %s" % (pid, get_process_cwd(pid))