There, aprire qui il terminale

OK, pessimo gioco di parole tra terminale e here ;-)
Ma adesso vi racconto e poi mi direte.
Tutto nasce dal fatto che per i programmi che girano nel terminale spesso, anzi praticamente sempre, bisogna portarsi in una certa directory.
Con Ctrl + Alt + T si apre il terminale, se non c’è il lanciatore sempre visibile nella barra dei lanciatori, sì sto parlando di Ubuntu con Unity.
Il problema è che il terminale si apre nella tua home, quella che ottieni con


A questo punto sono necessari un certo numero variabile di cd con argomenti che cambiano di volta in volta e che bisogna sapere. Vero che, secondo la nostra convenzione il primo comando è sempre (quasi) cd lavori ma poi …
Intanto puoi elencare la lista on ls e poi la shell è volenterosa, ti aiuta, basta scriverne quel tanto che sia chiaro dove vuoi andare:


a questo punto premi tab e ottieni


e con invio l’operazione è conclusa. A meno che devi entrare in una sotto-directory.

Boring Noioso vero? I vecchi e gli smanettoni usano J / Autojump, io gli ho dedicato un paio di post, questo e questo.
Ma non si può fare qualcosa nell’ambiente a finestre, come siamo abituati? Cerrrto! ecco there.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
import sys
import os

def processa(cosa):
    if not os.path.isdir(cosa):
        cosa, tail = os.path.split(cosa)
    cmd = 'gnome-terminal --working-directory="' + cosa + '" &'
    res = os.system(cmd)

class FileDrop(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = MyFrame

    def OnDropFiles(self, x, y, filenames):
        processa(cosa = filenames[0])

class MyFrame(wx.Frame):
	def __init__(self, parent, id):
		global dirp
		wx.Frame.__init__(self, parent, id,
		    size = (150, 100), pos = (1076, 75),
		    title = "there", style = wx.CAPTION | wx.CLOSE_BOX)

		dirp = os.path.dirname(os.path.abspath(sys.argv[0]))

		self.bitmap = wx.Bitmap(dirp + os.sep + 'there.png')
		wx.EVT_PAINT(self, self.OnPaint)

		dt = FileDrop(self)
		self.SetDropTarget(dt)

	def OnPaint(self, event):
		dc = wx.PaintDC(self)
		dc.DrawBitmap(self.bitmap, 1, 1)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1)
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

app = MyApp()
app.MainLoop()

Un paio di note: la finestra viene visualizzata nella posizione indicata da pos = (x, y), nel mio caso 1076, 75. Nella stessa directory dove si trova lo script dev’essere presente l’immagine there.png, io uso questa


Lo script dev’essere abilitato per l’esecuzione o attraverso Tasto destro sul nome / proprietà e selezionare Consentire l’esecuzione del file come programma o in alternativa da terminale chmod +x there.py (vedi che da terminale è mooolto più mooi?).

OK, a questo punto se non ci sono stati inghippi si può fare:


(sì, ho barato, ho spostato la finestra di there).
A questo punto possiamo aprire il terminale nella directory che vogliamo, con l’aiuto di Nautilus, basta trascinare (draggare) la cartella (sì lo so che la chiamate così) che volete e dropparla su there:

Se invece di operare con una cartella trasciniamo un file si aprirà la cartella che contiene il file, ovviamente.

Per completare il lavoro non resta che creare il lanciatore.

Basta creare un file con il nome di there.desktop e copiarci dentro questo testo

[Desktop Entry]
Name=there
GenericName=there
Comment=Apre There
Exec=/home/juhan/lab/OKp/lug/there/there.py
Icon=/home/juhan/lab/OKp/lug/there/i-there.png
Terminal=false
Type=Application
NotShowIn=GNOME;
X-Ubuntu-Gettext-Domain=synaptic

Attenzione che appena salvato il nome con sui sarà visibile cambierà in there. Serve inoltre l’icona i-there.png, come quella qui sopra. Inoltre dovete aggiornare le righe 5 e 6, a meno che abbiate avuto l’ottima idea di impostare come utente juhan e usare le mie stesse directories. Il file there (cioè there.desktop) va abilitato per l’esecuzione, certo.

Adesso possiamo farci doppio click e lo abbiamo sulla barra di Unity, con un click con il tasto destro possiamo bloccarlo sulla barra.
Certe cose si fa prima a farle che a raccontarle, questa è una di quelle.

Uh! ancora una cosa: tutto questo funziona se le finestre non sono a pieno schermo, come piacciono ai miei collaboratori. Esiste però una scorciatoia molto comoda: con Ctrl + Alt + 5 (sul tastierino numerico) si switcha da maximized a normal; certo non funziona con i portatili, spheega.

About these ads
Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • D4n13le  Il 07/17/2012 alle 13:34

    Qualcosa di simile (e non me lo volere, ma lo trovo più pratico della tua soluzione) lo fa questo pacchetto: nautilus-open-terminal
    Resta il fatto che è interessante vedere com’è facile usare python per risolvere problemi pratici :)

  • glipari  Il 07/17/2012 alle 16:54

    Non vorrei dire, ma con dolphin basta premere F4.

    Comunque ottimo post! Ti copierò la tecnica del drag&drop per fare altro :) (per non parlare del launcher!)

  • al3hex  Il 09/19/2012 alle 12:49

    Ecco there in Qt4, GTK+ 2 e GTK+ 3 :)
    * there-qt4: http://pastebin.com/gSM79Dat
    * there-gtk2: http://pastebin.com/v28JBCgc
    * there-gtk3: http://pastebin.com/5R9dpg4U

Trackback

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 37 follower

%d bloggers like this: