Como posso abrir o thunar para que ele selecione um arquivo específico?

4

Como no título. No Windows, posso fazer isso:

explorer /select,"C:\folder\file.txt"

que resultará na abertura de explorer.exe , que abrirá imediatamente C:\folder e selecionará file.txt .

Eu acredito que o ROX também tinha essa funcionalidade.

Posso fazer o mesmo com o thunar?

    
por rr- 08.05.2015 / 15:20

3 respostas

4

Com um pouco de escavação, descobri que isso é possível usando o D-Bus:

#!/usr/bin/env python
import dbus
import os
import sys
import urlparse
import urllib


bus = dbus.SessionBus()
obj = bus.get_object('org.xfce.Thunar', '/org/xfce/FileManager')
iface = dbus.Interface(obj, 'org.xfce.FileManager')

_thunar_display_folder = iface.get_dbus_method('DisplayFolder')
_thunar_display_folder_and_select = iface.get_dbus_method('DisplayFolderAndSelect')


def display_folder(uri, display='', startup_id=''):
    _thunar_display_folder(uri, display, startup_id)


def display_folder_and_select(uri, filename, display='', startup_id=''):
    _thunar_display_folder_and_select(uri, filename, display, startup_id)


def path_to_url(path):
    return urlparse.urljoin('file:', urllib.pathname2url(path))


def url_to_path(url):
    return urlparse.urlparse(url).path


def main(args):
    path = args[1]  # May be a path (from cmdline) or a file:// URL (from OS)
    path = url_to_path(path)
    path = os.path.realpath(path)
    url = path_to_url(path)

    if os.path.isfile(path):
        dirname = os.path.dirname(url)
        filename = os.path.basename(url)
        display_folder_and_select(dirname, filename)
    else:
        display_folder(url)


if __name__ == '__main__':
    main(sys.argv)

Execute com:

$ ./thunar-open-file.py /home/user/myfile.txt

E ainda vai abrir uma pasta, se você passar isso:

$ ./thunar-open-file.py /home/user/

    
por 01.02.2017 / 21:24
2

Com as opções de linha de comando incorporadas do thunar, você não pode. Se você vir man thunar , verá que só pode abrir uma pasta dessa maneira, mas não poderá pré-selecionar um arquivo nela.

Isso significa que você não pode fazer nada?

Felizmente, não, mas você precisará de ajuda de programas externos. Um exemplo que faz isso usando xdotool para enviar ctrl+s e digitar filename (que efetivamente irá selecioná-lo):

#!/bin/sh
file=$1
[ -z "$file" ]; then
    echo 'No file selected' 1>&2
    exit 1
fi

if [[ ! $(command -v thunar) ]]; then
    echo 'Thunar is not installed' 1>&2
    exit 1
fi

if [ -d "$file" ]; then
    thunar "$file" &
else
    if [ ! -f "$file" ]; then
        echo 'File does not exist' 1>&2
        exit 1
    fi

    if [[ ! $(command -v xdotool) ]]; then
        echo 'Xdotool is not installed' 1>&2
        exit 1
    fi

    set -e #exit on any error
    thunar "$(dirname "$file")" &
    window_id='xdotool search --sync --onlyvisible --class 'Thunar' | head -n1'
    xdotool key --clearmodifiers 'ctrl+s'
    xdotool type "$(basename "$file")"
    xdotool key Return
fi

Uso: script /path/to/file-or-folder

Existem duas ressalvas:

  1. Você notará um ligeiro atraso devido a xdotool --sync , mas acredito que seja aceitável.
  2. Isso não funcionará com arquivos ocultos no Thunar por algum motivo, como arquivos de pontos.
por 08.05.2015 / 15:20
0

Criando respostas de theY4Kman , é assim que é feito sem o Python:

dbus-send --type=method_call --dest=org.xfce.Thunar /org/xfce/FileManager org.xfce.FileManager.DisplayFolderAndSelect string:"/home/user/Downloads" string:"File.txt" string:"" string:""

A única ressalva é que você precisa separar o caminho da pasta e o nome do arquivo.

    
por 18.04.2019 / 10:41

Tags