コメントかつコピー
スクリプトを作ったりしてるときによくあるのが、ちょっと変更するけどオリジナルは取っておくという操作。大抵は変えたい部分を複製して、オリジナルをコメントアウトすることになる。Emacsで愚直にやると、わざわざ該当部分をマークしてコピー(M-w)、もう一回マークし直してコメントアウト(C-;)、張りたいところに移動してペースト(C-y)することになる。これだとそもそも面倒だし、なにより変えたい部分が大きいようなときにさらに面倒くさい。マークするために一番上から一番下に移動してコピーをするわけなんだけど、このとき選択してたリージョンが解除されるので、もう一回コメントアウトのためにマークするために上に戻らなけりゃならない。その上、コメントアウトしたあとのカーソルは最後にあった場所にとどまるから、すぐ下にペーストしたいようなときは結局また一番下に移動する必要がある。
というわけで選択部分をコピーしてかつコメントアウト、コメントアウトしたところの次の行あたりにカーソルが残るようなコマンドをElispで書いた。
(defun comment-and-copy () (interactive) (if (region-active-p) (let ((rb (region-beginning)) (re (region-end))) (progn (goto-char (1+ re)) (goto-char (line-beginning-position)) (kill-ring-save rb re) (comment-region rb re))))) (global-set-key (kbd "M-'") 'comment-and-copy)
M-'('はUSキーボードで;のとなり)で動く。人生が明るくなる。
シェルスクリプトの中でgnu parallelを使うとき
これだとうまく行かない。
func () { echo $1 } cat list | parallel func {}
関数をエクスポートしてやらないとparallelさんが見つけられないらしい。だから正しくはこうなる。
func () { echo $1 } export -f func cat list | parallel func {}
CIAOのreadlineがうまく読み込まれなかったのがなおった
ciao4.6を入れてしばらく使ってたんだけどchipsとかsherpaでどうもreadlineが読み込まれなかった。起動するとこんなのがでてきてすごく面倒な感じだった。もちろんタブ保管はきかない。
$ sherpa
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
たぶんciaoでシステムのpythonを使うようにしていたのが原因、つまり.ciaorcに
PYTHON /usr/bin
って書いてあって、/usr/bin/pythonのほうのpythonにはreadlineが紐づいてなかったてきな感じだったんだと思う。
真相はよくわからないけど、pythonのreadlineを落としてきて/usr/bin/pythonをつかってインストールしたらなおった。
$ sudo /usr/bin/python setup.py install --record files.txt
$ sherpa
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
SDSSのモザイクの手に入れ方
DR10版。
http://dr10.sdss3.orgのイメージングメニューからMosaicsを選ぶ。
RA,Decと欲しいモザイクイメージの直径(?長方形の縦横のサイズ)、ピクセルサイズを選ぶ。
色を指定してSubmitを押すとしばらくしたらtarで固められたfitsがダウンロードされる(結構時間かかる)。
Rubyのparsletを使って単位と物理定数の両方に対応した計算機
Googleで"10km/5sec/c"とかやると単位も物理定数も考えて計算してくれるのは有名な話だけど、当然の事ながらオフラインだとできない。不便なので作ってみようと思った。単位なのか物理定数なのかを判断するようにするのは面倒だったから単位は角括弧で囲むようにした。
parsletというのを使って構文解析して単に計算する。
動作はコマンドラインのみでこんな感じ。
> 180[km]/20[sec] 9000.0 [m s-1] > 250[kpc]/1000[km/s]=?Myr 244.4532762791914 [Myr] > G*5.972e24[kg]/6371[km]**2 9.819296622997971 [m s-2]
一応ソースコードをはっておく。ここを多いに参考にした。クラスの使い方がヘタクソでMKSAの香りがAmountの中に漏れ出てきてるし、どこでも括弧を使えるようにするために左再帰の対処療法的に"1*"とかが入ってたりしてかっこわるいことこの上ない。だれかいい感じに書き直してくれ。できれば関数にも対応してほしいな。
割と切実にいい感じにしてほしいしここにべた書きするよりgithubに上げるべきか。
続きを読むflyspell-modeでEmacsでもスペルチェック
Aspellというのを使うといいらしい。
$ brew install aspell --with-lang-en
ってしたあと init.el に
;; spell check (setq-default ispell-program-name "aspell") (eval-after-load "ispell" '(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+"))) (global-set-key (kbd "<f12>") 'flyspell-mode) (global-set-key (kbd "<f10>") 'flyspell-buffer) (global-set-key (kbd "<f9>") 'ispell-word) (mapc ;; flyspell-mode (lambda (hook) (add-hook hook 'flyspell-prog-mode)) '( c++-mode-hook emacs-lisp-mode-hook ruby-mode-hook python-mode-hook )) (mapc (lambda (hook) (add-hook hook '(lambda () (flyspell-mode 1)))) '( yatex-mode-hook ))
これで例えばtexを編集すると自動的にflyspell-modeが起動する。
f12を押せばflyspell-modeのオンオフ、f10でflyspell-buffer、f9で単語ごとにスペルチェックできる。
ここいらを参考にした。
http://www.gfd-dennou.org/member/uwabami/cc-env/emacs/flyspell_config.html
http://keisanbutsuriya.blog.fc2.com/blog-entry-60.html
http://www.geocities.co.jp/SiliconValley-Bay/9285/EMACS-JA/emacs_101.html