Login
Immutable PageDiscussionInfoAttachments
Diff for "clear/note/2012-05"

MMA
Differences between revisions 18 and 19
Revision 18 as of 2012-05-23 20:51:12
Size: 3652
Editor: clear
Comment:
Revision 19 as of 2012-05-29 19:33:00
Size: 5068
Editor: clear
Comment:
Deletions are marked like this. Additions are marked like this.
Line 66: Line 66:

== 05/29 ==
=== Timer on X ===
XlibにはWindowsでいうところの!SetTimer/KillTimerみたいなお手軽にタイマーを使える関数がない、というかタイマーイベントそのものがない。どうやら上位レイヤーのライブラリでどうにかしているらしいので、とりあえずXtとGTK+のソースをダウンロードしてきて調べてみた。
 * Xtの場合: !XtAppAddTimeOut
 * GTK+の場合: gtk_timeout_add
  * Glibのg_timeout_addにほぼ投げてる
いずれもメインループにあたる関数内(Xt:XtAppNextEvent, GTK+:gtk_main、Glibのg_main_loop_run)で処理を行なっているようで、それゆえタイマーの周期は必ずしも正確ではない。Xlibでやろうとする場合は上記ライブラリのような機構を自前で実装するしかなさそう。素直に上位レイヤーのライブラリを使いましょう、というところか。
 * Xlibはスレッドセーフでないので、自前で別スレッドを作って同期するのは無理(Xlibにアクセスして良いのは1スレッドのみ)
  * [[http://www.eng.cam.ac.uk/help/tpl/graphics/X/signals.html|シグナルを使うのもダメらしい]]
 * [[http://lists.freedesktop.org/archives/xcb/2006-August/001839.html|XCBなら何とかできるらしい]]
  * Xlibと違って別スレッドに分けてしまうことができる

2012年5月

05/01

PeekMessageとXPeekEventは似てるけど違う

Windows APIのPeekMessage()はメッセージがない場合ただちに返ってくるが、XlibのXPeekEvent()はイベントが来るまでブロックするらしい。XlibでPeekMessage()相当のことをやりたい時はXPending()+XNextEvent()でできそう。

for (;;) {
    if (XPending(dpy)) {
        XNextEvent(dpy, &ev);
        /* ... */
    } else {
        /* イベントがないときの処理 */
    }
}

05/03

画面の消灯を防ぐ

xset s off # だけでは足りない
xset dpms 0 0 0

05/07

タイル配置について最近思うこと

画面解像度がある程度大きく、なおかつ一画面に表示しているウィンドウ数が少ない場合、素直にタイル配置すると見づらくなる場合があるような気がする。特に端末エミュレータやテキストエディタなど文字が上から下に伸びていくタイプのものは、ウィンドウが縦に長いと視線の上下移動が必要になって疲れる、気がする。

ということで、スペースの有効活用という原則には明らかに反するが、こんな感じのタイル配置があってもいいのではないだろうか。(ウィンドウ間に隙間が空いてるのは手動で並べたため)

こんな感じ

追記:

  • ウィンドウが1枚しかない場合どうするか
  • どういうウィンドウを小さく配置するか、の判定。絶対数(!=使用頻度)で言えばそれほど多くない気もするので、ブラックリスト方式が楽?
  • そもそも気のせいという説

さらに追記:

  • {上下,左右}方向に見て、ウィンドウが一枚しかない状態のときに余白をいれるようにすると多少見やすい、かもしれない
    • 縦横比が極端にならないようにすると同時に、視点を画面中央に近づける

だいたいこんな感じ。

nmaster=1

nmaster>=2

05/10 さらにさらに追記: 上記のようなことを実現するパッチを書いた

  • clear/misc/dwm-6.0-moderatetile.diff

  • config.hで縦横のマージン(vmargin, hmargin)を設定する。値の範囲チェックやってない

  • 実装面ではオリジナルのtile()をパクりつつ適当に書き換えただけなので重複が多くあんまり良くない。後で何とかするかも

  • 穏健な(moderate)タイル。解像度高めの環境でないと効果は薄いというかただ画面が狭くなるだけで無意味

05/09

メモリを大量に食っているプロセスを確認

USER,PID,SIZE,RSS,COMMAND。SIZEでソート

ps aux | awk '{ print $1,$2,$5,$6,$11 }' | sort -k3,3n | tail

05/10

tmuxのstatus line

status-{left,right}に指定した文字列はstrftime()に渡される。よってdateコマンドの書式がそのまま使える(#(date)と自分で呼び出す必要がない)。manに書いてあった。

FullSearchCached

文字通り結果はキャッシュされる。キャッシュを更新したい場合?action=refreshをつければいいらしい

05/23

  • muttで起動時にメールボックスを指定: mutt -f

05/29

Timer on X

XlibにはWindowsでいうところのSetTimer/KillTimerみたいなお手軽にタイマーを使える関数がない、というかタイマーイベントそのものがない。どうやら上位レイヤーのライブラリでどうにかしているらしいので、とりあえずXtとGTK+のソースをダウンロードしてきて調べてみた。

  • Xtの場合: XtAppAddTimeOut

  • GTK+の場合: gtk_timeout_add
    • Glibのg_timeout_addにほぼ投げてる

いずれもメインループにあたる関数内(Xt:XtAppNextEvent, GTK+:gtk_main、Glibのg_main_loop_run)で処理を行なっているようで、それゆえタイマーの周期は必ずしも正確ではない。Xlibでやろうとする場合は上記ライブラリのような機構を自前で実装するしかなさそう。素直に上位レイヤーのライブラリを使いましょう、というところか。

clear/note/2012-05 (last edited 2012-05-31 03:01:20 by clear)