ファイルの右クリックメニューに好きなコマンドを追加する方法

  1. [ファイル名を指定して実行]で、regedit を実行
  2. [マイコンピュータ] -> [HKEY_CLASSES_ROOT] -> [*] -> [shell] を右クリックし、新しいキーを作る。名前は何でもよい。
  3. 新しく作ったキーが選択された状態で、今度は右側ペインの(規定)というところをダブルクリック。
  4. 出てきたダイアログに、コンテキストメニューに表示したいメニューの名前を入力。
  5. 2.で作った新しいキーの下に[command]というキーを作成。
  6. また、右側のペインにある(規定)というところをクリックし、今度は実行したいコマンドを入力する。例えば "C:/xyzzy.exe %1"とする。%1のところにはファイル名がわたってくる。

ディレクトリを右クリックした時にメニューを出したい時は、
[マイコンピュータ] -> [HKEY_CLASSES_ROOT] -> [Directory] -> [shell]
に対して同様にやればOK。

Scheme どう書く?的

整列済みの number のリストがある。

'(1 3 4 5 6 12 13 15)

このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端のみを書くような記法を導入する。

最初の例のリストであれば以下のようになる。

'(1 (3 . 6) (12 . 13) 15)

このようなリストの変換をするコードを書きたい。

書いてみました。こんな感じ。
う〜ん、なんかベタだなぁ。もっと、おぉ!というのが書きたい。
SRFIとか覚えないとダメかな・・・。

(define (compact-number-list lst)
  (define (skip-to-end l)
    (if (null? (cdr l))
        l
        (if (= (+ 1 (car l)) (cadr l))
            (skip-to-end (cdr l))
            l)))
  (if (null? lst)
      '()
      (let ([beg (car lst)]
            [r   (skip-to-end lst)])
        (cond [(null? r)       lst]
              [(= beg (car r)) (cons beg (compact-number-list (cdr r))) ]
              [else            (cons (cons beg (car r)) (compact-number-list (cdr r)))]))))

moccur-grep-findをちょっと便利に

higeponさんのid:higepon:20080717:1216264518を見て、そういえば自分も
moccur-grep-findの拡張子の指定のところで困ってたな〜と思い出した。
いい機会なので自分も少し設定をごにょごにょしてみることに。
せっかくなので、id:higepon さんとは別のアプローチをとることにしてみた。
拡張子(本当は拡張子ではなくてファイルマスクか?)の指定で何が面倒かって、
例えば、拡張子がcppだったかhppだったか、それともただのhだったかわからない、
という時に、

searchstring \.cpp$\|\.hpp$\|\.h$

としなければいけなくてこれをタイプするのが面倒だった。
これが、

searchstring cpp,hpp,h

となっただけでだいぶ便利になるんじゃないか。というわけで作ったのがこれ。
ほとんどmoccur-grep-findそのままで、マスクの文字列のところをカンマでsplit
してガチャガチャやってるだけです。(例えばcpp,hpp,hなら\.cpp$\|\.hpp$\|\.h$にしてるだけ)

