আমি কয়েক ডজন টার্মিনাল খোলা পছন্দ করি না। নটিলাস ব্যবহার করার সময় টার্মিনালে ওপেনের পরিবর্তে বর্তমান টার্মিনালে ওপেন যুক্ত করার কোনও উপায় আছে কি ?
আমি কয়েক ডজন টার্মিনাল খোলা পছন্দ করি না। নটিলাস ব্যবহার করার সময় টার্মিনালে ওপেনের পরিবর্তে বর্তমান টার্মিনালে ওপেন যুক্ত করার কোনও উপায় আছে কি ?
উত্তর:
নোংরা বা না, নীচের সমাধানটি 30 মিনিটের মধ্যে নিখুঁতভাবে কাজ করেছিল আমি প্রায়শই এটি পরীক্ষা করেছিলাম। সমাধানটি যতক্ষণ কাজ করে আপনি ডিরেক্টরিতে কোনও ফাইল (যে কোনও) তে ডান ক্লিক করতে পারেন:
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
t = get(["pgrep", "gnome-terminal"])
if t:
w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# raise the found terminal window
subprocess.call(["wmctrl", "-ia", w])
time.sleep(0.3)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
স্ক্রিপ্টটির প্রয়োজন wmctrl
, xdotool
এবং এক্সক্লিপ:
sudo apt-get install wmctrl xdotool xclip
স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি open_in_terminal
(কোনও প্রসারণ নয়) হিসাবে সংরক্ষণ করুন ~/.local/share/nautilus/scripts
। প্রয়োজনে ডিরেক্টরি তৈরি করুন। স্ক্রিপ্টটি কার্যকর করা যায় Make
এটাই. লগ আউট এবং পিছনে প্রবেশ করুন এবং আপনার চিত্রটি (2) এর মতো স্ক্রিপ্টটি উপলব্ধ থাকবে।
"NAUTILUS_SCRIPT_CURRENT_URI"
।xclip
)gnome-terminal
উইন্ডোটি উত্থাপন করে এবং কমান্ডের পূর্বে, পথটি আটকে দেয় cd
। যেহেতু আমরা echo
ক্লিপবোর্ডে পুরো লাইনটি লোড করতাম , Returnএটি অন্তর্ভুক্ত।gnome-terminal
উইন্ডোটি বেছে নিয়েছে।নটিলাস স্ক্রিপ্ট সম্পর্কে আরও তথ্য এখানে ।
আপনি যদি কোন টার্মিনাল উইন্ডোটিতে বর্তমান (নটিলাস) ডিরেক্টরিটি খুলবেন তা চয়ন করতে সক্ষম হতে চান , তবে নীচের স্ক্রিপ্টটি ব্যবহার করুন।
নীচের মত ডিরেক্টরিতে (এই ক্ষেত্রে আমার ডেস্কটপ) ভিতরে ডান ক্লিক করুন (যে কোনও) ফাইল:
আপনি যে টার্মিনাল উইন্ডোটি ব্যবহার করতে চান তার উপর ক্লিক করুন (বা অন্যথায় উত্থাপন করুন) এবং এটি ডিরেক্টরিতে সিডি করবে:
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])
if pid:
t = 0
while t < 30:
# see if the frontmost window is a terminam window
active = get(["xdotool", "getactivewindow"])
if pid in get(["xprop", "-id", active]):
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
break
else:
t += 1
time.sleep(0.5)
হুবহু প্রথম স্ক্রিপ্টের মতো।
স্ক্রিপ্টটির প্রথমটির থেকে একটি পার্থক্য রয়েছে: প্রথম পাওয়া টার্মিনাল উইন্ডোটি স্বয়ংক্রিয়ভাবে উত্থাপনের পরিবর্তে এটি প্রথম টার্মিনাল উইন্ডোর ফোকাস হওয়ার জন্য অপেক্ষা করে। তারপরে এটি সেই উইন্ডোর ডিরেক্টরিতে সিডি করে।
~/.local/share/nautilus/scripts
লগআউট তৈরি করার পরে উপস্থিত হবে এবং ফিরে আসবে :)
None
কারণ এমন কোনও পরিবর্তনশীল নেই (এটি নটিলাসের বাইরে)।
আমি নিশ্চিত যে এটি করার কোনও উপায় নেই তবে আমার পক্ষে আপনার জন্য একটি কার্যকারণ রয়েছে যা সাহায্য করতে পারে।
আপনি সবসময় নটিলাস থেকে একটি ডিরেক্টরি টার্মিনাল উইন্ডোতে টেনে আনতে পারেন এবং নটিলাস সেই ডিরেক্টরিটি পাস করে কমান্ড লাইনে আটকে দেবে, যাতে আপনি cd
ফোল্ডারটিকে টার্মিনালে টেনে নিয়ে এন্টার টিপুন।
সহজ উপায় এটি:
cd
, স্পেস, তারপরে Shift+ Insert (or INS)পথটি আটকে দিন। হিট Enter।স্ক্রিপ্ট বা অতিরিক্ত কাজের প্রয়োজন নেই।
আমার মতে চারপাশে ঝাঁকুনি না দিয়ে সমাধানের একমাত্র মার্জিত উপায় হ'ল tmux এর মতো টার্মিনাল মাল্টিপ্লেক্সার ব্যবহার করা এবং আপনার ফাইল ম্যানেজার থাকা
নিম্নলিখিত শেল স্ক্রিপ্টটি কেবল এটি অর্জন করে:
#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'
cd "$1"
if $TMUX has-session; then
exec $TMUX new-window
else
exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi
TERMINAL_EMULATOR
নতুন টার্মিনাল উইন্ডোগুলির জন্য পছন্দসই টার্মিনাল এমুলেটর ধারণ করে (যদি আপনি যে কোনও x-terminal-emulator
পয়েন্টের ডিফল্ট পছন্দ না করেন ) এবং এমুলেটরের ভিতরে কমান্ডের জন্য একটি কমান্ড-লাইন বিকল্প রাখে।
আপনি নিজের ফাইল ম্যানেজারে অন্য কোনও ফাইল টাইপের সংস্থার মতো ফাইল হ্যান্ডলার স্ক্রিপ্টটি নিবন্ধভুক্ত করতে পারেন।