ラベル ソースコード改変 の投稿を表示しています。 すべての投稿を表示
ラベル ソースコード改変 の投稿を表示しています。 すべての投稿を表示

☆GmrunのキーバインドをBashに少しだけ近づける

私はGmrunが大好きです。
Mihai Bazonさん、すばらしいソフトウェアを作ってくれてありがとうございます。
さて、前回の「☆gmrun で Ctrl+PをUp、Ctrl+NをDownキーと同じように動作させる」に引き続き、
2つだけBashのキーバインドを付け加えてみました。
Ctrl+K、Ctrl+Uです。文字列を選択した状態はBashではありえない状態なので、
どういう仕様にするか迷ったのですがコーディングが楽な使用にしました。
パッチはこれです。
適用の手順は下記の通りです。
/usr/bin/gmrunだけ圧縮したアーカイブも用意しました。gmrun_0.9.1-4_i386.msll-patched.20100505.tar.gz
開発環境を入れたくない方はapt-getでgmrunを導入した後、/usr/bin/gmrunだけ入れ替えればOKです。
(ビルドしたパッケージをdpkgで導入すると更新がなくてもupdate-managerで
更新対象としてリストされるので、自分でビルドした場合でも一旦apt-getでgmrunを導入してから、
/usr/bin/gmrunだけ入れ替える方が良いかもしれません。
ちゃんとパッケージした方法で作れば良いのでしょうが、方法がわからず...)

ソース、パッチの取得とビルド
$ mkdir gmrun
$ apt-get source gmrun
$ sudo apt-get build-dep gmrun
$ wget http://sites.google.com/site/midspeclowload/files/gmrun-0.9.1-4.msll-20100505.patch?attredirects=0&d=1
$ patch -p1 < gmrun-0.9.1-4.msll-20100505.patch
$ cd gmrun-0.9.1/
$ debuild -r
gmrun-0.9.1-4.msll-20100505.patch
--- a/gmrun-0.9.1/src/gtkcompletionline.cc	2003-06-22 08:14:34.000000000 +0900
+++ b/gmrun-0.9.1/src/gtkcompletionline.cc	2010-05-05 22:14:05.296882925 +0900
@@ -975,6 +975,34 @@
       STOP_PRESS;
       return TRUE;
 
+     case GDK_K:
+     case GDK_k:
+      if (event->state & GDK_CONTROL_MASK) {
+        int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
+        int len = gtk_entry_get_text_length(GTK_ENTRY(cl));
+        gtk_editable_delete_text(GTK_EDITABLE(cl), pos, len);
+        gtk_editable_select_region(GTK_EDITABLE(cl), pos, pos);
+        if (MODE_SRC)
+          search_off(cl);
+        return TRUE;
+      } else goto ordinary;
+
+     case GDK_U:
+     case GDK_u:
+      if (event->state & GDK_CONTROL_MASK) {
+        int pos = gtk_editable_get_position(GTK_EDITABLE(cl));
+        gtk_editable_delete_text(GTK_EDITABLE(cl), 0, pos);
+        gtk_editable_select_region(GTK_EDITABLE(cl), 0, 0);
+        if (MODE_SRC)
+          search_off(cl);
+        return TRUE;
+      } else goto ordinary;
+
+     case GDK_P:
+     case GDK_p:
+      if (event->state & GDK_CONTROL_MASK) {
+		;/* fall to 'case GDK_Up:'*/
+      } else goto ordinary;
      case GDK_Up:
       if (cl->win_compl != NULL) {
         int &item = cl->list_compl_items_where;
@@ -1010,6 +1038,11 @@
      }
      return FALSE;
 
