header

2014年8月21日木曜日

helm-ghqとhelm-for-filesを組み合わせたらすごい便利になった

もともとhelm-ghqでも便利なんだけど、helm-ghqとhelm-for-filesを組み合わせたらすごい便利になった。以下はその設定とか


その前にhelm-for-filesとは

helm用のファイルを探すのに特化したhelmの関数で、デフォルトで表示されるhelm-for-filesでの候補はbufferのリストとrecentf、file-cache、現在のディレクトリのbufferのリストとhelm-source-bookmarksとhelm-source-locateというもの(最後の2つはよくわからないし、重複しそうなので自分は使っていない)
まぁhelm-miniの重いバージョンみたいな認識


helm-ghqとは

簡単にいうとghqのリストをhelmで開く拡張。ディレクトリを開いたあとさらにそのディレクトリのなかを探してくれる。

作者さんのブログ http://masutaka.net/chalow/2014-06-22-1.html
GitHub : https://github.com/masutaka/emacs-helm-ghq


注意

もしかしたらhelm-for-files用のソース変数を追加するpull requestを送ったので今回紹介する設定をする前にhelm-ghqをアップデートしたほうがいいかもしれない。


設定

みてて思ったがブログに書くほどのことでもないかもしれない。。。(まぁいいか)

下のハイライトの無効化はお好みで。たぶん候補がめちゃめちゃ多いなら無効化しとくのが無難。

(require 'helm-files)

;; 重くなるのでhelm-for-filesだけハイライトを無効化する
(defadvice helm-for-files
(around helm-for-files-no-highlight activate)
"No highlight when using helm-for-files."
(let ((helm-mp-highlight-delay nil))
ad-do-it))

(require 'helm-ghq)
;; helm-for-filesのソースにhelm-ghqのソースを追加
(add-to-list 'helm-for-files-preferred-list 'helm-source-ghq)

上のadd-to-listの行は下のようにも設定できる(というか自分の設定)

(defconst helm-for-files-preferred-list
'(helm-source-buffers-list
helm-source-recentf
helm-source-file-cache
helm-source-ghq
helm-source-files-in-current-dir
;; comment out this is too heavy for me.
;; helm-source-bookmarks
;; helm-source-locate
))

これもお好み設定だけど、file-cache-add-directory-listの引数にディレクトリのリストを渡すとそのディレクトリのファイルがhelm-for-filesの候補に追加される。
じつをいうとこれがhelm-for-filesの候補で一番気に入っている。
ghqはバージョン管理しているディレクトリ単位だけど、こっちは関係ない。
自分のようにホームディレクトリをバージョン管理していて特定のディレクトリのファイルだけ候補にいれたい場合便利かもしれない。

(require 'filecache)
(file-cache-add-directory-list '("~/" "~/.emacs.d/"))
(setq file-cache-filter-regexps
(append file-cache-filter-regexps
;; 無視したいファイルの正規表現を指定もできる
'("\\.cache$")))

2014年8月9日土曜日

AndroidのAVDの高速化を試してみた

昔AndroidのAVDを試してけどめちゃくちゃ遅くて使う気がしなかったけど、高速化する方法があるらしいので、なんとなくやってみた。途中で(自分のなかで)はまりポイントがあったので、記事として書いておく。

自分の環境:

ubuntu12.04LTS
64bit環境
SSD

(関係ないけどawesome window managerも使ってる)

参考サイト:
http://my-clip-devdiary.blogspot.com/2013/01/android64bit-ubuntu-12041lts.html
http://saku-java.be-ourselves.jp/2014/05/18/intel-x86-android-emulator-setting/

どうやら、intel x86設定にするのとSnapshotを使うといいらしい。

昔設定したので、SDKやandroidコマンドは普通に使えた。

以下のコマンドでSDKはアップデートできた。-uをつけるとno-uiになるらしい。
(sdkだけ)

android update adb
android update sdk

適当にavdを作る

android avd

上のコマンドでavdマネージャを開いたあとCreateボタン、そのあとCPU/ABI設定でintel x86を選択し。(そのまえにandroid update sdkで対象のintel x86をインストールする)必要なavdを作る。

avdのイメージができたので起動してみた。

-[10598]% emulator-x86 -avd nexus4intel
emulator: ERROR: Could not load OpenGLES emulation library: libOpenglRender.so: cannot open shared object file: No such file or directory
emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
emulator: emulator window was out of view and was recentered

http://qt-project.org/forums/viewthread/29747

libOpenglRender.soが読めないらしいので、ググったところLD_LIBRARY_PATHにパスを追加するほうがいいということで、

locate libOpenglRender.so

で調べたら、sdk/tools/libディレクトリに入っていた。

とりあえず、パスを通してもういっかい挑戦してみたら、

-[10602]% emulator-x86 -avd nexus4intel -port 5554
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
emulator: emulator window was out of view and was recentered

のようなエラーがでた。

libGL.soがどうせ足りないんだろって思って調べた
(もしかしたら、apt-get install ia32-libsが必要かも?)

-[10659](1)% locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

x86_64版のlibGL.soのほうでパスを通しても、

Failed to load libGL.so
error libGL.so: wrong ELF class: ELFCLASS64
Failed to load libGL.so
error libGL.so: wrong ELF class: ELFCLASS64

というエラーがでるので、/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0の
symbolic link libGL.soをつくってパスを通すようにしたら
エラーはでなくなった。

最終的にはemulatorの起動は下のようなshell scriptにした

#!/bin/sh
SNAPSHOTNAME="default"
PORT=5554
LIBGL="/usr/lib/i386-linux-gnu/mesa/"
export LD_LIBRARY_PATH=$ANDROID_SDK_HOME/tools/lib/:$LIBGL:$LD_LIBRARY_PATH
echo "accessing the avd: telnet localhost ${PORT}"
# I couldn't save snapshot if I use just "emulator"(I chose intel86)
emulator-x86 -avd nexus4 -port $PORT -snapshot $SNAPSHOTNAME &
# or without snapshot
# emulator-x86 -avd nexus4 -port $PORT &

環境変数に32bit版のをまぜるのは、よくないのでemulator使うときだけまぜる
ようにした。
-avdの名前やport番号は適当にかえてください。(port番号については
emulator -help-portをいちどみたほうがいいかも)

libGL.soのディレクトリもシンボリックリンクを作ったところへかえてくださ
い。

他にはまったところとして、最初はemulatorの起動コマンドをemulatorにして
いましたが、この場合snapshotがうまく保存されませんでした。
理由はよくわかりませんが、emulator-x86を利用するとtelnetからsnapshotの
保存が可能でした。

telnet localhost port-number
# after connected to android
avd snapshot save snapshot-name

ただsnapshotといっても
saveした画面がでるのが7秒後くらい、操作うけつけるのが1分10秒後くらいで、
ん?って感じ。
試しにsnapshotなしで起動した場合でみたら、26秒くらいで操作できるようになった。

参考サイトの動画みると20秒くらいで操作できるようになってたから、普通に起動する分には成功してるっぽい。ただsnapshotは謎、どなたか見識のあるかたコメントいただければ。。。


Popular Posts

Blogger templates

Blogger news