国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 ncurses 在你的 Linux 屏幕上定位文本

系統(tǒng) Linux
使用 ncurses 在 Linux 屏幕上的特定位置放置文本,可以帶來更友好的用戶界面體驗。

使用 ncurses 在 Linux 屏幕上的特定位置放置文本,可以帶來更友好的用戶界面體驗。

大多數的 Linux 實用程序僅僅只在屏幕的底部滾動文本。如果你想在屏幕中放置你的文本,例如一個游戲或者一個數據展示,你可以試試 ncurses。

curses 是一個舊的 Unix 庫,它可以在文本終端界面控制光標。curses 的名稱就來自于術語 “光標控制cursor control”。多年以后,其他人編寫了新的 curses 版本用來添加新的功能,新版本被叫做 “new curses” 或者 “ncurses”。你可以在每個流行的 Linux 發(fā)行版中找到 ncurses。盡管默認情況下可能未安裝開發(fā)庫、頭文件和文檔。例如,在 Fedora 上,你需要使用以下命令安裝 ncurses-devel 包:

  1. $ sudo dnf install ncurses-devel

在程序中使用 ncurses

要在屏幕上直接尋址,你首先需要初始化 ncurses 庫。大部分程序會通過以下三行來做到這一點:

  • initscr():初始化窗口對象和 ncurses 代碼,返回代表整個屏幕的窗口對象
  • cbreak():禁用緩沖并使鍵入的輸入立即可用
  • noecho():關閉回顯,因此用戶輸入不會顯示在屏幕上

這些函數定義在 curses.h 頭文件中,你需要在你的程序中通過以下方式將其包含進來:

  1. #include <curses.h>

初始化終端后,你可以自由使用任何 ncurses 函數,我們將在示例程序中探討其中的一些函數。

當你使用完 ncurses 并想返回到常規(guī)終端模式下時,使用 endwin() 重置一切。此命令可以重置任何屏幕顏色,將光標移動到屏幕的左下角,并使光標可見。通常在退出程序之前執(zhí)行此操作。

在屏幕上尋址

關于 ncurses 首先需要知道的是屏幕的坐標分為行和列,左上角的是 0,0 點。ncurses 定義了兩個全局變量來幫助你識別屏幕:LINES 是屏幕的行數,COLS 是屏幕的列數。屏幕右下角的位置是 LINES-1,COLS-1

例如,如果你想要移動光標到第 10 行和第 30 列,你可以使用 move() 函數,移動到此坐標:

  1. move(10, 30);

之后顯示的任何文本都將從屏幕的該位置開始。要顯示單個字符,請對單個字符使用 addch(c) 函數。要顯示字符串,將對字符串使用 addstr(s) 函數。對于類似于 printf 的格式化輸出,請使用帶有常用選項的 printw(fmt, ...)

移動到屏幕指定位置和顯示文本是一件很常見的事情,ncurses 提供了同時執(zhí)行這兩項操作的快捷方式。mvaddch(row, col, c) 函數將在屏幕第 row 行,第 col 列的位置顯示一個字符。而 mvaddstr(row, col, s) 函數將在屏幕第 row 行,第 col 列的位置顯示一個字符串。舉個更直接的例子,在程序中使用 mvaddstr(10, 30, "Welcome to ncurses"); 函數將從屏幕的第 10 行和第 30 列開始顯示文本 Welcome to ncurses。使用 mvaddch(0, 0, '+') 函數將在屏幕的左上角第 0 行和第 0 列處顯示一個加號(+)。

在終端屏幕上繪制文本會對某些系統(tǒng)產生性能影響,尤其是在較舊的硬件終端上。因此 ncurses 允許你“堆疊”一堆文本以顯示在屏幕上,然后使用 refresh() 函數使所有這些更改對用戶可見。

讓我們來看一個將以上所有內容整合在一起的簡單示例:

  1. #include <curses.h>
  2.  
  3. int
  4. main()
  5. {
  6.   initscr();
  7.   cbreak();
  8.   noecho();
  9.  
  10.   mvaddch(0, 0, '+');
  11.   mvaddch(LINES - 1, 0, '-');
  12.   mvaddstr(10, 30, "press any key to quit");
  13.   refresh();
  14.  
  15.   getch();
  16.  
  17.   endwin();
  18. }

程序的開始初始化了一個終端窗口,然后在屏幕的左上角打印了一個加號,在左下角打印了一個減號,在第 10 行和第 30 列打印了 press any key to quit 文本。程序通過使用 getch() 函數接收了鍵盤輸入的單個字符,接著,使用 endwin() 函數在程序完全退出前重置了終端。

