SVX日記
2009-01-27(Tue) Fedora9、端末チューン++
最近、仕事が忙しさに比例して、開いている端末画面の数が増加の一途である。ウィンドウを3枚に、各々、タブが8個くらいが平均だ。Windowsを捨て、Linux上で仕事をするようになったからか、どうかはわからんけども、仕事中のストレスが減ったことは、確実に実感している事実である。
というわけで、以前にクローズボタンを「バカ」に改造した、gnome-terminalのタブを、さらに小改造するのであった。
で、今回のお題は、タブの表示。gnome-terminalのタブには「ユーザ名@ホスト名:ディレクトリ名」が表示されるので、とても識別が容易なのだが、タブを8枚も開くと、ユーザ名しか見えなくなって困るのである。オイラ的には、せめてホスト名の頭が見えると助かるのだ。
実は、ついでにクローズボタンを無くしてしまうことを試したのだが、どうもボタンは、タブの「柱」の役割をしているらしく、単純にクローズボタンをなくすと、タブの高さがペッタンコになってしまうようだ。そこで、プロファイル(画面色やフォント設定)を切り替えるボタンに流用するのである。ほれ、昔から「立ってる柱はボタンでも使え」というではないか。
# wget http://mirrors.nl.eu.kernel.org/fedora/updates/9/SRPMS.newkey/gnome-terminal-2.22.2-1.fc9.src.rpm
# rpm -ivh gnome-terminal-2.22.2-1.fc9.src.rpm
# rpmbuild -bp /usr/src/redhat/SPECS/gnome-terminal.spec
# cd /usr/src/redhat/BUILD
# cp -r gnome-terminal-2.22.2 gnome-terminal-2.22.2.org
# cp -r gnome-terminal-2.22.2 gnome-terminal-2.22.2.my
# cd gnome-terminal-2.22.2.my
# vi src/terminal-window.c
※以下のdiffに相当するパッチを当てる
# cd -
# diff -r -U 3 gnome-terminal-2.22.2.org gnome-terminal-2.22.2.my > ../SOURCES/gnome-terminal-mytab.patch
# cat ../SOURCES/gnome-terminal-mytab.patch
diff -r -U 3 gnome-terminal-2.22.2.org/src/terminal-window.c gnome-terminal-2.22.2.my/src/terminal-window.c
--- gnome-terminal-2.22.2.org/src/terminal-window.c 2009-01-27 19:06:03.000000000 +0900
+++ gnome-terminal-2.22.2.my/src/terminal-window.c 2009-01-27 19:32:20.000000000 +0900
@@ -1367,14 +1367,24 @@
}
static void
-close_button_clicked_cb (GtkWidget *widget, GtkWidget *screen)
+close_button_clicked_cb (GtkWidget *widget, TerminalWindow *window)
{
- GtkWidget *notebook;
- guint page_num;
+ GList *profiles;
+ GList *prof0;
+ GList *prof1;
- notebook = gtk_widget_get_parent (GTK_WIDGET (screen));
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (notebook), screen);
- gtk_notebook_remove_page (GTK_NOTEBOOK (notebook), page_num);
+ profiles = terminal_profile_get_list ();
+ prof0 = profiles;
+ prof1 = profiles; prof1 = prof1->next;
+ while (prof0 != NULL)
+ {
+ if (prof0->data == terminal_screen_get_profile (window->priv->active_term))
+ break;
+ prof0 = prof0->next; prof1 = prof1->next;
+ }
+ terminal_screen_set_profile (window->priv->active_term, prof1 ? prof1->data : profiles->data);
+
+ g_list_free (profiles);
}
static void
@@ -1408,6 +1418,7 @@
contruct_tab_label (TerminalWindow *window, TerminalScreen *screen)
{
GtkWidget *hbox, *label, *close_button, *image;
+ PangoAttrList* attrs = pango_attr_list_new ();
hbox = gtk_hbox_new (FALSE, 4);
@@ -1416,6 +1427,10 @@
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+ pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_X_SMALL));
+ gtk_label_set_attributes (GTK_LABEL (label), attrs);
+ pango_attr_list_unref (attrs);
+
close_button = gtk_button_new ();
gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
gtk_button_set_focus_on_click (GTK_BUTTON (close_button), FALSE);
@@ -1429,7 +1444,7 @@
g_signal_connect (G_OBJECT (close_button), "clicked",
G_CALLBACK (close_button_clicked_cb),
- screen);
+ window);
sync_tab_label (screen, label);
g_signal_connect (G_OBJECT (screen),
# cd ../SPECS/
# cp gnome-terminal.spec gnome-terminal-mytab.spec
# vi gnome-terminal-mytab.spec
※以下のdiffに相当するパッチを当てる
cnes-bs1furuta.cnes.nec.co.jp:/usr/src/redhat/SPECS # diff -c gnome-terminal.spec gnome-terminal-mytab.spec
*** gnome-terminal.spec 2008-05-29 01:13:05.000000000 +0900
--- gnome-terminal-mytab.spec 2009-01-27 19:35:10.000000000 +0900
***************
*** 11,21 ****
Summary: GNOME Terminal
Name: gnome-terminal
Version: 2.22.2
! Release: 1%{?dist}
URL: http://www.gnome.org/
Source0: http://download.gnome.org/sources/gnome-terminal/2.22/gnome-terminal-%{version}.tar.bz2
# Fix gnome.org Bug 338913 Terminal resized when switching tabs
Patch2: gnome-terminal-2.15.0-338913-revert-336325.patch
License: GPLv2+ and GFDL+
Group: User Interface/Desktops
--- 11,22 ----
Summary: GNOME Terminal
Name: gnome-terminal
Version: 2.22.2
! Release: 2%{?dist}
URL: http://www.gnome.org/
Source0: http://download.gnome.org/sources/gnome-terminal/2.22/gnome-terminal-%{version}.tar.bz2
# Fix gnome.org Bug 338913 Terminal resized when switching tabs
Patch2: gnome-terminal-2.15.0-338913-revert-336325.patch
+ Patch3: gnome-terminal-mytab.patch
License: GPLv2+ and GFDL+
Group: User Interface/Desktops
***************
*** 51,56 ****
--- 52,58 ----
%prep
%setup -q
%patch2 -p1 -b .338913-revert-336325
+ %patch3 -p1
%build
# rpmbuild -ba /usr/src/redhat/SPECS/gnome-terminal-mytab.spec
# cd ../RPMS/i386/
# rpm -Uvh gnome-terminal-2.22.2-2.fc9.i386.rpm
■ ken [xportを使った電子工作とjavaで制御する、手本になる作品を探していますが、なかなかありませんね。]