मुझे दर्जनों टर्मिनल खोलना पसंद नहीं है। क्या Nautilus का उपयोग करते समय टर्मिनल में Open के बजाय Current टर्मिनल में Open जोड़ने का कोई तरीका है ?
मुझे दर्जनों टर्मिनल खोलना पसंद नहीं है। क्या Nautilus का उपयोग करते समय टर्मिनल में Open के बजाय Current टर्मिनल में Open जोड़ने का कोई तरीका है ?
जवाबों:
गंदा या नहीं, नीचे दिए गए समाधान ने 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
और xclip:
sudo apt-get install wmctrl xdotool xclip
स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे open_in_terminal
(कोई एक्सटेंशन नहीं) के रूप में सहेजें ~/.local/share/nautilus/scripts
। यदि आवश्यक हो तो निर्देशिका बनाएं। स्क्रिप्ट को निष्पादन योग्य बनाएं
बस। लॉग आउट करें और वापस जाएं और आपके पास चित्र (2) की तरह स्क्रिप्ट उपलब्ध होगी।
"NAUTILUS_SCRIPT_CURRENT_URI"
।xclip
)gnome-terminal
खिड़की और चिपकाता है पथ, से पहले cd
आदेश। चूंकि हमने echo
पूरी लाइन को क्लिपबोर्ड में लोड किया था, Returnइसलिए इसमें शामिल है।gnome-terminal
विंडो चुनती है ।नॉटिलस लिपियों के बारे में अधिक जानकारी यहाँ ।
यदि आप यह चुनना चाहते हैं कि किस टर्मिनल विंडो में आप करंट (नॉटिलस) डायरेक्टरी खोलेंगे, तो नीचे दी गई स्क्रिप्ट का उपयोग करें।
निर्देशिका के अंदर राइट-क्लिक (कोई भी) फ़ाइल (इस मामले में मेरा डेस्कटॉप) नीचे की तरह:
उस टर्मिनल विंडो पर क्लिक करें (या अन्यथा बढ़ाएं) जिसका आप उपयोग करना चाहते हैं, और यह निर्देशिका का cd:
#!/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
क्योंकि ऐसा कोई वैरिएबल (Nautilus के बाहर नहीं है)।
मुझे पूरा यकीन है कि ऐसा करने का कोई तरीका नहीं है, हालांकि मेरे पास आपके लिए एक समाधान है जो मदद कर सकता है।
आप हमेशा Nautilus से एक निर्देशिका को टर्मिनल विंडो में खींच सकते हैं और छोड़ सकते हैं और Nautilus उस निर्देशिका को पास करेगा और कमांड लाइन में पेस्ट करेगा, इसलिए आप कर सकते हैं 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
बिंदुओं के डिफ़ॉल्ट को पसंद नहीं करते हैं ) इसके अलावा कमांड के लिए कमांड लाइन विकल्प को एमुलेटर के अंदर निष्पादित करना है।
आप फ़ाइल हैंडलर स्क्रिप्ट को अपने फ़ाइल प्रबंधक में किसी अन्य फ़ाइल प्रकार संघ की तरह पंजीकृत कर सकते हैं।