Zsh এর ডান প্রম্পটের শেষে অকেজো স্থানটি অপসারণ করা হচ্ছে ($ RPROMPT)


18

Zsh এ, আমার ডান প্রম্পটের ডানদিকে সর্বদা একটি স্থানের অক্ষর রয়েছে। আমি খুব সাধারণ .zshrc দিয়ে চেষ্টা করেছি যেমন:

PROMPT="#"
RPROMPT="*"

পর্দার ডানদিকে * এর পরে সর্বদা একটি স্থান থাকে।

এখানে সমস্যাটি দেখাচ্ছে এমন একটি স্ক্রিনশট রয়েছে (আমি লাইনের একটিতে স্থানটি নির্বাচন করেছি)। http://i.imgur.com/cnfa2eJ.png

ধন্যবাদ।

উত্তর:


20

টি এল; ডিআর

আপনাকে যা করতে হবে তা হ'ল এটি আপনার ~/.zshrc(বা আপনার প্রম্পট থিম হিসাবে একই ফাইলে) রাখা উচিত:

ZLE_RPROMPT_INDENT=0

বিস্তারিত

জেডএসএইচ এর সংস্করণগুলিতে জিএসএইচ এর সি সোর্স কোড rprompt_off(যার ডান-মার্জিন অফসেট সেট করে) নামক একটি মানকে কোডডযুক্ত 5.0.2 অবধি পৌঁছেছে1

কিন্তু 5.0.5 রিলিজে বিকাশকারীরা ZLE_RPROMPT_INDENTপরিবেশ পরিবর্তনশীল সেট করে এই ডিফল্ট মানটিকে ওভাররাইড করার ক্ষমতা যুক্ত করে ।

যুক্তিপূর্ণ এই "ইন্ডেন্ট" জন্য কারণ কিছু পুরোনো টার্মিনাল স্ক্রলিং যদি প্রদর্শন সর্বশেষ সেল এটি একটি চরিত্র ছিল শুরু হবে।

5.0.5 এর আগে জেডএসএইচ সংস্করণগুলির জন্য

আপনি যদি জেডএসএইচের কোনও পুরানো সংস্করণে রয়েছেন এবং আপডেট করতে না পারেন তবে আপনি নিম্নলিখিত দুটিটি করেই সেই স্থান থেকে মুক্তি পেতে পারেন:

  1. আপনার আরপিআরএমপিটি আসলে স্ট্যান্ডার্ড অদৃশ্য সিকোয়েন্স র‌্যাপারটি ব্যবহার করে তুলনায় এটি একটি চরিত্রের চেয়ে ছোট আকারে ভাবার জন্য জেডএসএইচটিকে ট্রিক করুন :%{...%}
  2. তারপরে টার্মিনফো ব্যবহার করে কার্সার-পিছনে পালানোর ক্রম পাঠানো হচ্ছে: %{terminfo[cub1]}

পরীক্ষা করে দেখুন প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী এবং এই বার্তাটি আরও তথ্যের জন্য মেইলিং তালিকা।


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

আমার জন্য কাজ করে 5.2।
অ্যান্টনি মাইকেল কুক

5
এটি আমার জন্য 5.2 তে কাজ করেছে, তবে এখন আমার কাছে প্রম্পট নিয়ে সমস্যা রয়েছে: প্রম্পটে শেষ চরিত্রটি অদৃশ্য হয়ে গেছে এবং টগলিং স্বতঃপূরণ বর্তমান অক্ষরের সাথে প্রথম অক্ষরটি পূরণ করে with উদাহরণস্বরূপ%git<Tab>%ggit
রোবস্লোন

জেডএসএইচের নতুন সংস্করণগুলির জন্য আপনার কৌশলগুলি ব্যবহার করার দরকার নেই।
অ্যান্টনি মাইকেল কুক

5
ZLE_RPROMPT_INDENT = 0 সেট করার পরে আমি বাম পাশের প্রম্প্টের সাথে একই অঙ্কন গ্লুইচের সমস্যাগুলি লক্ষ্য করেছি যা উপরে অন্য কেউ কেউ উল্লিখিত হয়েছে। তবে, আমি যদি 0 এর পরিবর্তে -1 ব্যবহার করি, অর্থাৎ ZLE_RPROMPT_INDENT = -1 ব্যবহার করি তবে প্রায় সমস্ত কিছুই প্রত্যাশার মতো কাজ করে। আমি এই টিপটি github.com/bhilburn/powerlevel9k/issues/…দেখেছি । প্রায়, কারণ -1 দিয়ে এটি কখনই ম্যাকোজে টার্মিনাল উইন্ডোর নীচের লাইনটি ব্যবহার করে না।
মার্ক লিয়্যানেজ

