Buka direktori di manajer file default dan pilih file

9

Dalam sebuah program yang saya tulis, saya ingin menawarkan fungsionalitas untuk membuka direktori tempat file yang sedang saya proses berada dan secara otomatis memilih file itu (sehingga pengguna tidak perlu mencarinya).

Saya tahu bahwa saya dapat membuka direktori menggunakan file manager default

xdg-open /path/to/directory

Saya tahu bahwa saya dapat membuka direktori di nautilus dan memilih file menggunakan

nautilus /path/to/file.txt

Saya pikir saya bisa menggunakannya

xdg-mime query default inode/directory

untuk mendapatkan manajer file default dan - jika nautilus - panggil seperti yang ditunjukkan di atas. Tapi, terlepas dari kenyataan bahwa nautilus adalah default pada sistem saya ( xdg-openmembuka nautilus dan begitu juga menu tempat di shell gnome), xdg-mimekembali Thunar.desktop. (Saya sudah mencoba find / -name Thunar.desktop -mount 2>/dev/nulltetapi tidak menemukan apa pun.)

Juga, saya tidak tahu cara membuka direktori dan memilih sub direktori di nautilus (dengan pendekatan yang disebutkan di atas akan membuka subdirektori).

Bagaimana saya bisa membuka direktori di filemanager default dan memilih file di direktori itu (jika memilih direktori juga, itu mungkin akan bagus, tetapi untuk aplikasi ini tidak diperlukan) atau setidaknya mencari tahu default filemanager sehingga saya dapat memanggilnya langsung?

jakun
sumber

Jawaban:

6

1. Untuk membuka direktori dan memilih subdirektori / file di nautilus:

nautilus --select path/to/file/or/directory

Dari halaman manual nautilus (1) :

-s, --select
  Pilih URI yang ditentukan di folder induk.

2. xdg-mime kembali Thunar.desktoptetapi xdg-openterbukanautilus

xdg-mimegunakan mimeapps.listuntuk menentukan aplikasi default yang akan digunakan.

mimeapps.listFile terpisah ada untuk menangani persyaratan khusus pengguna, khusus sistem, dan khusus distribusi. Urutan pencarian mereka dapat ditemukan di sini .

mimeapps.listdaftar aplikasi default untuk mimetype yang diberikan di bagian [Aplikasi Default]. Hal ini memungkinkan untuk membuat daftar beberapa aplikasi standar dalam urutan preferensi yang menurun. Sebagai contoh :

[Default Applications]
mimetype1 = default1.desktop;default2.desktop;

di mana mimetype1 adalah tipe mime dan * .desktop adalah file desktop.

xdg-openmencari file desktop di urutan pencarian, di seluruh daftar preferensi sampai menemukan file desktop yang valid. Jika tidak ada file seperti itu ditemukan di semua file maka yang paling disukai menurut asosiasi dipilih dan digunakan sebagai aplikasi default.

Jadi, dalam contoh kita, mari kita anggap default1.desktoptidak ada pada sistem kita, jadi xdg-openakan mencoba untuk membuka file kita menggunakan default2.desktop. Namun, xdg-mimemengembalikan default1.desktopyang merupakan entri pertama di mimeapps.listfile kami .

Dalam kasus Anda default1.desktopharus Thunar.desktopkarenanya output. Namun itu tidak diinstal pada sistem Anda. Jadi xdg-openbuka file / direktori Anda nautilusyang ada di sistem Anda. Untuk memverifikasi ini, Anda dapat memeriksa mimeapps.listfile Anda untuk baris yang mengandung inode/directory. Untuk Ubuntu 17.10, lokasi mimeapps.listfile adalah:/usr/share/applications/defaults.list

CATATAN: Algoritma lengkap untuk menentukan 'Aplikasi Default' dapat ditemukan di sini .

Amit Singh
sumber
Jika ada sesuatu yang belum terjawab atau jika ada kebingungan, berikan komentar.
Amit Singh
1
Jawaban Anda yang luar biasa tampak seperti pertanyaan di tempat pertama (apa alasan penghapusan), itu bisa menyesatkan pengulas, jadi saya mengeditnya sedikit. Jangan ragu untuk mengembalikan jika itu tidak apa-apa.
peterh
@peterh Terima kasih atas hasil editnya! Saya akan mengingatnya untuk jawaban di masa mendatang.
Amit Singh
+1. Terima kasih banyak atas jawaban Anda. Bagian pertama berfungsi dengan baik. Bagian kedua bersama dengan spesifikasi ini menjelaskan nilai mana yang diasumsikan jika variabel lingkungan tidak disetel menjelaskan mengapa Thunar dikembalikan.
jakun
1
Namun, saya masih tidak dapat melacak mengapa Nautilus dimulai karena tidak ditentukan dalam mimeapps.list. Bisakah Anda menjelaskan apa saja asosiasi ini "jika setelah semua file ditangani, kami belum menemukan aplikasi default, pilih aplikasi yang paling disukai (menurut asosiasi) yang mendukung tipe"? Apakah Anda tahu cara mengetahui program mana yang akan dimulai secara otomatis tanpa perlu menerapkan kembali algoritma ini?
jakun
0

Anda mungkin ingin mempertimbangkan untuk menggunakan dbus untuk membuka file Anda karena dengan cepat menjadi lebih populer.

Konsep file manager "default" hanya benar-benar ada jika Anda hanya fokus pada xdg-mime, namun di dbus land, dan memang sebagian besar aplikasi di luar sana, cerita mengambil twist yang berbeda, dan konsep file manager "default" tidak ada lagi.

Ini adalah bagaimana Anda membuka file ( /home/me/path/to/folder/or/file) di manajer file (default?), Menggunakan dbus:

dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file:///home/me/path/to/folder/or/file" string:""

Apa yang dilakukan perintah ini adalah mencari layanan dbus yang mengimplementasikan org.freedesktop.FileManager1antarmuka, dan memanggilnya dengan path ke file yang ingin Anda buka.

Alasan saya menaruh tanda tanya setelah default adalah karena dbus tidak menghormati konsep manajer file "default"; semua yang dilakukannya adalah mengirim panggilan ke layanan pertama yang ditemukannya yang mengimplementasikan antarmuka dan memungkinkannya menangani operasi. Sekarang mungkin aplikasi yang dipilihnya adalah pengelola file "default" Anda, tetapi itu tidak selalu merupakan jaminan.

Sebagian besar aplikasi modern akan digunakan dbussecara default dan kemudian mundur ke xdg-mimejika panggilan dbus gagal, jadi ini yang saya sarankan Anda lakukan.

smac89
sumber