mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-28 15:28:30 +00:00
Make improvements for Actually Portable Emacs
- Get SIGWINCH working again on the New Technology - Correctly handle O_NOFOLLOW in open() on Windows - Implement synthetic umask() functionality on Windows - Do a better job managing file execute access on Windows - Fill in `st_uid` and `st_gid` with username hash on Windows - Munge UNICODE control pictures into control codes on Windows - Do a better job ensuring Windows console settings are restored - Introduce KPRINTF_LOG environment variable to log kprintf to a file
This commit is contained in:
parent
9c7b81ee0f
commit
965516e313
108 changed files with 1126 additions and 807 deletions
|
@ -55,10 +55,10 @@ int rawmode(void) {
|
|||
static bool once;
|
||||
struct termios t;
|
||||
if (!once) {
|
||||
if (tcgetattr(1, &oldterm) != -1) {
|
||||
if (tcgetattr(1, &oldterm)) {
|
||||
atexit(restoretty);
|
||||
} else {
|
||||
return -1;
|
||||
perror("tcgetattr");
|
||||
}
|
||||
once = true;
|
||||
}
|
||||
|
@ -82,7 +82,10 @@ int rawmode(void) {
|
|||
t.c_cflag |= CS8;
|
||||
t.c_iflag |= IUTF8;
|
||||
|
||||
tcsetattr(1, TCSANOW, &t);
|
||||
if (tcsetattr(1, TCSANOW, &t)) {
|
||||
perror("tcsetattr");
|
||||
}
|
||||
|
||||
WRITE(1, ENABLE_SAFE_PASTE);
|
||||
WRITE(1, ENABLE_MOUSE_TRACKING);
|
||||
WRITE(1, PROBE_DISPLAY_SIZE);
|
||||
|
@ -94,7 +97,7 @@ void getsize(void) {
|
|||
printf("termios says terminal size is %hu×%hu\r\n", wsize.ws_col,
|
||||
wsize.ws_row);
|
||||
} else {
|
||||
printf("%s\n", strerror(errno));
|
||||
perror("tcgetwinsize");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,12 +160,13 @@ int main(int argc, char *argv[]) {
|
|||
getsize();
|
||||
resized = false;
|
||||
}
|
||||
bzero(code, sizeof(code));
|
||||
if ((n = readansi(0, code, sizeof(code))) == -1) {
|
||||
if (errno == EINTR) continue;
|
||||
printf("ERROR: READ: %s\r\n", strerror(errno));
|
||||
perror("read");
|
||||
exit(1);
|
||||
}
|
||||
printf("%`'.*s ", n, code);
|
||||
printf("%`'.*s (got %d) ", n, code, n);
|
||||
if (iscntrl(code[0]) && !code[1]) {
|
||||
printf("is CTRL-%c a.k.a. ^%c\r\n", CTRL(code[0]), CTRL(code[0]));
|
||||
if (code[0] == CTRL('C') || code[0] == CTRL('D')) break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue