emacsで使い捨てディレクトリをさくっと作る

emacs 24.5.1 open-junk-fileを使うと 使い捨てファイルをさくっと作ることができる。 使い捨てディレクトリも同じようにさくっと作りたい。 ということでopen-junk-fileを真似してopen-junk-dirというコマンドを作った。 https://github.com/handlename/dot-emacs/blob/master/inits/30_open-junk-file.el#L7-15 問題の関数のところだけを抜粋すると、 (defvar junk-file-dir "~/junk") (defvar junk-file-format-base (concat junk-file-dir "/%Y/%m/%Y%m%d_%H%M%S")) (defvar my:open-junk-dir-format (concat junk-file-format-base "_")) ;;; open-junk-dir (defvar my:open-junk-dir-format (concat junk-file-format-base "_")) (defun my:open-junk-dir () (interactive) (let* ((dir-base (format-time-string my:open-junk-dir-format (current-time))) (dir (read-string "Dirname: " dir-base))) (make-directory dir t) (find-file dir))) いままで~/tmpなどに都度ディレクトリを作っていたが、 これでディレクトリ名に悩む必要がなくなった。 ついでに Emacs で作成した使い捨てファイルを簡単に開く - Qiita を参考にhelmで使い捨てファイルを検索できるようにした。 https://github.com/handlename/dot-emacs/blob/master/inits/30_open-junk-file.el#L17-35 さらについでにagコマンドでjunk-file-dirを検索する関数も定義した。 https://github.com/handlename/dot-emacs/blob/master/inits/30_open-junk-file.el#L37-42 使い捨てファイルがだいぶ使いやすくなった。 »

xslate-modeとtt-mode

練習でText::XslateとTemplate::Toolkitのテンプレート用マイナーモードを書いてみた。 https://github.com/handlename/xslate-mode https://github.com/handlename/tt-mode とりあえずタグの挿入とハイライトだけ。 名前が違うだけで同じ事しか書いていないので、設定だけでいろいろなテンプレートに対応できるような、meta-template-mode的なものにしたほうがいいのかもしれない。 Emacs Lispテクニックバイブル 作者: るびきち出版社/メーカー: 技術評論社発売日: 2011/11/26メディア: 単行本(ソフトカバー)購入: 5人 クリック: 213回この商品を含むブログを見る »

string-widthをインタラクティブに呼び出せるようにする

emacsでリージョン内の文字数をしらべる場合は、リージョン選択時に M-x count-lines-regionとすればいい。count-lines-regionはデフォルトでは M-=に割り当てられている。 文字数ではなく文字幅を知りたい場合はstring-widthを呼び出せばいいのだが、これはコマンドとしては呼び出せない。 ので、リージョン内の文字幅をしらべる関数を定義してみた。 調べたい文字列をリージョンで選択して、 M-x string-width-in-regionとすればミニバッファに結果が表示される。 »

カタカナだけを半角に変換するelisp

ケータイサイトではカタカナを半角で表示するのが慣習ですが、ぼくはこの変換をしょっちゅう忘れてしまいます。カタカナの書き直しのためだけにデプロイし直すのはなんともむなしいです。 そんなむなしさを解消するためにカタカナを半角カタカナに変換するelispを書きました。 最初から入っている japanese-hankaku-region を使ってカタカナを変換しています。japanese-hankaku-region はひらがなも半角カタカナに変換してしまうため、一度カタカナの文字列を検索してそれらを対象に処理をおこなうようにしています。 ファイル保存時に ktai-hankaku-katakana-buffer を実行すれば、変換し忘れミスはなくなるはずです。 今回初めてまともに elisp を書いたんですが、そもそもバッファの文字列を読み取る方法がわからなかったり、デバッグ方法がわからなかったりして(デバッグ方法はまだわかってなかったり)結局3時間くらいかかった気が…。 もっと身近な不便を解決するものを書いていきたいですね。 »

いまさらだけどsmartchr.elを入れてみた