2

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

brew install https://gist.github.com/padde/7963205/raw/eaedcc557859a40db87282fc39256fccd52d0aad/zsh.rb

আপনি সম্ভবত যোগ /usr/local/bin/zshকরতে চান /etc/shellsএবং chsh -s /usr/local/bin/zshতারপরে। শেষ অবধি, যে আগ্রহী তার পক্ষে কাঁচা পার্থক্য এখানে:

diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c
index 17b78ce..f136178 100644
--- a/Src/Zle/zle_refresh.c
+++ b/Src/Zle/zle_refresh.c
@@ -1576,7 +1576,7 @@ zrefresh(void)
    else
        put_rpmpt = rprompth == 1 && rpromptbuf[0] &&
        !strchr(rpromptbuf, '\t') &&
-       (int)ZR_strlen(nbuf[0]) + rpromptw < winw - 1;
+       (int)ZR_strlen(nbuf[0]) + rpromptw < winw;
     } else {
 /* insert >.... on first line if there is more text before start of screen */
    ZR_memset(nbuf[0], zr_sp, lpromptw);
@@ -1631,9 +1631,9 @@ zrefresh(void)
    if (put_rpmpt && !iln && !oput_rpmpt) {
        int attrchange;

-       moveto(0, winw - 1 - rpromptw);
+       moveto(0, winw - rpromptw);
        zputs(rpromptbuf, shout);
-       vcs = winw - 1;
+       vcs = winw;
    /* reset character attributes to that set by the main prompt */
        txtchange = pmpt_attr;
        /*

পিডব্লিউএস (জেডএস রক্ষণাবেক্ষণকারী) সবেমাত্র একটি বর্ধিত প্যাচ পোস্ট করেছে , যাতে আরপিআরএমপিটি ইনডেন্টেশন শীঘ্রই ,, অফিসিয়াল '' উত্সগুলিতে হওয়া উচিত।
এমপি

লিঙ্কটি পোস্ট করার জন্য ধন্যবাদ। পরবর্তী প্রকাশের অপেক্ষায়!
প্যাট্রিক অসিটি

1

আমি মনে করি ডানদিকে সাদা স্থান কঠোর কোডেড। তবে আপনি zshনিম্নলিখিত সেটিংটি চালিয়ে যেতে পারেন :

RPROMPT="%{*%}"

যা নীতিগতভাবে বলে zshযে নক্ষত্রের কোনও চরিত্র নেই; থেকে man zshmisc:

%{...%} আক্ষরিক পালানোর ক্রম হিসাবে একটি স্ট্রিং অন্তর্ভুক্ত করুন। ধনুর্বন্ধনী মধ্যে স্ট্রিং কার্সার অবস্থান পরিবর্তন করা উচিত নয়। (...)

অপূর্ণতাটি হ'ল, আপনি খালি "শিফট" করে শেষে PROMPT:

| PROMPT = "#" |
| RPROMPT = "% {*%}" |
| # # ■ * |

|প্রতীক টার্মিনাল প্রান্ত বোঝাতে, কার্সার ■।


অন্য ধারণাটি COLUMNS1 দ্বারা বাড়ানো হবে :

COLUMNS=$((COLUMNS + 1))

তবে একটিকে কেবল প্রম্পট রেন্ডারিংয়ের জন্য কীভাবে এটি করা যায় তার উপায়গুলি চিন্তা করতে হবে, তবে আদেশগুলি নয়। এবং এটি একটি বহু-লাইন কমান্ড লাইনের প্রতিটি লাইনের শেষ অক্ষরটি গ্রাস করবে।


1
ধন্যবাদ। আমি ডানদিকে প্রদর্শিত আমার সময় এবং গিট স্ট্যাটাসের সাথে ডিল করে,% {...%} ট্রিকের সাথে খেলতে চেষ্টা করেছি। আমি প্রম্পটে অতিরিক্ত স্থান কিছু মনে করি না কারণ আমার সাধারণত একটি থাকে। যাইহোক, এই সমাধানটির মধ্যে একটি বড় অসুবিধা রয়েছে: আমি যখন
ট্যাবের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.