Iššokstantis terminalo langas bet kurioje vietoje.

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:

  1. #!/usr/bin/env python
  2.  
  3. import os
  4. import gtk, wnck
  5. import time; from datetime import datetime
  6. from deskbar.core.keybinder._keybinder import tomboy_keybinder_bind as bindkey
  7.  
  8.  
  9. class QTerm:
  10.  
  11.     window = None
  12.  
  13.     def __init__(self, pid):
  14.         self.pid = pid
  15.         self.screen = wnck.screen_get_default()
  16.         self.watch_handler = self.screen.connect('window-opened', self.watchWindow)
  17.  
  18.     def watchWindow(self, screen, window):
  19.         if window.get_pid() == self.pid:
  20.             self.window = window
  21.  
  22.             swidth = self.screen.get_width()
  23.             width = swidth - (swidth / 10)
  24.             height = 400
  25.             x = (swidth/10)/2
  26.             y = 0
  27.             self.window.set_geometry(wnck.WINDOW_GRAVITY_CURRENT, \
  28.                     wnck.WINDOW_CHANGE_X|wnck.WINDOW_CHANGE_Y|wnck.WINDOW_CHANGE_WIDTH|wnck.WINDOW_CHANGE_HEIGHT, \
  29.                     x, y, width, height)
  30.  
  31.             self.screen.disconnect(self.watch_handler)
  32.  
  33.     def getTimestamp(self):
  34.         return int(time.mktime(datetime.now().timetuple()))
  35.  
  36.     def onHotKeyPress(self):
  37.         if self.window:
  38.             if (self.window.is_active()):
  39.                 self.window.minimize()
  40.             else:
  41.                 self.window.activate(self.getTimestamp())
  42.         else:
  43.             print "Terminal window not found."
  44.  
  45.  
  46. if __name__ == '__main__':
  47.     pid = os.fork()
  48.     if pid == 0:
  49.         os.execlp('xterm', '')
  50.     else:
  51.         qterm = QTerm(pid)
  52.         bindkey("<Alt>grave", qterm.onHotKeyPress)
  53.         try:
  54.             gtk.main()
  55.         except (KeyboardInterrupt, SystemExit):
  56.             pass
  57.  

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 Grave (Alt + `), su tais pačiais klavišais galima ir iškviesti.

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

Anonymous portretas

Skaitai mano mintis, pats

Skaitai mano mintis, pats galvojau apie tokią idėją. Good work!

Anonymous portretas

dar labai liux, būtų, jei

dar labai liux, būtų, jei jis nesimatytų task bare :>

sirex portretas

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.

Anonymous portretas

o kuo netinka compiz su savo

o kuo netinka compiz su savo customize shortkutais ir fixed window placement?

sirex portretas

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.

Anonymous portretas

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

sirex portretas

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ą

Šio laukelio turinys bus laikomas privatus ir nerodomas viešai. If you have a Gravatar account, used to display your avatar.
  • Leidžiamos HTML žymės: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Linijos ir paragrafai atskiriami automatiškai
  • Web puslapiu adresai ir el. pašto adresai automatiškai tampa nuorodomis.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

Daugiau informacijos apie teksto formatavimą

CAPTCHA
Šis klausimas skirtas patikrinti ar esi žmogus, taip apsisaugant nuo internetinių reklamos robotų.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.
Surinktas turinys