タグ

ブックマーク / rubikitch.hatenadiary.org (49)

  • 拡張子への関連付け - http://rubikitch.com/に移転しました

    zsh 4.2以降ならばwindozeでいう「拡張子への関連付け」が行える。大昔から欲しかった機能だったが4.2以降ってかなり遅いのね… たとえば.jpgファイルにおいて alias -s jpg=xzgv と設定しておけば foo.jpg を見るためには ./foo.jpg と打つだけでよくなる。 とりあえずアーカイブファイル、画像、音声、動画については登録しておいた。はてブに「CUIでそれをやるのはキモい」という意見を見かけたが、一番行われる操作を登録しておくのは意味があることだと思う。アーカイブならば展開だし、画像は表示、音声・動画は再生。

    拡張子への関連付け - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/12/19
  • 知らないと損するミニバッファ保険 - http://rubikitch.com/に移転しました

    Emacsを使ってて怖いことのひとつは、ミニバッファに入力中にC-gを押してしまうことだ。すると、今までの入力がパーになってしまう。 俺はskkを使っていて、変換をキャンセルするときにC-gを押すのだが、押しすぎたりタイミングを間違えたらミニバッファ入力がキャンセルされてしまう。なので、ミニバッファに日語を打つときはいつも冷や冷やしていた。 以下の設定を加えると、C-gを押したときに現在の入力がヒストリーに記録されるようになる。間違ってC-gを押してしまった場合は、再び同じコマンドを起動してM-pで前の入力を呼び戻せるぞ。 (defadvice abort-recursive-edit (before minibuffer-save activate) (when (eq (selected-window) (active-minibuffer-window)) (add-to-hist

    知らないと損するミニバッファ保険 - http://rubikitch.com/に移転しました
  • topコマンドのanything.elインターフェース - http://rubikitch.com/に移転しました

    topコマンドはCPUやメモリを喰ってるプロセスをリストアップしてくれる。なるべくパソコンを軽くしたいので常に起動しているのだが、プロセスを殺すときにいちいちプロセスIDを打ち込まないといけないので面倒だ。そこでanythingインターフェース。 M-x anything-toptopコマンドを起動し、その中でC-c C-uを押すと更新。アクションはとりあえずkillのみ。 anything-config.elに加えてるので更新するだけで使える。 M-x install-elisp-from-emacswiki anything.el M-x install-elisp-from-emacswiki anything-config.el ;;; Top (process) (defvar anything-c-top-command "COLUMNS=%s top -b -n 1" "

    topコマンドのanything.elインターフェース - http://rubikitch.com/に移転しました
  • anything.elを使ってzshの履歴検索をする - http://rubikitch.com/に移転しました

    zshは快適なシェルではあるが、anything脳の俺にとっては履歴検索で絞り込めないと不便でしょうがない。 zshでanythingのようなものを作る方法があるものの、やはり物のanything.elを使いたい。 ということでzshのコマンドラインからanythingで履歴検索するコードを書いてみた。 更新情報 [2009/12/10]id:IMAKADOからのCarbonEmacs用のパッチを取り込み。 インストール とりあえず、anything一式が必要なのでインストール。 M-x install-elisp-from-emacswiki anything.el M-x install-elisp-from-emacswiki anything-config.el M-x install-elisp-from-emacswiki anything-match-plugin.el M

    anything.elを使ってzshの履歴検索をする - http://rubikitch.com/に移転しました
  • ホームポジションのアルファベットで候補を選択できるようにしてみた - http://rubikitch.com/に移転しました

    久々のanything.el更新。 anything-enable-digit-shortcutsという変数を知っているかな?この変数をtにすると、Ctrl+数字(1〜9)で先頭9個の候補を選択して、デフォルトのアクションを実行することができる。なんだけど、Ctrl+数字というのはすこぶる押しづらい!!なので使っていなかった。 (setq anything-enable-digit-shortcuts t) 今回の更新では、ホームポジションにある大文字のアルファベット(ASDFGHJKL)で候補選択できるようにしてみた。以下の設定を加える。なお、anything-enable-shortcutsはanything-enable-digit-shortcutsの新しい名前になっているので、anything-enable-digit-shortcutsを書き換えてもよい。互換性のために残してあ

    ホームポジションのアルファベットで候補を選択できるようにしてみた - http://rubikitch.com/に移転しました
  • zargs - 「argument list too long」を撃退せよ - http://rubikitch.com/に移転しました

    zshのglob機能(ワイルドカード)はとてつもなく強力だ。zshユーザならほぼ間違いなくsetopt extended_globの設定を入れていると思う。extended_globしておかないと強力なglobの恩恵を受けられないからだ。たとえば**/*.hは*.hをカレントディレクトリとそのサブディレクトリを再帰的に探索し、展開する。 しかし、再帰的なglobを使っていると展開後の長さがとんでもないことになりがちである。そのため「zsh: argument list too long」(日語なら「zsh: 引数リストが長すぎます」)のエラーを見たことがあると思う。制限きつすぎだバカヤローって叫んだ人もいるだろう。そして、仕方なくfindとxargsを使ってしまう。これはzshの制限ではなくてOSの制限なのだ! たとえばGNU/Linuxならば、131072バイト=128KBだ。 lin

    zargs - 「argument list too long」を撃退せよ - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/12/03
  • anything.el を終了せずにアクションを実行する方法 - http://rubikitch.com/に移転しました

    anything.el はとても便利だが、通常の anything はアクションを実行したら*Anything*バッファが消えてしまう。たとえば、 anything.el でマニュアルを参照する 場合は絞り込んだ候補を次々と見たいものである。以下のコマンドを定義すれば、 anything 実行中に C-z を押せば anything を終了せずにアクションを実行できる。マニュアル参照以外にも、ファイルを「チラ見」するときも便利だ。チラ見ウィンドウのスクロールは通常の C-M-v で実行できる。チラ見し終わったら C-g で anything を強制終了すれば元々の画面( window-configuration )に戻る。 source に persistent-action 属性が設定できる。それは、 C-z を押したときに実行される関数だ。指定しなければ、 action 属性の先頭が実

    anything.el を終了せずにアクションを実行する方法 - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/11/27
    チラ見
  • Emacs23へ移行した - http://rubikitch.com/に移転しました

    Emacs23が7月末にリリースされたのだが、しばらく様子見をしていていた。 俺は新しいもの好きではあるけど、EmacsヘビーユーザとしてEmacs Lispパッケージの互換性問題があるからすぐに移行するのはためらっていた。Emacs Lispの非互換な仕様変更のせいで既存Emacs Lispが動かないという事態が発生するし、実際いくつか動かないパッケージがあった。 このエントリはEmacs22→Emacs23の移行において気付いたことを要約してある。エントリができた時点でリンクにする。 まず、一番びっくりしたのが、ぱうフォントだとバックスラッシュとチルダが表示されないことだった!表示上スペースに化けてしまう。これは真っ先に解決しておかないと使いものにならない。→Emacs23でバックスラッシュとチルダが表示できない問題を回避した - http://rubikitch.com/に移転しまし

    Emacs23へ移行した - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/10/20
    23
  • GNU Screenは古いの? - http://rubikitch.com/に移転しました

    時代はGNU screenからtmuxへ - Dマイナー志向 「GNU screenはもう古いので皆さんtmuxへ移行しましょう」という強烈な煽り文句が書いてあるので気になる。 とはいえ、マルチバイト文字が化けたり消えたりするんだったら、日人としては使えないんじゃないか? 俺は tscreen というGNU Screenのfork版を使っている。オリジナルにはない機能があったり、バグが修正されていたり。 GNU ScreenにはGNU/Linuxを使い始めた直後ということは13年以上もお世話になっているので、おいそれと乗り換えるわけにはいかない。GNU Screenに依存したスクリプトけっこうあるし。とくに不満があるわけでもないし。 追記 GNU Screenでも縦分割はできる。しかし、evalコマンドに致命的なバグがあったため、最新版GNU Screenではなくて、tscreenに移行

    GNU Screenは古いの? - http://rubikitch.com/に移転しました
  • 自動でバイトコンパイルする設定 - http://rubikitch.com/に移転しました

    Emacsは*.elというEmacs Lispソースファイルと*.elcというバイトコンパイルされたファイルがある。 で、ソースのみが変更されたとき、*.elcよりも*.elが新しくなるのだが、そのとき、古い*.elcを読み込んでしまう。 だから、「変更したはずなのに、反映されてない、おかしいなあ」ということになる。 この問題に対処する方法として、保存直後に自動バイトコンパイルするという手があるのだが、Gitリポジトリとかからの変更をとりこんだときとかはわすれてしまう。あと、でかいファイルの場合、バイトコンパイルで待たされるので困る。 そこで、起動時に必要があればバイトコンパイルすることにした。 そもそもこの問題が起きるのは、Emacs Lispがホームディレクトリにある場合だ。だから、load-pathに加える時点で、読み込む前に必要あればバイトコンパイルしてしまえばよい。必要あればディ

    自動でバイトコンパイルする設定 - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/06/09
    load-pathに加える時点で、読み込む前に必要あればバイトコンパイル
  • midnight.el で毎日 0 時に古いバッファを削除する - http://rubikitch.com/に移転しました

    http://unknownplace.org/memo/2009/04/07#e001 気がつくと emacs のバッファがすごい数になっていて補完などが重くなるのである程度たまった ら自動で古い物(しばらく visit してない物)を自動的に削除するようなものが欲しい。 標準添付の midnight.el とかどうだろうか。 (require 'midnight) しておけば midnight-hook に登録している関数を毎日 0 時に実行するようになる。 そこに clean-buffer-list という一定時間以上表示していないバッファを掃除する関数がある。 midnight-hook にはデフォルトでそれが登録されているから、 require 一で実現する。

    midnight.el で毎日 0 時に古いバッファを削除する - http://rubikitch.com/に移転しました
  • EmacsのM-x shellでzshを使う設定 - ’(rubikitch wanna be (a . lisper))

    .zshrcの設定内容によっては、EmacsのM-x shellでは動作しなくなる。それは、zleをいじっているから。だけど、zshでもEmacsの中で動かす方法はある。以下の行を.zshrcに入れるだけでよい。 [[ $EMACS = t ]] && unsetopt zle この設定は環境変数 EMACS が t であるならば zle を使わなくするという意味。で、環境変数 EMACS は誰が設定しているかというと comint.el の comint-exec-1 だ。以下の部分で環境変数を設定している。 (let ((process-environment (nconc ;; If using termcap, we specify `emacs' as the terminal type ;; because that lets us specify a width. ;; If

    EmacsのM-x shellでzshを使う設定 - ’(rubikitch wanna be (a . lisper))
    aki77
    aki77 2009/05/11
    anything-complete-shell-history, 履歴を共有
  • xmpfilter のような自動注釈を Emacs Lisp で実現する lispxmp.el をリリース - http://rubikitch.com/に移転しました

    Emacs Lisp 式の値を自動注釈する lispxmp.el をリリースしました。 Ruby の xmpfilter *1 を Emacs Lisp でも実現します。ちょっと手を加えれば Common Lisp や Scheme とかにも対応できるでしょう。 http://www.emacswiki.org/emacs/LispXmp M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el たとえば、こんなファイルに対して ;; 単純な例 (+ 3 4) ; => (current-buffer) ; => ;; もちろんループの中にも対応 (require 'cl) (loop for i from 1 to 3 for y = (* i 2) do (* i 10) ; => (+ i

    xmpfilter のような自動注釈を Emacs Lisp で実現する lispxmp.el をリリース - http://rubikitch.com/に移転しました
  • anything-match-pluginの制限→candidates-fileプラグイン推奨 - http://rubikitch.com/に移転しました

    http://d.hatena.ne.jp/joan9/20090211/1234332160 その他のsourceではミニバッファで検索語句をスペース区切りで入力していくと絞り込みがで きるのだけど、locateのところだけうまくいってない。 不便なので原因を調査して絞り込みできるようにしたい。(そもそもできないってことはない よね?) 残念ながらこれはanything-match-pluginの制限で、locateに関してはできません。locateのcandidatesはサブプロセスであり、anythingの入力がそのままlocateの引数に渡ります。その他のsourceは文字列リストなので絞り込みができます。anything-match-plugin的にサブプロセスに対する挙動をどうするか決めかねています。僕自身サブプロセスは使っていません。 そのかわり、ファイルリストを作成してその

    anything-match-pluginの制限→candidates-fileプラグイン推奨 - http://rubikitch.com/に移転しました
    aki77
    aki77 2009/05/05
    locateの代用、スペース区切りで絞り込み、find
  • anything.elの絞り込みにmigemoを使う - http://rubikitch.com/に移転しました

    http://d.hatena.ne.jp/rubikitch/20070924/anythingmigemo で構想していたanything.elのmigemo化にやっと成功した。欲しかったので作った。 M-x install-elisp-from-emacswiki anything-migemo.elするか http://www.emacswiki.org/cgi-bin/wiki/download/anything-migemo.el からもってけ! ただし、全候補にmigemo化されたstring-matchをかけるので遅い。正規表現をmemoizeするとか、anything-sourcesを絞るかしないといけないな…後の課題にしておこう。 追記 memoizeしてみたら実用的な速度になった。とりあえずこれでいいかな。 追記その2 match属性使えばanything.elへのパ

    anything.elの絞り込みにmigemoを使う - http://rubikitch.com/に移転しました
  • grep-edit.el無双 - ’(rubikitch wanna be (a . lisper))

    複数のファイルにまたがる特定のパターンを置換する必要があった。そんなときにはEmacs使いならばgrep-edit.elがよい。M-x grepで置換箇所を出力して、M-x query-replaceで置換。これ最強。grep-edit無双。 unix wizardならばperlのワンライナーで置換するだろうけどヘタレな俺には不安で…誤爆するかもしれんし。 http://www.bookshelf.jp/elc/grep-edit.el 俺設定。buffer-read-onlyでハネられたら嫌なので置換時にinhibit-read-onlyをセットしておく。そして、C-c C-cで編集終了したいからそう設定しておく。行へ飛ぶのはEnterで。 grepの結果から探索する目的にはそのうち公開予定のanything-grep.elを使っている。anything.elだと絞り込みができるからね。

    grep-edit.el無双 - ’(rubikitch wanna be (a . lisper))
  • anything.elで表示中の情報源を選択して絞り込むコマンド - http://rubikitch.com/に移転しました

    anything-sourceを選択してanythingを起動するanything-source - IMAKADO::BLOG 似たようなものはすでに作ってある。こっちはanything-sourcesの中から絞り込むもの。候補を表示させた後に情報源を絞り込む点が違う。そのうち家に取り込む予定。 http://www.emacswiki.org/cgi-bin/wiki/download/RubikitchAnythingConfiguration より抜粋。宝の山なのでanythingに興味がある人は読んでおくことをおすすめする。 ;; [2008/09/03] <<<anything-nest>>> (defun anything-nest (&rest same-as-anything) "Nested `anything'. If you use `anything' with

    anything.elで表示中の情報源を選択して絞り込むコマンド - http://rubikitch.com/に移転しました
  • anything.el による補完時に補完候補をその場で表示する anything-show-completion.el をリリース - http://rubikitch.com/に移転しました

    anything.el による補完の改善すべき点=視線の移動 - http://rubikitch.com/に移転しました にて anything.el による補完は視線の移動がつらいという意見があったので、選択している候補をその場で表示する anything プラグインを作成しました。 anything アプリケーションを require するときに自動で検出するので、 anything-show-completion.el を load-path の通った場所に置くだけで使えます。 現在、 anything-complete.el 、 anything-rcodetools.el 、 anything-dabbrev-expand.el 、 perl-completion.el に対応しています。 M-x install-elisp http://www.emacswiki.org/c

    anything.el による補完時に補完候補をその場で表示する anything-show-completion.el をリリース - http://rubikitch.com/に移転しました
  • カーソル位置を前に戻す point-undo.el をリリース - http://rubikitch.com/に移転しました

    Emacsにはアンドゥ機能があって、「しまった、へんな文字入力しちゃった!」なんて場合は落ち着いて「C-x u」すれば元に戻せる。一方、「しまった、へんな場所にカーソル移動しちゃった!」なんて場合にポイントをアンドゥする機能があってもいいだろう。w3mのUNDO/REDO(カッコにバインドされている)はまさにそれだ。それには拙作point-undo.elを使ってみよう。 M-x install-elisp http://www.emacswiki.org/cgi-bin/wiki/download/point-undo.el 設定はrequireして、適当なキーに割り当てるだけ。ファンクションキー等なるべく押しやすい位置がいいだろう。 (require 'point-undo) (define-key global-map [f7] 'point-undo) (define-key glo

    カーソル位置を前に戻す point-undo.el をリリース - http://rubikitch.com/に移転しました
  • M-x alignの設定 for Ruby - http://rubikitch.com/に移転しました

    M-x align-regexp を知る - gan2 の Ruby 勉強日記 実は俺もalign.elはノーマークだった。 align は「align-rules-list」って変数で整列のルールを管理してるので、これにルールを追 加してやれば「M-x align」でもやりたいことはできるようになるんだろうなぁ。 できたらルール追加したい。 ぐぐって設定してみた。 ruby-assignment-literalは代入文、ruby-xmpfilter-markはxmpfilterの「# =>」マークの設定。 どうぞ。 (add-to-list 'align-rules-list '(ruby-comma-delimiter (regexp . ",\\(\\s-*\\)[^# \t\n]") (repeat . t) (modes . '(ruby-mode)))) (add-to-lis

    M-x alignの設定 for Ruby - http://rubikitch.com/に移転しました