#include #include #include #include #include #define COMMAND "source-highlight --failsafe -f esc --style-file=esc.style -o STDOUT -i " #define READ "r" #define CHARS_TO_WRITE 10 void reset_term(){ struct termios terminal_settings; tcgetattr(STDIN_FILENO, &terminal_settings); terminal_settings.c_lflag |= (ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &terminal_settings); } int main(int argc, char *argv[]) { if (argc < 2) { return EXIT_FAILURE; } setbuf(stdout, NULL); struct termios terminal_settings; char current_char; char *command = malloc(sizeof(char) * (strlen(COMMAND) + strlen(argv[1]))); tcgetattr(STDIN_FILENO, &terminal_settings); terminal_settings.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &terminal_settings); sprintf(command, "%s%s", COMMAND, argv[1]); FILE *command_output_fptr = popen(command, READ); free(command); while (!feof(command_output_fptr)) { getchar(); for (unsigned int i = 0; i < CHARS_TO_WRITE; i++) { current_char = fgetc(command_output_fptr); if(feof(command_output_fptr)){ pclose(command_output_fptr); reset_term(); return EXIT_SUCCESS; } printf("%c", current_char); } } pclose(command_output_fptr); reset_term(); return EXIT_SUCCESS; }