EmacsでRubyの開発環境を整えた

突然Rubyが書きたくなったので、EmacsRubyの開発環境を整えた。elispのインストールは全てel-getを使った。

環境

ruby-mode

標準で入っていたのを使う。あとGemfileをruby-modeで開くように設定。

(add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))

inf-ruby.el

Emacsからirbを使えるようにする。
inf-ruby-keysがinf-ruby-setup-keybindingsにリネームされていたので注意。
後半部分はrbenvでインストールしたrubyに対応させるためのPATHの設定。

(autoload 'run-ruby "inf-ruby"
  "Run an inferior Ruby process")
(autoload 'inf-ruby-setup-keybindings "inf-ruby"
  "Set local key defs for inf-ruby in ruby-mode")
(add-hook 'ruby-mode-hook
          '(lambda ()
             (inf-ruby-setup-keybindings)))

(setenv "PATH" (concat (getenv "HOME") "/.rbenv/shims:"
                       (getenv "HOME") "/.rbenv/bin:" (getenv "PATH")))
(setq exec-path (cons (concat (getenv "HOME") "/.rbenv/shims")
                      (cons (concat (getenv "HOME") "/.rbenv/bin") exec-path)))

ruby-end.el

endを自動で保管してくれる。特に設定なし。

rsense

オムニ補完をできるようにする。auto-completeの情報源として使う。
まずはrsenseの起動に必要なJREをインストール。

$ sudo apt-get install openjdk-7-jre

デフォルトのrecipeだとうまくいかなかったので、自分でrecipeを書いてインストール。
recipe

(:name rsense
       :description "RSense client for Emacs"
       :website "http://cx4a.org/software/rsense/index.html"
       :type http-tar
       :options ("xf")
       :url "http://cx4a.org/pub/rsense/rsense-0.3.tar.bz2"
       :load-path ("etc")
       :build `(("ruby etc/config.rb > ~/.rsense"))
       :post-init (setq rsense-home (expand-file-name "."))
       :features "rsense")

設定

(add-hook 'ruby-mode-hook
          '(lambda ()
             (add-to-list 'ac-sources 'ac-source-rsense)))

ユーザーマニュアルに載っている設定が古いのか、ac-source-rsense-constantはdeprecatedであり、ac-source-rsense-methodはac-source-rsenseのエイリアスだった。なので、情報源に追加するのはac-source-rsenseだけで大丈夫だと思う。

Windows7 64bit環境でLogicool F710のドライバをインストールできないのが解消した

ロジクール ワイヤレスゲームパッド F710

ロジクール ワイヤレスゲームパッド F710


ゲームパッドが欲しかったのでLogicoolのF710を買ったが、付属のCDだけではドライバがインストールできなかった。
どうやらドライバの不具合らしく、Xbox360のワイヤレスコントローラのドライバを少し修正して流用するとようやくドライバをインストールできた。

環境

インストール方法

1. Xbox 360 Accessories Software 64-bit for Windows 7をダウンロードしてインストールする。
http://www.microsoft.com/hardware/en-us/d/xbox-360-controller-for-windows


2. F710のドライバをダウンロードしてインストールする。付属のCDからではなく、ウェブから最新版をダウンロードしたほうが良さそう。
http://www.logicool.co.jp/ja-jp/support/wireless-gamepad-f710?crid=411&osid=14&bit=64

インストール途中のキャリブレーションとテストでコントローラーが検出されないが、無視してそのまま進んでインストールを完了させる。


3. デバイスマネージャを開くと、正しくドライバがインストールされていないデバイスがある。
そのデバイスを右クリックして[プロパティ]を開き、[詳細]タブでデバイスIDを確認する。


4. C:\Program Files\Microsoft Xbox 360 Accessories\Xusb21.infをエディタで開いて編集する。
まず、[MSFT.NTx86.6.0], [MSFT.NTamd64.6.0], [MSFT.NTx86], [MSFT.NTamd64]の欄の末尾に以下を追記する。ただしデバイスIDは、先ほど確認した自分のデバイスのものに置き換える必要がある。
僕の環境ではそれぞれ元のファイルの行数で、65, 72, 79, 86行目に追記した。

%XUSB21.F710%=CC_Install, USB\VID_046D&PID_C22F&REV_0306
%XUSB21.F710%=CC_Install, USB\VID_046D&PID_C22F

それから、ファイルの末尾に以下を追記する。

XUSB21.F710 = "Logitech Wireless Gamepad F710"


5. デバイスマネージャで先ほどのデバイスを右クリックして[ドライバー ソフトウェアの更新]を開く。
[コンピュータを参照する]を選び、検索する場所に C:\Program Files\Microsoft Xbox 360 Accessories を選択し、最後まで進む。

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. 新たに出現したウィンドウを閉じずに、先ほど開いたファイルを閉じて再度開き直す