stdlib এবং সি রঙিন আউটপুট


125

আমি একটি সাধারণ অ্যাপ্লিকেশন তৈরি করছি যা রঙিন আউটপুট প্রয়োজন। আমি কীভাবে আমার আউটপুটটিকে ইমাস এবং বাশ এর মতো রঙিন করতে পারি?

আমি উইন্ডোজ সম্পর্কে চিন্তা করি না, কারণ আমার অ্যাপ্লিকেশনটি কেবল ইউএনআইএক্স সিস্টেমের জন্য।

উত্তর:


288

সমস্ত আধুনিক টার্মিনাল এমুলেটরগুলি রঙ এবং অন্যান্য জিনিসগুলি দেখানোর জন্য এএনএসআই এস্কেপ কোডগুলি ব্যবহার করে।
লাইব্রেরি নিয়ে বিরক্ত করবেন না, কোডটি খুব সহজ।

আরও তথ্য এখানে

সি উদাহরণ:

#include <stdio.h>

#define ANSI_COLOR_RED     "\x1b[31m"
#define ANSI_COLOR_GREEN   "\x1b[32m"
#define ANSI_COLOR_YELLOW  "\x1b[33m"
#define ANSI_COLOR_BLUE    "\x1b[34m"
#define ANSI_COLOR_MAGENTA "\x1b[35m"
#define ANSI_COLOR_CYAN    "\x1b[36m"
#define ANSI_COLOR_RESET   "\x1b[0m"

int main (int argc, char const *argv[]) {

  printf(ANSI_COLOR_RED     "This text is RED!"     ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_GREEN   "This text is GREEN!"   ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_YELLOW  "This text is YELLOW!"  ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_BLUE    "This text is BLUE!"    ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n");
  printf(ANSI_COLOR_CYAN    "This text is CYAN!"    ANSI_COLOR_RESET "\n");

  return 0;
}

1
তবে আমি মনে করি যে আমি টার্মিনাল অনুকরণে ব্যাশ চালাতে পারি যা এএনএসআই পলায়ন বিভাগগুলিকে সমর্থন করে না।
শিনটেকজৌ

চমৎকার পতাকা :) কেবল একটি নিট যে প্রশ্নটি 'সি' ট্যাগ, 'সি ++' নয়
স্টিফেন

@ শিনটেকজৌ: হ্যাঁ .. এই ক্ষেত্রে সমস্ত এএনএসআই এস্কেপ কোড উপেক্ষা করা হবে এবং অভিনব আউটপুট তৈরি করার কোনও বিকল্প আপনার কাছে থাকবে না।
আন্দ্রেজ ক্যানিকভস

14
এএনএসআই পলায়নের ক্রমগুলি শেল দ্বারা ব্যাখ্যা করা যায় না, এগুলি টার্মিনাল এমুলেটর দ্বারা ব্যাখ্যা করা হয়।
নিনজালজ

6
বিশেষত "লাইব্রেরি নিয়ে বিরক্ত করবেন না" পছন্দ করেছেন! এমনকি এএনএসআই কোডগুলি উইন্ডোজ কমান্ড প্রম্পটেও কাজ করে।
এসজেজি

15

রঙের সিকোয়েন্সগুলির সাথে ডিল করা অগোছালো হতে পারে এবং বিভিন্ন সিস্টেম বিভিন্ন রঙ সিকোয়েন্স সূচক ব্যবহার করতে পারে।

আমি আপনাকে ncurses ব্যবহার করার চেষ্টা করব । রঙ ব্যতীত এনক্রোস কনসোল ইউআই সহ আরও অনেক ঝরঝরে কাজ করতে পারে।


আমার জন্য যে সমস্ত কাজ করা হয়েছে তার সাথে একটি "color.h" ফাইল খুঁজে পাচ্ছি না তার কারণেই কি বিভিন্ন রঙের ক্রমগুলি ব্যবহার করা হচ্ছে?
শীতল জ্যাভালিন

10

রঙিন টার্মিনাল আউটপুট পেতে আপনি বিশেষ রঙ নিয়ন্ত্রণ কোড আউটপুট করতে পারেন, রঙগুলি কীভাবে প্রিন্ট করা যায় সে সম্পর্কে এখানে একটি ভাল উত্স ।

