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.

Commenti
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
Forse hai ragione. In realtà prima io usavo quello.
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!)
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
[...] Resta invece disperso l’Apri nel terminale, chissà se riuscirò a trovarlo nascosto da qualche parte. Per adesso ho ripristinato la mia versione, there. [...]