Emacsで編集中のファイルのディレクトリをtmuxの新しいウィンドウで開く

前回に引き続きターミナルとEmacs間の連携の話。
今回はEmacsで編集中のファイルのディレクトリを、ターミナル(tmux)の新しいウィンドウで開く。

設定

(defun open-current-directory-in-tmux-new-window ()
  "カレントディレクトリをtmuxの新しいwindowで開く."
  (interactive)
  (let* ((dir (if buffer-file-name
                  (file-name-directory buffer-file-name)
                (expand-file-name "~/")))
         (cmd (concat "tmux new-window \"cd " dir "; exec $SHELL\"")))
    (cond ((eq (shell-command cmd) 0)
           (message "Open directory %s in tmux new window." dir))
          (t
           (message "Failed to create new window in tmux.")))))

(global-set-key (kbd "C-x C-t") 'open-current-directory-in-tmux-new-window)

これでtmuxを起動した状態で、Emacs上からC-x C-tすると、tmuxの新しいウィンドウに編集中のファイルのディレクトリが開けるようになった。

emacsclientを使ってターミナルから既に起動中のEmacsでファイルを開く

Emacs上のターミナルを使わずに、Emacsとターミナルを別々に使っていると、Emacsとターミナル間の連携が取りにくい。
ターミナルのカレントディレクトリにあるファイルをEmacsで開こうと思ったときに、コマンドでemacsを実行すると新しいEmacsが起動するし、Emacsでいちいちfind-fileするのはめんどくさい。
emacsclientを使うと解決するらしいので、導入してみた。

設定

init.elに追記。

(require 'server)
(unless (server-running-p)
  (server-start))

動作

Emacsを起動しておいて、ターミナルから以下のように打つと、起動中のEmacsで編集できる。

$ emacsclient hogehoge -n

オプション-nをつけると、Emacsに編集の終了を告げる(C-x #)必要がなくなる。


エイリアスを設定しておくと便利(.zshrcの例)。

alias e="emacsclient -n"

起動時に必要ならinit.elをバイトコンパイルする

.emacs.d/をGitHubで管理していると、ある環境での更新を別の環境に適用するのに、git pullしてからバイトコンパイルしないといけないがめんどくさい。
なので、Emacs起動時にinit.elをバイトコンパイルする必要がある場合は、バイトコンパイルするようにした。

(add-hook 'after-init-hook
          '(lambda ()
             (let* ((el (expand-file-name "init.el" user-emacs-directory))
                    (elc (concat el "c")))
               (when (file-newer-than-file-p el elc)
                 (byte-compile-file el)))))

color-theme-railscastsをEmacs24に対応させた

Emacs 24以上を使うなら color-themeではなく、Emacsの themeフレームワークを使おう - Life is very short


いつも使っているcolor-theme-railscastsというEmacsのカラーテーマを、Emacs24のthemeフレームワークに対応させてみた。
itiut/railscasts-theme · GitHub

イメージ

Ubuntu12.10のLibreOffice Calcでグローバルメニューが表示されない

Ubuntu日本語フォーラム / LibreOfficeのメニュー不具合
既存の.odsファイルをLibreOffice Calcで開いたときにグローバルメニューが表示されなくて困ったが、とりあえずの対処療法を見つけた。

環境

Ubuntu 12.10 (GNU/Linux 3.5.0-18-generic x86_64)
LibreOffice Calc 3.6.2.2

対処療法

1. 既存のファイルを開く
2. Ctrl+N を押して新規作成する
3. 新たに出現したウィンドウを閉じずに、先ほど開いたファイルを閉じて再度開き直す

JavaScriptとCanvasで画像処理してみた

ディジタル画像処理

ディジタル画像処理

この本を参考にしつつ、JavaScriptCanvasで画像処理をしてみた。
ついでにNode.js + Expressを触ってみたりもした。


下のリンクから飛べます。
http://about-itiut.dotcloud.com/js-image-processing


input type="range" に対応してるブラウザ(Chromeとか)じゃないとうまく表示されない。
そして少し重いかも。

input要素のvalue属性の数値の扱いで詰まった

<input type="range" value="1" />
var input = document.getElementsByTagName('input')[0];
input.value;  // 数値?

input要素のvalueを取得して使うときに、input.valueを数値だと思い込んでたら、なんかうまくいない場所があった。

実は数値じゃなくて文字列だった。

typeof input.value;  // "string"

というわけで、Number()やperseInt()で数値に型変換すればよかった。

typeof Number(input.value);    // "number"
typeof parseInt(input.value);  // "number"