উদাহরণ স্বরূপ:

printf("\033[22;34mHello, world!\033[0m");  // shows a blue hello world

সম্পাদনা: আমার আসলটি প্রম্পট কালার কোড ব্যবহার করেছে, যা কাজ করে না :( এইটি করে (আমি এটি পরীক্ষা করেছি))।


edition.c: In function ‘int main(int, const char**)’: edition.c:4: error: unknown escape sequence '\]' edition.c:4: error: unknown escape sequence '\]' edition.c edition.c~সংকলনের ত্রুটিগুলির একগুচ্ছ ছাড়া আর কিছুই নয় :(

এছাড়াও, আমার অ্যাপ্লিকেশনটি বেসের উপর নির্ভর করে না।

@ কননিং: এটি বেস নির্ভর নয়, এটি অন্যান্য শেলগুলিতেও কাজ করে (তবে আমি নিশ্চিত যে সব নয়) আমি ksh, এবং csh এ যাচাই করেছি। নোট আমি সঠিকভাবে কাজ করতে নিয়ন্ত্রণ কোড সম্পাদনা করেছি।
স্টিফেন

2
এটা হবে না। এটি টার্মিনাল অনুকরণের উপর নির্ভর করে। যদি এটি এএনএসআই এএনএসআই অব্যাহতি ক্রমগুলি বোঝে তবে আপনার নিজের রঙ, গা bold় বা যা কিছু হোক।
শিনটেকজৌ

@Stephen বোনাস: পরিবর্তন 22দ্বারা 1এটি দেখতে গাঢ়
--- ১১

9

আপনি আরও কার্যকরী করতে প্রতিটি কার্যকারিতার জন্য একটি রঙ নির্ধারণ করতে পারেন।

#define Color_Red "\33[0:31m\\]" // Color Start
#define Color_end "\33[0m\\]" // To flush out prev settings
#define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end)

foo()
{
LOG_RED("This is in Red Color");
}

বুদ্ধিমানের মতো আপনি বিভিন্ন রঙের কোড নির্বাচন করতে পারেন এবং এটি আরও জেনেরিক করতে পারেন।


3

আপনি যদি পুরো প্রোগ্রামের জন্য একই রঙ ব্যবহার করেন তবে আপনি printf()ফাংশনটি সংজ্ঞায়িত করতে পারেন ।

   #include<stdio.h>
   #define ah_red "\e[31m"
   #define printf(X) printf(ah_red "%s",X);
   #int main()
   {
        printf("Bangladesh");
        printf("\n");
        return 0;
   }

2

কারণ আপনি স্ট্রিং বিন্যাস সহ একটি অক্ষর মুদ্রণ করতে পারবেন না। আপনি এই জাতীয় কিছু দিয়ে একটি ফর্ম্যাট যুক্ত করার কথা ভাবতে পারেন

#define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s)

f হিসাবে হিসাবে ফর্ম্যাট হয় printf

PRINTC (4, "%s\n", "bar")

মুদ্রণ করবে blue bar

PRINTC (1, "%d", 'a')

মুদ্রণ করবে red 97


2
#include <stdio.h>

#define BLUE(string) "\x1b[34m" string "\x1b[0m"
#define RED(string) "\x1b[31m" string "\x1b[0m"

int main(void)
{
    printf("this is " RED("red") "!\n");

    // a somewhat more complex ...
    printf("this is " BLUE("%s") "!\n","blue");

    return 0;
}

পড়া উইকিপিডিয়া :

  • 1 x1b [0 মি সমস্ত বৈশিষ্ট্য পুনরায় সেট করে
  • 1 x1b [31 মি অগ্রভূমির রঙটি লালকে সেট করে
  • \ X1b [44 মি ব্যাকগ্রাউন্ডটি সেট করে।
  • উভয়: \ x1b [31; 44 মি
  • উভয় কিন্তু বিপরীত: \ x1b [31; 44; 7 মি
  • পরে reset x1b [0 মি ...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.