聊天室-界面-curses

1. curses 的歷史與版本:

    cureses 最早是由柏克萊大學的 Bill Joy 及 Ken Arnold 所發展出來的. 當時發展此一函式庫主要原因是爲了提高程式對不同終端機的相容性而設計的. 因此, 利用 curses 發展出來的程式將和您所使用的終端機無關. 也就是說, 您不必擔心您的程式因爲換了一部終端機而無法使用. 這對程式設計師而言, 尤其是網路上程式的撰寫, 是件相當重要的一件事. curses之所以能對上百種以上的終端機工作, 是因爲它將所有終端機的資料, 存放在一個叫 termcap 的資料庫, ( 而在第二版的 System V 系統中, 新版的 curses 以 terminfo 取代原來的 termcap).

    有了這些記錄, 程式就能夠知道遇到哪一種終端機時, 須送什麼字元才能移動遊標的位置, 送什麼字元才能清除整個螢幕清除. (* 注一)

另外, 本文的介紹 以 System V 的 curses 版本爲主.

 

2. 如何在您的程式使用 curses:

在您的 C 程式的檔頭將 <cureses.h>include 進來.當您引進 curses.h 這個函式庫後, 系統會自動將 <stdio.h>和 <unctl.h>一併 include 進來.

另外, 在 System V 版本中, <terminfo.h>這個函式庫也將一併include進來.

#include <curses.h>

main()

{

: :

: :

}

 

3. 如何編譯(compile):

當您編輯好您的程式, 在 UNIX 提示符號下鍵入:

gcc [file.c] -lcurses

gcc [file.c] -lcurses -ltermlib(*注二)

 

4. 如何開始我的第一個 curses 程式:

在開始使用 curses 的一切命令之前, 您必須先利用 initscr()這個函式來開啓 curses 模式.

相對的, 在結束 curses 模式前 ( 通常在您結束程式前 ) 也必須以endwin()來關閉 curses 模式.

#include <curses.h>

main()
{
    initscr();
    : :
    : : 
    : :
    endwin();
}
 

這是一般 curses 程式標準的模式.

此外, 您可以就您程式所須, 而做不同的設定. 當然, 您可以不做設定,而只是呼叫 initscr(). 您可以自己寫一個函式來存放所有您所須要的設定. 平常使用時, 只要呼叫這個函式即可啓動 curses 並完成一切設定. 下面的例子, 即是筆者將平常較常用的一些設定放在一個叫 initial()的函式內.

void initial()
{
    initscr();
    cbreak();
    nonl();
    noecho();
    intrflush(stdscr,FALSE);
    keypad(stdscr,TRUE);
    refresh();
}


 各函式分別介紹如下:

  • initscr(): initscr() 是一般 curses 程式必須先呼叫的函數, 一但這個函數被呼叫之後, 系統將根據終端機的形態並啓動 curses 模式.
  • endwin(): curses 通常以呼叫 endwin() 來結束程式. endwin() 可用來關閉curses 模式, 或是暫時的跳離 curses 模式. 如果您在程式中須要call shell ( 如呼叫 system() 函式 ) 或是需要做 system call, 就必須先以 endwin() 暫時跳離 curses 模式. 最後再以wrefresh() doupdate() 來重返 curses 模式.
  • cbreak() and nocbreak(): 當 cbreak 模式被開啓後, 除了 DELETE 或 CTRL 等仍被視爲特殊控制字元外一切輸入的字元將立刻被一一讀取.當處於 nocbreak 模式時, 從鍵盤輸入的字元將被儲存在 buffer 裏直到輸入 RETURN或 NEWLINE.在較舊版的 curses 須呼叫 crmode(),nocrmode() 來取代 cbreak(),nocbreak() 
  • nl() and nonl(): 用來決定當輸入資料時, 按下 RETURN 鍵是否被對應爲 NEWLINE 字元 ( 如 /n ). 而輸出資料時, NEWLINE 字元是否被對應爲 RETURN 和 LINDFEED系統預設是開啓的.
  • echo() and noecho(): 此函式用來控制從鍵盤輸入字元時是否將字元顯示在終端機上.系統預設是開啓的.
  • intrflush(win,bf): 呼叫 intrflush 時須傳入兩個值, win 爲一 WINDOW 型態指標, 通常傳入標準輸出入螢幕 stdscr. bf 爲 TRUE 或 FALSE. 當 bf 爲 true 時, 當輸入中斷字元 ( 如 break) 時, 中斷的反應將較爲快速.但可能會造成螢幕的錯亂. 
  • keypad(win,bf): 呼叫 keypad 時須傳入兩個值, win 爲一 WINDOW 型態指標, 通常傳入標準輸出入螢幕 stdscr. bf 爲 TRUE 或 FALSE. 當開啓 keypad 後, 可以使用鍵盤上的一些特殊字元, 如上下左右>等方向鍵, curses 會將這些特殊字元轉換成 curses.h 內定義的一些特殊鍵. 這些定義的特殊鍵通常以 KEY_ 開頭.
  • refresh(): refresh() 爲 curses 最常呼叫的一個函式. curses 爲了使螢幕輸出入達最佳化, 當您呼叫螢幕輸出函式企圖改變螢幕上的畫面時, curses 並不會立刻對螢幕做改變, 而是等到refresh() 呼叫後, 纔將剛纔所做的變動一次完成. 其餘的資料將維持不變. 以儘可能送最少的字元至螢幕上. 減少螢幕重繪的時間.如果是 initscr() 後第一次呼叫 refresh(), curses 將做清除螢幕的工作. 

 

5. 遊標的控制:

  • move(y,x): 將遊標移動至 x,y 的位置.
  • getyx(win,y,x): 得到目前遊標的位置. (請注意! 是 y,x 而不是&y,&x )

 

6. 有關清除螢幕的函式:

clear() and erase(): 將整個螢幕清除. (請注意配合refresh() 使用)

 

7. 如何在螢幕上顯示字元:

  • echochar(ch): 顯示某個字元.
  • addch(ch): 顯示某個字元.
  • mvaddch(y,x,ch): 在(x,y) 上顯示某個字元. 相當於呼叫move(y,x);addch(ch);
  • addstr(str): 顯示一串字串.
  • mvaddstr(y,x,str): 在(x,y) 上顯示一串字串. 相當於呼叫move(y,x);addstr(str);
  • printw(format,str): 類似 printf() , 以一定的格式輸出至螢幕.
  • mvprintw(y,x,format,str): 在(x,y) 位置上做 printw 的工作. 相當於呼叫move(y,x);printw(format,str);

 

8. 如何從鍵盤上讀取字元:

  • getch(): 從鍵盤讀取一個字元. (注意! 傳回的是整數值)
  • getstr(): 從鍵盤讀取一串字元.
  • scanw(format,&arg1,&arg2...): 如同 scanf, 從鍵盤讀取一串字元.

例:

