वर्तमान टर्मिनल में Nautilus निर्देशिका कैसे खोलें?


13

मुझे दर्जनों टर्मिनल खोलना पसंद नहीं है। क्या Nautilus का उपयोग करते समय टर्मिनल में Open के बजाय Current टर्मिनल में Open जोड़ने का कोई तरीका है ?


केवल गंदे उपाय जहाँ तक मैं कल्पना कर सकता हूँ। मैं एक दे सकता हूं यदि आप इसके साथ ठीक हैं ...
याकूब Vlijm

जवाबों:


13

गंदा या नहीं, नीचे दिए गए समाधान ने 30 मिनट में पूरी तरह से काम किया मैंने इसे अक्सर परीक्षण किया। समाधान तब तक काम करता है जब तक आप निर्देशिका के अंदर किसी फ़ाइल (किसी भी) पर राइट-क्लिक कर सकते हैं:

1।

यहाँ छवि विवरण दर्ज करें

2।

यहाँ छवि विवरण दर्ज करें

3।

यहाँ छवि विवरण दर्ज करें

नौटिलस लिपि

#!/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)

कैसे इस्तेमाल करे

  1. स्क्रिप्ट की जरूरत है wmctrl, xdotoolऔर xclip:

    sudo apt-get install wmctrl xdotool xclip
    
  2. स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे open_in_terminal(कोई एक्सटेंशन नहीं) के रूप में सहेजें ~/.local/share/nautilus/scripts। यदि आवश्यक हो तो निर्देशिका बनाएं। स्क्रिप्ट को निष्पादन योग्य बनाएं

बस। लॉग आउट करें और वापस जाएं और आपके पास चित्र (2) की तरह स्क्रिप्ट उपलब्ध होगी।

व्याख्या

  • एक फ़ाइल पर राइट-क्लिक करके, हम nautilus का उपयोग करके पथ प्राप्त कर सकते हैं ' "NAUTILUS_SCRIPT_CURRENT_URI"
  • एक स्क्रिप्ट में, हम इस पथ को क्लिपबोर्ड में लोड कर सकते हैं (उपयोग करके xclip)
  • बाद में, स्क्रिप्ट (पहले पाया जाता है) को जन्म देती है gnome-terminalखिड़की और चिपकाता है पथ, से पहले cdआदेश। चूंकि हमने echoपूरी लाइन को क्लिपबोर्ड में लोड किया था, Returnइसलिए इसमें शामिल है।

टिप्पणियाँ

  1. यह स्पष्ट होना चाहिए कि टर्मिनल में कुछ भी नहीं चलना चाहिए, और यह सबसे अच्छा काम करता है यदि केवल एक टर्मिनल विंडो खुली हो। यदि बहुविध हैं, तो स्क्रिप्ट सबसे पुरानी gnome-terminalविंडो चुनती है ।
  2. स्क्रिप्ट को अभ्यास में अच्छी तरह से जांचने की आवश्यकता है। जब मैंने इसे चलाया था, तो समय एक बार भी कोई मुद्दा नहीं था, तब भी नहीं जब डेस्कटॉप को टर्मिनल विंडो पर पहुंचने के लिए चार या पांच व्यूपोर्ट में "यात्रा" करनी पड़ी। यदि त्रुटियां होती हैं, लेकिन कुछ पंक्तियों के साथ हम इसे टर्मिनल विंडो को बढ़ाने के लिए वास्तव में एक स्मार्ट (एर) तरीके से प्रतीक्षा कर सकते हैं । चलिए देखते हैं क्या होता है। यह आवश्यक नहीं लगता है।
  3. चूंकि स्क्रिप्ट वास्तविकपथ का उपयोग करती है , इसलिए लिंक की गई निर्देशिकाएं भी सही तरीके से काम करेंगी।

नॉटिलस लिपियों के बारे में अधिक जानकारी यहाँ


यदि आपके पास एकाधिक है, तो वैकल्पिक रूप से, अपनी स्वयं की टर्मिनल विंडो चुनें

यदि आप यह चुनना चाहते हैं कि किस टर्मिनल विंडो में आप करंट (नॉटिलस) डायरेक्टरी खोलेंगे, तो नीचे दी गई स्क्रिप्ट का उपयोग करें।

यह व्यवहार में कैसे काम करता है

  1. निर्देशिका के अंदर राइट-क्लिक (कोई भी) फ़ाइल (इस मामले में मेरा डेस्कटॉप) नीचे की तरह:

    यहाँ छवि विवरण दर्ज करें

  2. उस टर्मिनल विंडो पर क्लिक करें (या अन्यथा बढ़ाएं) जिसका आप उपयोग करना चाहते हैं, और यह निर्देशिका का 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)

सेट अप

पहली स्क्रिप्ट की तरह है।

व्याख्या

स्क्रिप्ट में पहले एक से एक अंतर है: स्वचालित रूप से पहले मिली टर्मिनल विंडो को ऊपर उठाने के बजाय, यह फोकस करने के लिए पहली टर्मिनल विंडो की प्रतीक्षा करता है। तो यह उस विंडो के अंदर निर्देशिका के सीडी है।


