anything-browse-kill-ring と session.el

まとめ


  • Anything と session.el を一緒に使うなら, 以下を .emacs に追加すること.
(setq session-save-print-spec '(t nil nil))

経緯


anything-show-kill-ring が以下のエラーを返し, 使えない状態となってしまいました.

void-variable \.\.\.

いろいろ調べてると helm-show-kill-ring: void-variable ... に行き当たりました.

どうやら session.el と組み合わせるていたため, 起きた問題のようです.

このスレッドにもあるように session-save-print-spec へ上掲のような値を束縛したところ anything-show-kill-ring が使えるようになりました.

おまけ


変数 session-save-print-spec とは何なのか.

少しだけ深入りしてみました.

まず M-x describe-variable session-save-print-spec すると以下のように返ってきます.

session-save-print-spec is a variable defined in `session.el'.
Its value is (t 2 1024)

Documentation:
*Print specification for the values of global variables to save.
The value looks like (CIRCLE LEVEL LENGTH) and is used to bind variables
`print-circle', `print-circle' and `print-circle' when evaluating
`session-save-session'.

...ん. これは Documentation が間違ってる感じですね.

関数 session-save-insert-variable を見てみましょう. 以下のような個所が見付かります.

    (let ((print-circle (car session-save-print-spec)) ;#dynamic
	  (print-level  (cadr session-save-print-spec)) ;#dynamic
	  (print-length (caddr session-save-print-spec)) ;#dynamic

ということで CIRCLE は print-circle, LEVEL は print-level, LENGTH は print-length に束縛して使っているようです.

各変数の値は以下のような意味を持っているとのことです.

  • print-circle
    • 末尾が先頭と繋がった構造をどのように print するか
  • print-level
    • 入れ子になったリストやベクタをどこまで print するか
  • print-length

(詳細は Variables Affecting Output 等でご確認ください.)

session-save-print-spec のデフォルト値は (t 2 1024) でしたので, 以下と等価といって良いでしょう.

(setq print-circle t
      print-level 2
      print-length 1024)

print-level が 2 ですので, 2 より多い要素を持ったリストやベクタの場合, 後続要素が ... と表現されてしまいます.

print-length も同様です.

(print-circle は上記 2 つとは異なりますが, 普段の生活にはあまり現れないでしょうから割愛します)


これにより, session.el が変数の値をファイルに書き出す際に ... が含まれてしまいます.

session.el は session-initialize 時に session-save-file を load しているだけのようです. 従って束縛される値も ... が含まれたものとなります.

... は通常, 変数名として使われていませんので, これを評価すると (void-variable ...) となります.


これらは print-level, print-length の値を増やしてあげることで回避できます. またこれらの変数には nil を束縛することで限界値を設けないという設定も可能です.

したがって以下のように束縛すると, 今回の問題を回避できることがわかります.

(setq session-save-print-spec '(t nil nil))

...あれ


おかしいな, 長めに kill した文字列が session に保存されなくなったような...

宿題にします... :(

"Unable to complete backup. An error occurred while copying files to the backup volume."

まとめ


  • Time Machine にこんなこと言われたら system.log を見る こと
    • 引っ掛かってるところがわかるかも

経緯


まあ Time Machine の Back Up Now をする度に, 題にあるようなことを言われてしまっていたわけです.

困るなー, と思いつつも Restart, then try the backup once again. なんて書いてあったので気長に試してたのです.

でも何度も何度も同じ事言われるので, 流石に何か間違ってるんじゃないかと思い調べたのですね. (ちなみに fsck しても特に異常は検出されませんでした. )

/var/log/system.log を見てみたらそこにこんなのが吐かれてるじゃないですか.

Sep 29 02:20:12 machine_name com.apple.backupd[71922]: Error: (-36) SrcErr:NO Copying /Users/username/path/to/file to /Volumes/Time Machine/Backups.backupdb/machine_name/2012-09-26-114039.inProgress/MAY_BE_UUID/Macintosh HD/Users/user_name/path/to

これ Git のリポジトリで, しかも手許の変更は全部リモートに push してあったので失われても全く問題のないものだったのですね

Time Machine 内の同ディレクトリのバックアップをざっくり削除してから Back Up Now したところ, 無事に成功しましたとさ

おまけ


Mac Time Machineからバックアップを削除する方法

大変助かりました.

Terminal.app から切り換えた時のフォーカス

Terminal から他のアプリケーションに切り換えたのに、直後のキー入力を Terminal に拾われてしまうことがある場合は

defaults delete com.apple.Terminal FocusFollowsMouse

してみること。

f:id:elim:20120912001421p:plain

経緯

どうやら自分は昔、慣れ親しんだ X11 の環境に似せるために以下を実行したらしい。

defaults write com.apple.Terminal FocusFollowsMouse -boolean true

これによって、マウスカーソルが乗っただけで Terminal にフォーカスが移る(キー入力を受け付ける)ようになる。

それをすっかり忘れて

ここ数ヶ月、Terminal から Chrome に切り換えて ⌘ + K しても、 Terminal のタブが増える、なんてことが頻発するので悩んでいた。

そしてそれは Mountain Lion に乗り換えても症状が収まらなかったのだった。

全画面の Terminal と Chrome で快適 web developing なはずが、 Terminal のタブばかり増えて不快で仕方がない。

考察

OS を変えても起きたからには、 ~ 以下(((秘伝のタレのように引き継いでいる))に問題があるのだろうとアタリを付けて検索。

上記に行き当たった次第。

Chrome で日時表示が UTC 起点になる

はじめは メッセージの時間表示が正しくありません - Gmail ヘルプ かと思ったのですが、他の端末の Chrome から Gmail を開いても JST なので違うようです。



で、ある日 Cygwin mintty から起動した時だけそうなるのが分かりました。

LC_* のどれかを見てくれてるのかなー。



ソフトウェアの起動はだいたいこんな感じでやっていて、 C-r chr とかで済ませているため、スタートメニューから起動するのは結構面倒です。

$ screen 19 $USERPROFILE/Local/Google/Chrome/Application/chrome

まあ一度起動したらそうそう終了させないんですが。

ffmpeg で m4v の一部分を切り出す

$ ffmpeg -ss 00:00:05 -t 2102.0 -i /path/to/file.m4v -acodec copy -vcodec copy /path/to/output.m4v
  • -ss 開始点
  • -t 開始点から何秒分を出力するか

とある講演の映像が、本編と質疑応答が 1 トラックで収録されていたため、上記の方法で分割した。

ちなみに -ss は冒頭の拍手が長かったのでそれを削るためのもの。

ところで当初 homebrew で入れた ffmpeg (0.6.2) で試したところ、音声と映像がずれてしまい大変残念な思いをしたが

$ brew install --HEAD ffmpeg

として、ffmpeg の HEAD(現時点では git-707e861)を使用したところ、ずれのない m4v が得られた。

開発者のみなさまに感謝。

rvm install 時に clang を要求されたら

twitter でそのような方をお見掛けしたので調べてみた。

API Only - Stack Exchange

環境変数 $rvm_clang_flag のチェックがおかしかった模様。RVM 自体を更新すると起きなくなる。

History for scripts/manage - wayneeseguin/rvm · GitHub

こちらもしばしば手を入れてらっしゃるようだ。