int ch;
char string1[80]; /* 請注意! 不可宣告爲 char *string1; */
char string2[80];
echo(); 
/* 開啓 echo 模式, 使輸入立刻顯示在螢幕上 */
ch
=getch();
string1
=getstr();
scanw(
"%s",string2);
mvprintw(
10,10,"String1=%s",string1);
mvprintw(
11,10,"String2=%s",string2);

 

 9. 如何利用方向鍵:

    curses 將一些如方向鍵等特殊控制字元, 以 KEY_ 爲開頭定義在 curses.h這個檔案裏頭.

    如 KEY_UP 即代表方向鍵的 " ↑ ". 但, 如果您想使用curses.h 所爲您定義的這些特殊鍵的話, 您就必須將 keypad 設定爲TRUE. 否則, 您就必須自己爲所有的特殊鍵定義了. curses.h 爲一些特殊鍵的定義如下:

  • KEY_UP 0403 ↑
  • KEY_DOWN 0402 ↓
  • KEY_LEFT 0404 ←
  • KEY_RIGHT 0405 →
  • KEY_HOME 0406 Home key (upward+left arrow)
  • KEY_BACKSPACE 0407 backspace (unreliable)
  • KEY_F0 0410 Function keys.
  • KEY_F(n) (KEY_F0+(n)) formula for f .
  • KEY_NPAGE 0522 Next page
  • KEY_PPAGE 0523 Previous page

以上僅列出筆者較常使用的一些控制鍵, 至於其他控制鍵的定義, 請自行參閱 man curses (* 注三).

一併爲您列出其他常用的一些特殊字元:

  • [TAB] /t
  • [ENTER] /r
  • [ESC] 27
  • [BACKSPACE] 127

  

10. 如何改變螢幕顯示字元的屬性:

    爲了使輸出的螢幕畫面更爲生動美麗, 我們常須要在螢幕上做一些如反白, 閃爍等變化. curses 定義了一些特殊的屬性, 透過這些定義, 我們也可以在 curses 程式控制螢幕的輸出變化.

  • attron(mod): 開啓屬性.
  • attroff(mod): 關閉屬性.

curses.h 裏頭定義了一些屬性, 如:

  • A_UNDERLINE: 加底線.
  • A_REVERSE: 反白.
  • A_BLINK: 閃爍.
  • A_BOLD: 高亮度.
  • A_NORMAL: 標準模式(只能配合 attrset() 使用)

    當使用 attron() 開啓某一種特殊屬性模式後, 接下來在螢幕的輸出都會以該種屬性出現. 直到您呼叫 attroff() 將此模式關閉. 請注意, 當您欲 attron() 開啓另一種屬性時, 請記得利用attroff()先關閉原來的屬性, 或直接以attrset(A_NORMAL) 將所有特殊屬性關閉.否則, curses 會將兩種屬性做重疊處理.

例:

attrset(A_NORMAL); /* 先將屬性設定爲正常模式 */

attron(A_UNDERLINE); /* 加底線 */

mvaddstr(9,10,"加底線"); /* 加底線輸出一串字元 */

attroff(A_UNDERLINE); /* 關閉加底線模式, 恢復正常模式 */

attron(A_REVERSE); /* 開啓反白模式 */

mvaddstr(10,10,"反白"); /* 輸出一串反白字元 */

attroff(A_REVERSE); /* 關閉反白模式, 恢復正常模式 */

attron(A_BLINK); /* 開啓閃爍模式 */

mvaddstr(11,10,"閃爍"); /* 輸出一串閃爍字元 */

attroff(A_BLINK); /* 關閉閃爍模式, 恢復正常模式 */

attron(A_BOLD); /* 開啓高亮度模式 */

mvaddstr(12,10,"高亮度"); /* 輸出一串高亮度字元 */

attroff(A_BOLD); /* 關閉高亮度模式, 恢復正常模式 */

 

11. 其他一些函數:

  • beep(): 發出一聲嗶聲.
  • box(win,ch1,ch2): 自動畫方框.
    • ch1: 畫方框時垂直方向所用字元.
    • ch2: 畫方框時水平方向所用字元.
    • example: box(stdscr,'|','-'); 將以 | 及 - 圍成一個方框.

  

12. 應用完整例:

    下面所舉的例子, 即完全利用剛剛所介紹的含式來完成.這個程式可將從鍵盤上讀取的字元顯示在螢幕上, 並且可以上下左右方向鍵來控制遊標的位置, 當按下 [ESC] 後, 程式即結束. 您有沒有發現, 這不就是一個簡單全螢幕編輯器的雛形嗎?

實例1:

#include <curses.h>
#include <stdio.h>
#define StartX 1
#define StartY 1
void initial();
main()
{
   int x = StartX;
   int y = StartY;
   int ch;
   initial();
   box(stdscr,'|','-');
   attron(A_REVERSE);
   mvaddstr(0,20,"curses program");
   attroff(A_REVERSE);
   move(x,y);
   do{
      ch = getch();
      switch(ch)
      {
        case KEY_UP:
           --y;
           break;
            case KEY_DOWN: 
                ++y; 
                break;
            case KEY_RIGHT: 
                ++x; 
                break;
            case KEY_LEFT: 
                --x; 
                break;
            case ' ': 
                ++y;
                x=0;
                break;
            case '/t': 
                x+=7;
                break;
            case KEY_BACKSPACE: 
                mvaddch(y,--x,' ');
                break;
            case 27: 
                endwin(); 
                exit(1); 
            default: 
                addch(ch); 
                x++;
               break;
      }
      move(y,x);
   }while(1);
}

void initial()
{
 initscr();
 cbreak();
 notnl();
 noecho();
 intrflush(stdscr,false);
 keypad(stdscr,true);
 refresh();
}

 

實例2:

#include <curses.h>

int main()
{
 initscr();

 box(stdscr, '|', '-');  /*draw a box*/
 move(LINES/2, COLS/2);              /*move the cursor to the center*/
 waddstr(stdscr, "Hello, world!");  
 refresh();
 getch();
 
 endwin();
 return 0;
}

curses庫函數說明  