+     case GDK_N:
+     case GDK_n:
+      if (event->state & GDK_CONTROL_MASK) {
+		;/* fall to 'case GDK_Down:'*/
+      } else goto ordinary;
      case GDK_Down:
       if (cl->win_compl != NULL) {
         int &item = cl->list_compl_items_where;

☆Karmicのusplashをカスタマイズ

Karmicでは高速化のためにusplashのプログレスバーが無効になっています。
(ソースに "/* disable progress bar in Ubuntu 9.10 due to faster boot */" と書いてあります。)
このために起動の進捗具合が分かりにくくなっています。起動にかかる時間を短縮することも重要ですが、プログレスバーが表示された方が良いと思っている方も多いのではないでしょうか。

プログレスバーを出すだけならばusplash-theme-ubuntu-colorパッケージを導入すればjauntyと同じ状態になります。
しかし、私はKarmicのモノトーンが好きなのでusplash-theme-ubuntu-colorでは満足出来ません。そこでusplash-theme-ubuntuのソースパッケージを取得してプログレスバーを有効にします。
ついでにgrubの設定を少しいじってusplashの下側に実行しているプロセスを表示するようにします。

百聞は一件に如かず。まずはスクリーンショット

usplash表示前
変更前はこのとき画面が真っ黒
usplash表示初期
インジケーターが行ったり来たり
usplash表示後期
プログレスバーが伸びて行く

ちなみにGDMを使っている場合はこのあとxsplashが少しのあいだ表示され、GDMのログイン画面が表示されます。
SLiMならxsplashなしですぐにログイン画面です。速さを求めるならSLiMよいですよ。

●grubの設定

まずは簡単な方から。/etc/defalt/grubを編集します。 変更対象のエントリは"GRUB_CMDLINE_LINUX_DEFAULT"。"quiet"を取り除きます。 変更前

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
変更後
GRUB_CMDLINE_LINUX_DEFAULT="splash"

その後、/boot/grub/grub.cfgを作り直します。

sudo update-grub

●usplashのソース改変

例によって、作ったパッケージをUpしました。
作業過程に興味のない方や開発用のパッケージを入れたくない方はこちらをどうぞ。
https://sites.google.com/site/midspeclowload/files/usplash-theme-ubuntu-mono_0.27_i386.deb?attredirects=0&d=1

一通り自分で作業される場合は、Ubuntu Weekly Recipe 第16回を参照して必要なパッケージを導入します。
作業用のディレクトリでusplash-theme-ubuntu のソースを取得。

sudo apt-get source usplash-theme-ubuntu
usplash-theme-ubuntu-0.27の下にあるusplash-theme-ubuntu.cをusplash-theme-ubuntu-mono.c にリネームします。
Makefile, debian/rules, debian/changelog, debian/control, debian/postinstに含まれている文字列”usplash-theme-ubuntu”をすべて”usplash-theme-ubuntu-mono”に置き換えます。

usplash-theme-ubuntu-mono.cをエディタで開いて"#if 0"を検索します。ここから"#endif"までがプログレスバーの処理をする関数のようです。そのさらに下に中身がからっぽの関数が定義してあります。
空っぽの方を"#if 0"、"#endif"で挟んで無効化し、ちゃんと中身のある方を有効にします。

このままではロゴとプログレスバーが重なってしまうので、ロゴのY座標を調整します。usplash-theme-ubuntu-colorのソースを取得して、Y座標だけusplash-theme-ubuntu-color.cと同じにします。

改変したソースは
https://sites.google.com/site/midspeclowload/files/usplash-theme-ubuntu-mono_0.27_i386.deb?attredirects=0&d=1
にあるのでオリジナルと比べて見てください。

パッケージをビルドします。

debuild -r fakeroot
一つ上のディレクトリにパッケージが作成されます。

●usplashの導入、設定

作成したパッケージを導入します。

sudo dpkg -i usplash-theme-ubuntu-mono_0.27_i386.deb

これでupdate-initramfsが走っているのですが、なぜかこれだけでは新しいusplashに変わってくれません。
update-alternativesに指定している優先度の問題かもしれませんが、ここはツールに頼ります。startupmanagerを導入します。

2010/02/28 この件に関するフォローを投稿しました。☆Startup- Managerに頼らないUsplashの変更

sudo apt-get install startupmanager
gksudo startupmanager &
設定画面の[外観]タブのリストボックスから導入したusplashを選択します。[閉じる]を押すとupdate-initramfsが起動されます。

ちなみにstartupmanagerの[起動オプション]タブにある[その他]以下の2項目は"GRUB_CMDLINE_LINUX_DEFAULT"ではなく"GRUB_CMDLINE_LINUX"を変更するようです。
"GRUB_CMDLINE_LINUX"はrecovery modeのオプションを設定する項目みたいです。
こちらをいじっても通常の起動には影響しません。

☆gmrunで Ctrl+PをUp、Ctrl+NをDownキーと同じように動作させる

gmrunの履歴操作を行う際、カーソルキーのUp/Downを押そうとするとどうしてもホームポジションから右手が離れてしまい不便です。

そこでソースをいじって、キーバインドをなるべくbashに近づけないか試してみました。
今のところ私の知識ですぐに修正できたのは、表題のとおりCtrl+PとCtrl+Nだけです。

例によって環境はubuntu 910 karmic koalaです。
なぜかVersion:0.9.1-2.4ではコンパイルが通らず(引数の型に互換性がない)、0.9.1-4をしています。

今回は手抜きで作業方法は省きます。

修正対象はgtkcompletionline.ccのon_key_press関数です。
修正した後のgtkcompletionline.ccとコンパイルしたgmrunを
https://sites.google.com/site/midspeclowload/files/gmrun_0.9.1-4.mod.tar.gz?attredirects=0&d=1
に置きました。

ちなみに修正内容は下記のとおりです。

--- gmrun-0.9.1.org/src/gtkcompletionline.cc    2010-01-26 23:33:54.783042744 +0900
+++ gmrun-0.9.1/src/gtkcompletionline.cc    2010-01-26 23:58:11.000000000 +0900
@@ -970,6 +970,11 @@
       STOP_PRESS;
       return TRUE;

+     case GDK_P:
+     case GDK_p:
+      if (event->state & GDK_CONTROL_MASK) {
+        ;/* fall to 'case GDK_Up:'*/
+      } else goto ordinary;
      case GDK_Up:
       if (cl->win_compl != NULL) {
         int &item = cl->list_compl_items_where;
@@ -1005,6 +1010,11 @@
      }
      return FALSE;

+     case GDK_N:
+     case GDK_n:
+      if (event->state & GDK_CONTROL_MASK) {
+        ;/* fall to 'case GDK_Down:'*/
+      } else goto ordinary;
      case GDK_Down:
       if (cl->win_compl != NULL) {
         int &item = cl->list_compl_items_where;

☆gnome-sudokuの不具合修正

去年の11月にtwitterでつぶやいていたgnome-sudokuの不具合について、修正パッチを公開してみます。対象はubuntu jauntyに入っているバージョン2.26.1です。(karmicの場合は下の方に補足を書いています。)
すべてのソースを理解しているわけではありませんし、すべての機能をテストしているわけではありませんが、1ヶ月以上プレイしていておかしな点は出てません。(トラッカなどは使い方がわからないので.....)

gnome本家に報告したり、ppaを作ったりするのがより正しいユーザの在り方なのかもしれませんが、なにぶんわからないことが多いので......。
パッチが危険な動作をするようなことはありませんが、適用に当たってはすべて自己責任でおこなってください。

●不具合の概要

同一の行または列に番号のコンフリクトがある場合、その後から入力した方と同じボックス(3X3の領域)の別セルに同じ数値を入力しても赤くならない。
具体例は下図。反転しているセル(中心のひとつ上)は同一ボックスに同じ数字"1"があるのに赤くなっていない。

●修正方法

patchファイルを
https://sites.google.com/site/midspeclowload/files/sudoku.py.2_26_1.patch.txt?attredirects=0&d=1
に置きました。

対象のsudoku.pyは下記にあります。pythonのスクリプト(テキストファイル)です。
/usr/share/python-support/gnome-games-data/gnome_sudoku/sudoku.py

パッチを当ててから

sudo update-python-modules gnome-games-data
としてやれば使えるようになります。

既にgnome-sudokuを起動したことがあるとエラーが出るかもしれません。
その場合はホームディレクトリにあるsudoku関連のファイルを消してやると
起動するはずです。

find ~/ -name '*sudoku*'
で出てきたディレクトリをガリッと消して問題ないはずです。(必要なディレクトリは次に起動したときにまた作られます。)自分で作ったディレクトリやファイルを削除しないように気をつけてください。

●karmicについて

karmicに入っているgnome-sudokuは2.28です。2.26と同様の不具合があります。
加えてなぜか終了時に表示される経過時間がおかしかったりします。
さらに解けているはずなのに終了のダイアログが出なかったりします。
(2.26と同じ要領で修正する経過時間の件以外は直ります。)

経過時間のほうは直せそうにないので私は手作業で2.26を入れてます。これをやるとアップデートがあった場合に適用されません。しかしjauntyを使っている間、gnomeのゲーム関連でアップデートはみたことがないので多分問題ないでしょう。

(識者の方に怒られそうです。下記の説明はかなりはしょってますが、これでわからない方はやめておいた方がいいと思います。)

要領

1.synapticのゲームのカテゴリに入っているものをアンインストール。

2.jaunty用のdebを落としてきて、arで解凍、さらにdata.tgzをtarで解凍

control.tgzのなかのpostinstallを実行。ファイルは下記から
http://jp.archive.ubuntu.com/ubuntu/pool/main/g/gnome-games/gnome-cards-data_2.26.1-0ubuntu2_all.deb
http://jp.archive.ubuntu.com/ubuntu/pool/main/g/gnome-games/gnome-games-data_2.26.1-0ubuntu2_all.deb
http://jp.archive.ubuntu.com/ubuntu/pool/main/g/gnome-games/gnome-games_2.26.1-0ubuntu2_i386.deb

3.パッチを当てる。

です。ちなみにdpkgでインストールするとupdate-managerを起動したときに
アップグレードが不完全だと怒られます。しかもディストリビューションのアップデートをしないと通常のアップデートの適用ができません。

●修正内容の説明

入力した値がコンフリクトしているとclass SudokuGridに保持しているデータ(コンフリクトチェック用のset3つと盤面対応のlistのlist)には入力値を保持せずに例外を投げます(オリジナルの107行目から始まるaddメソッド参照)。GUI上は数値が入っているので問題の現象が起ります。

そこで、コンフリクトチェック用のsetはlistに変更(当然追加はaddでなくappend)、ただし終了判定などで要素の数をチェックしていたりするので基本的に参照時はset()でset型に直して使用。コンフリクトした場合でも要素の追加を行います。(これはあちこち直します。)

コンフリクトした場合でもチェック用のリストに要素の追加を行っているので、コンフリクトチェックのメソッドで自分自身をコンフリクト判定から除外するように修正します。(オリジナルの179行目から始まるfind_conflictsメソッド)