1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBSDAdvent Calendar 2024

Day 9

NetBSD-10でのcurses機能拡充

Posted at

NetBSD Advent Calendar 2024 9日目の記事です。今日はNetBSD-10で拡充されたcursesの機能を見てみようと思います。

cursesの機能拡充

いつものようにNetBSD-10のリリースノートを見ていると、curses(3)に関する記述がありました。

curses(3) - added stub mouse functions and curses_version() for compatibility with ncurses.
curses(3) - improved Unicode support.

端末表示を制御するライブラリであるcurses(3)について、ncursesとの互換性を高めるための機能拡充が行われたようです。

curses_version()

まずはcurses_version(3)を見てみます。バージョンを取得するというシンプルな関数ですが、NetBSD-9.2では以下のようにコンパイルエラーとなってしまう状態でした。

$ uname -sr
NetBSD 9.2
$
$ cat sample.c
#include <curses.h>

int main() {
    initscr();

    mvprintw(2, 5, "%s", curses_version());

    refresh();
    getch();
    endwin();

    return 0;
}
$
$ gcc -o sample sample.c -lcurses
sample.c: In function ‘main’:
sample.c:6:26: warning: implicit declaration of function ‘curses_version’ [-Wimplicit-function-declaration]
     mvprintw(2, 5, "%s", curses_version());
                          ^~~~~~~~~~~~~~
ld: /tmp//ccdUeOZD.o: in function `main':
/home/netadm/tmp/curses_sample/sample.c:6: undefined reference to `curses_version'

NetBSD-10の環境ではコンパイルが通るようになっています。

$ uname -sr
NetBSD 10.0
$
$ gcc -o sample sample.c -lcurses ; echo $?
0

実行結果は以下のようになります(が、何やらバージョン番号というよりかは、コード名みたいな感じですね…)。

img01.PNG

cursesのマウス機能

さらに"added stub mouse functions"という記述があります。これはマウスイベントを取得できるようになったという意味合いなのでしょうか?

curses(3) - added stub mouse functions and curses_version() for compatibility with ncurses.

curses(3)を見ても"mouse"というキーワードを含む関数の記述はありませんが、GitHub上のコードをみると、マウスに関するコードとmanページが存在しているようです。

manページに記載されている has_mouse() という関数でマウスの利用可否を判定できるようです。

.Fn has_mouse
function returns true if the mouse support has been initialised for the
terminal, otherwise false.

早速該当する関数を見ると…常に false を返しています🥴

 92 bool
 93 has_mouse(void)
 94 {
 95
 96     return false;
 97 }

他の関数も単に ERR0 を返しているだけで、リリースノートにあった"added stub mouse functions"は文字通り関数スタブを追加した、という話だったのでした。

 99 int
100 getmouse(__unused MEVENT *event)
101 {
102
103     return ERR;
104 }
105
106 int
107 ungetmouse(__unused MEVENT *event)
108 {
109
110     return ERR;
111 }
112
113 mmask_t
114 mousemask(__unused mmask_t newmask, __unused mmask_t *oldmask)
115 {
116
117     return 0;
118 }

まとめ

NetBSD-10で拡充されたcursesの機能を見てみました。ncursesとの互換性を高めるための機能拡充となっていますが、マウス機能については関数スタブが追加された段階でした、端末側でもマウスに対応する機能が必要となるため、今後も機能拡充が進められてゆくと思われます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?