জেডএস-টার্মিনাল পুনরায় শুরু করুন (ওএস এক্স সিংহ)


17

ওএস এক্স লায়নের "পুনঃসূচনা" বৈশিষ্ট্য রয়েছে, অর্থাত্ আপনি যখন কোনও অ্যাপ্লিকেশনটি পুনরায় খুলবেন এটি সমস্ত উইন্ডো এবং তাদের সামগ্রীগুলি পুনরুদ্ধার করে। এটি টার্মিনালের জন্যও কাজ করে। তবে আপনি যদি বাশের পরিবর্তে Zsh ব্যবহার করেন তবে এটি খোলা ডিরেক্টরিটি পুনরুদ্ধার করে না। আমি এটা কিভাবে ঠিক করবো?


নীচের উত্তরের সাথে সম্পর্কিত: ডিরেক্টরি সম্পর্কে সচেতন হওয়া টার্মিনাল.এপ তৈরি করা বর্তমান ডিরেক্টরি হিসাবে একই ডিরেক্টরিতে নতুন টার্মিনালগুলি খোলার জন্যও কার্যকর
nhooyr

উত্তর:


18

আপডেট : মন্তব্যগুলিতে উল্লিখিত কারণে এটি পুরোপুরি সঠিক নয়। নীচের উত্তরটি ব্যবহার করুন । অতিরিক্ত মাইল যাওয়ার জন্য @ ক্রিসপেজকে ধন্যবাদ :)

উত্তরটি কীভাবে ব্যাশ এটি করে তা বিপরীত প্রকৌশল দ্বারা পাওয়া যাবে /etc/bashrc। আমি নেট থেকে আশেপাশের অনেকগুলি পদ্ধতির চেষ্টা করেছি তবে অ্যাপলের উপায়টি সবচেয়ে ভালভাবে কাজ করছে বলে মনে হচ্ছে (যান চিত্র)।

আপনার .zshrcনিম্নলিখিত যোগ করুন

# Set Apple Terminal.app resume directory
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
  function chpwd {
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
  }

  chpwd
}

শুভ পুনরায় শুরু।

স্পষ্টতার জন্য, এই উত্তরটি ওএস এক্স সিংহের টার্মিনাল.অ্যাপ পছন্দগুলিতে রহস্যময় বার্তার সাথে সম্পর্কিত:

** প্রোগ্রামগুলি এস্কেপ সিকোয়েন্স ব্যবহার করে বর্তমান ওয়ার্কিং ডিরেক্টরিটির টার্মিনালকে অবহিত করে। এই আচরণটি সক্ষম করতে আপনার শেল বা অন্যান্য প্রোগ্রামগুলি কনফিগার করতে হবে *

আপনি যখন শেল হিসাবে zsh ব্যবহার করছেন তখন এই উত্তরটি কাজ করে। ব্যাশের টার্মিনাল রেজ্যুম ইতিমধ্যে অ্যাপল প্রয়োগ করেছে।


1
সম্ভবত অনুশীলনে কোনও বড় জিনিস নয় তবে আমি দেখতে পাচ্ছি যে স্টক / ইত্যাদি / বাশার্কের ডাবল উদ্ধৃতিগুলির chpwdমতো শেষ লাইন রয়েছে printf '\e]7;%s\a' "$PWD_URL"। টিপ জন্য ধন্যবাদ.
রায়ান ম্যাককুইগ

এটি এখন ওহ-মাই- জেডএস -এ প্রবেশ করছে (দেখুন github.com/robbyrussell/oh-my-zsh/pull/522 )। আপনাকে নিশ্চিত করতে হবে যে আপনি আপনার zshrc এ অসক্স প্লাগইন চালু করেছেন।
রায়ান ম্যাককুইগ

2
এছাড়াও মনে রাখবেন যে এই কোডটি কেবল শতাংশ-এনকোড স্পেসগুলি। বোনাস পয়েন্টগুলির জন্য, এটি সমস্ত অবৈধ ইউআরএল অক্ষরকে শতাংশ-এনকোড করুন (এবং কোনও প্রোগ্রাম না চাওয়ার মাধ্যমে আপনি এটি করতে পারেন কিনা দেখুন)। এটি গুরুত্বপূর্ণ যদি আপনি এটির জন্য সমস্ত বৈধ পঠনামের সাথে কাজ করতে চান। এছাড়াও, কিছু অক্ষর এমনকি অব্যাহতি ক্রমের অংশ হিসাবে বিবেচনা করা হয় না, সুতরাং সেগুলি টার্মিনালে পাওয়ার জন্য শতাংশ-এনকোডিং প্রয়োজন required আমি ব্যাশের জন্য এটি করতে সক্ষম হয়েছি, তবে আমি zsh দিয়ে এটি পরীক্ষা করার চেষ্টা করিনি।
ক্রিস পেজ

