コメントかつコピー

スクリプトを作ったりしてるときによくあるのが、ちょっと変更するけどオリジナルは取っておくという操作。大抵は変えたい部分を複製して、オリジナルをコメントアウトすることになる。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キーボードで;のとなり)で動く。人生が明るくなる。

CIAOのreadlineがうまく読み込まれなかったのがなおった

ciao4.6を入れてしばらく使ってたんだけどchipsとかsherpaでどうもreadlineが読み込まれなかった。起動するとこんなのがでてきてすごく面倒な感じだった。もちろんタブ保管はきかない。

$ sherpa
                                                                                • -
Welcome to ChIPS: CXC's Plotting Package
                                                                                • -
CIAO 4.6 ChIPS version 1 Monday, December 2, 2013 WARNING: Readline services not available or not loaded.WARNING: The auto-indent feature requires the r eadline libraryWARNING: Readline services not available or not loaded.WARNING: The auto-indent feature requires the readline libraryERROR: Internal Python error in the inspect module. Below is the traceback from this internal error. Traceback (most recent call last): AssertionError Unfortunately, your original traceback can not be constructed. sherpa-1>

たぶん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
                                                                                                        • -
Welcome to Sherpa: CXC's Modeling and Fitting Package
                                                                                                        • -
CIAO 4.6 Sherpa version 2 Wednesday, January 22, 2014 sherpa-1>

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