Linuxプログラミング 2 (555レス)
上下前次1-新
抽出解除 レス栞
348(13): 2013/12/14(土)18:12 ID:ymJW8grE(1/3) AAS
使用言語:C言語
目的:キーボード入力を読み取る(キーのプッシュ・リリースも読み取りできるように)
/dev 以下に存在するデバイスから、キーボードデバイスを検索して int fd = fopen() する方法がわかりません。
(キーボードデバイスを探す為の具体的な方法がわかりません)
これを判定して検索する為の便利な関数や、定形的な方法はあるのでしょうか。
349(1): 348 2013/12/14(土)19:10 ID:ymJW8grE(2/3) AAS
>>329
Debian7.2(32bit版)上でビルドできて動作もしました。
別途必要だったライブラリーは以下のコマンドで入れました。
apt-get install libncursesw5-dev libssl-dev libgdbm-dev libsqlite3-dev
備考:
Debian7.2だと、ncurses.h が /usr/include/ 直下に置かれていたので、ビルド時にエラーとなったので、(ソースでは<ncursesw/ncurses.h>なので)
/usr/include/ncursesw/ を作成し、そこへ ncurses.h をコピーして解決しました。
350: 348 2013/12/14(土)19:30 ID:ymJW8grE(3/3) AAS
私も以前CUI上で2ちゃん見るための簡単なツールを作って使ってましたが、実態としてはwgetのラッパに過ぎないおもちゃですw
外部リンク:github.com
一方、ntchは作りが本格的なので(ちゃんとsqliteとか使ってるし)、
今後CUIで2ちゃん見たくなった際はこちらを使わせてもらおうと思いました。
354: 2013/12/14(土)22:51 ID:1JjcODpJ(2/2) AAS
353 = 329です
あと>348は全くわかりません(期待されてないと思いますが)
355(4): 2013/12/15(日)02:09 ID:YZbs59Oi(1) AAS
>>348
<sys/ioctl.h> ioctl()がデバイス関連
read(),write()などの統一されたインターフェースから、
はみ出した部分
Windowsみたいに、GUIプログラミングで、
キーボードイベントを取ればよいのでは?
GUIプログラミングしてないの?
357(1): 348 2013/12/17(火)21:23 ID:M2zWQh5T(1/2) AAS
>>353
autotoolsは機能が多すぎるので、どの方法がスマートなのかを私は知りません。私はLIBS=pkg-configのような泥臭い方法をよく行います。
ntch:
pullしたらdisp.hまわりが更新されてたので再びビルドテストしました。以下の全てで修正無しにビルド可能でした:
Debian7.3(x86, 32bit)
Ubuntu13.10(x86, 32bit)
Arch(x86_64, 64bit)
CLFS(x86_64, 64bit)
Debian7.3以外の環境でも起きるかはテストしていませんが、:w による vi 起動で書き込み後に ntch へ戻った時点で、カーソルキーが効かなくなるバグに気づきました。
X11上でWMがxmonadの環境でのテストなので、少し特殊ですが。gnome-terminal, xterm どちらでも同様に書き込み後にカーソルキーが効かなくなりました。
省1
358: 348 2013/12/17(火)21:27 ID:M2zWQh5T(2/2) AAS
ntch:
(なお、c,j,k,スペース を用いての移動には問題は起きてません。認識しなくなるのはカーソルキーだけのようです)
また、非X11上ではこの問題は起きないようです。(生ターミナル上のfbterm上でテストした場合はカーソルの問題は生じませんでした)
もしかしたらX11 xmonad環境側の問題かもしれないので、同様の報告が他に無ければ気にしなくてもいい問題だと思います。(c,j,k,スペース のみでも使うことはできるので)
361: 355 2013/12/19(木)04:10 ID:hl3mvVHB(1) AAS
>>348 >>355-356
端末上で、コマンドでのリアルタイムキー入力なら、
stty raw -echo
で、バッファリングとエコーを無くせる
ただし、使った後は、端末の設定を元に戻すこと
そうしないと、端末がおかしくなる
もし端末がおかしくなったら、
Ctrl-J、stty sane、Ctrl-J、と入力する
この入力も端末に表示されないが、これで端末が元に戻る
それと、ddで、押されたキーを取得する
362(1): 348 2013/12/22(日)00:22 ID:Kx6UaPdn(1/2) AAS
その方法ではキーボードデバイスの正確なキー情報を得るには不十分なのではないでしょうか。
なぜなら、この方法では左右Shift,Alt,Ctrl等の違いを判別できそうにありません。
また、キーを放した際の情報も得られそうにありません。
また、Cならば普通はこれはtermiosで行なうことだと思います。
そしてtermiosだけではキーボードデバイスの正確なキー情報を得るには不十分です。
363: 348 2013/12/22(日)01:01 ID:Kx6UaPdn(2/2) AAS
行ないたいことは、それが本当にキーボードデバイスなのかを判断したいということです。
キーボードデバイスを直接読む為に/dev/input以下evdev)のデバイスを使用することを考えてますが、
これらのどれが本当にキーボードデバイスなのかを知る為の方法として、どのような方法で皆は行なっているのかを聞いてみたい。ということです。
(もし自分が知らない簡単な方法があるならば、それを使わないのは損なので)
自分が現状考えてる判別方法としてはA,Bの2つあります:
A: evdev以下の全てのデバイスに関して、ioctlでEV_CNTとEC_KEYで確認した上で、
かつ、一般的なキーボードデバイスに備わってると想定できるキー範囲 (KEY_RESERVED ... KEY_MIN_INTERESTING) にて、
そのビットが立っているならキーボードデバイスのはずだ、というヒューリスティックな判別方法。
これはlibxkbcommonのtestソースで用いられていた方法です。
B: udevによって /dev/input/{by-id,by-path} が作られる前提で、
省6
370: 348 2013/12/28(土)09:05 ID:58qchT2I(1/3) AAS
>>367
ページの読み込み中に、進むや戻るの操作を素早く行うと(ガチャ操作すると)、内部的に現在位置的な値の整合性がおかしくなる場合があるようです。
371(1): 348 2013/12/28(土)11:58 ID:58qchT2I(2/3) AAS
378が起きないように修正する、バンドエイド的な修正パッチ書きました。
外部リンク:gist.github.com
これでとりあえずれレバガチャしても大丈夫なようにはなりますが、
ソース全体をまじめに検証したわけではないので、(ただの適当なバンドエイドなので)
これによってnt_read_thread()等の動作に変な副作用が生じてしまうか等は、なにも調べてないです。
373(1): 348 2013/12/28(土)14:53 ID:58qchT2I(3/3) AAS
>>372
ごめんなさい。もう一個、修正いいですか。
スレッドタイトル一覧画面で r で更新すると、← で戻れなくなる問題の修正パッチです。
(これもただのバンドエイドパッチです)
外部リンク:gist.github.com
>>ところで、パッチ提供してくれた人のクレジットとかって
>>どうやって書くのが適当なんでしょう?
私もその辺の法律的(そして面倒)な問題は、なにが最善策なのかがよくわかりませんが、
個人的には何も書かなくて結構です。些細で適当なバンドエイドパッチですし。
文句言われない為の保険としては、よく見かける方法だと、
省2
376: 348 2013/12/29(日)14:03 ID:RF+mh+rt(1) AAS
>>375
ありがとうございます。問題無く動作するようになってました。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.838s*