A solução mais limpa seria, claro, editar o código de gedit
. Como isso parece fora de alcance, a solução abaixo é uma solução alternativa.
Se a informação do caminho dos arquivos gedit usados recentemente é importante para você, a solução pode ser usada como uma substituição da visão geral "recentemente usada" do próprio gedit. Ele fornece as informações, exatamente como aparecem na barra de título da janela gedit
, dos últimos dez arquivos usados.
Existede:
- umscriptdeplanodefundo(muitoclaro),acompanhandoosarquivos
gedit
possivelmenteabertos - umscriptparachamarumalistadosarquivosusadosmaisrecentemente.
Bastaexecutaroscript[1]
emsegundoplano,colocaroscript[2]
emumatecladeatalhoouadicioná-locomoumatalhoparaalistarápidadogedit
launcher.
Oresultado:
Comoconfigurar
Aconfiguraçãoprecisadewmctrl
paraserinstalada:
sudoapt-getwmctrl
Então:
Copieoscriptabaixo(
[1]
)emumarquivovazio,salve-ocomoget_latestgedit.py
#!/usr/bin/env python3 import subprocess import os import time import socket f = os.environ["HOME"]+"/.latest_gedit.txt" n = 10 def get(): try: pid = subprocess.check_output(["pidof", "gedit"]).decode("utf-8").strip() gedit_w =subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8") matches = [l.split(socket.gethostname())[1] for l in gedit_w.splitlines() if all( [pid in l, "~" in l or "/" in l])] return matches except: return [] gedit_windows1 = get() try: latest = open(f).read().splitlines() except FileNotFoundError: latest = [] while True: time.sleep(5) gedit_windows2 = get() new = [w for w in gedit_windows2 if not w in gedit_windows1] if len(new) != 0: for w in [w for w in gedit_windows2 if not w in gedit_windows1]: try: latest.remove(w) except ValueError: pass latest.append(w) if len(latest) > n: latest = latest[(len(latest) - n):] with open(f, "wt") as out: for item in latest: out.write(item+"\n") gedit_windows1 = gedit_windows2
-
Copie o script abaixo em um arquivo vazio, salve-o como
get_geditlist.py
:#!/usr/bin/env python3 import subprocess import os import sys f = os.environ["HOME"]+"/.latest_gedit.txt" try: ws = open(f).read().splitlines()[::-1] except FileNotFoundError: open(f, "wt").write("") try: cmd = 'zenity --list --title="Choose"'+ \ ' --text ""'+ \ ' --column="Latest opened" '+\ (" ").join(['"'+s.strip()+'"' for s in ws]) to_open = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("|")[0] path = to_open[to_open.find("(")+1: to_open.find(")")].strip()+"/"+to_open[:to_open.find("(")].strip() sections = [s for s in (path.split("/"))] for i, it in enumerate(sections): if it.count(" ") != 0: sections[i] = '"'+it+'"' path = ("/").join(sections) command = "gedit "+path subprocess.Popen(["/bin/bash", "-c", command]) except subprocess.CalledProcessError: pass
-
Abra uma janela de terminal, o script da unidade de teste
[1]
com o comando:python3 /path/to/get_latestgedit.py
Enquanto o script é executado, abra alguns arquivos
gedit
existentes, deixe-os abertos por pelo menos 5-10 segundos (o tempo de quebra do loop). Agora execute o script de execução de teste[2]
com o comando (de outro terminal) com o comando:python3 /path/to/get_geditlist.py
Os arquivos
gedit
mais recentes devem aparecer, conforme mostrado na imagem. -
Se tudo funcionar bem, adicione o script
[1]
aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:python3 /path/to/get_latestgedit.py
e adicione o script
[2]
a uma tecla de atalho: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:/bin/bash -c "sleep 10&&python3 /path/to/get_geditlist.py"
Ou ,
adicione-o como um item de lista rápida ao seu
gedit
launcher, como mostra a imagem:Copieo
gedit
launcherde/usr/share/applicationsto
~/.local/share/applications':cp/usr/share/applications/gedit.desktop~/.local/share/applications
Abraacópialocalem
gedit
:gedit~/.local/share/applications/gedit.desktop
Procurealinha:
Actions=Window;Document;
alterepara:
Actions=Window;Document;Recentlyused;
Atéofinal,adicioneumaseçãoaoarquivo:
[DesktopActionRecentlyused]Name=RecentlyusedExec=python3/path/to/get_geditlist.pyOnlyShowIn=Unity;
Claro,substitua
python3/path/to/get_geditlist.py
pelocaminhorealparaoscript[2]
Explicação
Verificaçõesdoscript[1]
(umavezporcincosegundos):
- se
gedit
janelasforemabertas,verificandosepidofgedit
temumasaídaválida.Então,seassimfor: - verificaseopidde
gedit
ocorreemumaoumaislinhasnasaídadewmctrl-lp
.Emcasoafirmativo,filtraaslinhas,nãocontendoumcaminhoválidoentre"(" e ")", uma vez que essas janelas não são de arquivos salvos . - As janelas restantes são adicionadas a uma lista de janelas usadas recentemente. Se a janela (o arquivo) já ocorrer na lista, sua posição cronológica será atualizada. Além disso, o script exclui todas as janelas (mais antigas) quando a lista excede um comprimento de dez (janelas).
Se a lista de janelas usadas recentemente for alterada, a lista será gravada em um arquivo oculto no diretório home
.
O script [2]
lê o arquivo oculto, criado e atualizado por scrip1 [1]
. Quando chamado:
- o script lê as linhas no arquivo oculto, contendo os títulos da janela.
- dos títulos, o caminho é analisado e os títulos das janelas aparecem em uma lista
Zenity
. - Se o usuário escolher uma janela da lista, o caminho para o arquivo é "fixo" para espaços possivelmente ocorrentes no caminho ou no nome do arquivo, subseqüentemente o arquivo é aberto com
gedit
.