--------------------------------------------------------  
INDDW*curscr:當前屏幕 
WINDOW *stdscr:標準屏幕 
int LINES:終端上的行數 
int COLS:終端上的列數 
bool TRUE:真標誌,1 
bool FALSE:假標誌,0 
int ERR:錯誤標誌,-1 
int OK:OK標誌,0 
--------------------------------------------- 
win:WINDOW * 
bf:bool 
ch:chty pe 
str:char * 
chstr:chty pe* 
fmt:char * 
否則:int  
--------------------------------------------- 
初始化 
WINDOW *initscr() 
SCREEN*newterm(char *type, FILE *outfd, FILE *infd) 
對用戶訪問的每個終端都應該調用newterm 
t y p e是終端的名稱,包括在$ T E R M中(如ansi, xterm, vt100等等) 
SCREEN*set_term(SCREEN *new) 
用戶可以切換當前終端。所有的函數都將在設置的當前終端上起作用。 
int endwin() 
退出程序之前,關閉所有打開的窗口。 
之後還可以調用refresh(), 
int isendwin() 
ifendwin()->;refresh(),TRUE,|FALSE。 
----------------------- 
WINDOW *newwin(nlines,ncols,begy,begx) 
begy和begx是窗口左上角的座標。nlines是一個整數, 
存放着行的數目,而ncols,存放着列的數目。 
所有的參數設置爲零,則打開的窗口的大小將與屏幕的大小相同。 
int delwin(win) 
它刪除窗口win。如果存在子窗口,以前先要刪除這些子窗口。這個函數將 
釋放win所佔據的所有資源。在調用endwin()之前用戶應該刪除所有的窗口 
int mvwin(win,by,bx) 
它將把窗口移到座標(by,bx)處。如果把窗口移出屏幕邊界的範圍,則ERR 
WINDOW *subwin(origwin,nlines,ncols,begy,begx) 
它返回一個位於origwin窗口中間的子窗口。如果用戶改變這兩個窗口 
(origwin或者那個新窗口)中的一個,則這種改變將會同時反映到這兩 
個窗口上。在下一次調用refresh()之前,先要調用touchwin(origwin) 
begx和begy是相對於屏幕的,而不是相對於origwin的。 
WINDOW *derwin(origwin,nlines,ncols,begy,begx) 
此函數與subwin(.)相同,只不過這裏的begx和begy是相對於origwin的,而不是相對於屏幕的。 
mvderwin(win,y,x) 
此函數將把win移到父窗口內。(注意:此函數尚未實現)。 
WINDOW *dupwin(win) 
此函數複製窗口win。 
int overlay(win1,win2) 
將把win1中的所有文本拷貝到win2中,但是不拷貝空格。 
int overwrite(win1,win2) 
也是做文本拷貝工作的函數,但它拷貝空格。 
int copywin(win1,win2,sminrow,smincol,dminrow, 
dmincol,dmaxrow,dmaxcol,overlay) 
它所做的工作與overlay(.)和overwrite(.)相似,但是該函數還可以讓程序員選擇拷貝窗口的哪個區域。 
int addch(ch) 
int waddch(win,ch) 
int mvaddch(y,x,ch) 
int mvwaddch(win,y,x,ch) 
---------------- 
int addstr(str) 
int addnstr(str,n) 
int waddstr(win,str) 
int waddnstr(win,str,n) 
int mvaddstr(y,x,str) 
int mvaddnstr(y,x,str,n) 
int mvwaddstr(win,y,x,str) 
int mvwaddnstr(win,y,x,str,n) 
----------------------------- 
int addchstr(chstr) 
int addchnsrtr(chstr,n) 
int waddchstr(win,chstr) 
int waddchnstr(win,chstr,n) 
int mvaddchstr(y,x,chstr) 
int mvaddchnstr(y,x,chstr,n) 
int mvwaddchstr(win,y,x,chstr) 
int mvwaddchnstr(win,y,x,chstr,n) 
*****chstr是指向ch type數組的一個指針。***** 
--------------------------- 
int echochar (ch) 
int wechochar (win,ch) 
--------------------------- 
int printw(fmt,..) 
int wprintw(win.fmt,....) 
int mvprintw(y,x,fmt,...) 
int mvwprntw(win,y,x,fmt,..) 
--------------------------- 
int insch(c) 
int winsch(win,c) 
int mvinsch(y,x,c) 
int mvwinsch9win,y,x,c) 
這些函數把字符ch插入到光標的左邊, 
光標後面的所有字符則向右移動一個位置。 
在這一行最右端的字符可能會丟失。 
--------------------------- 
int insert() 
int winsert(win) 
在當前行的上方插入一個空行(最底下的一行將被丟失)。 
--------------------------- 
int insdelin(n) 
int winsdelln(win,n) 
如果n爲正數,則這些函數將在適當的窗口的當前光標上方插入n行 
(這樣一來最底下的n行將丟失);如果n爲負數,則光標下面的n行將被刪除, 
餘下的行將上升,頂替它們的位置。這些函數將在當前光標的左邊插入str 
(字符的個數不能超過一行的限度)。在光標右邊的字符將右移,如果到達行 
尾,則字符將丟失,光標位置不變。y和x是指在插入str以前先要把光標移動 
到的座標,n是要插入的字符的數目(如果n爲0則插入整個字符串)。 
--------------------------- 
int insstr(str) 
int insnstr(str,n) 
int winsstr(win,str) 
int winsnstr(win,str,n) 
int mvinsstr9y,x,str) 
int mvinsnstr(y,x,str,n) 
int mvwinsstr(win,y,x,str) 
int mvwinsnstr(win,y,x,str,n) 
這些函數將在當前光標的左邊插入str(字符的個數不能超過一行的限度)。 
在光標右邊的字符將右移,如果到達行尾,則字符將丟失,光標位置不變。 
y和x是指在插入str以前先要把光標移動到的座標,n是要插入的字符的數目 
(如果n爲0則插入整個字符串)。 
--------------------------- 
int delch() 
int wdelch(win) 
int mvdelch(y,x) 
int mvwdelch(win,y,x) 
刪除光標左邊的字符,並把光標右邊餘下的字符向左移動一個位置。 
y和x是在進行刪除操作以前要把光標移動到的座標。 
int deleteln() 
int wdeleteln(win) 
刪除光標下面的一行,並把下面所有的其他行都向上移動一個位置。 
此外,屏幕最底下的一行將被清除。 
----------------------------- 
方框和直線 