1
"$ PWD_URL" এর আশেপাশের উদ্ধৃতিগুলি পাথের নামটি কান্ড থেকে আটকাতে প্রয়োজন। সম্পাদনা: এটি ব্যাশে প্রয়োজনীয়, তবে zsh এ alচ্ছিক। আমি উদ্ধৃতিগুলি ধারাবাহিকভাবে ব্যবহার করতে পছন্দ করি তাই এটি পোর্টেবল।
ক্রিস পেজ

ধন্যবাদ রায়ান, ক্রিস। ধারাবাহিকতার জন্য ডাবল উদ্ধৃতিগুলি ব্যবহার করতে আমি স্ক্রিপ্টটি আপডেট করেছি।
অধিনায়ক

27

এখানে zsh এর জন্য আমার / ইত্যাদি / বাশার্কের অভিযোজন's আমি প্রয়োজনীয় সমস্ত ইউআরএল অক্ষরগুলির শতাংশ-এনকোডিং অন্তর্ভুক্ত করেছি, যা গুরুত্বপূর্ণ যদি আপনি এটি সমস্ত বৈধ ফাইল এবং ডিরেক্টরি নামের সাথে কাজ করতে চান।

এটি একটি precmdহুক নিবন্ধন করে , যা অন্য স্ক্রিপ্ট এবং কনফিগারেশন ফাইলগুলিতে একাধিক ফাংশন নিবন্ধিত করতে দেয়।

আপডেট মার্চ 2019: LC_ALLখালি সেট করুন যাতে এটি ওভাররাইড হয় না LC_CTYPE। ব্যবহারের precmdপরিবর্তে ব্যবহার প্রতিটি প্রম্পটে কাজ ডিরেক্টরি আপডেট করার জন্য chpwdএটি প্রত্যেক সময় এটা পরিবর্তন করা-কমান্ড পাইপলাইনগুলি এটা সাময়িকভাবে পরিবর্তন হতে পারে এবং টার্মিনাল ঐ প্রদর্শন করা উচিত নয় আপডেট করার জন্য। এছাড়াও, পূর্ববর্তী কমান্ড চলাকালীন প্রতিটি প্রম্পট টার্মিনাল অবস্থার আপডেট করা সহায়ক হতে পারে। printf -vসাব-শেল সিনট্যাক্স ব্যবহার না করে সুস্পষ্টভাবে ভেরিয়েবলটিতে লিখতে ব্যবহার করুন।

# Tell the terminal about the working directory whenever it changes.

if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then

    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL, including
        # the host name to disambiguate local vs. remote paths.

        # Percent-encode the pathname.
        local url_path=''
        {
            # Use LC_CTYPE=C to process text byte-by-byte. Ensure that
            # LC_ALL isn't set, so it doesn't interfere.
            local i ch hexch LC_CTYPE=C LC_ALL=
            for ((i = 1; i <= ${#PWD}; ++i)); do
                ch="$PWD[i]"
                if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
                    url_path+="$ch"
                else
                    printf -v hexch "%02X" "'$ch"
                    url_path+="%$hexch"
                fi
            done
        }

        printf '\e]7;%s\a' "file://$HOST$url_path"
    }

    # Register the function so it is called at each prompt.
    autoload add-zsh-hook
    add-zsh-hook precmd update_terminal_cwd
fi

ধন্যবাদ, গৃহীত সমাধানটি আমার পক্ষে কার্যকর হয়নি তবে এটি কার্যকর করে does
ইয়েলকো

এটি আমার জন্যও কাজ করছে।
সিকাচু

4
এটিও লক্ষ করা উচিত যে এই সমাধানটি ইতিমধ্যে ওহ-মাই-জেডএসে রয়েছে , কেবল terminalappপ্লাগইনটি সক্রিয় করুন ।
সাইমন

1
কেবল স্পষ্ট করে বলতে গেলে, @ সিমনের অর্থ এটি এখন ওহ-মাই-জেডএস-এ রয়েছে, যেহেতু এই উত্তরটি লেখা হয়েছিল।
ক্রিস পেজ

এটি ঠিক ক্রিসপেজ সঠিক, আমি দ্ব্যর্থহীন শব্দবন্ধের জন্য ক্ষমা চাইছি (ইংরেজি আমার মাতৃভাষা নয়)। আমি যা বলতে .zprofileচাইছিলাম তা হ'ল, আপনার এটি বা আপনার যা কিছু আছে তা পেস্ট করার দরকার নেই , বাস্তবে এটি উপলব্ধ হওয়ার আগে বুঝতে পেরেছিলাম oh-my-zsh। এটি ঠিক একই সমাধানে কাজটি করে এবং আপনি সমস্ত creditণ প্রাপ্য।
সাইমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.