টিপুট ছাড়িয়ে ক্রম এড়ানোর কোনও উদ্দেশ্যমূলক সুবিধা কি আছে?


11

লোকের .*rcফাইলগুলিতে আমি অনলাইনে বা বিভিন্ন কোডে দেখি, আমি প্রচুর লোককে দেখতে পেলাম যারা ম্যানুয়ালি এএনএসআই এস্কেপ সিকোয়েন্সগুলি ব্যবহারের পরিবর্তে ব্যবহার করেন tput

আমার বোঝা যা tputআরও সার্বজনীন / নিরাপদ, তাই এটি আমাকে অবাক করে তোলে:

এর জায়গায় অব্যাহতি সিক্যুয়েন্সগুলি ব্যবহার করার কোনও উদ্দেশ্যমূলক কারণ রয়েছে কি tput? (বহনযোগ্যতা, ত্রুটির উপর দৃust়তা, অস্বাভাবিক টার্মিনাল ...?)


বহনযোগ্যতার প্রশ্নটির উল্টো দিকে, মোবাএক্সটারম printfএএনএসআই এর সাথে পালানোর ক্রিয়াকলাপের সাথে কাজ করবে , তবে tputব্যর্থ হয় (কমপক্ষে আমার বাক্সে)।
ওয়াইল্ডকার্ড

উত্তর:


6

tputটিপিক্যাল শেল-স্ক্রিপ্টার ব্যবহারের চেয়ে কম খুঁজে পাওয়া যায় এমন অভিব্যক্তিগুলি (উদাহরণস্বরূপ sgrএবং এর মধ্যে setaf) পরিচালনা করতে পারে । থেকে আমরা কী জড়িত একটি ধারণা পেতে, আউটপুট দেখতে infocmpসঙ্গে -f(বিন্যাস) বিকল্প প্রয়োগ করা হয়েছে। এক্সটারের টার্মিনো বর্ণনা থেকে এই স্ট্রিংগুলি ব্যবহার করে এখানে উদাহরণগুলির একটি :