int border(ls,rs,ts,bs,tl,tr,bl,br) 
int wborder(win,ls,rs,ts,bs,tl,tr,bl,br) 
int box(win,vert,hor) 
這些函數在窗口的邊界(或者win的邊界)畫上方框。在下面的表格中, 
讀者將可以看到字符,以及它們的默認值。當用零去調用box(.)時將 
會用到這些默認值。在下面的圖中讀者可以看到方框中字符的位置 
------------- 
int vline9ch,n) 
int wvline(win,ch,n) 
int hline(ch,n) 
int whline(win,ch,n) 
這些函數將從當前光標位置開始畫一條水平線或者垂直線。 
ch是畫線所使用的字符,n是要畫的字符的個數,光標位置並不移動。 
-------------------------- 
void bkgdset(ch) 
void wbkgdset(win,ch) 
這兩個函數設置窗口或者屏幕的背景字符和屬性。ch的屬性將和窗口中 
所有非空格的字符的屬性進行OR操作。背景是窗口的一部分, 
將不會隨着滾動、輸入或輸出而改變 
int bkgd(ch) 
int wbkgd(win,ch) 
--------------------------------- 
int getch() 
int wgetch() 
int mvgetch(y,x) 
int mvwgetch(win,y,x) 
getch()將從終端讀取輸入,讀取的方式取決於是否設置了延遲模式。 
如果設置了延遲模式,則getch()將一直等待,直到用戶按下一個鍵爲止; 
如果沒有設置延遲模式,則它將返回輸入緩衝區中的數據,如果輸入緩衝區 
爲空,則它將返回ERR。mvgetch(.)和mvwgetch(.)首先把光標移動到位置 
(y,x)上。名稱中有w字母的函數將從與窗口win相關的終端讀取輸入, 
getch()和mvgetch(.)則從屏幕相關的終端讀取。如果使能了keypad(.) 
在用戶按下某個功能鍵時,getch()將返回一個代碼,該代碼在.h頭文件中被 
定義爲KEY_*宏。如果用戶按下Esc鍵(它可能會是某個組合功能鍵的第 
一個鍵),則ncurses將啓動一個否則就返回功能鍵的值。(如果需要的話, 
可以使用notimeout()來關閉第二個定時器 
int ungetch() 
這個函數將把字符ch送回輸入緩衝區。 
--------------------- 
int getstr(str) 
int wgetstr(win,str) 
int mvgetstr(y,x,str) 
int mvwgetstr(win,y,x,str) 
int wgetnstr(win,str,n) 
這些函數的作用相當於對getch()進行一系列的調用,直到接收到一個新行。 
行中的字符存放在str中(所以,在調用getstr(.)之前,不要忘記給字符指針 
分配內存)。如果打開了回送,則字符串將被顯示出來(使用noecho()可以關 
閉回送)而用戶的刪除字符以及其他特殊字符也會被解釋出來 
----------------- 
chty peinch(0 
chty pewinch(win) 
chty pemvinch(y,x) 
chty pemvwinch(win,y,x) 
這些函數從屏幕或窗口返回一個字符,因爲返回值的類型是chty pe, 
所以還包括了屬性信息。這一信息可以使用常量A_*從字符中擴展得到。 
------------------- 
int scanw(fmt,...) 
int wscanw(win,fmt,...) 
int mvscanw(y,x,fmt,...) 
int mvwscanw(win,y,x,fmt,...) 
int vwscanw(win,fmt,va_list.) 
---------------------------- 
輸出選項 
int idlok9win,bf) 
void fdcok(win.bf) 
這兩個函數爲窗口使能或者關閉終端的insert/delete特徵(idlok(.)針對一 
行,而idcok(.)則針對字符)。(注:idcok(.)尚未實現) 
void immedok(win,bf) 
bf設置爲TRUE,則對窗口win的每一次改變都將導致物理屏幕的一次刷新。 
這將使程序的性能降低,所以默認的值是FALSE。(注:此函數尚未實現) 
int clearok(win,bf) 
如果bf值爲TRUE,則下一次調用wrefresh(win)時將會清除屏幕, 
並完全地把它重新畫一遍(就像用戶在編輯器vi中按下Ctrl+L一樣)。 
int leaveok(win,bf) 
默認的行爲是,ncurses讓物理光標停留在上次刷新窗口時的同一個位置上。 
不使用光標的程序可以把leaveok(.)設置爲TRUE,這樣一般可以節省光標 
移動所需要的時間。此外,ncurses將試圖使終端光標不可見。 
int nl() 
int nonl() 
這兩個函數控制新行的平移。使用nl()可以打開平移,這樣在回車時就會 
平移到新的一行,在輸出時就會走行。而nonl()可以把平移關上。 
關上平移之後,ncurses做光標移動操作時速度就會快一些。 
------------------------------ 
輸入選項 

int keypad(win,bf) 
bf爲TRUE,函數在等待輸入時會使能用戶終端的鍵盤上的小鍵盤。 
ncurses將返回一個鍵代碼,該代碼在.h頭文件中被定義爲KEY_*宏, 
它是針對小鍵盤上的功能鍵和方向鍵的。對於PC鍵盤來說, 
這一點是非常有幫助的,因爲這樣用戶就可以使能數字鍵和光標鍵。 
int meta(win.bf) 
bf爲TRUE,從getch()返回的鍵代碼將是完整的8位(最高位將不會被去掉) 
int cbreak() 
int nocbreak() 
int crmode() 
int nocrmode() 
cbreak()和nocbreak()將把終端的CBREAK模式打開或關閉。如果CBREAK打開則程序就可以立刻使用讀取的輸入信息。如果CBREAK關閉,則輸入將被緩存 
起來,直到產生新的一行(注意:crmode()和nocrmode()只是爲了提供向上兼容性,不要使用它們) 
int raw() 
int noraw() 
這兩個函數將把RAW模式打開或關閉。RAW與CBREAK相同, 
它們的區別在於RAW模式不處理特殊字符。 
int echo() 
int noecho() 
如果把echo()設置爲TRUE,則用戶所敲的輸入將會回送並顯示出來, 
而noecho()則對此保持沉默。 
int halfdelay(t) 
此函數與cbreak()相似,但它要延遲t秒鐘。 
int nodelay(win,bf) 
終端將被設置爲非阻塞模式。如果沒有任何輸入則getch()將返回ERR, 
否則如果設置爲FALSE,則getch()將等待,直到用戶按下某個鍵爲止。 
int timeout(t) 
int wtimeout(win,t) 
筆者提倡大家使用這兩個函數,而不要使用halfdelay(t)和nodelay(win,bf)getch()的結果取決於t的值。如果t是正數,則讀操作將被阻塞t毫秒; 
如果t爲零,則不發生任何阻塞;如果t是負數,則程序將阻塞,直到有輸入爲止 
int notimeout(win,bf) 
如果bf爲TRUE,則getch()將使用一個特殊的定時器(一秒鐘長)。到時間以後 
再對以Esc等鍵打頭的輸入序列進行解釋。 
int typeahead(fd) 
如果fd是-1,則不檢查超前鍵擊,否則ncurses將使用文件描述符fd來進行這些檢查 
int int rflush(win,bf) 
當bf爲TRUE時使能該函數。在終端上按下任意中斷鍵(quit、break.)時, 
所有的輸出將會刷新到tty驅動程序隊列中。 





四級(中級) 
user4 
97 
6339214 
984818 
202193 
qisiwole 

------------------------------ 
終端屬性 
int baudrate()此函數返回終端的速度,以bps爲單位。 
char erasechar()此函數返回當前刪除的字符。 
char killchar()此函數返回當前殺死的字符。 
int has_ic() 
int has_il()如果終端具有插入/刪除字符的能力,則has_rc()將返回TRUE如果終端具有插入/刪除行的能力,則has_il()將返回TRUE, 
否則這兩個函數將返回ERR。(注:尚未實現) 
char *longname()此函數所返回的指針允許用戶訪問當前終端的描述符。 
chty petermattrs()(注:此函數尚未實現) 
char *termname()這個函數從用戶環境中返回TERM的內容。(尚未實現) 
-------------------------------- 
更新終端 
int refresh() 
int wrefresh(win) 
refersh()將把窗口映像拷貝到終端,而wrefresh(win)將把窗口映像 
拷貝到win,並使它看起來象原來的樣子。 
int wnoutrefresh(win) 
int doupdate() 
wnoutrefresh(win)將會只拷貝到窗口win,這意味着在終端上將不進行任何輸出,但是虛擬屏幕實際上看起來象程序員所希望的那樣。doupdate()將輸 
出到終端上。程序可以改變許多窗口,對每個窗口都調用一次 
wnoutrefresh(win),然後再調用一次doupdate()來更新物理屏幕。 
int redrawln(win) 
int wredrawln(win,bline,blines) 
如果在往屏幕上輸出新內容時需要清除一些行或者整個屏幕,可以使用這兩 
個函數。(可能這些行已經被破壞了或者由於其他的原因。) 
int touchwin(win) 
int touchline(win,start,count) 
int wtouchln(win,y,n,changed) 
int untouchwln(win) 
這些函數通知ncurses整個win窗口已經被改動過了,或者從start直到 
start+count的這些行已經被改動過了。例如,如果用戶有一些重疊的窗口 
(正如在example.c中一樣),對某個窗口的改動不會影響其他窗口的映像。 
wtouchln(.) 
將按掀從y開始的n行。如果change的值是TRUE,則這些行被按掀過了, 
否則就還未被按掀過(改變或未改變)。 
untouchwin(win)將把窗口win標記爲自上次調用refresh()以來還未被按掀。 
int ls_linetouched(win,line) 
int ls_wint ouched(win) 
通過使用這兩個函數,用戶可以檢查自從上次調用refresh()以來, 
第line行或者窗口win是否已被按掀過。 
------------------------------- 
視頻屬性與顏色 
ncurses定義了八種顏色,在帶有彩色支持的終端上用戶可以使用這些顏色。 
首先,調用start_color()初始化顏色數據結構, 
然後使用has_colors()檢查終端權能。 
start_color()將初始化COLORS和COLOR_PAIR。 
前者是終端所支持的最多的顏色數目,而後者是用戶可以定義的色彩對的最大數目。 
兩個屬性可以使用OR操作組合起來。“COLORPAIRS_1COLORS_1” 

int color_content(color,t,g,b) 

此函數獲取color的顏色成份r,g和b。 
首先,函數CheckColor調用start_color()初始化顏色,如果當前終端有彩色的話, 
則函數has_colors()將返回TRUE。我們檢查了這一點以後,調用init_pair(.) 
把前景色和背景色組合起來,再調用wattrset(.)爲特定的窗口設置這些顏色對。 
此外,如果我們使用的是黑白終端,還可以單獨使用wattrset(.)來設置屬性。 
如果要在xterm中獲取顏色,我認爲最佳方法是使用ansi_xterm, 
以及來自MidnightCommander的terminfo項目。用戶可以獲取ansi_xterm 
和MidnightCommander的源代碼(mc_x.x.tar.gz),然後編譯ansi_xterm, 
並對mc_x.x.tar.gz文檔中的xterm.ti和vt100.ti使用tic命令。 
執行ansi_xterm,把它試驗出來 

--------------------------------- 
光標和屏幕座標 

int move(y,x) 
int wmove(win,y,x) 
move()將移動光標,而wmove(win)則從窗口win中移動光標。對 
輸入/輸出函數來說,還定義了其他的一些宏,在調用特定函數之前, 
這些宏可以移動光標。 

int curs_set(bf) 這個函數將把光標置爲可見或者不可見,如果終端有這個功能 
void getyx(win,y,x) getyx(.)將返回當前光標位置。(注意:這是一個宏) 
void getparyx(win,y,x) 
如果win是個子窗口,getparyx(.)將把該窗口對應父窗口的座標存儲在y和x則y和x都將爲-1。(注:此函數尚未實現) 

void getbegyx(win,y,x) 
void getmaxyx(win,y,x) 
int getmaxx(win) 
int getmaxy(win) 
這些函數把窗口win的開始座標和大小座標存放在y和x中。 
int getsyx(int y,int x) 
int setsyx(int y,int x) 
getsyx(.)把虛擬屏幕光標存放在y和x中,而setsyx(.)則設置這個座標。 
如果y和x是-1, 用戶調用getsyx(.)將會設置leaveok。 

------------------------------ 
滾動 

int tscrollok(win,bf) 
當光標在屏幕的右下角並且輸入了一個字符(或者新的一行)時,如bf爲TRUE則窗口win中的文本將上滾一行。如果bf爲FALSE,則鼠標留在原來的位置上 
當滾動特徵打開時,使用下面的函數可以滾動窗口中的內容。 
(注意:當用戶在窗口的最 
後一行輸入一個新行時,也應該發生相應的滾動操作, 
所以在使用scrollok(.)時要十分小心, 
否則可能會得到出乎意料的結果。) 
int scrol(win) 
此函數將使窗口向上滾動一行(數據結構中的行也向上滾動)。 
int acrl(n) 
int wscrl(win,n) 
這兩個函數將使屏幕或者窗口win向上向下滾動,滾動方向取決於整數n的值 
如果n是正數,則窗口向上滾動n行,否則如果n是負數,則窗口向下滾動n行 
int setscrreg(t,b) 
int wsetscrreg(win,t,b) 
這兩個函數設置一個軟滾動區。 
------------------------------------- 
小鍵盤 

WINDOW *newpad(nlines,ncols) 
WINDOW *subpad(orlg,nlines,ncols,begy,begx) 
int prefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol) 
int pnoutrefresh(pad,pminrow,pmincol,sminrow,smincol,smaxrow,smaxcol) 
int pechochar (pad,ch) 
---------------------------- 
軟標籤 

