ラベル makeしました の投稿を表示しています。 すべての投稿を表示
ラベル makeしました の投稿を表示しています。 すべての投稿を表示

☆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のオプションを設定する項目みたいです。
こちらをいじっても通常の起動には影響しません。

☆moblin2.1でもsylpheed

moblin2.1をインストールしているPCはほかに普通のubuntuやubuntu NBRを導入しています。
ubuntuでメーラーをsylpheedにしているのですが、moblin2.1のリポジトリにはsylpheedがありません。
(yum search sylpheed で検索すると claws-mail というsylpeedの亜種が出てきますが、これがなぜか起動できませんでした。)

こういう場合は自前make。例によってtar.gzを下記のところへ置きました。
https://sites.google.com/site/midspeclowload/files/moblin21_sylpheed.2.7.1.tar.gz?attredirects=0&d=1

初期状態では入っていないcompfaceが必要なので

sudo yum install compface
してから上記ファイルを / 直下で展開すれば起動できます。

メール中のURLをクリックした際にブラウザを起動して閲覧できるように
するためにはパスの通ったところに sensible-browser が必要なようです。
私は下記のようにしました。

suod ln -s /usr/bin/firefox /usr/bin/sensible-browser

☆geditの代わりにgeany

私はgeditの代わりにgeany http://www.geany.org/ というエディタを使ってます。
使い出したきっかけはWinXPで作成したファイルをnkfでutfに変換したものがgeditで開けず、
往生したことです。
 スクリーンショットはこちら http://www.geany.org/Documentation/Screenshots
スクリーンショットは英語ですが、メニューはきちんと日本語が出ます。

公式ホームページでの説明は

Geany is a text editor using the GTK2 toolkit with basic features of an integrated development environment. It was developed to provide a small and fast IDE, which has only a few dependencies from other packages. It supports many filetypes and has some nice features.
GeanyはGTK2 toolkitを使ったテキストエディタで統合開発環境として基礎的な機能を持っています。小さくて速いIDEを提供するために開発され、ごく少数の他のパッケージに依存しています。多くのファイルタイプをサポートし、いくつかのすばらしい機能を持っています。

起動はとても高速でgeditと変わりません。
下部のメッセージウィンドウとサイドバーのシンポルリストを非表示にすれば
通常のエディタとして違和感なく使えると思います。

ubuntu karmicではリポジトリ(Section: universe/devel)に入っています。
moblin2.1はリポジトリになかったのでmakeしたファイルを
https://sites.google.com/site/midspeclowload/files/moblin21_geany.0.18.tar.gz?attredirects=0&d=1
におきました。(rpmの作り方がわからないのでただのtar.gzです。)

geditの代わりにgeanyを使うメリットは

  • ・不正なコードポイントが存在してもファイルが開ける
  • ・検索、置換に正規表現が使える。かっこ"()"で囲ったパターンににマッチした文字列を\1,\2で置換に使える。(個人的にこれ重要です)
といったとことでしょうか。

ちょっと変わったところでは

  • ・メッセージウィンドウの"走り書き"(Scribble)。テキストが入力できます。終了しても次回起動時に入力した内容が残ってます。
  • ・メッセージウィンドウの"端末"(Terminal) http://www.geany.org/uploads/Gallery/geany_vte.png xtermみたいなものでコマンドが打てます。通常のターミナルと同じcopy/pasteをサポートしてます。
  • ・プラグインにファイルブラウザがあります。(geditにもありますが)

☆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;