আমি কি উইন্ডোটির উল্লম্ব মাঝখানে টার্মিনাল প্রম্পট পেতে পারি?


1

আমি কেবল বুঝতে পেরেছি যে টার্মিনালটি ব্যবহার করার সময় আমি প্রচুর ঝুঁকি নিচ্ছি যেহেতু প্রম্পটটি সর্বদা টার্মিনাল উইন্ডোর নীচে থাকে, যা উল্লম্বভাবে সর্বোচ্চ হয় im

আমি প্রম্পটটি উইন্ডোটির উল্লম্ব মাঝখানে (অথবা আমার চোখের দিকে যেদিকে অবস্থিত তার কাছাকাছি অবস্থানে) থাকতে চাই like

আপনি তর্ক করতে পারেন যে আমি উইন্ডোটির আকার পরিবর্তন করতে এবং এটি অর্জন করতে পারি তবে কখনও কখনও আমি উল্লম্ব স্থানটি পছন্দ করি (যেমন: চলমান সময় ls -la)। সুতরাং, আদর্শভাবে, আমি কিছু বিন্দু এবং উইন্ডোর নীচের মধ্যে প্রম্পটের অবস্থানটি টগল করতে পারি।

(আমি zsh সহ ম্যাকওএসের অধীনে আইটার্ম ব্যবহার করছি তবে আমি এটি করার একটি অজ্ঞেয়াদি / জেনেরিক পদ্ধতিতে আগ্রহী)

উত্তর:


2

নিম্নলিখিত কোড (zsh বৈশিষ্ট্য ব্যবহার করে, তবে প্রিসপেলটি অন্যান্য শাঁসের সাথেও ব্যবহার করা যেতে পারে) দুটি শেল ফাংশন সংজ্ঞায়িত করে prompt_middleএবং prompt_restore

প্রথম ফাংশনটি প্রম্পটের নীচে উপযুক্ত সংখ্যক খালি লাইন জোর করে প্রম্পটটিকে সর্বদা টার্মিনালের মাঝের উপরে রাখে। পরবর্তী ফান্ট স্বাভাবিক আচরণ পুনরুদ্ধার করে।

আপনি এই শুল্কগুলিকে কিছু শর্টকাটগুলিতে বরাদ্দ করতে পারেন বা এই দুটি মোডের মধ্যে টগল করার জন্য কিছু যুক্তি ব্যবহার করতে পারেন।

# load terminfo modules to make the associative array $terminfo available
zmodload zsh/terminfo 

# save current prompt to parameter PS1o
PS1o="$PS1"

# calculate how many lines one half of the terminal's height has
halfpage=$((LINES/2))

# construct parameter to go down/up $halfpage lines via termcap
halfpage_down=""
for i in {1..$halfpage}; do
  halfpage_down="$halfpage_down$terminfo[cud1]"
done

halfpage_up=""
for i in {1..$halfpage}; do
  halfpage_up="$halfpage_up$terminfo[cuu1]"
done

# define functions
function prompt_middle() {
  # print $halfpage_down
  PS1="%{${halfpage_down}${halfpage_up}%}$PS1o"
}

function prompt_restore() {
  PS1="$PS1o"
}

ব্যক্তিগতভাবে দুটি মোডের মধ্যে টগল করার পরিবর্তে আমি আরও সহজ পদ্ধতির ব্যবহার করব (আপনার $halfpage_up/downউপরের সংজ্ঞাটি দরকার ):

magic-enter () {
    if [[ -z $BUFFER ]]
    then
            print ${halfpage_down}${halfpage_up}$terminfo[cuu1]
            zle reset-prompt
    else
            zle accept-line
    fi
}
zle -N magic-enter
bindkey "^M" magic-enter

বর্তমান কমান্ড লাইনটি ফাঁকা আছে কিনা তা পরীক্ষা করে (আমার অন্য উত্তরটি দেখুন ) এবং যদি প্রম্পটটি টার্মিনালের মাঝখানে উপরে নিয়ে যায়। এখন আপনি ENTERকীটির একটি অতিরিক্ত প্রেস দিয়ে আপনার প্রম্পটটিকে দ্রুত-ফরওয়ার্ড করতে পারেন (বা সম্ভবত আপনি এটি ডাবল-ক্লিকের অনুরূপ ডাবল-প্রেস বলতে চান )।

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