উইন্ডো ম্যানেজার কীবাইন্ড থেকে সর্বশেষ ব্যবহৃত একটির ডিরেক্টরিতে আমি কীভাবে একটি নতুন টার্মিনাল খুলতে পারি?


25

আমি একটি টাইলিং উইন্ডো ম্যানেজার ব্যবহার করছি এবং আমি উইন্ডো ম্যানেজার দ্বারা পরিচালিত gnome-terminalএকাধিক ট্যাবগুলি থেকে একাধিক ট্যাবগুলিতে স্যুইচ করেছি urxvt। আমি যে বৈশিষ্ট্যগুলি মিস করেছি তার মধ্যে একটি নতুন টার্মিনালটি খোলার ক্ষমতা যা সর্বশেষের কার্যকরী ডিরেক্টরিতে ডিফল্ট হয়।

সংক্ষেপে: আমার একটি নতুন urxvt (বাশ) খোলার একটি উপায় দরকার যা সর্বশেষ ব্যবহৃত of পিডাব্লুডির ডিফল্ট।

আমার মনে আসার একমাত্র সমাধান হ'ল প্রত্যেকটির বর্তমান পথটিকে এই জাতীয় cdকিছু দিয়ে সংরক্ষণ করা :

echo $PWD > ~/.last_dir

এবং এইভাবে নতুন টার্মিনালের পাথটি পুনরুদ্ধার করুন:

cd `cat ~/.last_dir`

আমি দ্বিতীয় কমান্ডটি উত্স করতে .bashrcপারি তবে প্রতিটি ডিরেক্টরি পরিবর্তনে প্রথমটি কীভাবে কার্যকর করতে হয় তা আমি জানি না :)

জড়িত screenবা tmuxব্যবহার না করে এমন কোনও সহজ সমাধান স্বাগত।


আপনি কি " tabbed" পার্ল এক্সটেনশন ব্যবহার করছেন urxvt?
rozcietrzewiacz

কোনও ট্যাব নেই, আমি ডাব্লুএম দ্বারা পরিচালিত নতুন টার্মিনালগুলি ব্যবহার করছি
লুকা

উত্তর:


9

আমি তিনটি সমাধান ব্যবহার করে দেখছি .last_dir। আপনি যে কোনওটি রাখতে echo $PWD > ~/.last_dirপারেন:

  1. একটি বিশেষ ফাংশনে যা এর জন্য একটি মোড়ক হবে cd:

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }

    এটি আপনার মধ্যে রাখুন ~/.bashrcএবং তারপরে cd_আপনি যখন নিজের নতুন ওয়ার্কিং ডিরেক্টরিটি সঞ্চয় করতে চান তখন প্রতিবার সিডির পরিবর্তে ব্যবহার করুন।

  2. আপনার $PROMPT_COMMAND( প্রস্তাবিত নয় ):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"

    আপনি এটি টার্মিনাল থেকে সরাসরি পরীক্ষা করতে পারেন বা এটি স্থাপন করতে পারেন ~/.bashrc। তবে এই সমাধানটি প্রতিবার প্রম্পট উপস্থিত হওয়ার সাথে সাথে একটি ডিস্ক লেখার ট্রিগার করে যা সমস্যার কারণ হতে পারে - তবে অন্যদিকে .last_dirআপনি সেখানে কীভাবে এসেছেন তা বর্তমান ডিরেক্টরিটি ধারণ করে।

  3. একটি কাস্টম সালে পার্ল এক্সটেনশন স্ক্রিপ্ট জন্য rxvt। আমি নিজেই একটি তৈরি করি নি তবে আপনি ওয়েবে বেশ কয়েকটি উদাহরণ খুঁজে পেতে পারেন।


PROMPT_COMMAND এটাই আমি খুঁজছিলাম। আমি এই সমাধানটি চেষ্টা করে দেখব যে এটি কোনও পারফরম্যান্সকে প্রভাবিত করবে না।
লুকা

ঠিক আছে, এটি সত্যিই একটি অপরিশোধিত উপায়। ব্যক্তিগতভাবে, আমি মাইকের সমাধানটি সবচেয়ে পছন্দ করি :)
rozcietrzewiacz

1
আমি পার্ল এক্সটেনশন উপায় পছন্দ করি, যদি এটি টার্মিনালের বাইরে কাজ করার প্রয়োজন হয়; এটি কোনও কিছু হ্যাক করার চেয়ে পরিচ্ছন্ন বলে মনে হয় PROMPT_COMMAND,
সর্বকালের অন্যতম আপত্তিজনক

দেখে মনে হচ্ছে $ পিডব্লিউডি কেবলমাত্র প্রথমবারই মূল্যায়ন করা হয়েছে
লুকা

@ নিও আআআ ... দুঃখিত সমস্যাটি কীভাবে PROMPT_COMMAND উদ্ধৃত হয় তা নিয়ে। (বরং বা, কিভাবে $PWDহয় না উদ্ধৃত।) আমাকে এই স্থির ... আছে যাক। এটি করা উচিত।
rozcietrzewiacz

13

আমি বর্তমানে # 1 সমাধানের এই সংস্করণটি ব্যবহার করছি

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

আমার ভিতরে .zshrc


আমি # 1 সমাধানটিও ব্যবহার করছি এবং trap "[ -f ~/.last_dir ] && rm ~/.last_dir" EXITআমি নতুন ট্যাব খোলার ব্যতীত আমার বাড়িতে সর্বদা শুরু করতে চাই
rkmax

