DefaultScreen

カラーマップで黒や白以外の色も指定したいが、まずはDefaultScreenでデフォルトスクリーン番号を取得しにいく。X11 黒、白以外の色を使うDefaultRootWindowだと一気にルートウィンドウまで取得してしまったが、こちらはデフォルトスクリーン番号を取得する…

XSetCloseDownMode

より正しい終了のさせ方としては、XSetCloseDownModeで、Xサーバとの切断で、すべてのリソースを破棄するようにした方がいい。Manpage of XSetCloseDownMode X Window System(X11)のプログラムを正常に終了させる方法 - QiitaXSetCloseDownModeでDestroyAll…

XDestroyWindow

これまで、XCloseDisplayでXサーバとのセッションを切断して、そのままプログラム終了という形で書いてきたが、正しいウィンドウの閉じ方、終了の仕方ではないので、XDestroyWindowでウィンドウを閉じる。Manpage of XDestroyWindow X Window System(X11)の…

XInternAtom

XInternAtomで、アトムを取得したり、生成できるManpage of XInternAtom Xlib ウィンドウの閉じるボタンが押された時の処理を書くWM_DELETE_WINDOWプロパティと同様に、WM_PROTOCOLSプロパティもアトムを取得できる。 (ただ、XWindowのこのプロパティの構造…

XSetWMProtocols

閉じるボタンでウィンドウを閉じる処理は、ウィンドウマネージャとのやり取りでもちょっと特殊で、WM_PROTOCOLSプロパティというものに、条件となるイベントのプロパティWM_DELETE_WINDOWを設定する必要がある。Manpage of XSetWMProtocols ウィンドウマネー…

XSetWMProperties

ウィンドウにタイトルを付けるにはウィンドウマネージャとやりとりしないといけない。 XSetWMPropertiesでタイトルのテキストプロパティをセットする。Manpage of XSetWMProperties ウィンドウマネージャとのやりとりこれらを用意して、このようにセット。タ…

XSelectInput

XSelectInputでイベントマスクをセットする時に"|"を使うと、複数のイベントを拾える。X11今回は、マウスを離した時のイベントも拾う。ButtonPressMaskに加えて、ButtonReleaseMaskも指定。 ButtonReleaseの時は、"ButtonRelease!!"と出力するだけ。最初はこ…

XNextEvent

ウィンドウのイベントはXNextEventで取得する。Manpage of XNextEvent Xlib イベント X Window System(X11)のプログラムを正常に終了させる方法 - QiitaWindowsのウィンドウメッセージと違うのは、取得したいイベントのマスクを事前にXSelectInputでセットし…

XCloseDisplay

これまでXOpenDisplayでXサーバと接続してたけど、結構クローズしてないサンプルが多くて、X11プログラミング Xlib 編 (1)これいいのかなあとおもってたけど、一応XCloseDisplayでクローズ(Xサーバとの接続を終了(切断))する。Manpage of XOpenDisplay一…

DefaultRootWindow

これまで、RootWindow(d, 0)という感じで、0番スクリーンを指定してきたが、デフォルトスクリーンが0番なら、DefaultRootWindowでデフォルトスクリーンのルートウィンドウが取れるので、0を指定しなくてもいい。たいてい、デフォルトスクリーンは0。(前回の…

RootWindow

Windowsで言うところのトップレベルウィンドウ(一番親のウィンドウ)を作る時は、XCreateSimpleWindowなどに、ルートウィンドウのWindow(実態はXID==unsigned long)を渡す。 で、RootWindowマクロで指定のディスプレイの指定のスクリーンのWindowが返る。X11 …

XBlackPixel

XBlackPixelで、指定のディスプレイとスクリーンにおける、黒のRGB値を取得できる。X11 Manpage of AllPlanes第8引数のborderをwhiteに、第9引数のbackgroundをblackにする。背景は黒だがボーダーの白が出ない。背景は黒になったが、ボーダーの白が出ない。 …

XWhitePixel

XWhitePixelで、指定のディスプレイとスクリーンにおける、白のRGB値を取得できる。X11 Manpage of AllPlanes (WhitePixelしかないが、効果は同じ。)これでウィンドウを白にする。XCreateSimpleWindowの第8、第9引数をXWhitePixelで取得したwhiteにすると、…

XFlush

XFlushは、イベントキューの出力バッファをフラッシュする。Manpage of XFlushウィンドウの表示要求は、イベントキューに貯められる。 このままでは処理されないので、フラッシュすることで、ウィンドウが表示される。XFlushの後に、sleepで10秒待つ。 その…

XMapWindow

ウィンドウを表示するには、Xサーバに対して、ウィンドウの表示要求を送る必要がある。 ウィンドウをマップする(マッピング)と言う。Manpage of XMapWindowXMapWindowで指定のウィンドウをマップする。ここでは、戻り値型がわからないのだが、X Window Syste…

XCreateSimpleWindow

ウィンドウの生成には、XCreateSimpleWindowを使う。Manpage of XCreateWindowXCreateWindowもあるが、まずはよりシンプルなXCreateSimpleWindowにする。第2引数は親ウィンドウ(の番号)を指定するのだが、自分が親ウィンドウの場合は、RootWindowマクロで、…

XOpenDisplay

UNIX系OSで使われているウィンドウシステム「X Window System」(現在はX11とも言う)X Window Systemこれを表示するには、Xlibを使う。X11まずは、その仕組み上、Xサーバに接続する必要がある。Manpage of XOpenDisplayXOpenDisplayで接続する。まずは、Xlib…

getch

すぐendwinを呼んでしまうと、何も起こらないように見える。 getchは、本来、入力された文字を取得する関数だが、これを呼んでキーボード入力がされるまでは入力待ち状態になるので、その間どうなっているかを確認する。getch(3): char from curses terminal…

endwin

ncursesを使ったプログラムを安全に終了させるには、ウィンドウモードを終了するためのendwinという関数を最後に呼ぶ。endwin(3) - Linux man page curs_initscr 3x 非公式日本語訳何も起きない今度は、実行後にリターンキーを押しても、入力が変な事にはな…

initscr

前回の、エスケープシーケンスを使っての画面制御をプログラムでやるのは大変なので、以前はcurses、現在では後継のncursesを使う。https://www.kushiro-ct.ac.jp/yanagawa/ex-2017/2-game/01.html#cursesインストールは、 $ sudo yum install ncurses-devel…

エスケープシーケンス

プログラム中に改行やタブを挿入するときなどに使うエスケープシーケンス。エスケープシーケンス - Wikipediaこれによると、実はエスケープシーケンスは3種類あって、 改行などのエスケープコード(エスケープ文字) 文字集合の指示・呼び出しのシーケンス(特…

getline

C++

実は、basic_stringの非メンバ関数に、もう一つのgetlineがある。getline - cpprefjp C++日本語リファレンスstringに対応しており、非メンバなので、"std::getline"として呼び出すだけである。stringなので、バッファ上限は不要。 $ ls getline getline.cpp …

basic_istream::getline

C++

basic_istream::getlineは、1行ごとに指定のバッファに読み込む。basic_istream::getline - cpprefjp C++日本語リファレンスよく見ると、char型などの文字配列のバッファには対応してるが、stringオブジェクトには対応してない模様。 となると、バッファを超…

basic_istream::tellg

C++

basic_istream::tellgは、ストリームの現在の読み取り位置を取得する。basic_istream::tellg - cpprefjp C++日本語リファレンス前回のプログラムで、basic_istream::getで読み込む前、読み込んだ後、の位置を確認してみる。 $ vi basic_istream.cpp $ g++ ba…

basic_istream::get(文字列の取得)

C++

basic_istream::getには、文字列を取得できるオーバーロードメンバ関数がある。basic_istream::get - cpprefjp C++日本語リファレンスこれで、 $ cat test.txt ABC DEF GHI$catでこのように見えるテキストファイルを行文字列ごとに取得できるか試してみる。…

getdelim

getdelimは、getlineの引数に加えて、区切り文字(デリミタともいう)を指定できる。Man page of GETLINEtest.txtを、 $ cat test.txt ABCDE;FGHIJ KLMNO;PQRST UVWXYZ$catで見ると、このようなテキストに編集する。 改行とは別にセミコロン(';')でも区切って…

getline

C++のgetline(後で扱う)に行く前に、C言語にもgetlineはある。Man page of GETLINE行ごとに文字列を取得していくが、C++の場合と違って、区切り文字(デリミタ)指定の引数が無い。 (その場合は、getdelimを使う模様・・・。) また、ISO非標準(POSIX標準)なの…

basic_istream::readsome

C++

basic_istream::readsomeは、指定された文字数以下の文字列を入力ストリームから読み取る。basic_istream::readsome - cpprefjp C++日本語リファレンスreadは文字数ちょうどなので、文字数に達しなかった場合、EOFやfailとなったが、こちらはそうならない。…

istringstream

C++

入力用のistringstreamにおいて、入力演算子を使って、スペース区切りの文字列を、各トークン毎に変数に振り分けることができる。basic_istringstream - cpprefjp C++日本語リファレンスistringstreamのissのコンストラクタに"ABC 123 0.456"を指定。 文字列…

ostringstream

C++

文字列ストリームについては、strstreamが非推奨のため、現在ではstringstreamを使うのが一般的。 今回は、出力用のostringstreamで、簡単な出力の仕方を扱う。std::basic_ostringstream - cppreference.comostringstreamのossは、コンストラクタでバッファ…