বর্তমান টার্মিনালে নটিলাস ডিরেক্টরিটি কীভাবে খুলবেন?


13

আমি কয়েক ডজন টার্মিনাল খোলা পছন্দ করি না। নটিলাস ব্যবহার করার সময় টার্মিনালে ওপেনের পরিবর্তে বর্তমান টার্মিনালে ওপেন যুক্ত করার কোনও উপায় আছে কি ?


যতদূর আমি কল্পনা করতে পারি কেবলমাত্র নোংরা সমাধান। আপনি যদি
এটির

উত্তর:


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এবং এক্সক্লিপ:

    sudo apt-get install wmctrl xdotool xclip
    
  2. স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি open_in_terminal(কোনও প্রসারণ নয়) হিসাবে সংরক্ষণ করুন ~/.local/share/nautilus/scripts। প্রয়োজনে ডিরেক্টরি তৈরি করুন। স্ক্রিপ্টটি কার্যকর করা যায় Make

এটাই. লগ আউট এবং পিছনে প্রবেশ করুন এবং আপনার চিত্রটি (2) এর মতো স্ক্রিপ্টটি উপলব্ধ থাকবে।

ব্যাখ্যা

  • কোনও ফাইলকে ডান ক্লিক করে আমরা নটিলাস ব্যবহার করে পাথ পেতে পারি "NAUTILUS_SCRIPT_CURRENT_URI"
  • স্ক্রিপ্টে, আমরা ক্লিপবোর্ডে এই পাথটি লোড করতে পারি (ব্যবহার করে xclip)
  • পরবর্তীকালে, স্ক্রিপ্টটি (প্রথম পাওয়া) gnome-terminalউইন্ডোটি উত্থাপন করে এবং কমান্ডের পূর্বে, পথটি আটকে দেয় cd। যেহেতু আমরা echoক্লিপবোর্ডে পুরো লাইনটি লোড করতাম , Returnএটি অন্তর্ভুক্ত।

মন্তব্য

  1. এটি স্পষ্ট হওয়া উচিত যে টার্মিনালে কোনও কিছুই চলমান উচিত নয় এবং যদি কেবলমাত্র একটি টার্মিনাল উইন্ডো খোলা থাকে তবে এটি সবচেয়ে ভাল কাজ করে। একাধিক ক্ষেত্রে, স্ক্রিপ্টটি সবচেয়ে পুরানো gnome-terminalউইন্ডোটি বেছে নিয়েছে।
  2. অনুশীলনে স্ক্রিপ্টটি পুরোপুরি পরীক্ষা করা দরকার। ডেস্কটপটি টার্মিনাল উইন্ডোতে যাওয়ার জন্য চার বা পাঁচটি ভিউপোর্ট জুড়ে "ভ্রমণ" করতে হয়েছিল এমনকী, আমি এটি চালানোর সময় সময়সই একক সময় এমনকি কোনও বিষয় ছিল না। যদি ত্রুটিগুলি ঘটে থাকে তবে কয়েকটি লাইন দিয়ে আমরা এটি টার্মিনাল উইন্ডোটি উত্থাপিত হওয়ার জন্য স্মার্ট (এআর) উপায়ে অপেক্ষা করতে পারি । চল দেখি কি ঘটলো. এটি প্রয়োজনীয় বলে মনে হচ্ছে না।
  3. যেহেতু স্ক্রিপ্টটি রিয়েলপথ ব্যবহার করে , তাই সংযুক্ত ডিরেক্টরিগুলিও সঠিকভাবে কাজ করবে।

নটিলাস স্ক্রিপ্ট সম্পর্কে আরও তথ্য এখানে


বিকল্পভাবে, আপনার একাধিক থাকলে আপনার নিজস্ব টার্মিনাল উইন্ডোটি চয়ন করুন

আপনি যদি কোন টার্মিনাল উইন্ডোটিতে বর্তমান (নটিলাস) ডিরেক্টরিটি খুলবেন তা চয়ন করতে সক্ষম হতে চান , তবে নীচের স্ক্রিপ্টটি ব্যবহার করুন।

এটি বাস্তবে কীভাবে কাজ করে

  1. নীচের মত ডিরেক্টরিতে (এই ক্ষেত্রে আমার ডেস্কটপ) ভিতরে ডান ক্লিক করুন (যে কোনও) ফাইল:

    এখানে চিত্র বর্ণনা লিখুন

  2. আপনি যে টার্মিনাল উইন্ডোটি ব্যবহার করতে চান তার উপর ক্লিক করুন (বা অন্যথায় উত্থাপন করুন) এবং এটি ডিরেক্টরিতে সিডি করবে:

    এখানে চিত্র বর্ণনা লিখুন