auto_cdZsh এর বৈশিষ্ট্যটি ব্যবহার করা হলে এটি কাজ করে না । দেখা যাচ্ছে যে zsh সরবরাহ করে এমন একটি হুক ব্যবহার করতে পারি: gist.github.com/jonleighton/1f0b96b49247a07dbaa30fbbe70b34f7
jonleighton

12

এটি আসলে বেশ তুচ্ছ; আপনি যদি urxvtআপনার বিদ্যমান urxvtউইন্ডো থেকে চালনা করেন তবে নতুন উইন্ডোটি একই ডিরেক্টরিতে থাকবে। আমি এই কারণে dupআলিয়া করেছি urxvt &। আপনি যদি এটি হটকের সাথে আবদ্ধ থাকতে চান তবে আপনি বাশের bindআদেশটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, এটিকে আবদ্ধ করতে F1:

$ bind '"\e[11~": "urxvt &\n"'

ভকভগক. আমি জানতাম যে টার্মিনাল চাইল্ড প্রক্রিয়াগুলি রাষ্ট্র বজায় রাখে তবে আমি জানতাম না যে আপনি বাশ-এ কোনও কমান্ডের চাবি বাঁধতে পারেন। টার্মিনালের উপর দৃষ্টি নিবদ্ধ করা এড়াতে আমি ডাব্লুএম থেকে এটি করতে চাই।
লুকা

আমি এটা পছন্দ করি। আপনি যখন নতুন টার্মিনালটি খুলতে চলেছেন তখন কোনও ডিস্ক লেখেন না এবং একমাত্র সম্পাদন ঘটে।
rozcietrzewiacz

আমি পরিবর্তন করেছি ( urxvt & ) &>/dev/nullকেবলমাত্র ব্যাকগ্রাউন্ডিংয়ের পরিবর্তে ব্যবহার করা।
rozcietrzewiacz

এই সমাধানটি দুর্দান্ত এবং আরও নমনীয় তবে আমি 2 টি বাইন্ডিং ব্যবহার করতে পছন্দ করি না, একটিটি টার্মিনাল আরম্ভ করতে একটি এবং একটি নতুন কাঁটাচামচ ব্যবহার করতে।
লুকা

4

একই বৈশিষ্ট্যটি পেতে . /etc/profile.d/vte.shআপনার যুক্ত করুন~/.bashrc


এই কাজ, তবে, কেন এই -1 বিরক্ত?
আবদুল্লাহ

এটি কাজ করে এবং দেখে মনে হচ্ছে এটি আসলে লঞ্চপ্যাডে / জিনোম-টার্মিনাল দেবগুলির
Ajax

4

অবশ্যই এটি cdআচরণের পরিবর্তনের জন্য একটি কার্যকারী পদ্ধতি , তবে আমি আরও একটি সহজ সমাধান দেখাতে চাই। ইন মানুষ ব্যাশ (1) আমি দেখেছি যে একটি ইন্টারেক্টিভ যদি প্রস্থান করে এটা রান ~/.bash_logoutযদি বিদ্যমান। সুতরাং cdসর্বশেষ পাথের প্রতিটি অনুরোধে পাথটি সংরক্ষণ করার পরিবর্তে প্রস্থান করার সময় সংরক্ষণ করা যায়।

আমার ~/.bash_logoutখুব সহজ:

echo $PWD >~/.lastdir

এবং আমার কোথাও .bashrcআমি এই লাইনটি রেখেছি :

[ -r ~/.lastdir ] && cd $(<~/.lastdir)

1
কেবলমাত্র নোট করুন যে প্রস্থান করার .bash_logoutসময় কেবল চালিত হয় login shells, এটি সবসময় হয় না।
হেনফাইবার

1
বিকল্পভাবে, এর bashসাথে প্রস্থান করার সময় শেষ পথটি সংরক্ষণ করুন : trap "echo $PWD > ~/.lastdir" EXIT"
হেনফাইবার

আপনার মন্তব্যগুলির জন্য ধন্যবাদ! আমি মনে করি এই ক্ষেত্রে শেলটি একটি লগইন শেল, সুতরাং এটি সঠিকভাবে আচরণ করবে। অন্যদিকে trapঅ্যাপ্রোচটিও দুর্দান্ত, আমি এটি পছন্দ করি!
18

2

খুব প্রায়ই আমি একাধিক টার্মিনাল উইন্ডো ব্যবহার করি, এতে প্রতিটি একাধিক ট্যাব রয়েছে। উদাহরণস্বরূপ: সোর্স কোড ডেভলপমেন্ট ট্যাবগুলির জন্য একটি উইন্ডো, ল্যাটেক্স ফাইলগুলির জন্য একটি উইন্ডো, আর এক্সিকিউশন এবং স্ক্রিপ্টিংয়ের জন্য একটি উইন্ডো ইত্যাদি one (এটি অতীতে কাজ করত, তবে নতুন জিনোম সংস্করণ দিয়ে, কোনওভাবে এটি হয় না)। নিম্নলিখিত নোংরা সমাধানটি আমার পক্ষে কাজ করে। আমি এটি .bashrc এ রেখেছি।

dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] &&  {
    savdir=`cat $dirfilename`
    cd "$savdir"
}

function cd ()
{
    builtin cd "$@"
    echo $PWD > $dirfilename
}

এটা নিখুঁত ... ওহো! ধন্যবাদ। হ্যাকিং ব্যাশ সম্পর্কে আমি খুব বেশি কিছু জানি না, তবে মানুষ আমি ইতিমধ্যে এটি ভালবাসি ...
apil.tamang
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.