(defun moccur-grep-find-ext (dir inputs)
  (interactive
   (list (moccur-grep-read-directory)
         (moccur-grep-read-regexp moccur-grep-default-mask)))
  (moccur-setup)
  (setq moccur-last-command 'moccur-grep-find)

  (let (regexps
        mask (files nil)
        ;;(default-directory dir)
        )
    (setq regexps
          (mapconcat 'concat
                     (if (= 1 (length inputs))
                         inputs
                       (cdr (reverse inputs)))
                     " "))
    (setq mask
          (if (= 1 (length inputs))
              "."
            (car (reverse inputs))))
    (setq mask2 (concat "\\."
                        (mapconcat 'identity 
                                   (split-string mask ",")
                                   "$\\|\\.")
                        "$" ))
    (message "Listing files...")
    (cond
     ((listp dir)
      (while dir
        (cond
         ((file-directory-p (car dir))
          (setq files (append
                       (reverse (moccur-grep-find-subdir (car dir) mask2))
                       files)))
         (t
          (setq files (cons
                       (car dir)
                       files))))
        (setq dir (cdr dir))))
     (t
      (setq files (reverse (moccur-grep-find-subdir dir mask2)))))
    (message "Listing files done!")
    (moccur-search-files regexps files)
    ))

あとは除きたい拡張子を

searchstring ^svn-base

みたいにできたら便利かなぁ。

moccur-grep-find のファイルマスクは正規表現だった

ずっと使ってて今日はじめて気づいたんだけど、
moccur-grep-find のファイルマスクは正規表現を指定するらしい。
例えば、拡張子が cpp か hpp のファイルからgrep-findしたいという時は、

Input Regexp and FileMask: xxxx \.cpp$\|\.hpp$

といった感じでやればOK

Redmineかなり快適

いやぁー。Redmine、かなり快適だ。
コミットログに、

あんなところや、こんなところを直した。(fixes #12)

というふうに、"fixes #チケット番号" のように書いておくと、
勝手にそのチケットがクローズされます。
ただし、管理 -> 設定 -> リポジトリ のところにある、『適用されたステータス』というところを空にしておくとダメみたい。
『終了』に変更したらうまく動いてくれるようになった。


ちなみに Redmine 0.7.2 およびそれ以前のバージョンには、
クロスサイトスクリプティング脆弱性が存在するそうなので、
該当するバージョンを使ってる場合はバージョンアップすべし。
詳しくはここ

プロジェクト管理用アプリをRedMine0.7.2に変更。

インストールは/doc/INSTALLに書いてあるとおり。
思ったよりもサクサク動いてかなり快適。


実は最初インストールにてこずって結構はまったので忘れないようにメモ。


サーバのRubyがなぜか1.7が入っていたのでまず1.8.7にアップグレード。
RedMine0.7.2がRails2.0.2じゃなきゃダメらしいので、Rails2.0.2 + Ruby1.8.7 + RedMine0.7.2 という組み合わせで動かすことにした。しかしインストールして実際に動かしてみると、チケットを登録した後カレンダーや活動タブを表示させようとするとinternal error になってしまう。チケットが一つもない場合は大丈夫。
調べてみると、Ruby1.8.7に対応してるのは、Rails2.1からで、Rails2.0.2はRuby1.8.7未対応らしい。てか、Railsのサイトのトップにでかでかと書いてあった。ちゃんと読まない自分がいけない。
しかし、1.8.6の最新版であるRuby1.8.6-p230にしたら、なんと余計悪くなって、ログインすらできなくなった。
しかたないのでRuby1.8.6-p110あたりにしてみたら、今度はしっかり動いてくれた。とりあえずはRedMineがrails2.1に対応してくれるまでこのままようすみ。

Diredモードでファイルの作成

Diredモードで dired-create-directoryはあるのになんで dired-create-file
はないのかなぁーと不思議に思ってた。あそっか、shell-command で
tocuh 'filename'としてやれば済む話だからか、と納得。
それで shell-command で試してみたら、mcompleteの補完機能とぶつかって
うまくコマンドを渡せない事が発覚。今までずっとeshellを使ってたから気がつかなかった。mcomplete.elを開いて、mapcar に渡すリストの最後に ido-shell-command を追加して無事解決。

(mapcar #'(lambda (f) (put f 'mcomplete-mode '(:mode off)))
        '(iswitchb-buffer iswitchb-buffer-other-window
          iswitchb-display-buffer iswitchb-buffer-other-frame
          
          ido-find-file ido-find-alternate-file ido-write-file
          ido-insert-file ido-switch-buffer ido-insert-buffer
          ido-kill-buffer ido-find-file-other-window
          ido-find-file-other-window ido-switch-buffer-other-window
          ido-display-buffer ido-find-file-other-frame
          ido-switch-buffer-other-frame ido-shell-command))

でも、 だったら dired-create-directory だって mkdir 'dirname'でいいんじゃ?