getch() 是一個很有用的函數,你可以使用它來做很多事情。我經常使用它在我退出程序前用來暫停。與大多數 ncurses 函數一樣,還有一個名為 mvgetch(row, col) 的 getch() 版本,用于在等待字符輸入之前移動到屏幕位置的第 row 行,第 col 列。

使用 ncurses 編譯

如果你嘗試以通常的方式編譯該示例程序,例如 gcc pause.c,你可能會從鏈接器中獲得大量錯誤列表。那是因為 GNU C 編譯器不會自動鏈接 ncurses 庫。相反,你需要使用 -l ncurses 命令行選項加載它以進行鏈接。

  1. $ gcc -o pause pause.c -lncurses

運行新程序將打印一條簡單的 press any key to quit消息,該消息差不多位于屏幕中央: 

 

圖 1:程序中居中的 “press any key to quit” 消息。

使用 ncurses 構建更好的程序

探索 ncurses 庫函數以了解在屏幕上顯示文本的其它方法。你可以在 ncurses 的手冊頁中找到所有 ncurses 函數的列表。這給出了 ncurses 的一般概述,并提供了不同 ncurses 函數的類似表格的列表,并參考了包含完整詳細信息的手冊頁。例如,在 curs_printw(3X) 手冊頁中描述了 printw,可以通過以下方式查看:

  1. $ man 3x curs_printw

更簡單點:

  1. $ man curs_printw

使用 ncurses,你可以創(chuàng)建更多有趣的程序。通過在屏幕上的特定位置打印文本,你可以創(chuàng)建在終端中運行的游戲和高級實用程序。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-07-27 09:44:16

HTML 5

2011-03-24 09:28:47

Linux文件系統(tǒng)barrier

2023-03-20 11:36:28

Linux命令

2021-09-08 08:36:50

ncursesLinux猜謎游戲

2021-11-19 12:00:12

Linux傳輸文件

2021-09-27 09:43:18

LimaMac容器

2022-11-22 06:43:33

Kubernetes云服務Linux

2018-04-16 09:42:25

編程顏色ncurses

2021-11-24 09:43:11

grepLinux文件

2018-05-30 08:01:17

LinuxNcurses編程庫

2021-01-08 13:56:50

LinuxJOE文本編輯器

2025-07-31 06:45:00

大模型LLMOpenAI

2017-02-27 14:50:36

Linux命令數據

2018-11-06 07:30:00

2019-10-09 11:50:44

InsyncLinuxOneDrive

2011-01-13 09:44:19

Linuxsudo技巧

2020-10-26 09:00:00

LinuxVagrant操作系統(tǒng)

2021-03-15 21:50:22

Linux提取文本GUI工具

2023-11-06 18:53:23

python視頻

2022-03-11 10:19:52

KNotesLinux桌面
點贊
收藏

51CTO技術棧公眾號

