27 April 2014

(Ubuntu 14.04) Nautilusの日付形式が変更できないのを解決する

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

ソースコードの修正

nautilus-3.10.1/libnautilus-private/nautilus-file.c
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 に書き換え。 悪影響は… 知らん)

nautilus-3.10.1/aclocal.m4
# 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を再起動する

改造の結果

■ 改造前

20140427-nautilus-org.jpg

■ 改造後

20140427-nautilus-new.jpg

他の解決法 : nemo のインストール

nemo本体だけならUbuntuの標準リポジトリに含まれているが、プラグインは次のようにPPAを使ってインストールする

sudo add-apt-repository ppa:webupd8team/nemo
sudo apt-get update
audo apt-get install nemo

20140427-nemo.jpg

参考資料

Where is "Date Format" preference in Nautilus 14.04 settings?
Unhappy with 14.04 Nautilus; how many are installing diff file-browser?