কেন এটি চ্যালেঞ্জিং প্রশ্ন
প্রশ্নের কয়েকটি চ্যালেঞ্জ রয়েছে:
nautilus
উদাহরণস্বরূপ বর্তমানে সক্রিয় ডিরেক্টরি পেতে কমান্ড লাইন থেকে সরাসরি যোগাযোগ করে না, আপনি বর্তমানে কমান্ড লাইন থেকে অন্য ডিরেক্টরিতে খোলা ফোল্ডারটি (উইন্ডো) "প্রেরণ" করতে পারবেন না।
- বর্তমান পথে, যেমন অনুরোধ করা হয়েছে
"NAUTILUS_SCRIPT_CURRENT_URI"
, নটিলাস বর্তমান ফোল্ডারে আসল পথটি ফিরিয়ে দেয় না , তবে লিঙ্কটি "দেখায়" যেন এটি একটি আসল ফোল্ডার।
সমাধানটি যত তাড়াতাড়ি মলিন হয়; আমাদের কাজের সন্ধান করা দরকার। সমস্যাটি সমাধান করার জন্য চারটি বিকল্পের নীচে।
1. এক স্তর উপরে যেতে ডান ক্লিক করুন
বর্তমান ডিরেক্টরিটিতে আসল পথ পেতে , আমাদের লিঙ্কটি থেকে তথ্য পুনরুদ্ধার করতে হবে। আমরা ls -l
লিঙ্কটি ব্যবহার করে এটি করতে পারি , যা আউটপুট যেমন:
lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
যেখানে পরবর্তী বিভাগটি ->
হ'ল সিমলিংকের অভ্যন্তরে আসল পথ, বা ব্যবহার করে python
:
real = os.path.realpath("/path")
এটি কোনও nautilus
স্ক্রিপ্টে ব্যবহার করে আমরা পরোক্ষভাবে বর্তমান ফাইল বা ফোল্ডারের আসল পথ পেতে পারি ।
তারপরে যদি আমাদের পথ থাকে তবে আমরা কীভাবে নটিলাসকে এক স্তর উপরে নিয়ে যাব?
আবার আমরা এটিকে সমাধান করতে এবং হাত পরিষ্কার রাখতে পারি না । এক স্তর উপরে যেতে, আমরা প্রথমে পাওয়া পথটি কিছুটা সম্পাদনা করি, এ থেকে:
/path/to/a/folder
মধ্যে
/path/to/a
তারপর ব্যবহার xdotool
অনুকরণ Ctrl+ + L(গুই শর্টকাট একটি নটিলাস উইন্ডোতে একটি পাথ সন্নিবেশ করতে, যেহেতু অন্য ডাইরেক্টরি যাওয়ার কোন CLI বিকল্প নেই বর্তমান উইন্ডো ব্যবহার ), এবং পরবর্তীকালে করতে xclip
সম্পাদিত পথ + + পেস্ট করুন Enter, আমরা একটি কাজ করেছি সমাধান !
প্রস্তুতিতে
আমরা একটি ফোল্ডারে আছি, আমার ডেস্কটপে একটি লিঙ্ক ("টেলিগ্রামে লিঙ্ক") থেকে খোলা। বাস্তব ফোল্ডারের আমার এর একটি উপ ফোল্ডার Downloads
ফোল্ডার:
তারপরে যদি আমরা স্ক্রিপ্টটি চালাতে ফোল্ডারের ভিতরে থাকা যেকোন ফাইলের উপর ডান ক্লিক করি :
স্বয়ংক্রিয়ভাবে, উচ্চতর ডিরেক্টরিতে প্রবেশের পথটি প্রবেশ করানো হয়েছে:
এবং, স্বয়ংক্রিয়ভাবে, Returnচাপ দেওয়া হয়, এবং আমরা একটি ডিরেক্টরি স্তর উপরে স্থানান্তরিত করি:
এই পান্ডুলিপি
#!/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")
কিভাবে বসাব
স্ক্রিপ্ট উভয়ের প্রয়োজন xdotool
এবং xclip
:
sudo apt-get install xdotool xclip
তৈরি করুন, যদি এটি ইতিমধ্যে ডিরেক্টরি না থাকে, ডিরেক্টরি
~/.local/share/nautilus/scripts
উপরের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি level_up
কোনও (কোনও এক্সটেনশন নয়) হিসাবে সংরক্ষণ করুন ~/.local/share/nautilus/scripts
এবং এটি সম্পাদনযোগ্য করুন
- আপনাকে লগ আউট করতে এবং ফিরে যেতে হতে পারে।
এখন আপনি স্ক্রিপ্টটি চালাতে সক্ষম হবেন কোনও ফাইল (যে কোনও)> স্ক্রিপ্ট> স্তর_আপে ডান ক্লিক করে :
[ সম্পাদনা ] আমি স্ক্রিপ্টে উপরে পরিবর্তিত পেস্ট মধ্যে পাথ nautilus
পরিবর্তে তৈরীর, উইন্ডো xdotool
টাইপ করুন। এটি needs
xclip
ইনস্টল করা হবে, তবে এটি একটি বড় উন্নতি, বিশেষত খুব দীর্ঘ পথে।
2. বিকল্পভাবে, উচ্চতর ডিরেক্টরিতে একটি নতুন নটিলাস উইন্ডো খুলুন
স্ক্রিপ্টটি পিতামাতার ডিরেক্টরিতে একটি নতুন নটিলাস উইন্ডো খোলার মাধ্যমে আপনি ব্যবহার এড়াতে পারবেন । স্ক্রিপ্টটি আরও ছোট হবে:xdotool
#!/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])
এই ক্ষেত্রে, আপনার ইনস্টল করার প্রয়োজন হবে না xdotool
। এমনকি আমরা মূল উইন্ডোটি বন্ধ করে এবং নতুন উইন্ডোটিকে ঠিক একই অবস্থানে (& আকার) রেখে রেখে স্ক্রিপ্টটি প্রসারিত করতে পারি।
অবক্ষয়টি হ'ল মূল উইন্ডোর ইতিহাসটি এভাবে হারিয়ে যায় lost
৩. একটি অতিরিক্ত সমাধান: (স্বয়ংক্রিয়ভাবে) লিঙ্কগুলি তৈরি করার বিকল্প উপায়
বিদ্যমান লিঙ্কগুলির সাথে প্রাসঙ্গিক নয়, তবে জিইউআই থেকে ব্যবহৃত হলে .desktop
ডান ক্লিকে স্বয়ংক্রিয়ভাবে এক্সিকিউটেবল ফাইলগুলি তৈরি করতে একটি নটিলাস স্ক্রিপ্ট সহায়ক হতে পারে:
একটি শর্টকাট তৈরি করতে ডিরেক্টরিতে ডান-ক্লিক করুন (লিঙ্ক হিসাবে আচরণ করা)
সিমলিঙ্কগুলির বিপরীতে, এই লিঙ্কগুলি আপনাকে ফোল্ডারের মতো আচরণ না করেই প্রকৃত ফোল্ডারে নিয়ে যাবে:
এই পান্ডুলিপি
#!/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])
কিভাবে ব্যবহার করে
- স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি
make_link
কোনও (কোনও এক্সটেনশন নয়) হিসাবে সংরক্ষণ করুন ~/.local/share/nautilus/scripts
এবং সম্পাদনযোগ্য করুন
- প্রথম চিত্রের মতো স্ক্রিপ্টটি ডান ক্লিক বিকল্প হিসাবে বেছে নিন by
.desktop
একই ডিরেক্টরিতে একটি এক্সিকিউটেবল ফাইল তৈরি করা হবে, আপনার প্রয়োজনে এটিকে অন্যত্র সরিয়ে ফেলুন; লিঙ্কযুক্ত পথ পরম।
লিঙ্কটি একটি স্বতন্ত্র আইকন দিন
আপনি বিকল্প লিঙ্কটি একটি স্বতন্ত্র আইকন দিতে পারেন। আপনি যদি /usr/share/icons
"ফোল্ডার" এর জন্য ডিরেক্টরিটির ভিতরে অনুসন্ধান করেন তবে অসংখ্য বৈধ বিকল্প পপ আপ।
যদি স্ক্রিপ্টে লাইনটি "Icon=folder",
প্রতিস্থাপন করা হয় Icon=stock_folder-copy,
(এক্সটেনশন ছাড়াই আইকন নামটি ব্যবহার করুন), আমার সিস্টেমে ফলাফলটি হ'ল:
অবশ্যই আপনি নিজের কাস্টম আইকনটিও ব্যবহার করতে পারেন তবে আপনি যদি পুরো পথ ব্যবহার করেন (ব্যবহার করবেন না ~
), আপনার আইকনের এক্সটেনশনটি অন্তর্ভুক্ত করা উচিত ।
৪. একটি শর্ট কাট কী দিয়ে উচ্চতর ডিরেক্টরিতে যান
সম্ভবত সবচেয়ে সুবিধাজনক বিকল্প; সামনে নটিলাস উইন্ডোটি নিয়ে একটি ডিরেক্টরি উপরে সরানোর জন্য একটি শর্ট কাট কী টিপুন।
এই পান্ডুলিপি
#!/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")
ব্যবহার করা
এই সমাধানের জন্য, উভয় xclip
এবং xdotool
আপনার সিস্টেমে থাকা দরকার।
sudo apt-get install xdodool xclip
স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটিকে level_up.py
(যে কোনও জায়গায়) সংরক্ষণ করুন ।
এটি একটি শর্টকাট কীতে যুক্ত করুন: চয়ন করুন: সিস্টেম সেটিংস> "কীবোর্ড"> "শর্টকাট"> "কাস্টম শর্টকাট"। "+" ক্লিক করুন এবং কমান্ডটি যুক্ত করুন:
python3 /path/to/level_up.py
এনবি এই ক্ষেত্রে শর্টকাট বিকল্পগুলি কিছুটা সীমাবদ্ধ, যেহেতু স্ক্রিপ্টটি নিজেইCtrl +অনুকরণ করবেL, এবংCtrl+Alt+Lআপনাকে লগ আউট করিয়ে দেবে ...Ctrl+\আমার সিস্টেমে সূক্ষ্মভাবে কাজ করেছে।
ব্যাখ্যা
এই স্ক্রিপ্টটিও Ctrl+ সিমুলেট Lকরে তবে নটিলাস 'ব্যবহার না করে এটি নটিলাস উইন্ডোতে স্বয়ংক্রিয়ভাবে নির্বাচিত পাথটি অনুলিপি করতে "NAUTILUS_SCRIPT_CURRENT_URI"
ব্যবহার xclip
করে। বিকল্প 1 এর মতো, স্ক্রিপ্টটি পরে আসল পাথ গণনা করে এবং উচ্চতর ডিরেক্টরিটি প্রাপ্ত করে।
এই বিকল্পটি কার্যকর হতে পারে যদি আপনি ডান ক্লিক ব্যবহার করতে কীবোর্ডটিকে পছন্দ করেন।