Isi:
- pengantar
- Instalasi
- Pemakaian
- Kode sumber
1. Perkenalan
Solusi ini terdiri dari dua skrip - satu untuk penandaan, satu untuk membaca daftar file di bawah tag tertentu. Keduanya harus hidup ~/.local/share/nautilus/scripts
dan diaktifkan melalui klik kanan di Nautilus file manager pada file apa pun, dan menavigasi ke submenu Script. Kode sumber untuk setiap skrip disediakan di sini juga di GitHub
2. Instalasi
Kedua skrip harus disimpan ke ~/.local/share/nautilus/scripts
, di mana ~
direktori home user, dan dapat dieksekusi chmod +x filename
. Untuk pemasangan yang mudah, gunakan skrip bash berikut:
#!/bin/bash
N_SCRIPTS="$HOME/.local/share/nautilus/scripts"
cd /tmp
rm master.zip*
rm -rf nautilus_scripts-master
wget https://github.com/SergKolo/nautilus_scripts/archive/master.zip
unzip master.zip
install nautilus_scripts-master/tag_file.py "$N_SCRIPTS/tag_file.py"
install nautilus_scripts-master/read_tags.py "$N_SCRIPTS/read_tags.py"
3. Penggunaan:
Memberi tag pada file :
Pilih file dalam pengelola file Nautilus, klik kanan padanya, dan navigasikan ke submenu Script. Pilih tag_file.py
. Hit Enter
Pertama kali Anda menjalankan skrip ini, tidak akan ada file konfigurasi, jadi Anda akan melihat ini:
Lain kali, ketika Anda sudah memiliki beberapa tag file, Anda akan melihat popup yang memungkinkan Anda untuk memilih tag dan / atau menambahkan yang baru (dengan cara ini Anda dapat merekam file di bawah beberapa tag). Tekan OKuntuk menambahkan file ke tag ini. Catatan : Hindari memiliki "|" simbol dalam nama tag.
Script mencatat semua yang ada di ~/.tagged_files
. File itu pada dasarnya adalah json
kamus (yang bukan sesuatu yang harus dipedulikan oleh pengguna biasa, tetapi lebih nyaman bagi programmer :)). Format file itu adalah seperti ini:
{
"Important Screenshots": [
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-10-01 09-15-46.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-47-12.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 18-46-46.png",
"/home/xieerqi/\u56fe\u7247/Screenshot from 2016-09-30 17-35-32.png"
],
"Translation Docs": [
"/home/xieerqi/Downloads/908173 - \u7ffb\u8bd1.doc",
"/home/xieerqi/Downloads/911683\u7ffb\u8bd1.docx",
"/home/xieerqi/Downloads/914549 -\u7ffb\u8bd1.txt"
]
}
Jika Anda ingin "membatalkan" beberapa file, hapus saja entri dari daftar itu. Pikirkan format dan koma.
Pencarian dengan tag :
Sekarang Anda memiliki ~/.tagged_files
basis data file yang bagus, Anda dapat membaca file itu, atau menggunakan read_tags.py
skrip.
Klik kanan pada file apa pun di Nautilus (benar-benar tidak masalah yang mana) read_tags.py
. Pilih . MemukulEnter
Anda akan melihat popup yang menanyakan tag apa yang ingin Anda cari:
Pilih satu, klik OK. Anda akan melihat dialog daftar yang menunjukkan file yang Anda inginkan ada untuk tag yang Anda pilih. Anda dapat memilih file tunggal dan akan terbuka dengan program default yang ditetapkan untuk jenis file itu.
4. Kode sumber:
tag_file.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Serg Kolo
# Date: Oct 1st, 2016
# Description: tag_file.py, script for
# recording paths to files under
# specific , user-defined tag
# in ~/.tagged_files
# Written for: http://askubuntu.com/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04
from __future__ import print_function
import subprocess
import json
import os
import sys
def show_error(string):
subprocess.call(['zenity','--error',
'--title',__file__,
'--text',string
])
sys.exit(1)
def run_cmd(cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError:
pass
else:
if stdout:
return stdout
def write_to_file(conf_file,tag,path_list):
# if config file exists , read it
data = {}
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
if tag in data:
for path in path_list:
if path in data[tag]:
continue
data[tag].append(path)
else:
data[tag] = path_list
with open(conf_file,'w') as f:
json.dump(data,f,indent=4,sort_keys=True)
def get_tags(conf_file):
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
return '|'.join(data.keys())
def main():
user_home = os.path.expanduser('~')
config = '.tagged_files'
conf_path = os.path.join(user_home,config)
file_paths = [ os.path.abspath(f) for f in sys.argv[1:] ]
tags = None
try:
tags = get_tags(conf_path)
except Exception as e:
show_error(e)
command = [ 'zenity','--forms','--title',
'Tag the File'
]
if tags:
combo = ['--add-combo','Existing Tags',
'--combo-values',tags
]
command = command + combo
command = command + ['--add-entry','New Tag']
result = run_cmd(command)
if not result: sys.exit(1)
result = result.decode().strip().split('|')
for tag in result:
if tag == '':
continue
write_to_file(conf_path,tag,file_paths)
if __name__ == '__main__':
main()
read_tags.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author: Serg Kolo
# Date: Oct 1st, 2016
# Description: read_tags.py, script for
# reading paths to files under
# specific , user-defined tag
# in ~/.tagged_files
# Written for: http://askubuntu.com/q/827701/295286
# Tested on : Ubuntu ( Unity ) 16.04
import subprocess
import json
import sys
import os
def run_cmd(cmdlist):
""" Reusable function for running external commands """
new_env = dict(os.environ)
new_env['LC_ALL'] = 'C'
try:
stdout = subprocess.check_output(cmdlist, env=new_env)
except subprocess.CalledProcessError as e:
print(str(e))
else:
if stdout:
return stdout
def show_error(string):
subprocess.call(['zenity','--error',
'--title',__file__,
'--text',string
])
sys.exit(1)
def read_tags_file(file,tag):
if os.path.exists(file):
with open(file) as f:
data = json.load(f)
if tag in data.keys():
return data[tag]
else:
show_error('No such tag')
else:
show_error('Config file doesnt exist')
def get_tags(conf_file):
""" read the tags file, return
a string joined with | for
further processing """
if os.path.exists(conf_file):
with open(conf_file) as f:
data = json.load(f)
return '|'.join(data.keys())
def main():
user_home = os.path.expanduser('~')
config = '.tagged_files'
conf_path = os.path.join(user_home,config)
tags = get_tags(conf_path)
command = ['zenity','--forms','--add-combo',
'Which tag ?', '--combo-values',tags
]
tag = run_cmd(command)
if not tag:
sys.exit(0)
tag = tag.decode().strip()
file_list = read_tags_file(conf_path,tag)
command = ['zenity', '--list',
'--text','Select a file to open',
'--column', 'File paths'
]
selected = run_cmd(command + file_list)
if selected:
selected = selected.decode().strip()
run_cmd(['xdg-open',selected])
if __name__ == '__main__':
try:
main()
except Exception as e:
show_error(str(e))