id:k1LoW さんの 空気のようなEmacs Lisp -2010 冬- - Emacs/Lisp/Drill - Emacsグループ を読んで、いまだに smartchr を使ってなかったことを思い出したので入れてみた。 全てのモードで有効にするのは逆に不便になるので("-"を使った箇条書きとか)、add-hook で必要なモードでだけ有効にするようにした。 ;; INSTALL ;; (install-elisp "https://github.com/imakado/emacs-smartchr/raw/master/smartchr.el") (require 'smartchr) (defun my-smartchr-setting () (local-set-key (kbd "=") (smartchr '(" = " " == " "="))) (local-set-key (kbd "+") (smartchr '(" + " "++" " += " "+"))) (local-set-key (kbd "-") (smartchr '(" - " "--" " -= " "-"))) (local-set-key (kbd "\"") (smartchr '("\"`!!'\"" "\""))) (local-set-key (kbd "'") (smartchr »

emacsのPATHって・・・?

evernote-mode.elを使おうとするものの、なにをやっても Unknown error になってしまう。 どうやら emacs から呼び出そうとしている ruby が /usr/bin にあるものなのが原因らしい(使いたいのは macport で入れた ruby)。 M-x shell-command which ruby => /usr/bin/rubyPATH と exec-path には /opt/local/bin を追加済み。 (getenv "PATH") #=> ("/opt/local/bin", ...) exec-path #=> ("/opt/local/bin", ...) shell-command で PATH を見ると違う結果に。 M-x shell-command echo $PATH => /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:...setenv で PATH に空文字列を入れても shell-command から見た PATH は空にならない。 (setenv "PATH" "") (getenv "PATH") => "" M-x shell-command echo $PATH => /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/binどうやら getenv で得られる PATH の前に強制的に /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin がつく模様。 »

html-helper-mode 3.0系列の設定

2.0系列から見て、デフォルトで色が付いたりキーバインドががらっと変わったりしている3.0系列が微妙に使いにくかったので、ちょっといじったメモ。 対象は html-helper-mode 3.0.4kilo。 タグは小文字にしたい テーブルタグとかスクリプトタグとかが大文字なのが気に入らないので中身を書き換えた。 いちいちタイプする毎になんか走って鬱陶しい html-helper-verbose を nil にすればいいみたい。 (setq html-helper-verbose nil) その他の設定 (autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t) (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) (setq html-helper-basic-offset 0) (setq html-helper-item-continue-indent 0) (setq html-helper-never-indent t) (defvar html-helper-new-buffer-template '("<!DOCTYPE html>\n" "<html>\n" "\n" "<head>\n" "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\">\n" "<title></title>\n" "</head>\n" "\n" "<body>\n" "\n" "\n" "\n" "</body>\n" "</html>\n") "*Template for new buffers, inserted by html-helper-insert-new-buffer-strings if html-helper-build-new-buffer is set to t") あとはキーバインドを覚えれば完璧。 »

linum-modeの余計な余白をなくす方法

自分の環境(MacOSX 10.6、Emacs23、linum-mode 0.9x)でlinum-modeを有効にすると、 余計な余白が入る。 ターミナルで起動すると症状は出ない。 これを解消するために、linum-mode.elの160行目を次のように書き換えた。 ; (setq width (max width (length str))) (setq width (max width (/ (length str) 2))) そうするとこうなる。 行番号がはみ出して見切れてしまう場合は、 .emacsにlinum-formatに適当な値を設定する。 (setq linum-format "%4d") この方法だとターミナルで起動したときに行番号が表示されなくなってしまうが、 おそらくターミナルで使うことはないのでこれでよしとする。 2010/05/16 1:09 追記 余計な余白が入る理由は、どうやらフォント設定による模様。 フォント設定を、 (set-fontset-font (frame-parameter nil ‘font) ‘japanese-jisx0212 ’("M+2VM+IPAG circle" . "iso10646-1")) (set-fontset-font (frame-parameter nil ‘font) ‘mule-unicode-0100-24ff ’("M+2VM+IPAG circle" . "iso10646-1")) (setq face-font-rescale-alist ’(("^-apple-hiragino." . 1.3) (".*osaka-bold." . 1.2) (".osaka-medium." . 1.2) (".courier-bold-.-mac-roman" . 1.0) (".monaco cy-bold-.-mac-cyrillic" . 0.9) (".monaco-bold-.-mac-roman" . »

anything-c-source-occurが動かなかったのでちょっといじった。

なんだか定番らしいanything.elですが,ぼくはつい昨日(!)存在を知りました。 で,早速使ってみて「お〜?おー!」とかやってたんですが, anything-config.elで定義されているanything-c-source-occurが うまく動かない感じだったのでちょこっといじりました。 何がどううまく動かなかったかというと, anything-c-source-occurの一覧から選択すると, Wrong number of arguments: (lambda (numline) “Replacement of `goto-line’.” (goto-char (point-min)) (forward-line (1- numline))), 2 と,なってしまってたんですね。 行数はわかるけどその場所に飛べない,と。 すごく残念。 エラーの該当箇所を探したらanything-config.el中のanything-goto-lineでした。 anything-c-source-occurの定義中でanything-goto-lineを呼び出してる部分を見ると, 確かに引数の数が間違ってました。 定義では行数のみを与えるようになってますが,呼び出しでは行数と対象のバッファを渡しているようです。 そこで,余計だと思われる2つめの引数を取っ払ったらうまく動くようになりました。 以下はその修正点。 *** anything-config.org.el 2010-02-07 13:51:49.000000000 +0900 — anything-config.el 2010-02-07 13:51:17.000000000 +0900 ************ 3733,3739 **** (let ((lines (split-string (buffer-string) "\n" t))) (cdr lines))))))) (action . (("Goto line" . (lambda (candidate) ! (anything-goto-line (string-to-number candidate) anything-c-source-occur-current-buffer))))) (requires-pattern . 1) (volatile))) ;; (anything ‘anything-c-source-occur) — 3733,3739 —- (let ((lines (split-string (buffer-string) "\n" t))) (cdr lines))))))) (action . »