CotEditor で現在時刻を挿入する Python スクリプトを作った

家で使っている MacBook ではエディタは(今のところは) CotEditor がメインである。会社の Windows PC では EmEditor を使っている。


会社の EmEditor では F5 を押すと「10/09/20 17:54」というふうに現在時刻が挿入されるので、それをつかって作業ログをつけている。何か動作を始める度にそれ用のテキストファイルに現在時刻と動作内容を記録し、完了したときも記録する。

10/09/20 17:59 ○○さんに TEL OK
10/09/20 17:54 ○○さんに TEL
10/09/20 17:50 メール 返信 ■■■社 OK
10/09/20 17:35 メール 返信 ■■■社

↑ファイルの先頭に書き足していくので上が最新となる


これが結構気に入っているので自宅でも導入したいとおもっていたのだけれども CotEditor では現在時刻を挿入する機能がないっぽい。ただ、自分でスクリプトを書いて機能を追加することができるようなのでチャレンジしてみた。
サポートしている言語は AppleScript,Perl,Python,Ruby,ShellScript,PHP らしい、たぶん。


もちろん Python の一択、ということで Python で現在時刻を取得する方法を調べる。
最初は「初めての Python」をパラパラと眺めていたが、あまりそれらしい情報を得られなかったので Google 様におうかがいしたら一発で出てきた。datetime モジュールというのがあって、それを使えばよいとのこと。

import datetime
d = datetime.datetime.today()

↑モジュールをインポートして、自分で設定した d という変数に欲しい値を代入する。代入文の右側は「モジュール名 . クラス名 . メソッド名」らしい。
datetime モジュールの、datetime クラスの、today() メソッド、ということか。

>>> d
datetime.datetime(2010, 9, 20, 18, 20, 54, 169405)

↑変数 d を表示させると上記のような形式

>>> print d
2010-09-20 18:20:54.169405

↑print 文だとこうなった。もうすでに求めているものにだいぶ近い。


で strftime() というメソッドを使うと表示させるデータを細かく指定できる。一部だけ表にしてみたが、もっとたくさんあった。

指示語 表示データ
%a ロケールにおける省略形の曜日名
%Y 4 桁で西暦年を表す
%y 下 2 桁で西暦年を表す
%m 月を表す 10 進数
%d 月の初めから何日目かを表す 10 進数
%M 分を表す 10 進数
%X ロケールにおける適切な時刻の表現
>>> print d.strftime("%Y-%m-%d"+" %a"+" %X")
2010-09-20 Mon 18:20:54

↑この形式を使うことにした
ちなみに " %a" は「半角スペース +Mon」、" %X" は「半角スペース + 時刻」というふうに区切るための半角スペースはこちらで入れてあげないと全部つながってしまう。

2010-09-20Mon18:20:54


で、最終的なかたちはこちら、というか、ほとんど上記の一行そのままなんだけど。

#!/usr/bin/python
# coding: UTF-8
# %%%{CotEditorXOutput=ReplaceSelection}%%%

import datetime

d = datetime.datetime.today()
print d.strftime("%y-%m-%d"+" %a"+" %X ")

↑3 行目のコメントは出力結果の CotEditor への渡し方を指定している部分なので、Python とは関係ない


実行すると出力はこうなる。

10-09-20 Mon 17:51:12

%Y(4 桁で西暦年)ではなく %y(2 桁で西暦年)にしてみた。
ただ iPhone アプリ FastMemo で使っているタイムスタンプは 4 桁なので、それに合わせた方がよいかもしれない。あと秒数は不要じゃないか、という点も。まぁ、その辺は使っていくうちに変更すればいい。


作ったスクリプトのファイルを CotEditor の所定のディレクトリに置いて、実行権限を付与すればいいとのこと。
実行権限って FTP でファイルをアップロードしたときに変更したりするアレのことか。くわしく調べていないけれど chmod コマンドを使えばいいらしい。

chmod 777 スクリプトのファイル名


結局 Python のコードを書いたのはたったの 3 行だけなんだけど、結構時間かかったな。まぁ最初はこんなもんだろう。さぁさぁ次だ、次。