mirror of
https://github.com/zoriya/ash.git
synced 2026-06-07 12:14:47 +00:00
@@ -46,4 +46,21 @@ void my_addstr(my_window *window, const char *str);
|
|||||||
#define my_mvaddstr(window, y, x, str) (my_move(window, y, x), \
|
#define my_mvaddstr(window, y, x, str) (my_move(window, y, x), \
|
||||||
my_addstr(window, str))
|
my_addstr(window, str))
|
||||||
|
|
||||||
|
|
||||||
|
#define COLOR 0
|
||||||
|
#define BACKGROUND_COLOR 10
|
||||||
|
#define BRIGHT_MODIFIER 60
|
||||||
|
|
||||||
|
#define BLACK 30
|
||||||
|
#define RED 31
|
||||||
|
#define GREEN 32
|
||||||
|
#define YELLOW 33
|
||||||
|
#define BLUE 34
|
||||||
|
#define MAGENTA 53
|
||||||
|
#define CYAN 36
|
||||||
|
#define WHITE 37
|
||||||
|
|
||||||
|
#define my_attron(attr, value) (printf("\x1B[%dm", attr + value))
|
||||||
|
#define my_attrreset() (printf("\x1B[0m"))
|
||||||
|
|
||||||
void my_clrtoeol(void);
|
void my_clrtoeol(void);
|
||||||
@@ -17,10 +17,11 @@
|
|||||||
int run_builtin(const builtin *cmd, char **a, redirection *inout[2], env_t *env)
|
int run_builtin(const builtin *cmd, char **a, redirection *inout[2], env_t *env)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int saved_fd[2];
|
int saved_fd[3];
|
||||||
|
|
||||||
saved_fd[0] = dup(0);
|
saved_fd[0] = dup(0);
|
||||||
saved_fd[1] = dup(1);
|
saved_fd[1] = dup(1);
|
||||||
|
saved_fd[2] = dup(2);
|
||||||
if (saved_fd[0] < 0 || saved_fd[1] < 0) {
|
if (saved_fd[0] < 0 || saved_fd[1] < 0) {
|
||||||
perror("mysh");
|
perror("mysh");
|
||||||
return (-1);
|
return (-1);
|
||||||
@@ -29,8 +30,10 @@ int run_builtin(const builtin *cmd, char **a, redirection *inout[2], env_t *env)
|
|||||||
ret = cmd->run(a, env);
|
ret = cmd->run(a, env);
|
||||||
dup2(saved_fd[0], 0);
|
dup2(saved_fd[0], 0);
|
||||||
dup2(saved_fd[1], 1);
|
dup2(saved_fd[1], 1);
|
||||||
|
dup2(saved_fd[2], 2);
|
||||||
close(saved_fd[0]);
|
close(saved_fd[0]);
|
||||||
close(saved_fd[1]);
|
close(saved_fd[1]);
|
||||||
|
close(saved_fd[2]);
|
||||||
if (handle_parent_inout(inout, env, true))
|
if (handle_parent_inout(inout, env, true))
|
||||||
ret = 0;
|
ret = 0;
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ int newline_command(int key, buffer_t *buffer, env_t *env)
|
|||||||
ret = eval_raw_cmd(buffer->buffer, env);
|
ret = eval_raw_cmd(buffer->buffer, env);
|
||||||
buffer->buffer[0] = '\0';
|
buffer->buffer[0] = '\0';
|
||||||
buffer->pos = 0;
|
buffer->pos = 0;
|
||||||
if (env->window)
|
if (env->window && ret >= 0)
|
||||||
prompt_prepare(buffer, env);
|
prompt_prepare(buffer, env);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
@@ -6,15 +6,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "redirections.h"
|
#include "redirections.h"
|
||||||
|
#include "my_ncurses.h"
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <ncurses.h>
|
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <string.h>
|
||||||
#define _XOPEN_SOURCE 600
|
#define _XOPEN_SOURCE 600
|
||||||
#define __USE_XOPEN_EXTENDED
|
#define __USE_XOPEN_EXTENDED
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -88,7 +89,14 @@ void pty_get_output(redirection *pty, env_t *env)
|
|||||||
close(pty->fd);
|
close(pty->fd);
|
||||||
while (getline(&line, &size, file) > 0)
|
while (getline(&line, &size, file) > 0)
|
||||||
my_addstr(env->window, line);
|
my_addstr(env->window, line);
|
||||||
if (line)
|
if (line) {
|
||||||
|
if (line[0] && !strchr(line, '\n')) {
|
||||||
|
my_attron(BACKGROUND_COLOR, WHITE);
|
||||||
|
my_attron(COLOR, BLACK);
|
||||||
|
my_addstr(env->window, "%\n");
|
||||||
|
my_attrreset();
|
||||||
|
}
|
||||||
free(line);
|
free(line);
|
||||||
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user