এই পান্ডুলিপি

#!/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
@ বেনি এটি কেবল নটিলাস ডান-ক্লিক থেকে কাজ করে।
জ্যাকব Vlijm

1
@ বেনি স্ক্রিপ্টের পরিবেশটি পিতামাতার প্রক্রিয়া থেকে সরে যায়। এই ক্ষেত্রে, নটিলাস হ'ল স্ক্রিপ্টের মূল প্রক্রিয়া, এবং এটি স্ক্রিপ্টের জন্য পরিবেশ স্থাপন করে। আপনি যদি পাইথন ইন্টারপ্রেটার বা স্ক্রিপ্ট থেকে একই জিনিসটি করার চেষ্টা করছেন তবে এর বিভিন্ন পিতামাতার প্রক্রিয়া থাকবে, সুতরাং এটি ফিরে আসবে Noneকারণ এমন কোনও পরিবর্তনশীল নেই (এটি নটিলাসের বাইরে)।
সের্গেই কোলোডিয়াজনি

1
@ জ্যাকবভিলিজম আপনি দুর্দান্ত পুরোপুরি কাজ! এখন আমি বুঝতে পারি যে দ্বিতীয় স্ক্রিপ্টটি কীভাবে কাজ করে, আপনি ট্রিগার সম্পর্কে ঠিক বলেছেন। এটি উবুন্টু সম্প্রদায়ের জন্য সত্যই একটি দুর্দান্ত গ্যাজেট। অবশ্যই আমরা যে কোনও স্ক্রিপ্ট হিসাবে অনেক উন্নতি সম্পর্কে ভাবতে পারি, তবে এটি কাজটি করে। আপনার উত্তরে কেবল উল্লেখ করুন যে দ্বিতীয় স্ক্রিপ্টটি আলট ট্যাবের সাথে কাজ করে।
অ্যাবেলা

8

আমি নিশ্চিত যে এটি করার কোনও উপায় নেই তবে আমার পক্ষে আপনার জন্য একটি কার্যকারণ রয়েছে যা সাহায্য করতে পারে।

আপনি সবসময় নটিলাস থেকে একটি ডিরেক্টরি টার্মিনাল উইন্ডোতে টেনে আনতে পারেন এবং নটিলাস সেই ডিরেক্টরিটি পাস করে কমান্ড লাইনে আটকে দেবে, যাতে আপনি cdফোল্ডারটিকে টার্মিনালে টেনে নিয়ে এন্টার টিপুন।


8

সহজ উপায় এটি:

  1. নটিলাস থেকে, Ctrl+ টিপুন L, এটি সম্পাদনার জন্য ঠিকানা বারটি খুলবে। Ctrl+ টিপুনC
  2. টার্মিনালে স্যুইচ করুন এবং টাইপ করুন cd, স্পেস, তারপরে Shift+ Insert (or INS)পথটি আটকে দিন। হিট Enter

স্ক্রিপ্ট বা অতিরিক্ত কাজের প্রয়োজন নেই।


আমি পথটি পেস্ট করতে Ctrl + Shift + V ব্যবহার করি।
কাতু

1
হ্যাঁ, এটি করার অন্য উপায়। লিনাক্সের দুটি ক্লিপবোর্ড রয়েছে, আসলে, তাই সিটিআরএল + শিফট + ভি প্রাথমিকের জন্য এবং শিফট + সন্নিবেশ মাধ্যমিকের জন্য, তবে দ্বিতীয়টির জন্য কেবল দুটি চাবি প্রয়োজন, আমি বেশিরভাগই এটি ব্যবহার করি। সেগুলি ভাগ করা হয়েছে, আপনি যদি কিছু হাইলাইট না করেন - তবে যখন জিনিসগুলি সেকেন্ডারি ক্লিপবোর্ডে যায়
সের্গি কলডিয়াজহনি

1

আমার মতে চারপাশে ঝাঁকুনি না দিয়ে সমাধানের একমাত্র মার্জিত উপায় হ'ল tmux এর মতো টার্মিনাল মাল্টিপ্লেক্সার ব্যবহার করা এবং আপনার ফাইল ম্যানেজার থাকা

  • বিদ্যমান সেশনের ভিতরে বা নতুন টার্মিনাল উইন্ডো খুলুন
  • একটি নতুন 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পয়েন্টের ডিফল্ট পছন্দ না করেন ) এবং এমুলেটরের ভিতরে কমান্ডের জন্য একটি কমান্ড-লাইন বিকল্প রাখে।

আপনি নিজের ফাইল ম্যানেজারে অন্য কোনও ফাইল টাইপের সংস্থার মতো ফাইল হ্যান্ডলার স্ক্রিপ্টটি নিবন্ধভুক্ত করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.