int slk_init(int fmt) 
int slk_set(int labnum,char *label,int fmt) 
int slk_refresh() 
int slk_noutrefresh() 
char *slk_label(int labnum) 
int slk_clear() 
int slk_restore() 
int slk_touch() 
int slk_attron(chty peattr) 
int slk_attrset(chty peattr) 
int slk_attroff(chty peattr) 
這些函數是與attron(attr)、attrset(attr)和attroft(attr)相對應的, 
但它們尚未實現。 
------------------------------ 
int beep() 
int flash() 
char *unctrl(chty pec) 
char *keyname(int c) 
int filter() 
(注:以上函數尚未實現。) 
void use_env(bf) 
int putwin(WINDOW *win,FILE*filep) 
(注:以上函數尚未實現。) 
WINDOW *getwin(FILE*filep) 
(注:以上函數尚未實現。) 
int delay_output(int ms) 
int flushinp() 
-------------------------------------- 
低級訪問 

int def_prog_mode() 
int def_shell)_mode() 
int reset_prog_mode() 
int reset_shell_mode() 
int resetty() 
int savetty() 
int ripoffline(int line,int (*init)(WINDOW *,int )) 
int napms(int ms) 
--------------------------------- 
屏幕轉儲 

int scr_dump(char *filename) 
(注:此函數尚未實現。) 
int scr_restore(char *filename) 
(注:此函數尚未實現。) 
int scr_init(char *filename) 
(注:此函數尚未實現。) 
int scr_set(char *filename) 
(注:此函數尚未實現。) 
----------------------------------- 
Termcap模擬 

int tgetent(char *bp,char *name) 
int tgetflag(char fd[2]) 
int tgetnum(char fd[2]) 
char *tgetstr(char fd[2],char **area) 
char tgoto(char *cap,int col,int row) 
int tputs(char *str,int offset,int (*putc)()) 
------------------------------------------- 
調試函數 

