একটি টার্মিনালের ফাঁকা স্থান / পটভূমি ASCII অক্ষরের এলোমেলো (তবে সুন্দর) প্যাটার্ন দ্বারা প্রতিস্থাপন করা যাবে?


23

প্রসঙ্গ এবং প্রশ্ন

টার্মিনাল এবং শেল পরিবেশকে রঙিন করার বিভিন্ন উপায় রয়েছে । যেমন পৃথক আদেশ, আউটপুট lsএবং grep, এছাড়াও রঙীন করা যেতে পারে। সরাসরি সম্পর্কিত নয় তবে আকর্ষণীয় তবুও কনসোলে মিডিয়া প্লে করার ধারণাটি তবে এটি উইন্ডোটিং সিস্টেমের শীর্ষে কিছু ফ্রেমওয়ার্ক (গ্রন্থাগার) এর উপর নির্ভর করে। নিম্নলিখিত প্রশ্নটি সম্পূর্ণ bashশেল এবং লিনাক্স টার্মিনাল ফ্রেমওয়ার্ক এবং এর আন্ডারপাইনগুলিতে এর প্রয়োগের জন্য প্রস্তুত ge

দয়া করে 2D গেমের একটি দৃশ্যের ASCII "রেন্ডারিংস" এর নীচের পূর্ণাঙ্গতা বিবেচনা করুন :

বামন দুর্গ গেম থেকে প্রকৃতি দৃশ্য (গাছ, গুল্ম, ফুল, ঘাস) - প্রথম 2 স্ক্রিন কোনও টাইলসেট (কেবলমাত্র ASCII) না দিয়ে গেমটি দেখায়, তৃতীয় স্ক্রিনটি ভারিড টাইলসেটের সাহায্যে তৈরি করা হয়, পরবর্তী 2 টি পর্দা তৈরি করা হয় সিএলএ টাইলসেট, এবং শেষ স্ক্রিনটি জলি বাশনের টাইলসেটের সাহায্যে উত্পন্ন হয়

এগুলি এলোমেলোভাবে উত্পন্ন দৃশ্য নয়। আমি যে সমস্ত বিভাগগুলি বেছে নিয়েছি সেগুলিতে এমন কোনও গেম থেকে "তৃণভূমি" ভূখণ্ডের কিছু গাছ (গাছ, গুল্ম এবং গুল্ম, ফুল, ঘাস ইত্যাদি) চিত্রিত করা হয়েছে যা এই জাতীয় সামগ্রীর প্রতিনিধিত্ব করতে ASCII অক্ষর ব্যবহার করে। সর্বশেষ 4 টি দৃশ্যের মাধ্যমে ব্যবহারকারী তৈরি টাইলসেটগুলি মূলত রঙের চশমাযুক্ত ASCII অক্ষরের একটি পুনর্নির্মাণ (যেমন বিশদ বিবরণ তুচ্ছ - এটি ভিজ্যুয়াল শর্তে আমি এখানে যা অর্জন করতে চাইছি তার জন্য ভিজ্যুয়াল অনুপ্রেরণা বলেই যথেষ্ট এবং " প্যাটার্ন ")।

মোটেজটি শেয়ারের সেই দৃশ্যগুলির সাধারণ বৈশিষ্ট্যগুলি হ'ল:

  • সর্বাধিক 5-6 টি ভিন্ন ভিন্ন ASCII অক্ষর (কমা, উদ্ধৃতি চিহ্ন এবং কয়েকটি অন্যান্য)
  • 2-4 রঙ ব্যবহৃত
    • অক্ষর জন্য
    • কিছু ক্ষেত্রে চরিত্রের ব্যাকগ্রাউন্ডের জন্য - সর্বশেষ উদাহরণটি এমন একটি প্যাটার্ন তৈরির জন্য রঙিন শেডের ব্যবহার সামান্য বা কোনও অক্ষরের সাথে দেখায় যেমন রঙ মোজাইক

এই মুহুর্তে আমার কাছে ভিএম-এ যা আছে তা হ'ল আর্ক লিনাক্স এবং যদিও প্রশ্নটি বিতরণ সুনির্দিষ্ট নয়, আমি ফাইলটি কাস্টমাইজ করার জন্য তাদের ডকুমেন্টেশনগুলি দেখেছি /etc/bash.bashrc। আমি দেখতে পাচ্ছি যে প্রচুর ব্যাখ্যাগুলি প্রম্পটের উপস্থিতি এবং সাধারণত সমস্ত পূর্বগ্রন্থের উপাদানগুলি কনফিগার করতে যায় । ব্যাকগ্রাউন্ডের জন্য কোনও কনফিগারেশন সম্পর্কিত খুব কম তথ্যই রয়েছে, সাধারণত একটি দৃ color় রঙ ছাড়া, যেমন এই সেটিংস এবং টিপস :

