Ubuntu 14.04のNautilus(ファイルマネージャ)は、(Ubuntu 12.04の)前バージョンに比べて、カスタマイズ性に劣っている。
特に問題なのが、日時の形式(Date Format)が全く変更できないこと。 ファイル管理には、「年月日 時分秒」が必要なのに、直近の日時のものは「月日」や「時分」のみの表示となる糞仕様。
ソースコードを少しだけいじって、何とかしてみる
ソースコードの入手と、ビルド環境の準備
apt-get source nautilus sudo apt-get build-dep nautilus sudo apt-get install tracker-sparql
ソースコードの修正
static char * nautilus_file_get_date_as_string (NautilusFile *file, NautilusDateType date_type, gboolean compact) { time_t file_time_raw; const char *format; char *result = NULL; GDateTime *date_time, *today; int y, m, d; int y_now, m_now, d_now; GDesktopClockFormat value; gboolean use_24; if (!nautilus_file_get_date (file, date_type, &file_time_raw)) { return NULL; } date_time = g_date_time_new_from_unix_local (file_time_raw); g_date_time_get_ymd (date_time, &y, &m, &d); today = g_date_time_new_now_local (); g_date_time_get_ymd (today, &y_now, &m_now, &d_now); g_date_time_unref (today); value = g_settings_get_enum (gnome_interface_preferences, "clock-format"); use_24 = value == G_DESKTOP_CLOCK_FORMAT_24H; if (!compact) { format = use_24 ? FULL_FORMAT_24 : FULL_FORMAT; } else if (y == y_now && m == m_now && d == d_now) { format = use_24 ? TODAY_TIME_FORMAT_24 : TODAY_TIME_FORMAT; } else if (y == y_now && m == m_now) { format = THIS_MONTH_TIME_FORMAT; } else if (y == y_now) { format = THIS_YEAR_TIME_FORMAT; } else { format = ANYTIME_TIME_FORMAT; } // result = g_date_time_format (date_time, _(format)); result = g_date_time_format (date_time, "%Y-%m-%d %H:%M:%S"); g_date_time_unref (date_time); return result; }
'aclocal-1.13' is missing on your system
というエラーがmake時に発生するため、現在システムにインストールされている 1.14.1 に無理やり書き換えてしまう。(とにかく、1.13.x と書かれているところを 1.14.1 に書き換え。 悪影響は… 知らん)
# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. 〜 中略 〜 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) 〜 中略 〜 # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
※ 追記 2016/02/10
次のコマンドでconfigureファイルを再構築することで、automakeのバージョンを自動的に現在インストールされているものにアップデートすることができる。
aclocal automake autoconf configure
ソースコードのビルドとインストール
cd nautilus-3.10.1 automake ./configure --prefix=/usr make
インストールは、nautilus本体の実行ファイルのみを強制上書きする。(オリジナルのファイルのバックアップも取っておく)
sudo mv /usr/bin/nautilus /usr/bin/nautilus.original sudo chmod -x /usr/bin/nautilus.original sudo cp src/.lib/nautilus /usr/bin/ sudo chmod +x /usr/bin/nautilus
念の為、OSを再起動する
改造の結果
■ 改造前
■ 改造後
他の解決法 : nemo のインストール
nemo本体だけならUbuntuの標準リポジトリに含まれているが、プラグインは次のようにPPAを使ってインストールする
sudo add-apt-repository ppa:webupd8team/nemo sudo apt-get update audo apt-get install nemo
参考資料
・Where is "Date Format" preference in Nautilus 14.04 settings?
・Unhappy with 14.04 Nautilus; how many are installing diff file-browser?
Ubuntu 18.04での方法
Ubuntu 18.04にインストールされているNautilus(version 3.26)はビルド方法がmesonに変更されているため、少し工夫がいる
ソースコードも少しだけ変化があり、修正箇所は次の通り
static char * nautilus_file_get_date_as_string (NautilusFile *file, NautilusDateType date_type, NautilusDateFormat date_format) { time_t file_time_raw; GDateTime *file_date_time, *now; GDateTime *today_midnight; gint days_ago; gboolean use_24; const gchar *format; gchar *result; gchar *result_with_ratio; 〜 中略 〜 g_date_time_unref (file_date); g_date_time_unref (now); g_date_time_unref (today_midnight); } else { /* xgettext:no-c-format */ format = _("%c"); } // result = g_date_time_format (file_date_time, format); result = g_date_time_format (file_date_time, "%Y-%m-%d %H:%M:%S"); g_date_time_unref (file_date_time); /* Replace ":" with ratio. Replacement is done afterward because g_date_time_format * may fail with utf8 chars in some locales */ // result_with_ratio = eel_str_replace_substring (result, ":", "∶"); result_with_ratio = eel_str_replace_substring (result, ":", "։"); g_free (result); return result_with_ratio; }
青の部分をコメントアウトし、赤の部分に変更している。なお、2個めの修正箇所は半角コロン(:)を全角コロン(:)に変更しているもとのソースコードを、半角コロンぽく見える文字(։)(Unicode U+0589 Armenian Full Stop)に変更している。これは、gnomeのutf8文字列変換にバグがあり半角コロンを扱えない回避措置に伴うもの。
見かけだけは半角コロンに見えるようになる…
Gnomeデスクトップの時計表示が、妙に間延びしている全角コロン(:)なのは、このバグに原因があるようだ。
ソースコードの修正が完了したら、mesonを使ってビルドする
cd nautilus-3.26.4
meson . ./build ← 第1引数=ソースディレクトリ、第2引数=出力ディレクトリ
buildディレクトリが作成され、その中にコンパイラやリンカに引き渡す設定ファイルが作成される。
まずは、吐き出された設定値を確認する
meson configure ./build
〜 表示中略 〜
Directories:
Option Current Value Description
------ ------------- -----------
prefix /usr/local Installation prefix.
libdir lib/x86_64-linux-gnu Library directory.
インストールディレクトリが/usr/local
になっているため、これを/usr
に変更する
※インストールディレクトリを変更しないと、コンテキストメニュー(右クリックメニュー)に拡張機能で追加された項目が表示されない。これは、拡張機能が/usr/lib/x86_64-linux-gnu/nautilus/extensions-3.0
に格納されているため、もとの設定/usr/local/lib/…
では拡張機能のファイルが見つからないため。
meson configure -Dprefix=/usr ./build
そしてビルドを行い、ソースコードをシステムにコピーする
ninja -C ./build sudo cp ./build/src/nautilus /usr/bin/nautilus
なお、./build/nautilus-desktop
に出力されるnautilus-desktopファイルもシステムにコピーすべきだが、今回はデスクトップに対する変更は行っていないので、もとのファイルを使い続けても特に問題はない。
Gnomeデスクトップのタスクバー時計のコロンが全角であるのを修正する
Google検索でこのページにたどり着く人も居るようで… Gnomeデスクトップのタスクバー(システムトレイ)に表示される時計のコロンが間延びしているのは、Gnomeデスクトップをビルドし直さなくても
『 Clock Override 拡張機能 』を導入するだけで解決する。もちろん、半角コロンではなく半角コロンぽく見える文字(։)(Unicode U+0589 Armenian Full Stop)を使ってください…