Tuesday, March 10, 2015

tramp + shell のリモートシェルで emacsclient を使うには

Emacs で tramp をつかっているときにM-x shell で起動するとリモートホストのシェルがあたかもローカルのシェルであるかのように快適に利用できるのだけど、一つ欠点があって、そこからのコマンドラインから起動するエディターに快適なのがあまりない。
emacsclient をリモートソケット経由で操作するハックとかいろんな工夫が行われているっぽいんだけどしっくりこないのでちょっとしたクイックハックしてみた。

基本的にはリモート側でemacsclientの代わりになるスクリプトを作ってあげてEDITOR環境変数に指定してあげればよい。

そしてそのスクリプトの内容はローカルのホストにsshでemacsclientを起動するようにして、trampの/ssh:hostname:/path/to/file 形式で指定してあげればよい。

こんな感じ

#!/bin/bash
SERVER=your-local-hostname
ssh $SERVER emacsclient /ssh:$HOSTNAME:$(readlink -f "$1" )

sshのコネクション張りっぱなしでパスワード聞かないこと前提。


#!/bin/bash
SERVER=junichi2.i
ssh $SERVER emacsclient /ssh:$HOSTNAME:$(readlink -f "$1" )

Thursday, February 12, 2015

gdb で求める条件のブレークポイントまで頑張る

なんかある関数があってそれが特定の値が出るまで回るってどうやるのかなと思って調べたのだけど毎回忘れるのでメモ。
とりあえずはGDBのループ構文とかがあるのでそれを使えばよい。
たとえば
void Function(int p) {}

があってp == 0じゃない場合がくるまで待ちたいなら

b Function
while ParameterValue = 0
  continue
end
とかすればよいっぽい。


追記
コメントもらったんだけど、このケースだと break xxx if という構文が使えて

b Function if ParameterValue !=0
とすればよいっぽい。