From The Compiler, 6 Years ago, written in C.
Embed
  1. int print_tag_status_command(int argc, char** argv, GString** result) {
  2.     int monitor_index = g_cur_monitor;
  3.     int verbose = false;
  4.     if (argc >= 2) {
  5.         if (!strcmp(argv[1], "-v")) {
  6.             verbose = true;
  7.             (void) SHIFT(argc, argv);
  8.         } else {
  9.             *result = g_string_append_c(*result, '\t');
  10.         }
  11.     }
  12.     if (argc >= 2) {
  13.         monitor_index = atoi(argv[1]);
  14.     }
  15.     monitor_index = CLAMP(monitor_index, 0, monitor_count());
  16.     tag_update_flags();
  17.     HSMonitor* monitor = monitor_with_index(monitor_index);
  18.     for (int i = 0; i < g_tags->len; i++) {
  19.         HSTag* tag = g_array_index(g_tags, HSTag*, i);
  20.         HSMonitor *tag_monitor = find_monitor_with_tag(tag);
  21.         if (verbose == true) {
  22.             g_string_append_printf(*result, "tag \"%s\": ", tag->name->str);
  23.             if (tag->flags & TAG_FLAG_USED) {
  24.                 *result = g_string_append(*result, "used, ");
  25.             } else {
  26.                 *result = g_string_append(*result, "empty, ");
  27.             }
  28.             if (tag_monitor == monitor) {
  29.                 *result = g_string_append(*result,
  30.                     "viewed on specified monitor, ");
  31.                 if (monitor_index == g_cur_monitor) {
  32.                     *result = g_string_append(*result, "focused");
  33.                 } else {
  34.                     *result = g_string_append(*result, "not focused");
  35.                 }
  36.             } else if (tag_monitor) {
  37.                 *result = g_string_append(*result,
  38.                     "viewed on different monitor, ");
  39.                 if (get_current_monitor() == tag_monitor) {
  40.                     *result = g_string_append(*result, "focused");
  41.                 } else {
  42.                     *result = g_string_append(*result, "not focused");
  43.                 }
  44.             } else {
  45.                 *result = g_string_append(*result,
  46.                     "not viewed");
  47.             }
  48.             if (tag->flags & TAG_FLAG_URGENT) {
  49.                 *result = g_string_append(*result,
  50.                     ", urgent");
  51.             }            
  52.             *result = g_string_append(*result, ".\n");
  53.         } else {
  54.             // print flags
  55.             char c = '.';
  56.             if (tag->flags & TAG_FLAG_USED) {
  57.                 c = ':';
  58.             }
  59.             if (tag_monitor == monitor) {
  60.                 c = '+';
  61.                 if (monitor_index == g_cur_monitor) {
  62.                     c = '#';
  63.                 }
  64.             } else if (tag_monitor) {
  65.                 c = '-';
  66.                 if (get_current_monitor() == tag_monitor) {
  67.                     c = '%';
  68.                 }
  69.             }
  70.             if (tag->flags & TAG_FLAG_URGENT) {
  71.                 c = '!';
  72.             }
  73.             *result = g_string_append_c(*result, c);
  74.             *result = g_string_append(*result, tag->name->str);
  75.             *result = g_string_append_c(*result, '\t');
  76.         }
  77.     }
  78.     return 0;
  79. }