void _init(trace() 
void _trace(char *,...) 
char *_traceattr(mode) 
void traceon() 
void traceoff() 

2002-08-31 09:29:00 


四級(中級) 
user4 
97 
6339224 
984818 
202193 
qisiwole 

------------------------------------------- 

8.21.1布爾型權能 
變量權能名稱初始化描述 
auto_left_marginbwbwcub1從最後一列換行到第0列 
auto_right_marginamam終端的邊界自動對齊 
back_color_erasebceut屏幕以背景色清除 
can_changeccccc終端可以重新定義現有的顏色 
ceol_standout_glitch xhpxs標準輸出不會被覆蓋所清除(hp) 
col_addr_glitchxhpaYA對hpa/mhpa大寫字符而言只作正向移動 
cpi_changes_rescpixYF改變字符間距將會影響解析度 
cr_cancels_micro_mode crxm YB使用cr關閉宏模式 
eat_newline_glitchxenlxn在80列之後將忽略新行(Concept) 
erase_overtrikeeoeo可以用空格來刪除疊印 
generic_typegngn通用行類型(如dialup,switch) 
hard_copyhchc硬拷貝終端 
hard_cursorchtsHC光標很難看到 
has_meta_keykmkm有一個元鍵(shift,設置奇偶校驗位) 
has_print _wheeldaisyYC打印機需要操作員來改變字符集 
has_status_linehshs有一個額外的“狀態行” 
hue_lightness_saturation hlshl終端只使用HLS顏色表示法(Tektronix) 
insert_null_glitchinin插入模式,能識別空行 
lpi_changes_reslpixYG改變行距將影響解析度 
memory_abovedada顯示可以保留在屏幕上方 
memory_belowdbdb顯示可以保留在屏幕下方 
move_insert_modemirmi在插入模式下可以安全地移動 
move_standout_mode msgrms在標準輸出模式下可以安全地移動 
needs_xon_xoffnxonnx不能填充,需要nxon/xoff 
no_esc_ctl_cxsbxbBeehive信號(F1=Escape,F2=CtrlC) 
non_rev_rmcupnrrmcNRsmcup不能反轉rmcup 
no_pad_char npcNP填充字符不存在 
non_dest_scroll_region ndscr ND滾動區不可摧毀 
over_strikeosos終端可以疊印 
prtr_silentmc5i5i打印機不向屏幕回送 
row_addr_glitchxvpaYDvhp/mvpa大寫字母只能作正向移動 
semi_auto_right_margin samYE打印在最後一列將導致cr 
status_line_esc_okeslokes在狀態行上可以使用Esc鍵 
dest_tabs_magic_smso xtxt製表符不可用(Teleray1061) 
tilde_glitchhzhzHazel_tine;不能打印’s 
transparent_underline ulul下劃線字符疊印 
xon_coffxonxo終端使用xon/xoff握手機制 
8.21.2數值型權能 
變量權能名稱初始值描述 
bit_image_entwining bitwinYo在SYSV中未作描寫 
buffer_capacitybufszYa在打印前緩存的字節的數目 
columnscolsco在一行中列的數目 
dot_vert_spacingspinvYb在水平方向上點與點的距離,以每英寸多少點爲單位 
dot_horz_spacingspinhYc在垂直方向上針之間的距離,以每英寸多少針爲單位 
init_tabsitit每#個空格算一個製表符的位置 
label_heightlhlh每個標籤多少行 
label_widthlwlw每個標籤多少列 
lineslinesli屏幕或頁面上行的數目 
lines_of_memorylmlm如果>;lines則表示內存中的行數,0意味着可變 
magic_cookie_glitch xmcsgsmso或rmso所剩下的空白字符的數目 
max_colorscolorsCo在屏幕上顏色的最大數目 
max_micro_address maddrYd在micro_._address中的最大值 
max_micro_jumpmjumpYe在parm_._micro中的最大值 
max_pairspairspa在屏幕上顏色對的最大數目 
micro_col_sizemcsYf在宏模式中字符間距的大小 
micro_line_sizemlsYg在宏模式中行距的大小 
no_color_videoncvNC不能使用彩色的視頻屬性 
number_of_pinsnpinsYh在打印頭中針的數目 
num_labelsnlabNl屏幕上標籤的數量 
output_res_char orcYi水平解析度,以每行單元數爲單位 
output_res_lineorlYj垂直解析度,以每行單元數爲單位 
output_res_horz_inch orhiYk水平解度,以每英寸單元數爲單位 
output_res_vert_inch orviYl垂直解析度,以每英寸單元數爲單位 
padding_baud_rate pbpb在需要cr/nl填充時最低的波特率 
virtual_terminalvtvt虛擬終端號(Unix系統) 
width_status_linewslws狀態行的第n列 

(下面的數值型權能是在SYSVterm結構中定義的,但在man幫助中還沒有提供對它們的 
描述。我們的解釋來自term結構的頭文件。) 
變量權能名稱初始值描述 

bit_image_typebitypeYp位映像設備的類型 
buttonsbtnsBT鼠標按鍵的數目 
max_attributesmama終端能夠處理的最多的組合屬性 
maximum_windows wnumMW可定義窗口的最大數目 
print _ratecpsYm打印速率,以每秒字符數爲單位 
wide_char _sizewidcsYn在雙寬度模式中字符間距的大小 

8.21.3字符串型權能 
變量權能名稱初始值描述 

acs_char sacscac圖形字符集對一def=vt100 
alt_scancode_escscesaS8掃描碼模擬的另一種換碼(默認值是VT100) 
back_tab cbtbt向後tab(p) 
bellbelbl聲音信號(響鈴)(p) 
bit_image_repeatbirepXy把位映像單元重複#1#2次(使用tparm) 
bit_image_newlinebinelZz移動到位映像的下一行(使用tparm) 
bit_image_carriage_return bicr Yv移動到同一行的開頭(使用tparm) 
carriage_returncrcr回車(p*) 
change_char _pitch cpiZA改變爲每英寸#個字符 
change_line_pitchlpiZB改變爲每英寸#行 
change_res_horzchrZC改變水平解度 
change_res_vertcvrZD改變垂直解析度 
change_scroll_region csrcs把滾動區改變爲從#1行到#2行(VT100)(PG) 
char _paddingrmprP與ip相似,但它用在插入模式中 
char _set_namescsnmZy字符集名稱的列表 
clear_all_tabstbcct清除所有的製表符停止(p) 
clear_marginsmgcMC清除所有的頁邊 
clear_screenclearcl清除屏幕和home光標(p*) 
clr_bolel1cb清除到行首 
clr_eolelce清除到行尾(P) 
clr_eosedcd清除到顯示的末尾(p*) 
code_set_initcsinci多個代碼集合的初始化序列 
color_namescolornmYw#1號顏色的名稱 
column_addresshpach設置光標列(PG) 
command_char acter cmdchCC在原型中終端可以設置的cmd字符 
cursor_addresscupcm屏幕光標移動到#1行#2列(PG) 
cursor_downcud1do下移一行 
cursor_homehomehoHome光標(如果沒有環的話) 
cursor_invisiblecivisvi使光標不可見 
cursor_leftcub1le把光標向左移一個空格 
cursor_mem_address mrcupCM內存相對的光標尋址 
cursor_normalcnormve使光標以最普通的外形顯示(undovs/vi) 
cursor_rightcuf1nd不具有破壞性的空白(光標向右移) 
cursor_to_llllll最後一行,第一列(如果沒有環的話) 
cursor_upcuu1upUpline(光標向上移) 

cursor_visiblecvvisvs使光標可見 
define_bit_image_region defbiYx定義方形的位映像區(使用tparm) 
define_char defcZE定義字符集中的某個字符 
delete_char acterdch1dc刪除字符(p*) 
delete_linedl1dl刪除行(p*) 
device_typedevtdv顯示語言/代碼集支持 
dis_status_linedslds關閉狀態行 
display_pc_char dispcS1顯示PC字符 
down_half_linehdhd向下移動半行(向前換1/2行) 
ena_acsenacseA使能另一個字符集合 
end_bit_image_region endbi Yy結束位映像區(使用tparm) 
enter_alt_char set_mode smacs as開始另一個字符集(p) 
enter_am_modesmamSA打開自動對齊特徵 
enter_blink_modeblink mb打開字符閃爍效果 
enter_bold_modeboldmd打開粗體(特別亮)模式 
enter_ca_modesmcupti啓動使用環的程序的字符串 
enter_delete_modesmdcdm刪除模式(輸入) 
enter_dim_modedimmh打開半亮模式 
enter_doublewide_mode swidm ZF使能雙倍寬度模式 
enter_draft_qualitysdrfqZG設置草圖效果的打印方式 
enter_insert_modesmirim插入模式(輸入) 
enter_italics_modesitmZH使能斜體字模式 
enter_leftward_mode slmZI使能向左回車移動 
enter_micro_modesmicmZJ使能宏移動功能 
enter_near_letter_quality snlqZK設置NLQ打印 
enter_normal_quality snrmqZL設置一般質量的打印方式 
enter_pc_char set_mode smpch S2輸入PC字符顯示模式 
enter_protected_mode protmp打開保護模式 
enter_reverse_mode revmr打開反轉視頻模式 
enter_scancode_mode smscS4輸入PC掃描碼 
enter_secure_mode invismk打開空白模式(字符不可見) 

2002-08-31 09:29:00 


四級(中級) 
user4 
97 
6339230 
984818 
202193 
qisiwole 

enter_shadow_mode sshmZM使能陰影打印模式 
enter_standout_mode smso so開始標準輸出模式 
enter_subscript_mode ssubm ZN使能下標打印 
enter_superscript_mode ssupm ZO使能上標打印 
enter_underline_mode smul us開始下劃線模式 
enter_upward_mode sum ZP使能向上回車移動 
enter_xon_modesmxonSX打開xon/xoff握手機制 
erase_char sechec刪除#1個字符(PG) 
exit_alt_char set_mode rmacs ae終止可選的字符集(P) 
exit_am_modermamRA關閉自動對齊方式 
exit_attribute_mode sgr0me關閉所有屬性 
exit_ca_modermcupte終止使用環的程序的字符串 
exit_delete_modermdced終止刪除模式 
exit_doublewide_mode rwidm ZQ關閉雙倍寬度打印方式 
exit_insert_modermirei結束插入模式 
exit_italics_moderitmZR關閉斜體打印模式 

exit_leftward_moderlmZS使能右向(普通的)回車移動 
exit_micro_modermicmZT關閉宏移動能力 
exit_pc_char set_mode rmpch S3關閉PC字符顯示 
exit_scancode_mode rmsc S5關閉PC掃描碼模式 
exit_shadow_mode rshmZU關閉陰影打印模式 
exit_standout_mode rmsose結束標準輸出模式 
exit_subscript_mode rsubmZV關掉下標打印方式 
exit_superscript_mode rsupm ZW關掉上標打印方式 
exit_underline_mode rmulue結束下劃線模式 
exit_upward_moderumZX打開向下(普通的)回車移動 
exit_xon_modermxonRX關掉xon/xoff握手機制 
flash_screenflashvb可視響鈴(不能移動光標) 
form_feedffff硬拷貝終端頁面的換頁(p*) 
from_status_linefslfs從狀態行返回 
init_1stringis1i1終端初始化字符串 
init_2stringis2i2終端初始化字符串 
init_3stringis3i3終端初始化字符串 
init_fileifif所包含的文件名稱 
init_progiprogiP初始化程序的路徑名 
initialize_colorinitcIc初始化顏色的定義 
initialize_pairinitpIp初始化顏色對 
insert_char acterich1ic插入字符(P) 
insert_lineil1al加入一個新的空白行(p*) 
insert_paddingipip在插入的字符之後再插入填充字符(p*) 
key_a1ka1K1小鍵盤左上方的鍵 
key_a3ka3K3小鍵盤右上方的鍵 
key_b2kb2K2小鍵盤中央的鍵 
key_backspacekbskb由回退鍵所發送 
key_begkbeg1開始鍵 
key_btabkcbtkB向右一tab鍵 
key_c1kc1K4小鍵盤左下角的鍵 
key_c3kc3K5小鍵盤右下角的鍵 
key_cancelkcan2取消鍵 
key_catabktbcka由clear_all_tabs鍵發送 
key_clearkclrkC由清除屏幕或者刪除鍵發送 
key_closekclo3關閉鍵 
key_commandkcmd4命令鍵 
key_copykcpy5拷貝鍵 
key_createkcrt6創建鍵 
key_ctabkctabkt由clear_tab鍵發送 
key_dckdch1kD由刪除字符鍵發送 
key_dlkdl1kL由刪除行鍵發送 
key_downkcud1kd由終端向下光標鍵發送 
key_eickrmirkM在插入模式中由rmir或smir發送 
key_endkend7結束鍵 
key_enterkent8輸入/發送鍵 
key_eolkelkE由clear_to_end_of_line鍵發送 

key_eoskedkS由clear_to_end_of_screen鍵發送 
key_exitkext9退出鍵 
key_findkfnd0查找鍵 
key_helpkhlp%1幫助鍵 
key_homekhomekh由home鍵發送 
key_ickich1kl由inschar /enterinsmode鍵發送 
key_ilkil1kA由插入行發送 
key_leftkcub1kl由終端向左鍵發送 
key_llkllkH由home_down鍵發送 
key_markkmrk%2標記鍵 
key_messagekmsg%3消息鍵 
key_movekmov%4移動鍵 
key_nextknxt%5下一個鍵 
key_npageknpkN由下頁鍵發送 
key_openkopn%6打開鍵 
key_optionskopt%7選項鍵 
key_ppagekppkP由前頁鍵發送 
key_previouskprv%8前一鍵 
key_print kprt%9打印鍵 
key_redokrdo%0redo鍵 
key_refrencekref&amp;1引用鍵 
key_refreshkrfr&amp;2刷新鍵 
key_replacekrpl&amp;3替換鍵 
key_restartkrst&amp;4重啓鍵 
key_resumekres&amp;5恢復鍵 
key_rightkcuf1kr由終端向右鍵發送 
key_saveksav&amp;6保存鍵 
key_sbegkBEG&amp;9按下開始鍵的同時按下shift鍵 
key_scancelkCAN&amp;0按下取消鍵的同時按下shift鍵 
key_scommandkCMD*1按下命令鍵的同時按下shift鍵 
key_scopykCPY*2按下拷貝鍵的同時按下shift鍵 
key_screatekCRT*3按下創建鍵的同時按下shift鍵 
key_sdckDC*4按下刪除字符鍵的同時按下shift鍵 
key_sdlkDL*5按下刪除行鍵的同時按下shift鍵 
key_selectkslt*6選擇鍵 
key_sendkEND*7按下結束鍵的同時按下shift鍵 
key_seolkEOL*8按下行尾鍵的同時按下shift鍵 
key_sexitkEXT*9按下退出鍵的同時按下shift鍵 
key_sfkindkF由前滾/下滾鍵發送 
key_sfindkFND*0按下查找鍵的同時按下shift鍵 
key_shelpkHLP#1按下幫助鍵的同時按下shift鍵 
key_shomekHOM#2按下Home鍵的同時按下shift鍵 
key_sickIC#3按下插入字符鍵的同時按下shift鍵 
key_sleftkLFT#4按下向左鍵的同時按下shift鍵 
key_smessagekMSG%a按下消息鍵的同時按下shift鍵 
key_smovekMOV%b按下移動鍵的同時按下shift鍵 
key_snextkNXT%c按下向後鍵的同時按下shift鍵 

key_soptionskOPT%d按下選項鍵的同時按下shift鍵 
key_spreviouskPRV%e按下向前鍵的同時按下shift鍵 
key_sprint kPRT%f按下打印鍵的同時按下shift鍵 
key_srkrikR由後滾/下滾鍵發送 
key_sredokRDO%g按下redo鍵的同時按下shift鍵 
key_sreplacekRPL%h按下替換鍵的同時按下shift鍵 
key_srightkRIT%l按下向右鍵的同時按下shift鍵 
key_srsumekRES%j按下恢復鍵的同時按下shift鍵 
key_ssavekSAV!1按下保存鍵的同時按下shift鍵 
key_ssuspendkSPD!2按下中斷鍵的同時按下shift鍵 
key_sundokUND!3按下取消鍵的同時按下shift鍵 
key_stabkhtskT由set_tab鍵發送 
key_suspendkspd&amp;7中斷鍵 
key_undokund&amp;8取消鍵 
key_upkcuulku由終端的向上鍵發送 
keypad_localrmkxke不處於“小鍵盤發送”方式之中 
keypad_xmitsmkxks把終端置爲“小鍵盤發送”方式 
lab_f0lf0l0如果不是f0的話,則爲功能鍵f0的標籤 

2002-08-31 09:30:00 


一級(初級) 
user1 
100 
6339448 
984818 
200455 
linuxman2002 

up 

2002-08-31 09:46:00 


四級(中級) 
user4 
97 
6339495 
984818 
202193 
qisiwole 

lab_f1lf1l1如果不是f1的話,則爲功能鍵f1 

的標籤 
lab_f2lf2l2如果不是f2的話,則爲功能鍵f2 

的標籤 
lab_f3lf3l3如果不是f3的話,則爲功能鍵f3 

的標籤 
lab_f4lf4l4如果不是f4的話,則爲功能鍵f4 

的標籤 
lab_f5lf5l5如果不是f5的話,則爲功能鍵f5 

的標籤 
lab_f6lf6l6如果不是f5的話,則爲功能鍵f6 

的標籤 
lab_f7lf7l7如果不是f7的話,則爲功能鍵f7 

的標籤 
lab_f8lf8l8如果不是f8的話,則爲功能鍵f8 

的標籤 
lab_f9lf9l9如果不是f9的話,則爲功能鍵f9 

的標籤 
lab_f10lf10la如果不是f10的話,則爲功能鍵 

f10的標籤 
label_onsmlnLO打開軟標籤 
label_offrmlnLF關閉軟標籤 
meta_offrmmmo關閉“元模式” 
meta_onsmmmm打開“元模式”(8位) 
micro_column_address mhpa ZY近似宏調整的列—地址, 
micro_downmcud1ZZ近似宏調整的光標—向下 
micro_leftmcutb1Za近似宏調整的光標—向左 
micro_rightmcuf1Zb近似宏調整的光標—向右 
micro_row_address mvpaZc近似宏調整的行—地址 
micro_upmcuu1Zd近似宏調整的光標—向上 
newlinenelnw新行(行爲近似於cr後跟lf) 
order_of_pinsporderZe匹配軟件以及打印頭中的針 
orig_colorsococ重置所有的顏色對 
orig_pairopop把默認的顏色對設置爲原始的那 

個 
pad_char padpc填充字符(非空) 
parm_dchdchDC刪除#1字符(PG*) 
parm_delete_linedlDL刪除#1行(PG*) 
parm_down_cursor cudDO把光標向下移#1行(PG*) 
parm_down_micro mcudZf近似宏調用的cub 

parm_ichichIC插入#1個空白符號(PG*) 
parm_indexindnSF向上滾動#1行(PG) 
parm_insert_lineilAL加入#1個新的空白行(PG*) 
parm_left_cursorcubLE把光標向左移#1個空格(PG) 
parm_left_micromcubZg近似宏調整中的cub 
parm_right_cursor cufRl把光標向右移#1個空格(PG*) 
parm_right_micromcufZh近似宏調整中的cuf 
parm_rindexrinSR回滾#1行(PG) 
parm_up_cursorcuuUP把光標上移#1行(PG*) 
parm_up_micromcuuZi近似宏調整中的cuu 
pkey_keypfkeypk把功能鍵#1定義爲字符#2的類型 
pkey_localpflocpl把功能鍵#1定義爲執行字符串#2 
pkey_xmitpfxpx把功能鍵#1定義爲發送字符串#2 
pkey_plabpfxlxl把功能鍵#1定義爲發送#2,並顯 

示#3 
plab_normplnpn編程標籤#1,以顯示字符串#2 
print _screenmc0ps打印屏幕內容 
prtr_nonmc5ppO打開打印機,打印#1個字節 
prtr_offmc4pf關閉打印機 
prtr_onmc5po打開打印機 
repeat_char reprp把字符#1重複#2次(PG*) 
req_for_inputrfiRF輸入請求 
reset_1stringrs1r1把終端完全置爲sane方式 
reset_2stringrs2r2把終端完全置爲sane方式 
reset_3stringrs3r3把終端完全置爲sane方式 
reset_filerfrf包含重置字符串的文件名稱 
restore_cursorrcrc把光標置爲上一個屏幕上的位置 
row_addressvpacv垂直絕對位置(設置行)(PG) 
save_cursorscsc保存光標位置(P) 
scancode_escapescescS7爲了掃描碼模擬按下Esc鍵 
scroll_forwardindsf把文本向上滾動(P) 
scroll_reverserisr把文本向下滾動(P) 
select_char _setscsZj選擇字符集 
set0_des_seqs0dss0切換到代碼集0(EUC集0,ASCII) 
set1_des_seqs1dss1切換到代碼集1 
set2_des_seqs2dss2切換到代碼集2 
set3_des_seqs3dss3切換到代碼集3 
set_a_backgroundsetabAB使用ANSI設置背景顏色 
set_a_foregroundsetafAF使用ANSI設置前景顏色 
set_attributessgrsa定義視頻屬性(PG9) 
set_backgroundsetbSb設置當前背景顏色 
set_bottom_marginsmgbZk設置當前行的底部邊界 
set_bottom_margin_parm smgbp ZI從bottomset_color_band的#1行 

或#2行設置底行 
setcolorYz改變#1號色帶顏色 
set_color_pairscpsp設置當前顏色對 
set_foregroundsetfSf設置當前前景色 
set_left_marginsmglML設置當前行的左邊界 
set_left_margin_parm smglpZm在#1行(#2行)設置左(右)邊界 

set_lr_marginsmglrML設置左右邊界 
set_page_lengthslinesYZ把頁的長度設置爲#1行(使用 

tparm) 
set_right_marginsmgrMR把右邊界設置爲當前列 
set_right_margin_parm smgrp Zn把右邊界設置爲#1列 
set_tabhtsst在當前列的所有行設置製表符 
set_tb_marginsmgtbMT設置上下邊界 
set_top_marginsmgtZo把上邊界設置爲當前行 
set_top_margin_parm smgtp Zp把上邊界設置爲#1行 
set_WINDOW windwi當前窗口是從#1行到#2行,從#3 

列到#4列 
start_bit_imagesbimZq開始打印位映像圖形 
start_char _set_def scsdZr開始定義字符集 
stop_bit_imagerbimZs結束打印位映像圖形 
stop_char _set_def rcsdZt結束定義字符集 
subscript_char acters subcs Zu下標字符的列表 
superscript_char acters supcs Zv 上標字符的列表 
tabhtta跳轉到下面8個空格硬件的製表 

符位置 
these_cause_crdocrZw這些字符導致CR 
to_status_linetslts跳到狀態行,第1列 
underline_char ucuc給某字符劃下劃線,並移過它 
up_half_linehuhu上移半行(反轉1/2行) 
xoff_char actercoffcXFXON字符 
xon_char acterxoncXNXOFF字符 

(下面的字符串權能是在SYSVr終端結構中定義的,但在man幫助信息中還 

未作描述,對 
它們的解釋是從終端結構頭文件中得到的。) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章