📄 charproc.c
字号:
update_marginbell(); break; case 45: /* reverse wraparound */ (*func)(&termw->flags, REVERSEWRAP); update_reversewrap(); break;#ifdef ALLOWLOGGING case 46: /* logging */#ifdef ALLOWLOGFILEONOFF /* * if this feature is enabled, logging may be * enabled and disabled via escape sequences. */ if(func == bitset) StartLog(screen); else CloseLog(screen);#else Bell(); Bell();#endif /* ALLOWLOGFILEONOFF */ break;#endif case 47: /* alternate buffer */ if (!termw->misc.titeInhibit) { if(func == bitset) ToAlternate(screen); else FromAlternate(screen); } break; case 1000: /* xterm bogus sequence */ if(func == bitset) screen->send_mouse_pos = 2; else screen->send_mouse_pos = 0; break; case 1001: /* xterm sequence w/hilite tracking */ if(func == bitset) screen->send_mouse_pos = 3; else screen->send_mouse_pos = 0; break; } }#ifdef DEBUGGING fprintf(stderr, "Leaving dpmodes()\n");#endif}/* * process xterm private modes save */savemodes(termw) XtermWidget termw;{ register TScreen *screen = &termw->screen; register int i;#ifdef DEBUGGING fprintf(stderr, "entering savemodes\n");#endif for (i = 0; i < nparam; i++) { switch (param[i]) { case 1: /* DECCKM */ screen->save_modes[0] = termw->keyboard.flags & CURSOR_APL; break; case 3: /* DECCOLM */ if(screen->c132) screen->save_modes[1] = termw->flags & IN132COLUMNS; break; case 4: /* DECSCLM (slow scroll) */ screen->save_modes[2] = termw->flags & SMOOTHSCROLL; break; case 5: /* DECSCNM */ screen->save_modes[3] = termw->flags & REVERSE_VIDEO; break; case 6: /* DECOM */ screen->save_modes[4] = termw->flags & ORIGIN; break; case 7: /* DECAWM */ screen->save_modes[5] = termw->flags & WRAPAROUND; break; case 8: /* DECARM */ /* ignore autorepeat */ break; case 9: /* mouse bogus sequence */ screen->save_modes[7] = screen->send_mouse_pos; break; case 40: /* 132 column mode */ screen->save_modes[8] = screen->c132; break; case 41: /* curses hack */ screen->save_modes[9] = screen->curses; break; case 44: /* margin bell */ screen->save_modes[12] = screen->marginbell; break; case 45: /* reverse wraparound */ screen->save_modes[13] = termw->flags & REVERSEWRAP; break;#ifdef ALLOWLOGGING case 46: /* logging */ screen->save_modes[14] = screen->logging; break;#endif case 47: /* alternate buffer */ screen->save_modes[15] = screen->alternate; break; case 1000: /* mouse bogus sequence */ case 1001: screen->save_modes[7] = screen->send_mouse_pos; break; } }}/* * process xterm private modes restore */restoremodes(termw) XtermWidget termw;{ register TScreen *screen = &termw->screen; register int i, j;#ifdef DEBUGGING fprintf(stderr, "entering restoremodes\n");#endif for (i = 0; i < nparam; i++) { switch (param[i]) { case 1: /* DECCKM */ termw->keyboard.flags &= ~CURSOR_APL; termw->keyboard.flags |= screen->save_modes[0] & CURSOR_APL; update_appcursor(); break; case 3: /* DECCOLM */ if(screen->c132) { ClearScreen(screen); CursorSet(screen, 0, 0, termw->flags); if((j = (screen->save_modes[1] & IN132COLUMNS) ? 132 : 80) != ((termw->flags & IN132COLUMNS) ? 132 : 80) || j != screen->max_col + 1) { Dimension replyWidth, replyHeight; XtGeometryResult status; status = XtMakeResizeRequest ( (Widget) termw, (Dimension) FontWidth(screen) * j + 2*screen->border + screen->scrollbar, (Dimension) FontHeight(screen) * (screen->max_row + 1) + 2*screen->border, &replyWidth, &replyHeight); if (status == XtGeometryYes || status == XtGeometryDone) { ScreenResize (&termw->screen, replyWidth, replyHeight, &termw->flags); } } termw->flags &= ~IN132COLUMNS; termw->flags |= screen->save_modes[1] & IN132COLUMNS; } break; case 4: /* DECSCLM (slow scroll) */ if (screen->save_modes[2] & SMOOTHSCROLL) { screen->jumpscroll = 0; if (screen->scroll_amt) FlushScroll(screen); } else screen->jumpscroll = 1; termw->flags &= ~SMOOTHSCROLL; termw->flags |= screen->save_modes[2] & SMOOTHSCROLL; update_jumpscroll(); break; case 5: /* DECSCNM */ if((screen->save_modes[3] ^ termw->flags) & REVERSE_VIDEO) { termw->flags &= ~REVERSE_VIDEO; termw->flags |= screen->save_modes[3] & REVERSE_VIDEO; ReverseVideo(termw); /* update_reversevideo done in RevVid */ } break; case 6: /* DECOM */ termw->flags &= ~ORIGIN; termw->flags |= screen->save_modes[4] & ORIGIN; CursorSet(screen, 0, 0, termw->flags); break; case 7: /* DECAWM */ termw->flags &= ~WRAPAROUND; termw->flags |= screen->save_modes[5] & WRAPAROUND; update_autowrap(); break; case 8: /* DECARM */ /* ignore autorepeat */ break; case 9: /* MIT bogus sequence */ screen->send_mouse_pos = screen->save_modes[7]; break; case 40: /* 132 column mode */ screen->c132 = screen->save_modes[8]; update_allow132(); break; case 41: /* curses hack */ screen->curses = screen->save_modes[9]; update_cursesemul(); break; case 44: /* margin bell */ if(!(screen->marginbell = screen->save_modes[12])) screen->bellarmed = -1; update_marginbell(); break; case 45: /* reverse wraparound */ termw->flags &= ~REVERSEWRAP; termw->flags |= screen->save_modes[13] & REVERSEWRAP; update_reversewrap(); break;#ifdef ALLOWLOGGING case 46: /* logging */#ifdef ALLOWLOGFILEONOFF if(screen->save_modes[14]) StartLog(screen); else CloseLog(screen);#endif /* ALLOWLOGFILEONOFF */ /* update_logging done by StartLog and CloseLog */ break;#endif case 47: /* alternate buffer */ if (!termw->misc.titeInhibit) { if(screen->save_modes[15]) ToAlternate(screen); else FromAlternate(screen); /* update_altscreen done by ToAlt and FromAlt */ } break; case 1000: /* mouse bogus sequence */ case 1001: screen->send_mouse_pos = screen->save_modes[7]; break; } }}/* * set a bit in a word given a pointer to the word and a mask. */static void bitset(p, mask) unsigned *p; int mask;{ *p |= mask;}/* * clear a bit in a word given a pointer to the word and a mask. */static void bitclr(p, mask) unsigned *p; int mask;{ *p &= ~mask;}unparseseq(ap, fd) register ANSI *ap; int fd;{ register int c; register int i; register int inters;#ifdef DEBUGGING fprintf(stderr, "entering unparseseq()\n");#endif c = ap->a_type; if (c>=0x80 && c<=0x9F) { unparseputc(ESC, fd); c -= 0x40; } unparseputc(c, fd); c = ap->a_type; if (c==ESC || c==DCS || c==CSI || c==OSC || c==PM || c==APC) { if (ap->a_pintro != 0) unparseputc((char) ap->a_pintro, fd); for (i=0; i<ap->a_nparam; ++i) { if (i != 0) unparseputc(';', fd); unparseputn((unsigned int) ap->a_param[i], fd); } inters = ap->a_inters; for (i=3; i>=0; --i) { c = (inters >> (8*i)) & 0xff; if (c != 0) unparseputc(c, fd); } unparseputc((char) ap->a_final, fd); }}unparseputn(n, fd)unsigned int n;int fd;{ unsigned int q;#ifdef DEBUGGING fprintf(stderr, "entering unparseputn()\n");#endif q = n/10; if (q != 0) unparseputn(q, fd); unparseputc((char) ('0' + (n%10)), fd);}unparseputc(c, fd)char c;int fd;{ char buf[2]; register i = 1; extern XtermWidget term;#ifdef DEBUGGING fprintf(stderr, "entering unparseputc()\n");#endif if((buf[0] = c) == '\r' && (term->flags & LINEFEED)) { buf[1] = '\n'; i++; } v_write(fd, buf, i);}unparsefputs (s, fd) register char *s; int fd;{ if (s) { while (*s) unparseputc (*s++, fd); }}static void SwitchBufs();ToAlternate(screen)register TScreen *screen;{ extern ScrnBuf Allocate();#ifdef DEBUGGING fprintf(stderr, "entering ToAlternate\n");#endif if(screen->alternate) return; if(!screen->altbuf) screen->altbuf = Allocate(screen->max_row + 1, screen->max_col + 1, &screen->abuf_address); SwitchBufs(screen); screen->alternate = TRUE; update_altscreen();}FromAlternate(screen)register TScreen *screen;{ if(!screen->alternate) return; screen->alternate = FALSE; SwitchBufs(screen); update_altscreen();}static voidSwitchBufs(screen) register TScreen *screen;{ register int rows, top;#ifdef DEBUGGING fprintf(stderr, "entering SwitchBufs\n");#endif if(screen->cursor_state) HideCursor(); rows = screen->max_row + 1; SwitchBufPtrs(screen); TrackText(0, 0, 0, 0); /* remove any highlighting */ if((top = -screen->topline) <= screen->max_row) { if(screen->scroll_amt) FlushScroll(screen); if(top == 0) XClearWindow(screen->display, TextWindow(screen)); else XClearArea( screen->display, TextWindow(screen), (int) screen->border + screen->scrollbar, (int) top * FontHeight(screen) + screen->border, (unsigned) Width(screen), (unsigned) (screen->max_row - top + 1) * FontHeight(screen), FALSE); } ScrnRefresh(screen, 0, 0, rows, screen->max_col + 1, False);}/* swap buffer line pointers between alt and regular screens */SwitchBufPtrs(screen) register TScreen *screen;{ register int rows = screen->max_row + 1; char *save [4 * MAX_ROWS];#ifdef DEBUGGING fprintf(stderr, "entering SwitchBufPtrs\n");#endif bcopy((char *)screen->buf, (char *)save, 4 * sizeof(char *) * rows); bcopy((char *)screen->altbuf, (char *)screen->buf, 4 * sizeof(char *) * rows); bcopy((char *)save, (char *)screen->altbuf, 4 * sizeof(char *) * rows);}VTRun(){ register TScreen *screen = &term->screen; register int i; #ifdef DEBUGGING fprintf(stderr, "entering VTRun()\n");#endif if (!screen->Vshow) { set_vt_visibility (TRUE); } update_vttekmode(); update_vtshow(); update_tekshow(); set_vthide_sensitivity(); if (screen->allbuf == NULL) VTallocbuf (); screen->cursor_state = OFF; screen->cursor_set = ON; bcnt = 0; bptr = buffer; while(Tpushb > Tpushback) { *bptr++ = *--Tpushb; bcnt++; } bcnt += (i = Tbcnt); for( ; i > 0 ; i--) *bptr++ = *Tbptr++; bptr = buffer; if(!setjmp(VTend)) VTparse(); HideCursor(); screen->cursor_set = OFF;}/*ARGSUSED*/static void VTExpose(w, event, region) Widget w; XEvent *event; Region region;{ register TScreen *screen = &term->screen;#ifdef DEBUG if(debug) fputs("Expose\n", stderr);#endif /* DEBUG */ if (event->type == Expose) HandleExposure (screen, event);}static void VTGraphicsOrNoExpose (event) XEvent *event;{ register TScreen *screen = &term->screen;#ifdef DEBUGGING fprintf(stderr, "entering VTGraphicsOrNoExpose\n");#endif if (screen->incopy <= 0) { screen->incopy = 1; if (screen->scrolls > 0) screen->scrolls--; } if (event->type == GraphicsExpose) if (Handle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -