Przeglądaj źródła

Display available commands on startup

Luna Stadler 4 lat temu
rodzic
commit
36ecefc816
1 zmienionych plików z 40 dodań i 1 usunięć
  1. 40 1
      zig/sdl/hello_sdl.zig

+ 40 - 1
zig/sdl/hello_sdl.zig

419
    }
419
    }
420
};
420
};
421
421
422
const SelfDocRunner = struct {
423
    fn init() Runner {
424
        return Runner{ .name = "usage", .run_always = true, .toArgv = toArgv, .isActive = isActive };
425
    }
426
427
    fn isActive(cmd: []const u8) bool {
428
        return cmd.len == 0;
429
    }
430
431
    fn toArgv(_: []const u8) []const []const u8 {
432
        const print_help =
433
            "cat <<EOF\n" ++
434
            "\x1b[37mqck - type something, find something (quick)!\x1b[0m\n" ++
435
            "\n" ++
436
            "\x1b[37mcommands:\x1b[0m\n" ++
437
            "\n" ++
438
            "  s\x1b[37m <search>       -- search for <search> in SEARCH_DIRS\x1b[0m\n" ++
439
            "  file \x1b[37m<name>      -- search for file matching <name> and preview it\x1b[0m\n" ++
440
            "\n" ++
441
            "  man\x1b[37m <name>       -- display man page for <name>\x1b[0m\n" ++
442
            "  \x1b[37mcommand\x1b[0m --help \x1b[37m  -- display --help output for <command>\x1b[0m\n" ++
443
            "  go\x1b[37m <name>        -- display go doc for <name>\x1b[0m\n" ++
444
            "  py\x1b[37m <name>        -- display python doc for <name>\x1b[0m\n" ++
445
            "  py!\x1b[37m\x1b[0m\n" ++
446
            "  rb\x1b[37m <name>        -- display ruby doc for <name>\x1b[0m\n" ++
447
            "  rb!\x1b[37m\x1b[0m\n" ++
448
            "\n" ++
449
            "  <math expr>\x1b[37m      -- run <math expr> using qalc\x1b[0m\n" ++
450
            "\n" ++
451
            "  logs\x1b[37m [<service>] -- display logs of <service> or all logs by default\x1b[0m\n" ++
452
            "EOF\n";
453
        return &[_][]const u8{ "bash", "-c", print_help };
454
    }
455
};
456
422
pub fn main() !void {
457
pub fn main() !void {
423
    var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
458
    var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
424
    defer {
459
    defer {
527
        FileRunner.init(),
562
        FileRunner.init(),
528
        LogsRunner.init(),
563
        LogsRunner.init(),
529
        QalcRunner.init(),
564
        QalcRunner.init(),
565
        SelfDocRunner.init(),
530
    };
566
    };
531
567
532
    var quit = false;
568
    var quit = false;
535
    var num_lines: i32 = 0;
571
    var num_lines: i32 = 0;
536
    var output_length: usize = 0;
572
    var output_length: usize = 0;
537
573
538
    var changed = false;
574
    var changed = true; // initially true to print help even with no command
539
575
540
    var hasChanged = false;
576
    var hasChanged = false;
541
    var lastChange: u32 = 0;
577
    var lastChange: u32 = 0;
783
                    var part_text = part.?;
819
                    var part_text = part.?;
784
                    if (std.mem.startsWith(u8, part_text, "0m")) {
820
                    if (std.mem.startsWith(u8, part_text, "0m")) {
785
                        part_text = part_text[2..];
821
                        part_text = part_text[2..];
822
                    } else if (std.mem.startsWith(u8, part_text, "37m")) {
823
                        part_text = part_text[3..];
824
                        fg_color = c.SDL_Color{ .r = 200, .g = 200, .b = 200, .a = 255 };
786
                    } else if (std.mem.startsWith(u8, part_text, "1;32m")) {
825
                    } else if (std.mem.startsWith(u8, part_text, "1;32m")) {
787
                        fnt = bold_font;
826
                        fnt = bold_font;
788
                        part_text = part_text[5..];
827
                        part_text = part_text[5..];