成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

大多數(shù)的 Linux 實(shí)用程序僅僅只在屏幕的底部滾動(dòng)文本。如果你想在屏幕中放置你的文本,例如一個(gè)游戲或者一個(gè)數(shù)據(jù)展示,你可以試試 ncurses。

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

  1. $ sudo dnf install ncurses-devel

在程序中使用 ncurses

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

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

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

  1. #include <curses.h>

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

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

在屏幕上尋址

關(guān)于 ncurses 首先需要知道的是屏幕的坐標(biāo)分為行和列,左上角的是 0,0 點(diǎn)。ncurses 定義了兩個(gè)全局變量來幫助你識(shí)別屏幕:LINES 是屏幕的行數(shù),COLS 是屏幕的列數(shù)。屏幕右下角的位置是 LINES-1,COLS-1

例如,如果你想要移動(dòng)光標(biāo)到第 10 行和第 30 列,你可以使用 move() 函數(shù),移動(dòng)到此坐標(biāo):

  1. move(10, 30);

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

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

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

讓我們來看一個(gè)將以上所有內(nèi)容整合在一起的簡(jiǎn)單示例:

  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. }

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

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

使用 ncurses 編譯

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

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

運(yùn)行新程序?qū)⒋蛴∫粭l簡(jiǎn)單的 press any key to quit消息,該消息差不多位于屏幕中央: 

 

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

使用 ncurses 構(gòu)建更好的程序

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

  1. $ man 3x curs_printw

更簡(jiǎn)單點(diǎn):

  1. $ man curs_printw

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

 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

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云服務(wù)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文本編輯器

2017-02-27 14:50:36

Linux命令數(shù)據(jù)

2018-11-06 07:30:00

2011-01-13 09:44:19

Linuxsudo技巧

2020-10-26 09:00:00

LinuxVagrant操作系統(tǒng)

2019-10-09 11:50:44

InsyncLinuxOneDrive

2023-11-06 18:53:23

python視頻

2022-03-11 10:19:52

KNotesLinux桌面

2021-03-15 21:50:22

Linux提取文本GUI工具

2024-01-11 11:14:57

WaylandShutter
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品xxxx | 伊人免费在线观看高清 | 免费麻豆视频 | 国产区在线 | 黄视频免费在线 | 羞羞视频在线观看免费观看 | 日韩亚洲欧美综合 | a国产视频| 欧美黑人狂野猛交老妇 | 国产视频二区在线观看 | 91久久夜色精品国产网站 | 亚洲一区久久 | 中文字幕福利视频 | 欧美精品一区在线 | 亚洲综合99| 自拍视频国产 | 91精品久久久久 | 国产在线一区二区 | 亚洲久草视频 | 暖暖成人免费视频 | 欧美精品在线一区 | 欧美videosex性极品hd | 色爱综合网 | 国产精品一区在线 | 国产精品成人国产乱一区 | 久久久久精 | 久久在线看 | 久久久久久国模大尺度人体 | 亚洲精品久久久久久首妖 | 玩丰满女领导对白露脸hd | 欧美一区二区免费 | 精品综合久久久 | 人人射人人草 | 盗摄精品av一区二区三区 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 欧美在线一区二区视频 | 色站综合 | 91精品国产91久久综合桃花 | 欧美日韩网站 | 夜色www国产精品资源站 | 国产精品久久久久久久免费观看 |