Qual é o comando para abrir um diretório específico em uma nova aba no nautilus?

1

Eu quero criar um arquivo .desktop que abra uma pasta no meu gerenciador de arquivos padrão em uma nova guia. Para testar se ele abriu o local certo, tentei nautilus ~/*folder* . Isso abre meu gerenciador de arquivos, mas diz que algo deu errado. O mesmo acontece quando eu uso nautilus /home/*username*/*folder* . Qual comando posso usar para abrir uma pasta específica em casa em uma nova guia a partir de um arquivo .desktop ?

Meu objetivo é ter um ícone no meu dock (prancha) que abra o mapa ~ / Downloads em uma nova guia no Nautilus.

    
por Maud Kon 25.05.2015 / 18:46

2 respostas

3

EDITAR:

Como resultado da percepção contínua, abaixo de uma versão aprimorada do script.

Devido ao fato de que o script agora cola o caminho em vez de digitar (usando xdotool ), o script é mais confiável. Embora o script não seja realmente mais rápido (considere uma solução alternativa, devido à falta de cli options do nautilus), o script "parece" mais "crocante". Fato permanece no entanto que o script simplesmente precisa esperar que a GUI esteja pronta para cada próxima etapa, pois simula as ações do usuário. O tempo dentro do script está no lado de salvamento; em sistemas mais rápidos, pode-se conseguir alguma otimização.

Use o script exatamente como explicado na resposta original; ele (ainda) precisa dos doiswmctrl e xdotool a serem instalados. Esta versão também exige xclip :

sudo apt-get install xclip

A nova versão do script:

#!/usr/bin/env python3
import subprocess
import sys
import time

arg = sys.argv[1:]
arg = arg[0] if arg else ""

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

try:
    pid = get(["pidof", "nautilus"])
except subprocess.CalledProcessError:
    wlist = []    
else:
    wlist = [l for l in get(["wmctrl", "-lp"]).splitlines() if pid in l\
             and "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", l.split()[0]])]

if wlist:
    w = wlist[-1].split()[0]
    subprocess.call(["wmctrl", "-ia", w])
    subprocess.call(["/bin/bash", "-c", "printf '"+arg+"' | xclip -selection clipboard"])
    subprocess.Popen(["xdotool", "key", "Control_L+t"])
    time.sleep(0.4)
    subprocess.Popen(["xdotool", "key", "Control_L+l"])
    time.sleep(0.2)
    subprocess.call(["xdotool", "key", "Control_L+v"])
    subprocess.Popen(["xdotool", "key", "Return"])

else:
    subprocess.Popen(["nautilus", arg])


Resposta antiga:

O Nautilus não tem uma opção de linha de comando para abrir uma nova guia, no entanto, você pode "falsificá-lo" com a ajuda de um script, usando xdotool e wmctrl .

Como usar

  1. Instale (se necessário) wmctrl e xdotool :

    sudo apt-get install xdotool wmctrl
    
  2. Copie o script abaixo em um arquivo vazio, salve-o como nautilus_tab (sem extensão) em ~/bin e torne-o executável .
    Se o diretório ~/bin ainda não existir, crie-o e execute source ~/.profile para tornar o diretório "show up" em $PATH . (ou alternativamente, sair / in)

  3. Teste-o executando o comando:

    nautilus_tab <directory>
    

    Deve:

    • se nenhuma janela do nautilus estiver aberta, abra uma nova janela do nautilus no diretório
    • se uma janela estiver aberta , abra uma nova guia no diretório

O script

#!/usr/bin/env python3
import subprocess
import time
import sys

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
    subprocess.call(cmd)

try:
    arg = sys.argv[1]
except:
    arg = ""

try:
    pid = get(["pidof", "nautilus"]).strip()
except subprocess.CalledProcessError:
    run(["nautilus ", arg])
else:
    w = [l.split() for l in get(["wmctrl", "-lp"]).splitlines() if pid in l][-1]
    print(w)
    w_id = w[0]   
    if len([l for l in get(["xprop", "-id", w_id]).splitlines() if all(
        ["_NET_WM_WINDOW_TYPE(ATOM)" in l, "_TYPE_NORMAL" in l])]) != 0:
        run(["wmctrl", "-ia", w[0]]); time.sleep(0.1)
        run(["xdotool", "key", "Control_L+t"])
        if arg != "":
            run(["xdotool", "key", "Control_L+l"])
            time.sleep(0.2)
            run(["xdotool", "type", arg])
            time.sleep(0.02*len(arg))
            run(["xdotool", "key", "Return"])
    else:
        run(["nautilus", arg])

Notas

  • O script é uma solução alternativa para simular ações do usuário. Como resultado, o tempo "dentro" do script é importante. Configurei o tempo para valores "seguros" no meu sistema e tornei-o "inteligente", se possível. Se não funcionar corretamente no seu sistema, deixe um comentário.
  • O script possivelmente será interrompido se a janela de segmentação (para adicionar a guia) estiver em outra área de trabalho
  • No caso de diretórios com espaços, use aspas:

    nautilus_tab '</directory/with spaces>'
    

Se nenhum argumento (-directory) for usado, o script abrirá uma nova guia no mesmo diretório que a janela nautilus atualmente aberta. Se nenhuma janela 'nautilus' foi aberta, uma nova janela será aberta em seu diretório pessoal.

    
por Jacob Vlijm 26.05.2015 / 09:01
-1

(Esses sites me enlouquecem com seus requisitos estranhos - isso deve ser um comentário, mas eu não tenho reputação suficiente e esse tipo de bobagem não me incentiva a consegui-lo!)

A resposta de Jacob não funciona para caminhos com espaços. Isso requer duas mudanças ...

run("nautilus "+arg)
run('nautilus "'+arg+'"')

run("xdotool type "+arg)
run('xdotool type "'+arg+'"')

Mas eu corri com o Thunar e ele não interpreta ~ well. Por exemplo. thunar-tab.py "~/Documents" produzirá um erro que /home/user/~/Documents não pode ser encontrado. Você tem que chamá-lo com um caminho explícito.

    
por Moilleadóir 17.02.2016 / 03:39