将光标移动到 ncurses window 中一行文本的末尾?
Moving the cursor to the end of a line of text in ncurses window?
我有几个 ncurses windows 并且正在尝试将光标移动到当前文本行的末尾。
换句话说,我想移动到 window 末尾的第一个非空白字符。
示例:
如果我在ncurses中有一行文字window
I need help! Please! !
^
|
cursor
我要将光标移动到最后一个字符
I need help! Please! !
^
|
cursor
我最好的尝试是这样的:
#include <ncurses.h>
int main()
{
initscr();
refresh();
WINDOW* w = newwin(100, 100, 0, 0);
wprintw(w, "I need help! Please! !");
wmove(w, 0, 3);
wrefresh(w);
// MY ATTEMPT
int maxX, maxY, x, y;
getmaxyx(w, maxY, maxX);
getyx(w, y, x);
wmove(w, y, maxX);
while (winch(w) == ' ') {
wmove(w, y, maxX-1);
}
wrefresh(w);
// END OF MY ATTEMPT
getch();
delwin(w);
endwin();
return 0;
}
我认为这在逻辑上是合理的,但行不通,我不确定为什么(光标的位置根本没有改变)
我该怎么做?有没有我想念的简单方法?为什么我的解决方案不起作用?
您永远不会更新循环内的 x
位置,因此您反复移动到 window 右边缘之前的位置。
假设您不在其他地方使用 maxX
,只需在循环中预先递减它即可。
while((winch(w) & A_CHARTEXT) == ' ') {
wmove(w, y, --maxX);
}
请注意,您还应该使用 A_CHARTEXT
位掩码从 chtype
中提取 char
。
你的方法的一个非常粗略的例子,使用 stdscr
:
#include <ncurses.h>
int main(void) {
initscr();
noecho();
cbreak();
while (1) {
clear();
mvprintw(10, 5, "Hello world");
move(0, 0);
int my,mx;
getmaxyx(stdscr, my, mx);
move(10, mx);
while ((inch() & A_CHARTEXT) == ' ')
move(10, --mx);
refresh();
napms(100);
}
endwin();
}
我有几个 ncurses windows 并且正在尝试将光标移动到当前文本行的末尾。
换句话说,我想移动到 window 末尾的第一个非空白字符。
示例:
如果我在ncurses中有一行文字window
I need help! Please! !
^
|
cursor
我要将光标移动到最后一个字符
I need help! Please! !
^
|
cursor
我最好的尝试是这样的:
#include <ncurses.h>
int main()
{
initscr();
refresh();
WINDOW* w = newwin(100, 100, 0, 0);
wprintw(w, "I need help! Please! !");
wmove(w, 0, 3);
wrefresh(w);
// MY ATTEMPT
int maxX, maxY, x, y;
getmaxyx(w, maxY, maxX);
getyx(w, y, x);
wmove(w, y, maxX);
while (winch(w) == ' ') {
wmove(w, y, maxX-1);
}
wrefresh(w);
// END OF MY ATTEMPT
getch();
delwin(w);
endwin();
return 0;
}
我认为这在逻辑上是合理的,但行不通,我不确定为什么(光标的位置根本没有改变)
我该怎么做?有没有我想念的简单方法?为什么我的解决方案不起作用?
您永远不会更新循环内的 x
位置,因此您反复移动到 window 右边缘之前的位置。
假设您不在其他地方使用 maxX
,只需在循环中预先递减它即可。
while((winch(w) & A_CHARTEXT) == ' ') {
wmove(w, y, --maxX);
}
请注意,您还应该使用 A_CHARTEXT
位掩码从 chtype
中提取 char
。
你的方法的一个非常粗略的例子,使用 stdscr
:
#include <ncurses.h>
int main(void) {
initscr();
noecho();
cbreak();
while (1) {
clear();
mvprintw(10, 5, "Hello world");
move(0, 0);
int my,mx;
getmaxyx(stdscr, my, mx);
move(10, mx);
while ((inch() & A_CHARTEXT) == ' ')
move(10, --mx);
refresh();
napms(100);
}
endwin();
}