📄 unix 屏幕导向程序的发展利器2.htm
字号:
break; case '\t': /* 判断是否 TAB 键被按下 */ touchwin(helpwin); wrefresh(helpwin); /* 呼叫 ONLINE HELP */ getch(); touchwin(win[1-nowwin]); /* 重画第一,二视窗 */ wrefresh(win[1-nowwin]); touchwin(curwin); wrefresh(curwin); break; case 127: /* 判断是否 BACKSPACE 键被按下 */ wmove(curwin,y,--x);/* delete 一个字元 */ waddch(curwin,' '); break; case 27 : nowwin=1-nowwin; /* [ESC] 键切换视窗 */ curwin=win[nowwin]; getyx(curwin,y,x); break; default: waddch(curwin,ch); x++; break; } wmove(curwin,y,x); wrefresh(curwin); } while(1); } void initial() { initscr(); ←┐ cbreak(); │ 启动 curses 模式 nonl(); │ noecho(); ←┘ intrflush(stdscr,FALSE); keypad(stdscr,TRUE); refresh(); } 执行结果: ┌—————————————————————————————┐ │ screen1 │ ┌→ │ this is screen 1, you can press [ESC] to │ 以 │ │ switch between screen 1 and screen 2. │[ESC]│ │ │ 切 │ │ │ 换 │ │----------------------------------------------------------│ 游 │ │ screen 2 │ 标 │ │ │ 位 └→ │ _ (游标) │ 置 │ │ └—————————————————————————————┘ ↑ 按下[TAB] 键,出现 ONLINE HELP ↓ ┌—————————————————————————————┐ │ screen1 │ │ this is screen 1, you can press [ESC] to │ │ switch□--------ONLINE HELP--------□ │ │ | Hit any key to continue..| │ │ □---------------------------□ │ │----------------------------------------------------------│ │ screen 2 │ │ │ │ │ │ │ └—————————————————————————————┘ ↑ 按任意键, ONLINE HELP 关闭 ↓ ┌—————————————————————————————┐ │ screen1 │ │ this is screen 1, you can press [ESC] to │ │ switch between screen 1 and screen 2. │ │ │ │ │ │----------------------------------------------------------│ │ screen 2 │ │ │ │ _ (游标) │ │ │ └—————————————————————————————┘ ■ 结语 我们以连续两期来介绍 curses.h 函式库的使用方法, 相信同学对撰写这类的 程式应该不再陌生. 所谓『戏法人人会变, 巧妙各有不同』. 知道了基本函式 的呼叫方法, 能不能写出实用的程式, 就靠各位的巧思和创造力了. 有任何问题建议, 欢迎 E-mail 至 ljh@CCCA.NCTU.edu.tw , 谢谢 !发信人: Cardinal.bbs@mic.ee.ntu.edu.tw (Cardinal), 信区: unix标 题: Re: 请问谁会用 curses 显示 ANSI color 字发信站: 台大电机 Maxwell 站首先声明,这一封的内容应该属於 programming board,但是现在有不止一个人问我这个问题,所以在这个版再把详细的方法说明一遍。如果有人看不懂而仍然有兴趣的,请 mail 给我 (Cardinal.bbs@mic.ee.ntu.edu.tw) ,不要在这边 reply,我会考虑在私下或在 programming board解决你的问题。==> 在 Cardinal@Maxwell (Cardinal) 的文章中提到:: 1.开一个 new window (newwin): 2.设定 window 的彩色属性 (wattrset)==> 在设定彩色属性之前应该先设定颜色的 "pair" ,所谓的 "pair" 是指 foreground及background的颜色。curses的颜色有下面几种 (type为 short) : COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE 用init_pair(short pair, short f_color, short b_color)来设定 pair, for example: init_pair(100, COLOR_RED, COLOR_BLUE) 就设定了编号为 100, 蓝底红字的 color pair 了. 另外你要是嫌这几种颜色太单调了, 可以用 init_color 来设定色彩, 细节 这边就不谈了. 然後就用 wattrset(WINDOW* pwindow, short color_pair)设定你window的 颜色, for example: wattrset(pwindow, 100) 就设定了一个蓝底红字的 window (不要忘记 这儿的 100 是刚刚用 init_pair设定的值): 3.印在 window 的字就自动变成那个颜色了 (mvwprintw, mvwaddstr, ...)==> 这句... 该不会有问题吧.: 4.想要印不同颜色的字,只要把那个字 "OR" (|) 不同的颜色即可 (记住,: 这种有属性的字要用 int,不能用 char)==> 其实型别不是用 int, 而是用 chtype (不过没有差别, 去查查 curses.h就 知道) , 譬如说, 你想要在刚刚设定为蓝底红字的 window印一个别的颜色的 'A' 字, 可以这麽做 : init_pair(another_color_pair, COLOR_随便, COLOR_随便) -->先设定另一 个 color pair char cascii = 'A'; chtype cascii_color = cascii | another_color_pair; 再把 cascii_color 印出来就是一个你想要颜色的 A 了.-- ~ Cardinal ~From: Cardinal (Cardinal)Title: 关於精华区...Date: Fri Mar 10 20:36:27 1995您好:在 programming 版精华区 unix - curses libraries 中有一篇文章是我写的,刚刚来这边找资料时翻到的, 真是受宠若惊. 不过原来的文章 (如何用 curses显示彩色) 有一点忘了提到, 希望您能把下面的说明加进去: 1. init_color及init_pair 是 SystemVR3以後的标准, 不适用於 BSD 或 SunOS. 2. 在 SunOS 上要达成这样的目的, 我知道的有两种解法 a.有一款大同的中文工作站有支援 init_color & init_pair 的 library 这一型的 library 与 SunOS 为 object-code compatible. b.ncurses 支援 init_pair & init_color</pre><hr><script language="JavaScript" type="text/javascript"><!-- // new options introduced by Bernhard Friedrich; should work in all browsers // additional code to display date in Month Day, Year format by Robert Crooks var lutext; var lutime; var ludm; var ludd; var ludy; function sstr(a,b){ //extract substrings ret=lutime.substring(a,b); if (ret=="Jan" || ret=="01") ret="1"; if (ret=="Feb" || ret=="02") ret="2"; if (ret=="Mar" || ret=="03" || ret=="Mrz") ret="3"; if (ret=="Apr" || ret=="04") ret="4"; if (ret=="May" || ret=="05" || ret=="Mai") ret="5"; if (ret=="Jun" || ret=="06") ret="6"; if (ret=="Jul" || ret=="07") ret="7"; if (ret=="Aug" || ret=="08") ret="8"; if (ret=="Sep" || ret=="09") ret="9"; if (ret=="Oct" || ret=="Okt") ret="10"; if (ret=="Nov") ret="11"; if (ret=="Dec" || ret=="Dez") ret="12"; return ret; } lutime = unescape(document.lastModified); if (lutime.length == 17) { // Netscape 3 and higher, Internet Explorer 4 ludm = sstr(0,2); ludd = sstr(3,5); ludy = sstr(6,8); } if (lutime.length == 20) { // Netscape on MacOS ludm = sstr(0,3); ludd = sstr(4,6); ludy = sstr(16,20); } if (lutime.length == 25 || lutime.length == 24) { // Netscape 2 ludm = sstr(4,7); ludd = sstr(8,10); ludy = sstr(20,24); } if (lutime.length == 29) { // Opera 3 ludm = sstr(8,11); ludd = sstr(5,7); ludy = sstr(12,16); } if (lutime.length == 23) { // Internet Explorer 3 ludm = sstr(3,6); ludd = sstr(7,9); ludy = sstr(19,23); } lutext = ""; // US date format monthName = new Array(12) monthName[1] = 'January' monthName[2] = 'February' monthName[3] = 'March' monthName[4] = 'April' monthName[5] = 'May' monthName[6] = 'June' monthName[7] = 'July' monthName[8] = 'August' monthName[9] = 'September' monthName[10] = 'October' monthName[11] = 'November' monthName[12] = 'December' yearNow = null if (ludy.length==2) { if (ludy >= 90) { yearNow = 19 } else { yearNow = 20 } } else yearNow="" lutext += monthName[ludm] + " " + ludd + ", " + yearNow + ludy + " "; var luh; var lum; var lus; if (lutime.length == 17) { // Netscape 3 and higher, Internet Explorer 4 luh = sstr(9,11); lum = sstr(12,14); lus = sstr(15,17); } else { if (lutime.length == 25 || lutime.length == 24) { // Netscape 2 or IE 3 (US) luh = sstr(11,13); lum = sstr(14,16); lus = sstr(17,19); } else { if (lutime.length == 29) { // Opera 3 luh = sstr(17,19); lum = sstr(20,22); lus = sstr(23,25); } else { // Internet Explorer 3 (German) luh = sstr(10,12); lum = sstr(13,15); lus = sstr(16,18); } } } lutext += ((luh > 12) ? luh -12 : luh); lutext += ":" + ((lum.length < 2) ? '0' + lum : lum); lutext += ":" + ((lus.length < 2) ? '0' + lus : lus); lutext += (luh >= 12) ? " PM" : " AM"; document.write("<center>"); document.write("Last Modified " + lutext); document.write("</center>"); // --></script></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -