Opções de linha de comando (muito) limitadas do nautilus
Infelizmente, o nautilus não oferece opções de linha de comando para ler o diretório aberto de suas janelas, nem tem qualquer opção para enviar uma janela existente para outro diretório. Como você não consegue lembrar o que não vê, estamos ficando sem opções à primeira vista.
No entanto
Temos xdotool
, não fazer o que nautilus
não faz, mas pelo menos falsificar o comportamento que você descreve. Podemos fazer isso de tal maneira que "você acreditaria" se não soubesse como isso é feito.
Embora a solução abaixo não sobreviva a uma reinicialização, a janela "lembrando" (possivelmente com abas) e todos os diretórios abertos é muito bem possível dentro de uma sessão. Desde que você mencionou estar interessado nisso como uma "segunda escolha", aqui está.
Como funciona; o processo
Embora não possamos fechar uma janela e preservar suas guias e abrir diretórios, podemos fazer com que uma janela existente desapareça (e completamente), com a ajuda de xdotool
.
Se, posteriormente, alterarmos o comportamento do nautilus
launcher de modo que primeiro procure possíveis janelas não mapeadas para remapear, antes de abrir um novo, efetivamente temos exatamente o mesmo comportamento como se nautilus
se lembrasse da (s) última (s) janela (s) usada (s).
Como configurar
-
Copie o script abaixo em um arquivo vazio, salve-o como
remember.py
#!/usr/bin/env python3 import subprocess import os app = "nautilus" wfile = os.environ["HOME"]+"/.unmapped_"+app def get(cmd): # simply a helper function return subprocess.check_output(cmd).decode("utf-8").strip() def check_windowtype(w_id): # check the type of window; only unmap "NORMAL" windows return "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", w_id]) def get_pid(app): # (try to) get the pid of the application try: return get(["pgrep", app]) except subprocess.CalledProcessError: pass def get_matches(pid): # get the window list, select the valid (real) app's windows ws = get(["wmctrl", "-lpG"]).splitlines() matches = [w.split() for w in ws if pid in w] return [w for w in matches if check_windowtype(w[0]) == True] try: # try to read the file with unmapped windows wininf = [l.split() for l in open(wfile).readlines()] except FileNotFoundError: # if there are no, unmap the current app's windows filebrowserwins = get_matches(get_pid(app)) if filebrowserwins: open(wfile, "wt").write(("\n").join((" ").join(l) for l in filebrowserwins)) for w in [w[0] for w in filebrowserwins]: subprocess.Popen(["xdotool", "windowunmap", w]) else: arg = "--new-window" if app == "nautilus" else "" subprocess.Popen([app, arg]) else: # re- map unmapped windows for w in wininf: wid = w[0]; geo = w[3:7] subprocess.call(["xdotool", "windowmap", wid]) subprocess.Popen(["wmctrl", "-ir", wid, "-e", "0,"+(",").join(geo)]) os.remove(wfile)
-
O script precisa dos dois
wmctrl
exdotool
:sudo apt-get install wmctrl xdotool
-
Copie o iniciador
nautilus
de/usr/share/applications
para~/.local/share/applications
para 15.04 e posterior:
cp /usr/share/applications/org.gnome.Nautilus.desktop ~/.local/share/applications
para versões anteriores do Ubuntu:
cp /usr/share/applications/nautilus.desktop ~/.local/share/applications
-
abra a cópia local com o gedit:
gedit ~/.local/share/applications/org.gnome.Nautilus.desktop
(no caso de
15.04 +
)e procure a linha primeiro , começando com
Exec=
. Mude para:Exec=python3 /path/to/remember.py
Salve e feche o arquivo.
-
Crie um atalho de teclado com o mesmo comando: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
python3 /path/to/remember.py
-
Agora efetue logout e volte em
Como usar
O uso é muito simples:
-
Para abrir uma janela, faça como de costume: clique no lançador nautilus. Aba a janela como você gosta:
Parafecharumajaneladefinitivamente,feche-aclicandonacaixa"fechar" da janela ( x ).
-
Para preservar a (s) janela (s) + todas as suas guias:
pressione a tecla de atalho. A (s) janela (s) desaparecerão (aparentemente próximas). Dapróximavezquevocêclicarnolançador,asjanelasdonautilusaparecerãoexatamentecomonaúltimavez,atéa(s)posição(ões)dajanelaserápreservada.
Éisso
Nota
- Nostestesqueexecutei,nãoconseguiencontrarnenhumdown(14.04).Sevocêspodesedepararcomqualquer,porfavormencione!
- NaseçãoComousar,sugericlicarnoíconedonautiluspararemapearpossíveisjanelasnãomapeadas.Noentanto,atecladeatalhofaráomesmo,paraquevocêpossaveroquefuncionadamaneiramaisconvenienteparavocê.Alémdisso,sevocêabrirumapastaclicandoduasvezesemapósvocênãotermapeadoemoumaispastas,aspastasnãomapeadasaindaserãoremapeadaspeloatalho.
EDITAR:
UsuáriosdoNemo
OsusuáriosdoNemotambémpodemusarasoluçãoacima,mas:
Naseçãoprincipaldoscript,altere:
app="nautilus"
para:
app = "nemo"
-
No ponto 3, use:
cp /usr/share/applications/nemo.desktop ~/.local/share/applications
-
No ponto 4, use:
gedit ~/.local/share/applications/nemo.desktop
Testado, provou estar trabalhando com o nemo