xterm-16color|xterm with 16 colors,
        colors#16,
        pairs#256,
        setab=\E[
                %?
                        %p1%{8}%<
                        %t%p1%{40}%+
                %e
                        %p1%{92}%+
                %;%dm,
        setaf=\E[
                %?
                        %p1%{8}%<
                        %t%p1%{30}%+
                %e
                        %p1%{82}%+
                %;%dm,
        setb=
                %p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa
                %?%ga%{1}%=
                        %t4
                %e%ga%{3}%=
                        %t6
                %e%ga%{4}%=
                        %t1
                %e%ga%{6}%=
                        %t3
                %e%ga%d
                %;
                m,
        setf=
                %p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa
                %?%ga%{1}%=
                        %t4
                %e%ga%{3}%=
                        %t6
                %e%ga%{4}%=
                        %t1
                %e%ga%{6}%=
                        %t3
                %e%ga%d
                %;
                m,
        use=xterm+256color,
        use=xterm-new,

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

16-রঙের বৈশিষ্ট্যটি আইবিএম অ্যাক্সটার্ম থেকে ধার করা হয়েছে, যা দুটি সীমাতে অগ্রভাগ এবং পটভূমির জন্য 16 টি কোড ম্যাপ করে;

  • 30-37 এবং 90-97 এ অগ্রভাগ
  • 40-47 এবং 100-107 এ পটভূমি

একটি সাধারণ স্ক্রিপ্ট

#!/bin/sh
TERM=xterm-16color
export TERM
printf '    %12s %12s\n' Foreground Background
for n in $(seq 0 15)
do
    F=$(tput setaf $n | cat -v)
    B=$(tput setab $n | cat -v)
    printf '%2d  %12s %12s\n' $n "$F" "$B"
done

এবং আউটপুট দেখায় এটি কীভাবে কাজ করে:

      Foreground   Background
 0        ^[[30m       ^[[40m
 1        ^[[31m       ^[[41m
 2        ^[[32m       ^[[42m
 3        ^[[33m       ^[[43m
 4        ^[[34m       ^[[44m
 5        ^[[35m       ^[[45m
 6        ^[[36m       ^[[46m
 7        ^[[37m       ^[[47m
 8        ^[[90m      ^[[100m
 9        ^[[91m      ^[[101m
10        ^[[92m      ^[[102m
11        ^[[93m      ^[[103m
12        ^[[94m      ^[[104m
13        ^[[95m      ^[[105m
14        ^[[96m      ^[[106m
15        ^[[97m      ^[[107m

সংখ্যাগুলি বিভক্ত হয়ে গেছে কারণ এক্সটার্ম ECMA-48 ("এএনএসআই" নামে পরিচিত) রঙের সাথে মেলে 30-30 এবং 40-47 সীমা ব্যবহার করে এবং স্ট্যান্ডার্ডে সংজ্ঞায়িত না কোডগুলির জন্য 90-107 পরিসর ব্যবহার করে।

এক্সটারম ব্যবহার করে এখানে একটি স্ক্রিনশট রয়েছে TERM=xterm-16color, যেখানে আপনি প্রভাবটি দেখতে পারেন।

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

আরও পড়া:


আমি আপনার বক্তব্য প্রমাণ করতে পারি, তবে এই অভিব্যক্তিগুলির সাথে কী আচরণ করা হবে? Infocmp জন্য ম্যানুয়াল দিকে তাকিয়ে থেকে আমি বুঝতে পারি তারা যদি-তারপর-অন্য বিবৃতি ... কিন্তু আমি এই দেখিনি এবং আমি কষ্ট তার জন্য googling হচ্ছে, এই সব আমি খুঁজে পাওয়া যায়নি, কিন্তু আমি নিশ্চিত এটা নই এখানে কি হচ্ছে. ধন্যবাদ!
ক্যাপ্টেন ম্যান 13

2

এমন সময় থেকে যখন ইউনিক্স প্ল্যাটফর্মগুলিতে তাদের সাথে বিভিন্ন ধরণের ডিভাইস সংযুক্ত থাকতে পারে, তখনও আমি আক্ষরিক অব্যাহতি ক্রমের তুলনায় টপট এবং এর বন্ধুদের পছন্দ করি।

আমি মনে করি আসল কারণ যে অধিকাংশ লোক কেবল সম্পর্কে জানি না tputএর সাথে সংশ্লিষ্ট অন্যান্য terminfo/ termcapফাইল এবং লাইব্রেরি।


1

এর অন্যতম কারণ হ'ল tputবাহ্যিক কমান্ড, সুতরাং অন্তর্নির্মিত শেল এস্কেপ কোডগুলির চেয়ে ধীর গতিতে চলতে পারে। আরেকটি বিষয় হ'ল যে কেউ শেল নির্দিষ্ট পালানো অক্ষরের সাথে এএনএসআই এস্কেপ কোডগুলি সমন্বিত করে সহজেই একটি লাইনার তৈরি করতে পারে, যেমন bashপ্রম্পটে উদাহরণস্বরূপ:

PS1='\[\033[1;32m\]\u@\h\[\033[1;34m\] \w >\[\033[0m\] '

একইভাবে zsh:

PS1=$'%{\e[1;32m%}%n@%m%{\e[1;34m%} %3~> %{\e[0m%}'

এখানে সবকিছু পরিষ্কার এবং কমপ্যাক্ট। যার সাহায্যে tputএটি একাধিক লাইনে বিভক্ত হওয়া বা এটি আরও দীর্ঘ এবং জটিল লাইন তৈরি করতে হবে, tputএকাধিকবার চালানো ইত্যাদি etc.


1
টিপুট দিয়ে আপনি এখনও অনেলিন্স করতে পারেন, PS1="$(tput setaf 2)\u@\h$(tput reset) >
ক্যাপ্টেন ম্যান

2
প্রকৃতপক্ষে $(tput sgr0)এটি শেষের জন্য হবে , তবে একমত যে টিপুট একটি উন্নতি।
টমাস ডিকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.