国产成人精品一区二三区在线观看 | 在线观看免费毛片| 精品一区二区三区的国产在线观看| 黑人巨大精品欧美一区二区免费| 久久久久高清| 精品国产美女a久久9999| 国产日本在线视频| 成人免费毛片嘿嘿连载视频| 国产精品一区二区三区在线观| 国产激情久久| 精品在线小视频| 2欧美一区二区三区在线观看视频| 麻豆精品视频在线| 日韩一级精品视频在线观看| 亚洲国产精品久久久久婷婷884| 日韩三级在线观看| 国产日韩三区| 91小视频xxxx网站在线| 日日噜噜夜夜狠狠视频欧美人 | 狼狼综合久久久久综合网| 99re国产视频| 999国产在线视频| 日韩高清在线电影| 一区二区三区精品久久久| 欧美色国产精品| 久久久久久久久久亚洲| 性猛交ⅹ×××乱大交| 亚洲黄色视屏| 日韩精品免费在线| 91插插插插插插插插| 国产精品密蕾丝视频下载| 午夜精品久久久久久久蜜桃app | 疯狂欧美牲乱大交777| 狠狠干一区二区| 成人私拍视频| 久久久青草青青国产亚洲免观| 欧美在线免费观看| 黄色网在线播放| 国产v日产∨综合v精品视频| 亚洲综合在线小说| 日韩成人一区| 一级特黄大欧美久久久| 亚洲欧洲国产日韩精品| 1024在线视频| 91破解版在线观看| 国产视频一区三区| 91精品国产全国免费观看| 99re热视频在线| 国产伦精品一区二区三区免费迷| 欧美老少做受xxxx高潮| 成年人在线看| 7799精品视频| 中文字幕国产传媒| 超碰97久久国产精品牛牛| 亚洲一区不卡| 日韩在线激情视频| 波多野结衣作品集| 狠狠综合久久av一区二区老牛| 日韩视频永久免费观看| 成人免费高清在线播放| 老司机精品视频一区二区三区| 亚洲永久字幕| 色999日韩欧美国产| 色开心亚洲综合| 91精品国产综合久久久蜜臀粉嫩| 992tv在线观看| 欧美性高跟鞋xxxxhd| 国产一区二区三区色淫影院| 黄色av电影在线观看| 亚洲电影影音先锋| 亚洲线精品一区二区三区| 欧美精品久久久久| 中文字幕影音在线| 欧美大片在线观看| 中文字幕久精品免| 美女扒开腿让男人桶爽久久动漫| 日本一区二区三区免费乱视频| 91九色蝌蚪国产| 激情欧美日韩| 国产天堂视频在线观看| 韩国理伦片一区二区三区在线播放 | 精品欧美日韩精品| 9191成人精品久久| 成人看av片| 中文亚洲字幕| 欧美一区二视频在线免费观看| 成人亚洲网站| 亚洲欧洲日韩av| 日本一区二区三区四区在线视频| 亚洲精品乱码视频| 亚洲综合激情| 国产精品免费观看久久| 成人av免费在线观看| 成人午夜视频免费观看| 成人av网站在线观看免费| 天天视频天天爽| 色噜噜狠狠色综合中国| 影音先锋男人资源在线| 亚洲网站在线看| 亚洲精品一二三区区别| 穿情趣内衣被c到高潮视频| 91久久国产最好的精华液| www.91在线| 国产精品三级av在线播放| 成人妇女淫片aaaa视频| 亚洲动漫在线观看| 91偷拍精品一区二区三区| 麻豆91在线看| 亚洲三区四区| 美女国产一区二区| 久久国产精品免费一区| 精品一区二区三区不卡| 国产美女视频黄a视频免费| 日韩一卡二卡三卡国产欧美| 91亚洲一区| 91成人在线视频观看| 懂色av一区二区三区| 美女呻吟一区| 国产很黄免费观看久久| 日韩av影视| 一区二区三区四区不卡在线| sqte在线播放| 国产经典一区二区三区| 午夜精品福利视频网站| 超碰97久久| 熟妇熟女乱妇乱女网站| 欧美日韩成人高清| 一区二区三区毛片免费| 天美星空大象mv在线观看视频| 国产网站欧美日韩免费精品在线观看| 青青青爽久久午夜综合久久午夜| 嫩草精品影院| 久久国产精品电影| 超碰在线亚洲| 超薄丝袜一区二区| 亚洲精品久久久| baoyu777.永久免费视频| 欧美激情videos| 国产精品嫩草影院av蜜臀| 福利一区在线| 国产97在线 | 亚洲| 久久好看免费视频| 国产精品一区二区三区乱码| 亚洲成人三级| 九九九热999| 中文字幕日韩电影| 中文字幕亚洲一区二区av在线| 亚洲黄色av| av片在线观看| 最新av网址在线观看| 国产亚洲精品高潮| 亚洲蜜臀av乱码久久精品蜜桃| 欧美激情成人| 国产视频精品久久| 欧美这里只有精品| 久久久精品国产亚洲| 日韩情涩欧美日韩视频| 国产综合久久久久久| 欧美亚洲日本一区| 日韩成人一区二区| 9国产精品视频| 日韩专区在线视频| 日韩高清不卡一区二区三区| 极品av少妇一区二区| 性欧美lx╳lx╳| 好吊妞国产欧美日韩免费观看网站| 免费v片在线观看| 日本福利片在线| 色播五月综合| 这里只有精品视频| 中文字幕亚洲电影| 午夜久久tv| 一区二区三区成人精品| 中文字幕日韩欧美在线视频| 亚洲free性xxxx护士白浆| 大桥未久一区二区三区| 久久伊人影院| 亚洲国产精品一区二区久久| 久久九九有精品国产23| 亚洲一区二区在线免费观看| 欧美福利网站| 我不卡影院28| 国产精品丝袜91| 国产成人精品午夜| 老司机午夜在线视频| 国模大尺度一区二区三区| 欧美成人精品影院| 自拍偷拍在线视频| 奇米影视一区二区三区小说| 亚洲人成在线观看网站高清| 国产夫妻视频| 久久三级福利| 欧美国产极速在线| 最新av网站在线观看| 国产成人在线电影| 欧美18视频| 亚洲一区资源| 欧美综合国产| jiyouzz国产精品久久| 亚洲视频免费观看|