Bu neden zor bir soru?
Sorunun birkaç zorluğu var:
nautilus
o anda etkin olan dizini almak için doğrudan komut satırından iletişim kurmaz ve o anda açık olan klasörü (-window) komut satırından başka bir dizine "gönderemezsiniz".
- Geçerli yolda, üzerinden istendiği gibi
"NAUTILUS_SCRIPT_CURRENT_URI"
, Nautilus gerçek yolu geçerli klasöre döndürmez , ancak bağlantıyı gerçek bir klasör gibi "görür".
Bu nedenle çözüm elde ettiği kadar kirli; geçici çözümler bulmamız gerekiyor. Sorunu çözmek için dört seçeneğin altında.
1. bir seviye yukarı gitmek için sağ tıklayın
Almak için gerçek geçerli dizine yolunu biz bağlantısından bilgi almak zorundayız. Bunu, ls -l
örneğin aşağıdaki gibi çıkacak olan bağlantıyı kullanarak yapabiliriz :
lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
nerede bölüm sonra ->
ise gerçek kullanarak, sembolik bağ içindeki yolu veya python
:
real = os.path.realpath("/path")
Bunu bir nautilus
komut dosyasında kullanarak , geçerli dosya veya klasöre giden gerçek yolu dolaylı olarak alabiliriz .
O zaman yolumuz varsa, nautilus'un bir seviye yukarı hareket etmesini nasıl sağlayabiliriz?
Yine, bunu çözemeyiz ve ellerimizi temiz tutamayız. Bir seviye yukarı gitmek için önce bulunan yolu biraz düzenleriz:
/path/to/a/folder
içine
/path/to/a
sonra, + ( mevcut bir pencereyi kullanarak başka bir dizine geçmek için cli seçeneği olmadığından, nautilus penceresine yol eklemek için GUI kısayolu) xdotool
simüle etmek ve daha sonra düzenlenmiş yolu + yapıştırmak için kullanarak, çalışan bir çözümümüz var !CtrlLxclip
Enter
Uygulamada
Masaüstümdeki bir bağlantıdan ("Telegram Bağlantısı") açılan bir klasördeyiz. Gerçek klasör benim bir alt klasör Downloads
klasöründe:
Sonra komut dosyasını çalıştırmak için klasör içindeki dosyalardan herhangi birine sağ tıklarsak :
Otomatik olarak, üstün dizinin yolu eklenir:
Ayrıca otomatik olarak Returnda basılır ve bir dizin düzeyi yukarı taşınırız:
Senaryo
#!/usr/bin/env python3
import subprocess
import os
import time
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = os.path.abspath(os.path.join(real, os.pardir))
run("xdotool key Control_L+l")
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Nasıl kurulur
Senaryo hem ihtiyacı xdotool
ve xclip
:
sudo apt-get install xdotool xclip
oluşturma, zaten yoksa, dizin
~/.local/share/nautilus/scripts
Yukarıdaki komut dosyasını boş bir dosyaya kopyalayın, içine level_up
(uzantı yok) kaydedin ~/.local/share/nautilus/scripts
ve yürütülebilir yapın
- Oturumu kapatıp tekrar açmanız gerekebilir.
Artık bir dosyayı (herhangi bir)> komut dosyalarını> level_up sağ tıklayarak komut dosyasını çalıştırabilmelisiniz :
[ EDIT ] Ben yukarıdaki senaryoyu değiştirdi yapıştırın içine yolunu nautilus
yerine yapma, pencerenin xdotool
türünü o. Bu needs
xclip
yükledim, ancak özellikle çok uzun yollarda, büyük bir geliştirme edilecek.
2. Alternatif olarak, üst dizinde yeni bir nautilus penceresi açın
Sen olabilir kullanmaktan kaçınmak xdotool
komut dosyası açmak yaparak, yeni ebeveynin dizinde Nautilusun pencere. Komut dosyası daha da kısa olacaktır:
#!/usr/bin/env python3
import subprocess
import os
def run(cmd):
subprocess.call(cmd)
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = real[:real.rfind("/")]
subprocess.Popen(["nautilus", up])
Bu durumda, yüklemenize gerek yoktur xdotool
. Orijinal pencereyi kapatarak ve yeni pencereyi tam olarak aynı konuma (& boyut) yerleştirerek komut dosyasını genişletebiliriz.
Dezavantajı, orijinal pencerenin tarihinin bu şekilde kaybolmasıdır.
3. Ek bir çözüm: (otomatik olarak) bağlantı oluşturmanın alternatif yolu
Mevcut bağlantılar ile ilgili değildir, ancak GUI'den kullanıldığında .desktop
, sağ tıklamayla otomatik olarak yürütülebilir dosyalar oluşturmak için bir nautilus betiği yardımcı olabilir:
kısayol oluşturmak için dizine sağ tıklayın (bağlantı olarak davranma)
Sembolik bağlantıların aksine, bu bağlantılar sizi bir klasör gibi davranmadan gerçek klasöre götürür:
Senaryo
#!/usr/bin/env python3
import subprocess
import os
current = os.getenv(
"NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
).replace("file://", "").replace("%20", " ").strip()
if os.path.isdir(current):
parent = os.path.abspath(os.path.join(current, os.pardir))
fldr_path = '"'+current+'"'
folder = current[current.rfind("/")+1:]
linkfilename = parent+"/"+folder+"link.desktop"
linkdata = [
"[Desktop Entry]",
"Type=Application",
"Name=Link to -> "+folder,
"Icon=folder",
"Exec=nautilus "+fldr_path,
]
with open(linkfilename, "wt") as wt:
for l in linkdata:
wt.write(l+"\n")
command = "chmod +x "+"'"+linkfilename+"'"
subprocess.Popen(["/bin/bash", "-c", command])
Nasıl kullanılır
- Komut dosyasını boş bir dosyaya kopyalayın,
make_link
(uzantı yok) olarak kaydedin ~/.local/share/nautilus/scripts
ve yürütülebilir yapın
- Komut dosyasını, ilk görüntüdeki gibi sağ tıklama seçeneği olarak seçerek kullanın.
.desktop
Aynı dizinde yürütülebilir bir dosya oluşturulur, gerekirse başka bir yere taşıyın; bağlı yol mutlaktır.
Bağlantıya ayırt edici bir simge verin
Alternatif bağlantıya ayırt edici bir simge verebilirsiniz. Dizinde /usr/share/icons
"klasör" için arama yaparsanız , çok sayıda geçerli seçenek açılır.
Komut dosyasında satır "Icon=folder",
değiştirilirse Icon=stock_folder-copy,
(uzantı olmadan simge adını kullanın), sistemimdeki sonuç:
Elbette kendi özel simgenizi de kullanabilirsiniz, ancak tam yollar kullanıyorsanız (kullanmayın ~
), simgenin uzantısını eklemeniz gerekir .
4. Kısayol tuşuyla üst dizine gidin
Muhtemelen en uygun seçenek; nautilus penceresi önde, bir dizini yukarı taşımak için bir kısayol tuşuna basın.
Senaryo
#!/usr/bin/env python3
import subprocess
import time
import os
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
# get information on the active window
front = get(["xprop", "-id", get(["xdotool", "getactivewindow"])])
# (only) if it is a "normal" nautilus window, take action
if 'WM_CLASS(STRING) = "nautilus", "Nautilus"' in front:
# "virtually" press Ctrl + l
run("xdotool key Control_L+l"); time.sleep(0.05)
# copy the current path, calculate the "real" parent directory
real = os.path.realpath(get(["xclip", "-o"]))
up = os.path.abspath(os.path.join(real, os.pardir))
time.sleep(0.1)
# enter the superior directory
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Kullanmak
Bu çözüm için, hem xclip
ve xdotool
İhtiyaç sisteminizde olması.
sudo apt-get install xdodool xclip
Komut dosyasını boş bir dosyaya kopyalayın, level_up.py
(her yerde) olarak kaydedin .
Bir kısayol tuşuna ekleyin: şunu seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:
python3 /path/to/level_up.py
Not : Bu durumda kısayol seçenekleri biraz sınırlıdır, çünkü betiğin kendisiCtrl +simüle ederLveCtrl+Alt+Loturumunuzu kapatır ...Ctrl+\sistemimde iyi çalıştı.
açıklama
Bu komut dosyası ayrıca Ctrl+ simüle eder L, ancak nautilus 'kullanmak yerine , nautilus penceresinde otomatik olarak seçilen yolu kopyalamak için "NAUTILUS_SCRIPT_CURRENT_URI"
kullanır xclip
. Seçenek 1 gibi, komut dosyası da gerçek yolu hesaplar ve üstün dizini türetir.
Bu seçenek, klavyenin sağ tıklamayı kullanmasını tercih ediyorsanız faydalı olabilir.