चूंकि आप स्क्रिप्ट को लॉन्च करने के लिए फ़ाइल का उपयोग कर रहे हैं, बस sys.argv [1] पथ से फ़ाइल नाम हटा दें। यह स्क्रिप्ट को बहुत छोटा बना देगा
कोलोडियाज़नी

1
@ टॉनी लांसर मेनू निर्देशिका ~/.local/share/nautilus/scriptsलॉगआउट बनाने के बाद और :) में दिखाई देता है
जैकब व्लिजम

1
@ यह केवल नॉटिलस राइट क्लिक से काम करता है।
जैकब व्लिजम

1
@ स्क्रिप्ट के लिए पर्यावरण मूल प्रक्रिया से नीचे पारित हो जाता है। इस मामले में, Nautilus स्क्रिप्ट की मूल प्रक्रिया है, और यह स्क्रिप्ट के लिए वातावरण सेट करता है। यदि आप अजगर इंटरप्रेटर या स्क्रिप्ट से उसी चीज़ को करने की कोशिश कर रहे हैं, तो इसकी अलग-अलग मूल प्रक्रिया होगी, इसलिए यह वापस आ जाएगी Noneक्योंकि ऐसा कोई वैरिएबल (Nautilus के बाहर नहीं है)।
सर्जियो कोलोडियाजनी

1
@JacobVlijm तुम कमाल हो। पूरी तरह कार्यरत! अब मुझे समझ आया कि दूसरी स्क्रिप्ट कैसे काम करती है, आप ट्रिगर के बारे में सही हैं। यह वास्तव में ubuntu समुदाय के लिए एक अच्छा गैजेट है। बेशक हम किसी भी स्क्रिप्ट के लिए कई सुधारों के बारे में सोच सकते हैं, लेकिन यह काम करता है। बस अपने उत्तर में उल्लेख करें कि दूसरी स्क्रिप्ट ऑल्ट टैब के साथ काम करती है।
विटर अबेला

8

मुझे पूरा यकीन है कि ऐसा करने का कोई तरीका नहीं है, हालांकि मेरे पास आपके लिए एक समाधान है जो मदद कर सकता है।

आप हमेशा Nautilus से एक निर्देशिका को टर्मिनल विंडो में खींच सकते हैं और छोड़ सकते हैं और Nautilus उस निर्देशिका को पास करेगा और कमांड लाइन में पेस्ट करेगा, इसलिए आप कर सकते हैं cdऔर फिर फ़ोल्डर को टर्मिनल पर खींचें और एंटर दबाएं।


8

सबसे सरल तरीका यह है:

  1. नॉटिलस से, Ctrl+ दबाएं L, इससे एडिटिंग के लिए एड्रेस बार खुल जाएगा। Ctrl+ दबाएंC
  2. टर्मिनल पर स्विच करें और पथ पेस्ट करने के लिए cd, स्पेस, फिर Shift+ टाइप करें Insert (or INS)। मारो Enter

स्क्रिप्ट या अतिरिक्त काम के लिए कोई ज़रूरत नहीं है।


मैं पथ पेस्ट करने के लिए Ctrl + Shift + V का उपयोग करता हूं।
काटू

1
हाँ, यह करने के लिए एक और तरीका है। लिनक्स में दो क्लिपबोर्ड हैं, वास्तव में, इसलिए Ctrl + Shift + V प्राथमिक के लिए है और Shift + Insert द्वितीयक के लिए है, लेकिन क्योंकि दूसरे को केवल दो कुंजी की आवश्यकता होती है, मैं ज्यादातर उसी का उपयोग करता हूं। वे साझा कर रहे हैं, जब तक कि आप कुछ उजागर नहीं करते हैं - कि जब सामान माध्यमिक क्लिपबोर्ड में चला जाता है
सर्जियो कोलोडियाज़नी

1

मेरी राय में, बिना हलवा के इसे हल करने का एकमात्र सुरुचिपूर्ण तरीका एक टर्मिनल मल्टीप्लेक्स का उपयोग करना है जैसे tmux और आपका फ़ाइल प्रबंधक है

  • किसी मौजूदा सत्र के अंदर नई टर्मिनल विंडो खोलें या
  • एक नया tuxux सत्र के साथ एक नया टर्मिनल एमुलेटर शुरू करें।

निम्नलिखित शेल स्क्रिप्ट बस प्राप्त करता है:

#!/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बिंदुओं के डिफ़ॉल्ट को पसंद नहीं करते हैं ) इसके अलावा कमांड के लिए कमांड लाइन विकल्प को एमुलेटर के अंदर निष्पादित करना है।

आप फ़ाइल हैंडलर स्क्रिप्ट को अपने फ़ाइल प्रबंधक में किसी अन्य फ़ाइल प्रकार संघ की तरह पंजीकृत कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.