Skip to content

Commit b3afa0b

Browse files
author
Rob Pilling
committed
Now works when output is to a different terminal
1 parent 732559a commit b3afa0b

File tree

8 files changed

+46
-9
lines changed

8 files changed

+46
-9
lines changed

Makefile

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
include config.mk
22

33
OBJS = main.o buffer.o range.o command.o vars.o \
4-
util/list.o util/alloc.o util/io.o util/pipe.o util/str.o \
4+
util/list.o util/alloc.o util/io.o util/pipe.o util/str.o util/term.o \
55
gui/gui.o gui/motion.o gui/marks.o gui/base.o gui/intellisense.o gui/map.o \
66
global.o rc.o preserve.o yank.o
77

@@ -25,7 +25,7 @@ clean:
2525
./global.o: global.c range.h buffer.h global.h
2626
./main.o: main.c main.h range.h buffer.h global.h gui/motion.h \
2727
gui/intellisense.h gui/gui.h rc.h command.h util/io.h preserve.h \
28-
gui/map.h
28+
gui/map.h util/alloc.h util/str.h util/list.h
2929
./preserve.o: preserve.c range.h buffer.h preserve.h util/alloc.h
3030
./range.o: range.c range.h
3131
./rc.o: rc.c rc.h range.h buffer.h vars.h global.h util/io.h gui/map.h
@@ -40,18 +40,19 @@ util/list.o: util/list.c util/../range.h util/list.h util/alloc.h
4040
util/pipe.o: util/pipe.c util/../range.h util/list.h util/io.h util/pipe.h \
4141
util/alloc.h
4242
util/str.o: util/str.c util/../range.h util/list.h util/str.h util/alloc.h
43+
util/term.o: util/term.c
4344
gui/base.o: gui/base.c gui/../range.h gui/../buffer.h gui/../command.h \
4445
gui/../util/list.h gui/../global.h gui/motion.h gui/../util/alloc.h \
4546
gui/intellisense.h gui/gui.h gui/marks.h gui/../main.h gui/../util/str.h \
4647
gui/../yank.h gui/map.h
4748
gui/gui.o: gui/gui.c gui/../range.h gui/../util/list.h gui/../buffer.h \
4849
gui/motion.h gui/intellisense.h gui/gui.h gui/../global.h \
49-
gui/../util/alloc.h gui/../util/str.h
50+
gui/../util/alloc.h gui/../util/str.h gui/../util/term.h
5051
gui/intellisense.o: gui/intellisense.c gui/intellisense.h gui/../range.h \
5152
gui/../buffer.h gui/../global.h gui/../util/str.h gui/../util/list.h \
5253
gui/../util/alloc.h gui/motion.h gui/gui.h
5354
gui/map.o: gui/map.c gui/gui.h gui/map.h gui/../range.h gui/../util/list.h \
54-
gui/../util/alloc.h
55+
gui/../util/alloc.h gui/../util/str.h
5556
gui/marks.o: gui/marks.c gui/marks.h
5657
gui/motion.o: gui/motion.c gui/../range.h gui/../util/list.h gui/../buffer.h \
5758
gui/motion.h gui/intellisense.h gui/gui.h gui/marks.h gui/../global.h \

TODO

-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ command.c:
2020
regex:
2121
simple (vi(1) - see '/'): ^$.[]*
2222

23-
copy vim - change attributes on stdin (tcsetattr), so it works with poormanseperation.sh
24-
2523
binary file handling? - '\0' for e.g
2624

2725
side scrolling with tabs - fix

command.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ int shellout(const char *cmd, struct list *l)
361361
if(l){
362362
if(pipe_write(cmd, l, 0) == -1){
363363
int e = errno;
364-
gui_init();
364+
gui_reload();
365365
gui_status(GUI_ERR, "pipe error: %s", strerror(e));
366366
return -1;
367367
}
@@ -379,7 +379,7 @@ int shellout(const char *cmd, struct list *l)
379379

380380
chomp_line();
381381

382-
gui_init();
382+
gui_reload();
383383

384384
return ret == -1 ? -1 : WEXITSTATUS(ret);
385385
}

gui/gui.c

+9
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "../global.h"
1717
#include "../util/alloc.h"
1818
#include "../util/str.h"
19+
#include "../util/term.h"
1920

2021
#define GUI_TAB_INDENT(x) \
2122
(global_settings.tabstop - (x) % global_settings.tabstop)
@@ -80,9 +81,17 @@ int gui_init()
8081
return 0;
8182
}
8283

84+
void gui_reload()
85+
{
86+
/* put stdin into non canonical mode */
87+
term_canon(STDIN_FILENO, 0);
88+
refresh();
89+
}
90+
8391
void gui_term()
8492
{
8593
endwin();
94+
term_canon(STDIN_FILENO, 1);
8695
}
8796

8897
#define ATTR_FN(x) \

gui/gui.h

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define GUI_H
33

44
int gui_init(void);
5+
void gui_reload(void);
56
void gui_term(void);
67
void gui_run(void);
78

main.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ int main(int argc, const char **argv)
130130
gui_term();
131131
rc_read();
132132

133-
gui_init();
133+
gui_reload();
134134
global_buffer = readfile(fname);
135135
if(readonly)
136136
buffer_readonly(global_buffer) = 1;

util/term.c

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <termios.h>
2+
#include <unistd.h>
3+
4+
void term_canon(int fd, int on)
5+
{
6+
struct termios attr;
7+
8+
if(tcgetattr(fd, &attr) == -1)
9+
return;
10+
11+
if(on){
12+
attr.c_lflag |= (ISIG|ICANON|ECHO);
13+
attr.c_cc[VMIN] = 0;
14+
attr.c_cc[VTIME] = 0;
15+
}else{
16+
attr.c_lflag &= ~(ISIG|ICANON|ECHO);
17+
attr.c_cc[VMIN] = 1;
18+
attr.c_cc[VTIME] = 2;
19+
}
20+
21+
tcsetattr(fd, TCSANOW, &attr);
22+
}

util/term.h

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#ifndef TERM_H
2+
#define TERM_H
3+
4+
void term_canon(int fd, int on);
5+
6+
#endif

0 commit comments

Comments
 (0)