# Background
On_Black='\e[40m'       # Black
On_Red='\e[41m'         # Red
On_Green='\e[42m'       # Green
On_Yellow='\e[43m'      # Yellow
On_Blue='\e[44m'        # Blue
On_Purple='\e[45m'      # Purple
On_Cyan='\e[46m'        # Cyan
On_White='\e[47m'       # White

আমি এখনও ধারণাগতভাবে বুঝতে পারি না যে আমি খালি / ফাঁকা / ব্যাকগ্রাউন্ডের "স্পেস" কী লিখি যা আমি টাইপ করি নি যখন আমি কনসোলটি ব্যবহার করি অর্থাত "তারা কী দিয়ে তৈরি?" তাই কথা বলতে. বিশেষত যা প্রম্পটে নেই এবং যেগুলি আদেশগুলি প্রতিধ্বনিত হয় তার চারপাশে মোড়ানো। সক্রিয় লাইনে যা ঘটেছিল সে সম্পর্কে, এটি প্রদর্শিত সম্ভব যে bash"লাইন-ওরিয়েন্টেড" উপায়ে কাজ করে এবং কিছু ক্রিয়াকলাপ সক্রিয় লাইনের একটি ক্লিয়ারিংকে ট্রিগার করে ( for i in $(seq 1 $(expr $(tput lines) \* $(tput cols))); do echo -n M; done; tput cup 15 1তারপরে প্রম্পটে একটি চর টাইপ করে এটি ব্যাকস্পেসে প্রদর্শন করা হয়) একটি অবদানকারী) - যার পরিমাণ একটি সি এল এল থেকে অন্য যথা zsh এ পরিবর্তিত হতে পারে। তদ্ব্যতীত, মনে হয় যখন আমি \[\033[44m\]আমার পিএস 1 লাইনের মতো কিছু যুক্ত করব তখন আমি bash.bashrcপুনরায় লোড করার পরে একটি নীল পটভূমি পাই - সুতরাং স্পষ্টতই আমি জানি যে এখানে কিছু আছেব্যাকগ্রাউন্ড সম্পর্কিত হিসাবে আউটপুট উপস্থিতি insofar উপর এখানে উত্থাপন ।

তবে আমি আরও জানি যে বাশ একটি সফ্টওয়্যার টুকরা যা কিছু অন্যান্য সুবিধার উপর নির্ভর করে টিটিওয়াই সাবসিস্টেম আকারে জিনিসগুলিকে পর্দায় আনার জন্য - এবং এটি সেখান থেকে আমার ধরে নেওয়া কার্নেলের ভিটি উপাদানটিতে চলে যায় । pstree -Apঅন ​​আর্চ শোগুলিতে systemdযুক্ত হয় loginএবং তারপরে bash

আর্চ লিনাক্স ডিস্ট্রিবিউশন উপর নির্ভর agettyপির TTY পরিষেবার জন্য। একটি সাধারণ echo $TERMব্যবহারের ক্ষেত্রে টার্মিনালের ধরণের উত্পন্ন করবে (এখানে কোনও ডিই এর বাইরে "" লিনাক্স ") এবং infocmp[-d spec1 spec2]কোনও পরামিতি না থাকা কমান্ডটি টার্মিনালফো (5) টার্মিনাল ডাটাবেস থেকে সক্রিয় টার্মিনাল ক্ষমতা এবং প্রোফাইল তথ্য প্রদর্শন করবে :

# Reconstructed via infocmp from file: /usr/share/terminfo/l/linux
linux|linux console,
am, bce, ccc, eo, mir, msgr, xenl, xon,
colors#8, it#8, ncv#18, pairs#64,
acsc=+\020\,\021-\030.^Y0\333'\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l\E[?1c,
clear=\E[H\E[J, cnorm=\E[?25h\E[?0c, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[?8c, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, flash=\E[?5h\E[?5l$, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=^J,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, oc=\E]R,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m,
rmam=\E[?7l, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m,
rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smam=\E[?7h, smir=\E[4h,
smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c,
vpa=\E[%i%p1%dd,

যেমনটি দাঁড়িয়েছে, টার্মিনাল কাঠামো থেকে অনেকগুলি দক্ষতা অর্জন করা যায় এবং PS1 ভেরিয়েবল সেট করে প্রম্পটটি কাস্টমাইজ করা হওয়ায় এটি বৈশিষ্ট্যগুলি যা bash.bashrc কনফিগারেশন ফাইল ইনসোফারে প্রকাশিত হয়। টার্মিনাল তথ্য ডাটাবেসে বর্ণিত কার্সার এবং অন্যান্য ক্ষমতা সরিয়ে ফাংশন সরবরাহ করার জন্য মূলত টার্মিনালে প্রদর্শিত চরিত্রের প্রবাহকে বাধাগ্রস্ত করতে নিয়ন্ত্রণ এবং পালানোর ক্রমগুলি ব্যবহৃত হয় sequ এই ফাংশনগুলির অনেকগুলি সুপরিচিত ESC[(বা \ 33) কন্ট্রোল সিকোয়েন্স ইন্ট্রোডুসার ( এখানে এবং এখানে আরও ক্রম এবং কিছু উদাহরণ ) ব্যবহার করে পাস করা হয়েছে । তদ্ব্যতীত, এটি ব্যবহার করাও সম্ভবtputকিছু টার্মিনাল বৈশিষ্ট্য পরিবর্তন করতে সরাসরি সিএলআইয়ের ইউটিলিটি; উদাহরণস্বরূপ tput setab 4নীল পটভূমিতে বাশ ইকো কমান্ড থাকবে।

যদি আমরা strace bashপালিয়ে যাওয়ার ক্রম এবং ক্রিয়া আচরণ উভয়ই দেখতে পাই:

write(2, "[il@Arch64vm1 ~]$ ", 19[il@Arch64vm1 ~]$ ) = 19  //bash starts
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, " ", 1) = 1                                 //pressed <space>
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, " ", 1 ) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\177", 1) = 1                              //pressed <backspace>...
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "\10\33[K", ) = 4                          //triggers erasing the line
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\33", 1) = 1                               //pressed <esc> per se

এটি প্রশ্নের জন্য প্রসঙ্গটি সরবরাহ করে একটি টার্মিনালের ফাঁকা ফাঁকা স্থান / পটভূমির রঙ এএসসিআইআই অক্ষরের একটি এলোমেলো (তবে সুন্দর) সেট দিয়ে প্রতিস্থাপন করা যাবে? তবে কীভাবে বৈশিষ্ট্যগুলি প্রয়োগ করতে হবে বা টার্মিনালে আমি কী খুঁজছি সে সম্পর্কে কোনও ধারণা দেয় না।

সুতরাং আমি যদি এটি সম্ভব হয় তবে শেষের ফলাফলটি দেখতে কেমন হতে পারে তার একটি উদাহরণ হিসাবে একটি অশোধিত মকআপ তৈরি করেছি (কোনও গুরুত্ব সহকারে নয় :):

কেবলমাত্র একটি শক্ত কালো রঙের পরিবর্তে রঙিন ASCII অক্ষরের একটি সেট ব্যাকগ্রাউন্ড হিসাবে প্রদর্শন করছে এমন একটি টার্মিনালের মকআপ।  সম্পাদিত কমান্ডের আউটপুটকে ঘিরে প্যাটার্নটি মোড়ানো।  সক্রিয় কমান্ড লাইনের একটি আলাদা প্যাটার্ন / রঙ রয়েছে তবে শেলটির সম্পূর্ণ কার্যকারিতা সংরক্ষণ করার জন্য এই প্যাটার্নটি কখনই সিএলআই দ্বারা ব্যাখ্যা করা যায় না

মূলত টার্মিনালের সমস্ত "খালি স্থান" প্যাটার্ন দিয়ে ভরাট হবে (এখানে আমি উপরের চিত্রটির একটি "টালি" দিয়েছি তবে আমি প্রতিটি ব্যক্তির "ফাঁকা" এর প্রকৃত বাস্তবায়নে সেটটি থেকে এলোমেলোভাবে উত্পন্ন করতে চাই পূর্ণাঙ্গতা থেকে ডকুমেন্টেড 5-6 অক্ষর এবং বৈশিষ্ট্য যা নির্দিষ্ট করা হবে)। সক্রিয় কমান্ড লাইনের জন্য যেমন wেউয়ের "জল" এর জন্য আলাদা প্যাটার্ন রয়েছে তবে আমি লাইনটি নীল হওয়ার জন্য স্থির করব। যেমন এটি কল্পনা করা হয়েছিল, কমান্ডগুলি সক্রিয় লাইনে টাইপ করার সাথে সাথে "জল" "মুছে ফেলবে" এবং অবশ্যই একটি সীমাবদ্ধতা হ'ল অক্ষরের বিন্যাসটি সিআইএল দ্বারা কখনই ব্যাখ্যা করা হয় না অন্যথায় এটি এটিকে অকেজো করে তোলে।

bashটার্মিনাল ফ্রেমওয়ার্কে বা সঠিকভাবে কোনও কনফিগারেশন উন্মুক্ত হয়েছে , বা কোনও স্ক্রিপ্ট যা টার্মিনালে বাশের আউটপুট পরিবর্তন করতে বর্ণের একটি সেট এবং রঙের উপর কিছু নিয়ন্ত্রণ ব্যবহার করতে দেয় যাতে ব্যাকগ্রাউন্ডের জন্য কিছুটা এলোমেলো নিদর্শন তৈরি করতে পারে (যা আমি উপরে দেখিয়েছি তার অনুরূপ হবে)? বা টিটিটির ব্যাকগ্রাউন্ড হিসাবে পুরো প্যাটার্ন চিত্র সরবরাহ করার চেষ্টা করার মতো কিছু করার জন্য আমার কি সহজ সমাধান করা উচিত ?

বাস্তবায়নের

0.1 - প্যাটার্ননোটডি সংস্করণ (আপনি লগইন করার সময় একটি শট চুক্তি)

নীচের প্রকাশটি আমি আমার .bashrc ফাইলটিতে যুক্ত করেছি যা আমরা অনুসন্ধান করেছি এমন কিছু ধারণাকে একসাথে রেখেছি এবং স্ট্যান্ডার্ড লিনাক্স টার্মিনালে ভিজ্যুয়ালগুলির ধারণার একটি (খুব) প্রাথমিক প্রমাণটি গঠন করেছি:

for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 15; tput setab 4; echo -en "\E[2K"; tput setab 0

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

পর্যবেক্ষণ

  • এটি স্পষ্টতই একটি কমান্ড যাতে স্থির নয় অর্থাৎ কমান্ডগুলি টাইপ করার সাথে সাথে এটি স্ক্রোলটি সরে যায়
  • অক্ষরের নির্বাচনকে পৃথকভাবে এলোমেলো করে না বেছে নেওয়া অর্থাত্ head -c 1শুরু হওয়া tput colsবহুগুণিত রেখার সাথে, যা উদ্ধৃত নির্বাচন থেকে পৃথক এলোমেলো অক্ষর মুদ্রণ করবে - কারণ এটি খুব ধীর। আমি মনে করি না যে randomএকটি দীর্ঘ সংখ্যক (টিপুট কলস) জেনারেট করে তবে এটি আরও দ্রুত। অবশ্যই এটি সব খুব অপব্যয় তবে এটি কাজ করে।
  • চরিত্র অনুসারে কোনও রঙ বা প্রভাব এলোমেলোভাবে হয়নি বা অন্যথায় that সবুজ বাদে কারণ আমি যেমন প্রতিটি চরকে পৃথকভাবে রেন্ডারিং / প্রসেসিং করেছি তা খুব ধীর। পুনঃ ফ্রেমবফার?
  • আমি দেখে খুশি যে প্যাটার্নটি সিএলআই দ্বারা ব্যাখ্যা না করা অর্থে সিএলআই ব্যবহারে হস্তক্ষেপ করে না! (কেন যদিও আমি ব্যাখ্যা করতে পারি না)
  • জল খুব দ্রুত চলে গেছে! ;-)

0.2 - PROMPT_COMMAND হ্যাক কাজ

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

stty -echo; echo -n $'\e[6n'; read -d R x; stty echo; echo ${x#??}  //value is in x;x format so...

আমি মানটি পাইপ করতাম cut -f1 -d";"। আমি সিএলআইতে এটি করতে পারি তবে পিএস 1 / পি_সি ভেরিয়েবলের উপাদানগুলির অনুক্রমের অভ্যন্তরে এই কাজটি করা আমার মুহুর্তের বাইরে এবং এটি সম্ভব যে PROMPT_COMMAND এ যা কিছু কমান্ড দেওয়া হয়েছে তা প্রতিটি গাড়ীর ফেরতের সময় মূল্যায়ন না করা যেতে পারে প্রতিবার মৃত্যুদণ্ড কার্যকর হওয়া সত্ত্বেও কেবল একবার (?) (নীচের পর্যবেক্ষণগুলি দেখুন)।

তাই আমি যা করতে পারি তার সেরাটি হল আমার প্রাথমিক ক্রমটি বহন করা এবং PROMPT_COMMAND এবং .bashrc- তে PS1 ভেরিয়েবলের সংজ্ঞা উভয়টিতে কিছু কমান্ড যুক্ত করা। তাই ভালো:

PROMPT_COMMAND="echo -en '\E[32;32m'$(tr -dc ',.:~' < /dev/urandom | head -c $(echo "$[$(tput cols) * 2]"))"

PS1="$(echo -en '\n') $(tput setab 4)$(echo -en "\E[2K")$(tput setab 0)\[\033[7;32m\]df:\[\033[1;34m\] \W @d \[\033[0m\]\e[32m"

for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1; tput setab 4; echo -en "\E[2K"; tput setab 0

সংক্ষেপে আমি স্থায়ী ভিজ্যুয়াল প্যাটার্ন অর্থাৎ 2 টি লাইন যুক্ত হওয়ার চেষ্টা করার জন্য P_C ব্যবহার করছি। দুর্ভাগ্যক্রমে আমি আমার "জল" ট্রিকটির পুনরাবৃত্তি করার সময় যেমন অ্যাক্টিভ লাইন নীল (যা কেবল পটভূমির রঙ পরিবর্তন করে, একটি পরিষ্কার রেখা তৈরি করে, তারপর ব্যাকগ্রাউন্ডটিকে কালো রঙে পরিবর্তন করতে পারে) উভয়ই এই প্যাটার্নটি তৈরি করতে সক্ষম হতে পারি না। এটি কীভাবে একসাথে অভিনয় করে তা দেখানোর জন্য আমি একত্রে একটি চিত্র রেখেছি:

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

পর্যবেক্ষণ

  • একটি লাইনে ব্যাকস্পেস ব্যবহার করা এখনও স্পষ্ট লাইনের আচরণকে ট্রিগার করে এবং নীল হয়ে যায়
  • প্রতিবার এন্টার কী টিপলে নতুন সক্রিয় লাইনের আগে প্যাটার্নের 2 টি লাইন রয়েছে
  • অবশ্যই অতিরিক্ত লাইন থাকা সত্ত্বেও আমরা আরও নীচে দেখতে পাচ্ছি আমরা যেমন কমান্ডগুলির পাশে প্যাটার্নটি মোড়ানো করছি না ls
  • এখানে পি_সি-তে ডাকার সময় / দেব / ইউরানডমের এলোমেলো মনে হয় না। এই চিত্রটি 2 টি চিত্রের মধ্যে তৈরি, তবে এটি নেওয়া সহজ যে অতিরিক্ত 2 লাইন প্যাটার্নটি সর্বদা একই থাকে ie প্রতিটি এন্টার কিপ্রেসের সাথে এলোমেলোভাবে উত্পন্ন হয় না তবে দুটি লাইনের প্রতিটিটির জন্য কেবল একটি সময় - সম্ভবত প্রথমটি সময় .bashrc দ্বারা পড়া হয় bash
  • পিএস 1 ভেরিয়েবলের সামগ্রীটি শুরু হয় $(echo -en '\n') $(tput setab 4)- ভাল there (টিপুট ...) এর ঠিক আগে, মাঝখানে সেই জায়গাটি এটির কাজ করার জন্য সেখানে থাকতে হবে। অন্যথায় নীল রেখাটি প্রম্পটের উপরে প্রদর্শিত হবে এবং এর সামনে নয় এবং আমি এটি সমাধান করতে পারি না। এবং এই হ্যাকটি তার নামটি 0.2 এ দেয়। :)

0.3 - tput cuuএবংtput cud

for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[0;32m'$(tr -dc '",.o;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1

PROMPT_COMMAND="echo -en '\033[0;32m$(tr -dc ',;o.:~' < /dev/urandom | head -c $(tput cols))\n\033[36;44m$(tr -dc '~' < /dev/urandom | head -c $(tput cols))\033[0;32m$(tr -dc ',.o+;:~' < /dev/urandom | head -c $(tput cols))'$(tput cuu 2)"

PS1="\[\033[0m\] \[\033[1;32m\][1]\[\033[7;32m\]=2=:\W)\[\033[0;32m\]=3=\[\033[1;32m\]=4=@>\[\033[0;32m\]"

PROMPT_COMMAND দিয়ে যা করা হয় তা হ'ল প্রম্পট উত্পন্ন হওয়ার আগে প্রতিবার 3 লাইন নিদর্শন মুদ্রণ করা হয় - এবং সেই 3 সেটগুলি নিদর্শনগুলি 0.2 তে ব্যাখ্যা করা সীমাবদ্ধতার মধ্যে স্বতন্ত্রভাবে উত্পন্ন হয় - এটি পানির জন্য অর্থহীন কারণ এটি 1 চর তবে এখনও রয়েছে। তারপরে আমরা দুটি লাইন (ব্যবহার করে tput cuu 2) উপরে চলে যাই এবং পিএস 1 অনুসারে প্রম্পটটি মাঝের লাইনে উত্পন্ন হয়। আমাদের এখনও .bashrc লোডে পূর্ণ স্ক্রীন প্যাটার্নের জন্য আমাদের প্রাথমিক কমান্ডটি রয়েছে যা আমরা একবার টার্মিনালে লগ ইন করলেই একবার কার্যকর করা হয়। এখন আমাদের সক্রিয় লাইনের চারপাশে কিছু প্যাডিং রয়েছে যার নিজস্ব নীল প্যাটার্ন রয়েছে যা কোনও ফেরতের গাড়ি থাকলে সর্বদা পুনরাবৃত্তি হয়। PS1 ভেরিয়েবল এবং পি_সি এর সামগ্রীগুলি স্যানিটাইজ করা হয়েছে। এস্কেপ সিকোয়েন্স এবং কালার কোডিংয়ের বাক্য গঠন দীর্ঘ সময়ের মধ্যে এম্বেড করা হয়েছেechoসিকোয়েন্সগুলি জটিল হতে পারে। ত্রুটিগুলি অদ্ভুত টার্মিনাল আচরণের দিকে পরিচালিত করেএকে অপরকে ওভাররাইট করে এমন লাইনগুলি সহ, একটি প্রম্পট যা বাম মার্জিন থেকে দূরে প্রদর্শিত হয় বা অস্বাভাবিকভাবে প্রক্রিয়াজাত হয়ে যাওয়া স্টাফের জন্য অস্বাভাবিক আউটপুট। আমি যা করছি তার সাথে একটি শর্ত বিদ্যমান, যেখানে লিনাক্স টার্মিনাল এবং lxterm এর সাথে আমার সেটআপ (আর্চ ব্যাং) এর মধ্যে একটি ভিজ্যুয়াল পার্থক্য মোকাবেলায় PS1 ভেরিয়েবলের ভিতরে অতিরিক্ত স্থানের প্রয়োজন। অতিরিক্ত স্থান ব্যতীত লিনাক্স টার্মিনাল প্রম্পটের প্রথম অক্ষরটি শেষ লাইনের শেষে প্রিন্ট করে যে কারণে আমি বুঝতে পারি না (অবশ্যই এটি আমি এমন কিছু করি যা ডিফল্ট আচরণ নয়)। এছাড়াও উদ্ধৃতি চিহ্নগুলিতে অক্ষরের সেটটিতে কিছু এলোমেলো প্রভাব (গা bold়, বিপরীতমুখী ইত্যাদি) কীভাবে উত্পন্ন করা যায় তা নির্ধারণ করতে পারে না, কারণ পারফরম্যান্স বাড়ানোর জন্য দীর্ঘতর স্ট্রিং উত্পন্ন করার বিষয়ে প্রাথমিক সিদ্ধান্ত নেওয়া হয়েছিল।

টার্মিনালটি খুললে প্রাথমিক প্যাটার্ন এখানে চিত্র বর্ণনা লিখুন

একটির পরে আচরণ clearএবং প্রম্পটে ক্রমাগত প্রবেশ টিপুন এখানে চিত্র বর্ণনা লিখুন

পর্যবেক্ষণ

  • নিদর্শনগুলিকে বাল্কে না করে রঙিন করার জন্য পুনরায় ডিজাইন করা বা সংশোধন করা উচিত
  • অনুভব করতে শুরু করে যে আরও অনেক কিছু এগিয়ে যাওয়ার জন্য সমস্ত কিছু হয় স্ক্রিপ্টে রাখা বা বিমূর্ততার কিছু উচ্চতর রূপের প্রয়োজন। তবে টার্মিনাল ক্ষমতাগুলি শেষ ব্যবহারকারীর জন্য যথেষ্ট সক্ষম করছে (আমাকে "লোগো" মনে করিয়ে দেয়)!

20
আমি কিছুটা আতঙ্কিত হয়েছি যে আপনি এটি করতে চান :-)
ক্রিস ডাউন

2
@ ক্রিস ডাউন যেমন আমি কিউ শেষ করার পরে সত্যই ছিলাম, তাই আমি প্রায় পোস্ট করি নি;) এটি আইডিসিএনক্র্যাটিক তবে আমি বিশ্বাস করি যে কোনও উত্তর টার্মিনালে কীভাবে প্রদর্শিত হবে এবং এটি কনফিগার করার বাইরে চলে কিনা এবং এই বিষয়ে কিছুটা অন্তর্দৃষ্টি আনতে পারে I সফ্টওয়্যারটি পুনরায় তৈরির ক্ষেত্রে বা না into এবং হলিডে সিজন আমার অনুমান!

3
আমি কিছুটা আতঙ্কিতও হয়েছি, কিন্তু জিজ্ঞাসা করে কিছু ভুল হয়েছে বলে আমি মনে করি না। আমি আমার অতীতে অনেক ভয়াবহ কাজ করেছি, কিন্তু নৃশংসতা অর্জনের চেষ্টা করার সময় আমি বেশ কিছুটা শিখেছি। এছাড়াও একজন ব্যক্তি বাদাম হিসাবে যা ভাবেন, অন্য কোনও ব্যক্তি তা নাও বলে। এটি একটি ভাল চ্যালেঞ্জ বলে মনে হচ্ছে, এর জন্য যান :-)
প্যাট্রিক

আপনি কি এটি পাঠ্য-মোড কনসোলে বা ফ্রেমবফারের মাধ্যমে সম্পন্ন করার চেষ্টা করছেন? অথবা আপনিও xterm সমর্থন করতে চান?
রুসলান

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

উত্তর:


6

0.5a - সায়ান টাম্বলবিড সমভূমি

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

Z1=$(echo -en '\xe2\x97\x98') #◘ 1
Z2=$(echo -en '\xe2\x95\x9a') #╚ 2
Z3=$(echo -en '\xe2\x95\x9c') #╜ 3
Z4=$(echo -en '\xe2\x95\x9d') #╝ 4
Z5=$(echo -en '\xe2\x95\x9e') #╞ 5
Z6=$(echo -en '\xe2\x95\x9f') #╟ 6
Z7=$(echo -en '\xe2\x96\x91') #░ 7
Z8=$(echo -en '\xe2\x96\x92') #▒ 8
Z9=$(echo -en '\xe2\x96\x93') #▓ 9
N1=$(echo -en '\xe2\x94\x80') #─ a
N2=$(echo -en '\xe2\x95\x92') #╒ b
N3=$(echo -en '\xe2\x95\x97') #╗ c
N4=$(echo -en '\xe2\x96\xb6') #▶d
N5=$(echo -en '\xe2\x94\xbc') #┼ e
N6=$(echo -en '\xe2\x94\xa4') #┤ f
N7=$(echo -en '\xe2\x95\xa1') #╡ g
Z11="$(tr -dc '123456789a' < /dev/urandom | head -c 1)" //Z11 to Z13 not
Z12="$(tr -dc '123456789a' < /dev/urandom | head -c 1)" // used here (see
Z13="$(tr -dc '123456789a' < /dev/urandom | head -c 1)" //link)

echo -en $(tr -dcs ' ;",15bdef' ' ' < /dev/urandom | head -c $(echo -en "$[$(tput cols) * $(tput lines)]") | sed -e "s/1/$(echo -en "\033[0;36m$Z1\033[0m")/g" -e "s/5/$(echo -en "\033[0;32m$Z5\033[0m")/g" -e "s/b/$(echo -en "\033[1;36m$N2\033[0m")/g" -e "s/d/$(echo -en "\033[1;36m$N4\033[0m")/g" -e "s/e/$(echo -en "\033[0;32m$N5\033[1;32m")/g" -e "s/f/$(echo -en "\033[0;36m$N7\033[1;32m")/g"); tput cup 1
                 ^set^+^chars^ to implement from pool - here 1,5,b,d,e,f... so_________________________^add the appropriate sed subprocessing units for implemented chars i.e. first one we replace "1" with the value of $Z1 and apply color at the same time, then all the chars move down the pipe to all required blocks - we selected to implement 6 chars here so we have 6 sed blocks. 

[N.B. To remove the blank space from the pattern, remove it from both sets: tr -dcs ';",15bdef' '']

PS1="\[\033[1;36m\] $(echo -en '\xe2\x96\x91')$(echo -en '\xe2\x96\x92')$(echo -en '\xe2\x96\x93')[\t]$(echo -en '\xe2\x96\x93')$(echo -en '\xe2\x96\x92')$(echo -en '\xe2\x96\x91') \[\033[7;36m\]$(echo -en '\xe2\x97\x98')$(echo -en '\xe2\x94\xbc')$(echo -en '\xe2\x94\x80')\W$(echo -en '\xe2\x94\x80')\[\033[0;36m\]$(echo -en '\xe2\x94\x80')$(echo -en '\xe2\x94\x80')$(echo -en '\xe2\x94\x80')@$(echo -en '\xe2\x96\xb6')\[\033[0;36m\]"

PROMPT_COMMAND="echo -en '\033[0;36m$(tr -dc '=' < /dev/urandom | head -c $(tput cols))\n\033[01;46m$(tr -dc '~' < /dev/urandom | head -c $(tput cols))\033[0;36m$(tr -dc '=' < /dev/urandom | head -c $(tput cols))'$(tput cuu 2)"

এই বাস্তবায়ন আর লাইন প্রতি রেন্ডার করে না বরং sedপ্রক্রিয়া শেষে এক শটে পুরো ক্রমটি মুদ্রণ করে । এটি শুধুমাত্র লগইনে একবার প্রদর্শিত হয় বা সাধারণত bashচালু হয় appears লঞ্চের সময় এখানে এমন একটি এলোমেলো নিদর্শন রয়েছে (আমরা সবুজ দুটি শেড এবং সায়ানের দুটি শেড দেখতে পাচ্ছি):

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

স্ক্রিনগুলি স্ট্যান্ডার্ড লিনাক্স টার্মিনালে ফলাফল দেখায় এবং এটি এক্সটার্মেও কাজ করে। আমি PS1 প্রম্পটে সেইসব নতুন প্যাটার্ন চরগুলি ব্যবহার করেছি যেখানে PROMPT_COMMAND সক্রিয় লাইন এবং এর 2 লাইন প্যাডিংয়ের যত্ন নেয় যা 1 বাইট চর ব্যবহার করে।

প্যাটার্নটি আমার বর্তমান বিতরণটির সাথেও খুব ভাল মেলে যা archbey

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

এটা বড়দিনের জন্য! চিয়ার্স লোকেরা :)


1
এটি একটি নির্দিষ্ট উত্তর বা বাস্তবায়ন নয়, তবে এটি একটি মাইলফলক! ;-)

আলিবের মতো একটি লাইব্রেরির শক্তি উত্তোলন করাও সম্ভব হতে পারে - দেখুন aafireউদাহরণস্বরূপ aafire -driver curses -extended -gamma 1 -floyd_steinberg -random 5একটি উষ্ণ পরিচিতির জন্য।

এই উত্তরটি মিস করবেন না যা এখানে আলোচনা করা ইউটিএফ 8 এনকোডেড ইউনিকোড সীমাবদ্ধতাটিকে মোকাবেলা করে !!

4

প্রদর্শনটি টার্মিনাল দ্বারা পরিচালিত হয় এমন একটি সফ্টওয়্যার যা ওয়েব ব্রাউজারের মতোই কাজ করে: এটি প্রদর্শনটি সেট করতে চরিত্রের অনুক্রমকে ব্যাখ্যা করে ( ম্যান টার্মিনো দেখুন )। বাশ শেল টার্মিনালটিকে স্ক্রিনের খালি অঞ্চল কীভাবে পূরণ করবে তা বলবে না।

কিছু টার্মিনাল জিটারমের মতো ব্যাকগ্রাউন্ড হিসাবে ছবি রাখতে সক্ষম তবে এটি শেল দ্বারা তৈরি হয় না।


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