Kadangi labai dažnai naudojuosi komandine eilute, tai labai patogu, kai terminalo langas visada po ranka. Tam labai tinka Quake tipo terminalo langas, kuris išvažiuoja iš ekrano viršaus paspaudus tam tikrą klavišų kombinaciją. Gnome turi kažką panašaus – Tilda, tačiau paskutiniu metu Tilda veikia labai sunkiai, nuolat segmentuoja, lūžinėja ir t.t.
Neapsikentęs sugalvojau padaryti kažką panašaus, į pagalbą vėl gi pasitelkiau Python ir padariau tokią labai primityvią programikę, kurios pagrindinė paskirtis – parodyti terminalo langą paspaudus tam tikrą klavišų kombinaciją. Patalpinau programikę į launchpad.net. Taip pat žemiau pateikiu kodą, kadangi jo nėra labai daug:
-
#!/usr/bin/env python
-
-
import os
-
import gtk, wnck
-
import time; from datetime import datetime
-
from deskbar.core.keybinder._keybinder import tomboy_keybinder_bind as bindkey
-
-
-
class QTerm:
-
-
window = None
-
-
def __init__(self, pid):
-
self.pid = pid
-
self.screen = wnck.screen_get_default()
-
self.watch_handler = self.screen.connect('window-opened', self.watchWindow)
-
-
def watchWindow(self, screen, window):
-
if window.get_pid() == self.pid:
-
self.window = window
-
-
swidth = self.screen.get_width()
-
width = swidth - (swidth / 10)
-
height = 400
-
x = (swidth/10)/2
-
y = 0
-
self.window.set_geometry(wnck.WINDOW_GRAVITY_CURRENT, \
-
wnck.WINDOW_CHANGE_X|wnck.WINDOW_CHANGE_Y|wnck.WINDOW_CHANGE_WIDTH|wnck.WINDOW_CHANGE_HEIGHT, \
-
x, y, width, height)
-
-
self.screen.disconnect(self.watch_handler)
-
-
def getTimestamp(self):
-
return int(time.mktime(datetime.now().timetuple()))
-
-
def onHotKeyPress(self):
-
if self.window:
-
if (self.window.is_active()):
-
self.window.minimize()
-
else:
-
self.window.activate(self.getTimestamp())
-
else:
-
print "Terminal window not found."
-
-
-
if __name__ == '__main__':
-
pid = os.fork()
-
if pid == 0:
-
os.execlp('xterm', '')
-
else:
-
qterm = QTerm(pid)
-
bindkey("<Alt>grave", qterm.onHotKeyPress)
-
try:
-
gtk.main()
-
except (KeyboardInterrupt, SystemExit):
-
pass
-
Kad paleisti galima išsaugoti kodą į kokį nors failą ir jį paleisti su python. Kaip programa bus paleista, turėtu iššokti XTerm langas. Jį paslėpti galima su
Teoriškai vietoje XTerm galima naudoti bet kokį kitą terminalą, taip pat galima pasikeisti ir klavišų kombinaciją. Keičiant terminalą reikia atminti, kad terminalo lango PID turi sutapti su forkinto proceso PID, pavyzdžiui gnome-terminal pats fokinasi, todėl lango PID būna kotoks ir klavišų kombinacija neveikia.
Kad būtų pilnas komplektas, siūlau dar parsisiųsti puikią Zenburn spalvų temą XTermui. Kadangi Zenburn spalvų tema brockman.se serveryje yra kiek pasenus reikia į failo pabaigą įdėti tokias eilutes:
*VT100*foreground: #dcdccc *VT100*background: #3f3f3f *VT100*color0: #3f3f3f *VT100*color1: #705050 *VT100*color2: #60b48a *VT100*color3: #dfaf8f *VT100*color4: #506070 *VT100*color5: #dc8cc3 *VT100*color6: #8cd0d3 *VT100*color7: #dcdccc *VT100*color8: #709080 *VT100*color9: #dca3a3 *VT100*color10: #c3bf9f *VT100*color11: #f0dfaf *VT100*color12: #94bff3 *VT100*color13: #ec93d3 *VT100*color14: #93e0e3 *VT100*color15: #ffffff
Ir tada viskas veiks tiesiog nepriekaištingai.
Komentarai
Skaitai mano mintis, pats
Skaitai mano mintis, pats galvojau apie tokią idėją. Good work!
dar labai liux, būtų, jei
dar labai liux, būtų, jei jis nesimatytų task bare :>
Labai paprasta tai padaryti,
Labai paprasta tai padaryti, tiesiog reikia iškviesti funkciją self.window.set_skip_tasklist(True).
Pas mane vietoje taskbaro yra avant-window-navigator, tai man net gi patogiau, kai terminalas atsiranda taskbare.
o kuo netinka compiz su savo
o kuo netinka compiz su savo customize shortkutais ir fixed window placement?
Nemanau, kad su Compiz
Nemanau, kad su Compiz shortkutais visą tai galima padaryti, nes reikia ne tik kad paleisti xterm, bet kai jis jau paleistas valdyti jo lango būkle, t.y., jei xterm šiuo metu yra aktyvus, tai jis turėtu būti sumažintas, jei jis yra sumažintas, tai turi iššokti, o jei jis paprasčiausiai slepiasi už kitų langų, tai turi iššokti į priekį. Na ir žinoma labai nesunkiai galima pasidaryti daug daugiau.
Nedidelis code review,
Nedidelis code review, kadangi jau ruošiesi atstovauti mūsų kalbą konkurse :)
5 eilutė: kabliataškis yra žiaurus PEP-8 pažeidimas. Kiekvienam importui po vieną eilutę. Eilute aukščiau du moduliai per kablelį taip pat nerekomenduotini.
27, 28 eilutėse backslashų gale nereik. Be to, aš suskaldyčiau ilgą flagų sąrašą į kelias eilutes, kad tilpčiau į 80 stulpelių.
30 eilutė: atrodo, tu turėjai omeny int(time.time()).
O šiaip tai gražus darbelis, neįsivaizdavau, kad toks lowlevelis pasiekiamas iš prieinamų bibliokekų. Cheers!
Albertas
Tai kad nežinia ar pavyks
Tai kad nežinia ar pavyks dalyvauti, nes nesusidaro Python komanda, kurioje reikia 3 žmonių, kol kas, be manęs atsirado tik vienas. Tikriausiai Lietuvoje yra per mažai Python programuotojų.
Skelbti naują komentarą