org-modeのアーカイブ先ファイル名を変更する

org-modeでタスクを管理していると、だんだんファイルサイズが大きくなる。 そのため、「org-archive-subtree」を使って完了したタスクをアーカイブしてファイルのサイズを小さくするのだけど、数年使っているとアーカイブ先のファイルサイズが大きくなる。 そこで、このアーカイブ先のファイル名を変更して肥大化を防ぐ。

ファイル名は標準では「%s_archive」である。「todo.org」の場合は「todo.org_archive」だ。 この名前は「org-get-location-archive-location」で決定される。 バッファ内に「#+ARCHIVE: 文字列」というオプションを設定している場合はその名前が使われる。 設定していない場合は「org-archive-location」変数が使われる。 そこで、次のように設定する。

scm
(setq org-archive-location (concat "%s_archive_" (format-time-string "%Y" (current-time))))
接尾辞として「_archive_2014」のように、その年をつけることで、毎年違うファイルにアーカイブできる。

今年追加したEmacsの設定

この記事は.emacs Advent Calendar 2013 – Qiita [キータ] の16日目です。 ほんのちょっとしたべんりな設定を紹介すると良いらしいので、今年追加した(と思う)(自分にとって便利な)設定を紹介します。

OSX用のフルスクリーンコマンド

いつのまにか、OSXのフルスリーン表示に対応していたので、トグルするコマンドを設定に追加しました。 追加したといっても、X11用のものとほとんど同じだったので、OSXの時に使えるようにするだけでした。

scm
(defun toggle-fullscreen ()
"Toggle full screen on X11 or OSX"
(interactive)
(when (or (eq window-system 'x) (eq window-system 'ns))
(set-frame-parameter
nil 'fullscreen
(when (not (frame-parameter nil 'fullscreen)) 'fullboth))))
(global-set-key [f9] 'toggle-fullscreen)

org-modeのSRCブロックでハイライト表示を有効にする

以前はmmm-modeを使ってハイライト表示していたのですが、org-mode本体の設定でできることを知ったので切り替えました。 設定は簡単で、「org-src-fontify-natively」をtにするだけです。 これでブロック内のソースコードに色がつき、とても見やすくなります。

scm
(setq org-src-fontify-natively t)

org-modeのアジェンダの時間表記を時間単位に変更する

org-modeのアジェンダにはクロックテーブルという機能があり、その日(アジェンダが週表示ならその週)のタスクを集計して表示してくれます。 どういう作業をどの位したのかがひと目で分かるので大好きなのですが、週で表示した時場合は、トータルの表示が「1d 21:51」のようになってしまいます。 別に困る分けではないのですが、時間で表示してほしいので以下のような設定を行いました。

scm
(setq org-time-clocksum-format '(:hours "%d" :require-hours t :minutes ":%02d" :require-minutes t))

org-modeでも「M-h」でbackward-kill-wordする

普段「M-h」にはbackward-kill-wordを割り当てているのですが、org-modeだとそれが効かなかったので設定しました。 地味だけど、他のモードと操作が同じになって使いやすくなりました。

scm
(org-defkey org-mode-map "\M-h" 'backward-kill-word)

明日は

esehara@githubさんです.

Rubyでオブジェクトのスーパークラスを遡って取得する

Rubyでクラスの親クラスを取得するには、Class#superclassを使えばよいという事を知った。 なので、BasicObjectまで遡れば継承している全ての親クラスを取得することができる。

`\ ruby class Foo end

class Bar < Foo end

class Hoge < Bar end

class Class def all_superclass def recur(c, a) return !c.superclass ? a : recur(c.superclass, a.push(c.superclass)) end recur(self, []) end end

p Hoge.all_superclass `\

実行結果はこう。

sh
$ ruby ./get_all_superclass.rb
[Bar, Foo, Object, BasicObject]

任意のクラスを継承しているか判別するのに使えると思う。

Linuxでアクティブなアプリケーションを記録&可視化した

FluentdとGrowthForecastを使って自分の行動をロギング・可視化する -すぎゃーんメモ を見て、自分もやりたくなったのでやった。 上記リンクと違うのは、アクティブなアプリケーションを取得する箇所のみ。 Linuxだと、xpropというコマンドを使ってXの状態を取得できる。

なので、まずは今アクティブなウィンドウのIDを取得。

bash
xprop -root _NET_ACTIVE_WINDOW | awk '{print $5}'

次に、取得したIDを使ってアクティブなウィンドウの情報を取得する。 今回はウィンドウのクラスを取得した。 他にもいろいろな情報を得られておもしろそうなので時間を作って遊んでみたい。

bash
xprop -id ${取得したID} WM_CLASS | awk '{print $4}' | tr -d '\"'
これらをワンライナーにしてfluentdの設定に組み込んだのが下記である。 DISPLAY環境変数の設定を行っているのは、fluentdを実行しているfluentユーザからディスプレイを参照できなかったため。 今はmongodbとGrowthForecastに投げている。なかなかおもしろい。

html
<script src="https://gist.github.com/takaishi/6bcefcd3e43f5779fc15.js"></script>

GNUプロジェクトの一つにパッチを送って取り込まれるまでの話

昨年末にorg-mode(Emacs拡張)に対して送ったパッチが今日無事に取り込まれ たのでその記録を書いておきます.

パッチを送るの巻

org-modeにはEmacs外部からアクセスするためのorg-protocolという機能があっ て,これを使えばFirefox等からorg-modeにURLを送りつけたりできる.これに ついて機能追加をするべく,2012-12-31にパッチを送信した.

で,メンテナから「取り込みたいけど,君は既にTINYCHANGESな変更を一度し ているので,FSFに著作権譲渡してね」と言われた.FSFについての話は検索するなり してくれればよいと思う.とにかく,パッチを取り込んでもらうためにFSFに 対して著作権を譲渡するための書類を送る必要があるということ.

FSFに対してメールを送るの巻

さて,書類を送るためにまずはFSFにリクエストのメールを送るわけだが,org-modeはなかな親切なもので,How to contribute to Org? にどうやればいいか書いてあった. ありがたいことにメールのテンプレートまで用意してくれている. これに必要な事項を書いて送信.これが年始の話である.

assignment paperを郵送するの巻

しばらくして,FSFからPDFが送られてきた. これにサインをして,郵送しろとのこと. 海外に何かを送るのは初めてだったので妙に緊張してしまった. たぶん気にしていたのは自分だけだと思うが,送られてきたPDFはレターサイズだが,A4の紙に印刷して送っても問題ないようだ.

また,送る際に一つ失敗した.自分が郵送するのに使ったのは普通のエアメールだったのだけど,これがよくなかった. 向こうに到着した後,手違いでこちらに連絡が届いていなかったのだけど,僕は郵送途中で紛失したかそれとも船便になってしまって時間がかかっているのか,と思っていた. 送料はかかるが,追跡が可能なEMS(国際スピード郵便)を使うのが良いだろう.

パッチの取り込み

後はとんとん拍子といったところで,パッチをリポジトリの先端に対して作りなおして送信,微修正ののちに取り込まれた. GithubのPullRequestとは違い,なかなか手間がかかったがうれしい限りである.

一連の流れを見ると,やはりPullRequest方式は非常に便利だと思う. MLにパッチを送る方式の場合,git format-patchやgit amを使ってやりとりをするのだけど,これがなかなか難しかった. 慣れてしまえば何ということはないのだろうが,初めて送る時はハードルが高い.

参考

パッチを送るにあたり,以下の記事を参考にした.感謝.

追記

このページも参考になる