আমি কীভাবে আনসি এস্কেপ সিকোয়েন্সগুলি ব্যবহার করে আমার এক্সটার্মের রঙগুলি পরিবর্তন করতে পারি?


25

আমি কমান্ডলাইন থেকে আমার এক্সটারমের রং (পটভূমি, ফন্ট, সম্মুখভাগ) পরিবর্তন করতে চাই। আমি শুনেছি এএনএসআই এর পালানোর ক্রমগুলি ব্যবহার করে এটি করা যেতে পারে।

যদি এটি সম্ভব হয়:

  • এটা কিভাবে সম্পন্ন করা হয়?
  • আমি কি রঙের নাম ব্যবহার করতে পারি বা তাদের আরজিবি কোডগুলি ব্যবহার করব?

উত্তর:


27

এএনএসআই এস্কেপ সিকোয়েন্সগুলিতে এস্কেপ অক্ষর, অক্ষর 27 দিয়ে শুরু হওয়া অক্ষরগুলির ক্রম থাকে of পরবর্তী অক্ষরটি প্রায়শই (যদিও সর্বদা নয়) খোলা-বর্গক্ষেত্র বন্ধনী: [

প্রতিস্থাপনের জন্য নির্দিষ্টকরণ -eএবং ব্যবহার করা হলে প্রতিধ্বনি কমান্ড পলায়ন অক্ষর প্রেরণ করতে \eপারে।

এএনএসআই স্ট্যান্ডার্ড মোট 16 টি সম্ভাবনা প্রদান করে 8 টি রঙ, আরও একটি উজ্জ্বল মোড সংজ্ঞায়িত করে। ক্রমটি হ'ল:

\e[<number>m

এর মধ্যে একটি কোথায় <number>:

ফোরগ্রাউন্ড:

  • 30 কালো
  • 31 লাল
  • 32 সবুজ
  • 33 হলুদ
  • 34 নীল
  • 35 ম্যাজেন্টা
  • 36 সায়ান
  • 37 সাদা

পটভূমি:

  • 40 কালো
  • 41 লাল
  • 42 সবুজ
  • 43 হলুদ
  • 44 নীল
  • 45 ম্যাজেন্টা
  • 46 সায়ান
  • 47 সাদা

  • 0 সব রিসেট করুন

  • 1 সাহসী

সুতরাং আপনার অগ্রভাগ লাল এবং আপনার পটভূমি হলুদ করতে:

$ echo -e "\e[31m\e[43m"

এবং সাহসী সক্ষম করতে:

$ echo -e "\e[1m"

অবশ্যই, আপনি তাদের একত্রিত করতে পারেন:

$ echo -e "\e[31m\e[43m\e[1m"

অন্যান্য কাজ করার জন্য অনেকগুলি এসকেপ কোড রয়েছে।

উদাহরণস্বরূপ - স্ক্রিনটি সাফ করুন এবং কার্সারটিকে শীর্ষ-বামে সরান:

$ echo -e "\e[2J\e[1;1H"

রঙ পরিবর্তন করার সময় যা দরকারী:

$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"

যা রঙ পরিবর্তন করবে, স্ক্রিন সাফ করবে এবং কার্সারটিকে উপরে-বামে রাখবে। ঠিক আছে, প্রায় শীর্ষ বাম ইকো একটি গাড়ীর রিটার্ন .ুকিয়ে দেয় তাই এটি একটি লাইনের নিচে চলে যায়। আপনি যদি -nউদাসীন হন তবে এটি প্রতিরোধ করতে আপনি প্রতিধ্বনিতে যোগ করতে পারেন।

আপনি যদি এই সমস্ত গোলমাল করেন এবং আপনি কী টাইপ করছেন তা দেখতে না পেয়ে আপনি টার্মিনাল রঙগুলিকে স্বাভাবিক অবস্থায় পুনরায় সেট করতে পারেন:

Ctrl+ +v [ 0 m Return

আপনি যা আশা করছেন তা হ'ল কমান্ড প্রম্পট। এটি কোনও অজানা কমান্ডটি নিয়ে আসতে পারে তবে আপনি আবার কী করছেন তা আপনি দেখতে সক্ষম হবেন।


আমি কি রঙের কোডের পরিবর্তে রঙের নাম ব্যবহার করতে পারি?
নাথান ফেলম্যান

1
না, তবে আপনি রঙের কোডগুলি ভেরিয়েবলগুলিতে বরাদ্দ করতে পারেন। FGRED = 31; প্রতিধ্বনি - "" [ই [$ {এফজিআরডি} এম "
মাজনকো

3
তবে এটি লক্ষ করা উচিত যে একাধিক রঙের কোড নম্বরগুলি ";" দ্বারা পৃথক করা যায়। সুতরাং আপনার অগ্রভাগ লাল এবং আপনার পটভূমি হলুদ করতে আপনি আরও খাটো ব্যবহার করতে পারেন: echo -ne '\e[31;43m'(উপরের পরিবর্তে echo -e "\e[31m\e[43m")।
Andreas Spindler

আমি কীভাবে कर्सरটির রঙ 34 নীল করে দেব?
trusktr

28

নোট করুন যে আধুনিক এক্সটার্মগুলি 32-বিট রঙ সমর্থন করে!

সহজ উদাহরণ। # 53186f মানের একটি দুর্দান্ত গা dark় বেগুনি ব্যাকগ্রাউন্ড (আরে, তার নিজস্ব প্রতিটি) সেট করতে আপনি করুন:

echo -ne "\033]11;#53186f\007"

নোট করুন যে এটি তত্ক্ষণাত্ পুরো উইন্ডোটির রঙ পরিবর্তন করে, কেবল পরবর্তী পাঠ্যের জন্য নয়। এটি একটি সার্ভারে ssh'ing পরে উদাহরণস্বরূপ উইন্ডোটি স্পষ্টতই আলাদা করার জন্য বিশেষত দুর্দান্ত (উদাহরণস্বরূপ)। উপরের 'প্রতিধ্বনি'টিকে আপনার .bashrc এ রাখুন এবং আপনি যখন সেই সার্ভারে লগইন করেন তখন আপনার টার্মিনালটি স্বয়ংক্রিয়ভাবে রঙ পরিবর্তন করে (তবে আপনি যখন Ctrl-D বেরিয়ে আসবেন না)

আপনি এটি অনুসন্ধান করার জন্য নেটগুলিতে ঘন্টাগুলি ব্যয় করতে পারেন - বেশিরভাগ দস্তাবেজগুলি কেবল আসল 16 এএনএসআই রঙ সম্পর্কে কথা বলে।

উত্স: http://www.steike.com/code/xterm-colors/ এবং http://rtfm.etla.org/xterm/ctlseq.html ("অপারেটিং সিস্টেম নিয়ন্ত্রণ" এর অধীনে দেখুন)

দয়া করে নোট করুন: উপরে পালানো সিকোয়েন্সটি XTerms এর জন্য বৈধ, এবং "এক্সটার্ম-মত" উইন্ডোটিং টার্মিনাল এমুলেটরগুলির অন্য বাস্তবায়নের জন্য কাজ করতে পারে না যা এক্সটার্মের মতো "দেখতে" পারে। উদাহরণস্বরূপ, "জিনোম-টার্মিনাল" বা "কনসোল" এর বিভিন্ন পালানোর সিকোয়েন্স রয়েছে বা রঙ পরিবর্তনটি মোটেও প্রয়োগ করতে পারে না।


1
এটি আমার পক্ষে কাজ করছে না, এটি টার্মিনালে কোনও পর্যবেক্ষণযোগ্য পরিবর্তন ছাড়াই একটি ফাঁকা রেখা প্রতিধ্বনিত করে।
রিচার্ড

1
এটি আমার পক্ষে কাজ করেছে, অন্যরা - খুব সহায়ক হয়নি, thx
ভলিউরন

1
+1 উইন্ডোটির পটভূমি পরিবর্তন করে এবং রঙের নামগুলিকে মঞ্জুরি দেয় - "# 00ff00" এর পরিবর্তে "সবুজ" এর মতো।
রব আমি

1
# 53186f 32-বিট রঙগুলি কীভাবে হয়। আমি 24 বিট গণনা ...
jiggunjer

কেউ কি জিনোম টার্মিনাল দিয়ে একই জিনিসটি সম্পাদন করতে জানেন?
wjandrea

3

হ্যাঁ। এএনএসআই টার্মিনালগুলি এএনএসআই এস্কেপ কোডগুলিকে সমর্থন করে । প্রতিটি Control Sequence Introducer( CSI) নিম্নলিখিত ফর্ম্যাটে কোড:

ESC[<<<CODE>>>

Ascii অক্ষর 27( ESCচরিত্র) বা 1bহেক্সাডেসিমালে, তার পরে বাম বর্গাকার বন্ধনী এবং তারপরে একটি অক্ষর ব্যবহার করা হবে বলে চিহ্নিত করা হয়।

নোট করুন যে ;পৃথক পরামিতিগুলির একটি তালিকা প্যারামিটারের আগে সরাসরি সরবরাহ করা যেতে পারে <<<CODE>>>

এখন, রঙগুলি CSIকোডগুলির একটি উপসেট ব্যবহার করে Select Graphic Rendition। এগুলি ফর্মটিতে রয়েছে:

ESC[<<<SGR>>>m

SGRকোড একটি প্যারামিটার হিসাবে পাস করা হয়েছে CSI। আপনার প্রশ্নের সাথে সম্পর্কিত SGRকোডগুলি 30-49। কোডস 30-39 অগ্রভূমির রঙ সেট করে। কোডগুলি 40-49 পটভূমির রঙ সেট করে।

30 - Foreground Black
31 - Foreground Red
32 - Foreground Green
33 - Foreground Yellow
34 - Foreground Blue
35 - Foreground Magenta
36 - Foreground Cyan
37 - Foreground White

40 - Background Black
41 - Background Red
42 - Background Green
43 - Background Yellow
44 - Background Blue
45 - Background Magenta
46 - Background Cyan
47 - Background White

38 এবং 48 কোডগুলি বিশেষ কোড। এগুলিই আপনাকে আরজিবি মানগুলি ব্যবহার করতে দেয়। এর জন্য ফর্ম্যাটটি হ'ল:

ESC[38;2;<r>;<g>;<b>m (Foreground)
ESC[48;2;<r>;<g>;<b>m (Background)

দ্রষ্টব্য: বিকল্প ব্যবহার অন্তর্ভুক্ত \x1b[<3 or 4>8;5;<web safe color index>m। এই ব্যবহারের সাথে, একটি সম্পূর্ণ আলাদা রঙের এনকোডিং রয়েছে। আরও তথ্যের জন্য এই উত্তরের শীর্ষে লিঙ্কটি দেখুন।

কোড 39 এবং 49 তাদের ডিফল্টটিতে অগ্রভাগ এবং পটভূমির রঙ সেট করে, যা টার্মিনাল বাই টার্মিনাল ভিত্তিতে সংজ্ঞায়িত করা হয়।

অনুশীলনে, 30-37 40-47 রঙগুলি তাদের লেবেলগুলি যা বলে তার চেয়ে কিছুটা আলাদা।

0 - Black
1 - Darker Red
2 - Darker Green
3 - Dark/Yellow or Brown (varies between terminals)
4 - Dark Blue
5 - Dark Magenta
6 - Dark Cyan
7 - Light Grey

হালকা রঙ পেতে, আপনি সাহসী জন্য এসজিআই ব্যবহার করুন 1,। সাহসী একটি বিভ্রান্তিমূলক নাম। এটি ফন্টটি সাহসী করে না। এটি আসলে পাঠ্যের উজ্জ্বলতা বৃদ্ধি করে। গা bold় প্রয়োগের সাথে রঙগুলি হয়ে যায়:

0 - Dark Grey
1 - Bright Red
2 - Bright Green
3 - Bright Yellow
4 - Bright Blue
5 - Bright Magenta
6 - Bright Cyan
7 - White

দ্রষ্টব্য: রঙের সংখ্যাগুলির শেষ দুটি ব্লক সামনের এবং পটভূমি উভয়ের সাথেই প্রাসঙ্গিক <index> + (30 or 40)

সমস্ত শৈলী অপসারণ করতে (ডিফল্ট / স্বাভাবিক মোডে ফিরে) SGR0 ব্যবহার করুন ।

CSIকোডগুলি সমস্ত গ্রাফিকাল হয় না। উদাহরণস্বরূপ, ESC[2Jআপনার টার্মিনাল সাফ করবে। ESC[<y>;<x>Hকার্সারের অবস্থান নির্ধারণ করে (1-ইনডেক্সড)। আরও তথ্যের জন্য উইকিপিডিয়া নিবন্ধটি দেখুন।

দ্রষ্টব্য: এগুলি পরীক্ষা করতে, ব্যবহার করুন echo -eবা printf


2

দ্রষ্টব্য: "^ [" হ'ল পালাবার চরিত্র এবং এটি একটি সিটিআরএল-ভি, সিটিআরএল- [এবং ^ জি একটি বেল অক্ষর, সিটিআরএল-ভি, সিটিআরএল-জি সহ সন্নিবেশ করা হয়েছে

নিম্নলিখিত ব্লকটি আমার .বাশ_প্রফাইলে রয়েছে এবং এটি নিশ্চিত করে যে এই সিস্টেমে আমার এক্সটার্মগুলি সবসময় সাদা-কালো, এমনকি অন্য কোনও সিস্টেমে লগ ইন করার পরেও যেটি আমার রঙ পরিবর্তন করেছে।

perl -e '$e=chr(27);print "${e}[37m ${e}[40m ${e}[2J ${e}[1;1H";'
export PS1='^[[37m^[]0;${HOST}: ${PWD}^G^[[40m${USER}@${HOST}:${PWD}
--> '

0

একটি প্রকল্প স্ক্রিপ্টএকো কালারটি
এটি সম্পূর্ণরূপে ব্যাশ স্ক্রিপ্টগুলিতে তৈরি করা হয়েছে
এটিতে এখানে উবুন্টুর জন্য প্যাকেজ রয়েছে
তবে কীভাবে করতে হয় তা যদি জানেন (এই গিট থেকে সর্বশেষতম ডাউনলোড করা যায়) তবে এই স্ক্রিপ্টগুলি কোনও ডিস্ট্রোতে ইনস্টল করা যেতে পারে।

আপনি সংক্ষিপ্ত বা প্রসারিত রঙের নামগুলি ব্যবহার করতে পারেন:

echoc "@rRedFg@{/blue}BlueFg@{/GREEN}GreenBg"

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

এছাড়াও, xtermcontrol একবার দেখে নেওয়া নিশ্চিত করুন, নিজের উপর এক্সটার্মের উপর আরও বিস্তৃত নিয়ন্ত্রণের জন্য (কেবল অক্ষরগুলি নয়)।


0

অনেকগুলি এএনএসআই সিএসআই কোডগুলির মধ্যে একটি হ'ল এসজিআর বা গ্রাফিক রেন্ডিশন নির্বাচন করুন। এটি ESC,, [পরামিতি, mযেখানে পরামিতিগুলি সেমিকোলন দ্বারা পৃথককৃত ASCII ফর্ম্যাটে এক বা একাধিক পূর্ণসংখ্যা। অনেকগুলি বিভিন্ন এসজিআর প্যারামিটারগুলি উপরের উইকিপিডিয়া পৃষ্ঠায় তালিকাভুক্ত করা হয়েছে (যদিও এটি তাদের সকলের জন্য পুরো বিশদে যায় না)।

কিছু প্যারামিটার, যেমন 1(গা bold় বা বর্ধিত তীব্রতা) এবং 31(লাল পাঠ্য) একা থাকে এবং পৃথকভাবে বা একত্রিত হতে পারে যথাক্রমে স্ট্যান্ডার্ড লাল এবং গা bold় লাল অগ্রভাগের পাঠ্য দিতে ESC[31mবা ESC[1;31m

অন্যরা নিজেরাই প্যারামিটার নেয়, যা কেবলমাত্র কোডের পরে আরও সেমিকোলন-বিভাজিত সংখ্যা হিসাবে সরবরাহ করা হয়। সুতরাং, উদাহরণস্বরূপ, ESC[38;5;219mপ্রসারিত রঙের সংখ্যা 219-তে প্রারম্ভিক পাঠ্য ESC[38;2;150;100;50mপ্রদর্শিত হবে এবং এটি আরজিবি মান 150, 100, 50 দিয়ে রঙে প্রদর্শন করবে this এই ক্ষেত্রে, 38"বর্ধিত সেট ফোরগ্রাউন্ড কালার" কমান্ড যা সর্বদা অনুসরণ করা হয় একটি সাবকম্যান্ড। সাবকম্যান্ডে 2তিনটি পরামিতি লাগে, লাল, সবুজ এবং নীল উপাদানগুলির মান। ভিন্নভাবে, সাবকমন্ড 5আরও একটি মান গ্রহণ করে, 0 থেকে 255 এর মধ্যে একটি টার্মিনালটি কনফিগার করা টেবিল থেকে রঙ নির্দিষ্ট করে number

নিম্নলিখিত শেল ফাংশন এই কোডগুলি ব্যবহারের জন্য কার্যকর হতে পারে:

sgr() {
    local codes=${1:-0}; shift
    for c in "$@"; do codes="$codes;$c"; done
    echo -n -e "\e[${codes}m"
}

আপনি এটি এর মতো ব্যবহার করতে পারেন:

normal=$(sgr 0)
red=$(sgr 31)
echo "Text can be $(sgr 1)made boldface$(sgr 0)" \
     " or ${red}colored red${normal}" \
     " or $(sgr 31 1)even both at the same time$(sgr)."

মনে রাখবেন যে আপনি যদি sgr()এসজিআর কোড 0 এর ডিফল্ট কোনও প্যারামিটার না দেন, যার অর্থ সমস্ত অ্যাট্রিবিউট বন্ধ করে দেওয়া, টার্মিনালের জন্য পূর্বনির্ধারিত যাই হোক না কেন পাঠ্যটিকে পুনরায় সেট করা।


1
প্রযুক্তিগতভাবে সেগুলি ESC[38... mএবং ESC[38... mপারে (হওয়া উচিত আপনার তথ্যের উত্সের উপর নির্ভর করে - চূড়ান্ত এক ব্যক্তি, আমি বিশ্বাস করি, itu.int/rec/T-REC-T.416-199303-I ) ব্যবহার করা উচিত, অন্যথায় সংরক্ষিত, অক্ষর :( পরামিতি উপাদানগুলি পৃথক করার জন্য ) যাতে ;কেবলমাত্র সম্পূর্ণ প্যারামিটার স্ট্রিংগুলির মধ্যে ব্যবহার করা হয় - যেমন ESC[38;2;150;100;50mলেখা উচিত ESC[38:2::150:100:50m...
স্লাইসভেন

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