2011-12-24

「プログラムとファイルの検索」という名前のコマンド型ランチャー

キーワードを入力してソフトなどを開くようなソフトをコマンド型ランチャーなどと呼びますが、

  • キーを1つ打つだけでランチャーを起動する
  • 名前を数文字打つだけで他のソフトやファイル、フォルダを起動する
  • コントロールパネルの項目なども名前を数文字打つだけで開く
  • URLを開く
  • キーワードの登録を行い、ランチャー内でキーワードを打つだけですぐに起動する


といったものであればWindows 7のスタートメニューにある「プログラムとファイルの検索」を使ってできます。ここでは「プログラムとファイルの検索」を使って上記のことをどのように行うかをまとめます。

※ Vistaにもあったと思いますがここでは7を想定しています。 ※ ここに書いてある一部のことは「ファイル名を指定して実行」(Windows + Rキー)でもできます。

起動

「プログラムとファイルの検索」を起動するにはWindowsキーを1回押して下さい。すぐに「プログラムとファイルの検索」の欄に入力ができるようになっています。

image

他のソフトの起動

ソフトをショートカットの山などから開いたり、マウスを使ったりするのが面倒なとき、ソフト名がわかっているなら名前を入力すればソフトを起動できた方が便利です。「プログラムとファイルの検索」にソフト名を何文字か入力すれば検索候補が表示され、Enterで開くことができます。

  • 例えば「wor」と入力してみてください。Wordが入っていればWordが検索候補として表示され、Enterを押すとWordが起動します。
    image
  • 例えば「mspaint」や「ペイント」と入力してみてください。Enterを押すとペイントが起動します。
    image
    • これはつまり「内部名(calc, cmd, regedit…)でも日本語(電卓, コマンド プロンプト...)でもよい」ということです。(「レジストリ エディタ」では引っかかりませんでしたが…)


フォルダやファイルを開く

深い階層にあるフォルダやファイルを辿って開くのは面倒です。面倒なのでショートカットをデスクトップに作ったりしますが、ショートカットを何個も作るのも面倒なとき、自分で場所を把握していれば「プログラムとファイルの検索」を使うと少ないキー入力でフォルダを辿ることができます。

  • 例えば「c:」や「c:\」と入力してみてください。Cドライブ直下のフォルダが検索候補として表示されます。必要なものを方向キー上下で選んでEnterを押すとフォルダが開きます(クリックでもいいです)。
    image
  • 必要なものを選んでいる状態でEnterを押さずに、「\」を押すと選んでいるフォルダ内のファイルやフォルダの候補が表示されます。
    image


また、特殊フォルダ名を入力して開くことも出来ます(「%userprofile%」、「%programfiles%」「%localappdata%」など)。例えば「%userprofile%」と入力して「\」を押すと、ユーザープロファイルフォルダ内にあるフォルダやファイル(「ドキュメント」、「ダウンロード」など)が表示されます。

image

コントロールパネルなどの項目を開く

コントロールパネルの項目を探すのはいつも本当に面倒ですが、これも「プログラムとファイルの検索」に必要な項目の名前を何文字か入力するだけで開くことができます。

  • 例えば「プリンター」や「print」と入力してみてください。「プリンターの追加」などの項目が検索候補として表示されます。
  • 例えば「ユーザー」や「user」と入力してみてください。「ユーザーアカウントの追加と削除」などの項目が検索候補として表示されます。
  • 例えば「環境変数」や「path」と入力してみてください。「環境変数を編集」などの項目が検索候補として表示されます。


image

URLを開く

どこかでコピーしたURLをブラウザで開くとき、ブラウザのアドレスバーにURLを貼り付けて移動するのが面倒な時があります。大抵のブラウザ(IE, Firefox, Chrome, Operaなど)ではCtrl + Lを押すとアドレスバーにフォーカスが行くのでCtrl + LしてからCtrl + Vで貼りつけてEnterでページ移動(※ OperaだとアドレスバーにフォーカスがなくてもCtrl + Shift + Vで貼りつけて移動)しますが、ブラウザを開いていない場合はブラウザを起動するのが面倒です。

「プログラムとファイルの検索」を使うとWindowsキーを押す→Ctrl + Vで貼りつけ→Enterだけでブラウザが開いていても開いていなくても既定のブラウザでページを開けます。

例えば「http://yahoo.co.jp」をコピーしておいて、貼りつけてEnterを押してみてください。既定のブラウザでYahooのトップページが開けます。

また、これは大抵のブラウザのアドレスバーと同じですが「http:yahoo.co.jp」と「//」を省略して打ってもページを開けます。

image

キーワードの登録

ショートカットが入っているフォルダにパスを通すことで、ショートカット名をキーワードとして、「プログラムとファイルの検索」でキーワードを入力→Enterでソフトやファイル、フォルダを開くことができます。

  1. 適当な場所にフォルダを作る(自分は「c:\users\<ユーザー名>\Shortcuts」というフォルダを作りました)
  2. 作ったフォルダの中に起動したいソフトやファイル、フォルダのショートカットを作って名前を短い名前(キーワード)に変更する(FileZillaだったら「fz」などの名前にする)
  3. 環境変数を開いて「Path」の末尾に「;」に続けて作ったフォルダの場所を指定する


image

(あまりショートカット登録していないPCでキャプチャしたので面白くないかもしれません…)

あとは「プログラムとファイルの検索」を開いてショートカット名を入力してEnterするだけでソフトやファイルが開けます。

 

覚えておくとマウスで時間をかけてフォルダを辿ってファイルを開く時間が省けたり、デスクトップがショートカットだらけになってそのショートカットをまた探さないといけない羽目になるのが防げだり、今まで自分のPCではランチャーを使っていたけど他の人のPCを触るときだと入ってないから面倒…というようなケースを防げたりするかもしれません。

2011-12-23

phpMyAdmin: CSVのフィールド区切り文字を変更する

phpMyAdminの最近のバージョン(3.5など。見た目がだいぶ変わっています)だと問題ないみたいなのですが、3.3などのバージョンだとCSVインポート・エクスポート時のフィールド区切り文字の規定値が「;」になっていて毎回変更しないといけないので規定値の変更方法を調べました。

config.inc.phpに次の設定を追加するといいようです。

$cfg['Import']['csv_terminated'] = ',';
$cfg['Export']['csv_separator '] = ',';

設定の説明はCSV – PmaWikiにありました。

2011-12-20

pChart 2.1.3: XYグラフを描画する

pChart(2系)でXYグラフを出力したかったので方法を調べていました。幅などを直接指定していたり若干やっつけですがこんな感じで出るみたいです。

コード

結果


X-Yの組を2種類作っているので少し長く見えますがやることは少ないです。最終的にdrawScatterLineChart()を呼ぶと折れ線が、drawScatterSplineChart()を呼ぶと曲線が、drawScatterPlotChart()を呼ぶとプロットが描画されます。

pChartは表示がきれいでいいなーと思うんですがドキュメントに嵌められることがあって、drawScatterScale()の説明でフォーマットの"LabelRotation"がX軸ラベルの回転を指定すると書いてあるのに実際ソース見ると"XLabelsRotation"だったり、drawScale()の説明の画像にはX軸名(Months)が表示されていて、X軸名を指定している箇所がsetSerieDescription()しかないのに setSerieDescription() ではX軸名が出なくてsetAbscissaName()を使わないといけなかったりします。

2011-12-19

野良猫に近づく

近所に野良猫が溜まっています。今は大小含めて7~8匹ほどいるみたいなので、どれだけ餌なしで近づいて写真が撮れるか空いた時間に試しています。


他にたぬきみたいな顔の猫や、メインクーンみたいなどう考えても野良猫じゃない猫などがいるんですが、まだ上手く撮れていません…。

ただ何日もやっていたのでどうやって近づくといいか少しわかってきました。
  • 目を合わせない
    • 目を合わせずに近づくと結構近くまで行けるときがあります
  • 直線で近づかない
    • 他の場所に行くようなコースで近づくとあまり逃げません
  • 急に動かない
  • 音を出さない
    • 落ち葉を踏んだりすると敏感な奴は逃げます。一匹逃げると近くにいる奴も一斉に逃げます
  • 逃げられたら追わない
    • 少し離れて時間が経つとまた戻ってきます
野良猫、あんまり多いので駆除されてしまうかもしれません。

2011-12-12

ZXing 1.7: CaptureActivityをWIndows上でビルドして実行

WindwosでZXing 1.7のCaptureActivity(zxing\android\)をAndroid 1.6をターゲットにしてビルド、実行しようとしたところZXingのGettingStartedのページにあるRun on Androidの手順ではうまくいかなかったので手順を記録しておきます。
(Windows 7 64bit / Eclipse 3.7(Pleiades All in One))

  1. あらかじめAndroid SDKをダウンロードしてインストール、antをダウンロードしてパスを通す
    • Android SDKはtools\、antはbin\にパスを通す
  2. ZXing-1.7.zipをダウンロードして展開する
  3. zxing\coreをビルドしてcore.jarを生成する
    cd core
    ant build
  4. CaptureActivityのプロジェクトをアップデート
    cd ..\android
    del build.xml
    android update project -p . -t 4
  5. Eclipseでプロジェクトを作成、core.jarをビルドパスに含める
    1. [ファイル] > [新規] > [新規Androidプロジェクト]を選択
    2. 「外部ソースからプロジェクトを作成」を選択
    3. 「ロケーション」をZXingのandroidディレクトリがある場所にする
    4. ターゲット名をAndroid 1.6にして[完了]ボタン押下
    5. パッケージ・エクスプローラでプロジェクトを右クリック → [ビルド・パス] > [外部アーカイブの選択]、などで core.jarをビルドパスに含める
  6. AndroidManifest.xmlのandroid:xlargeScreens属性を削除 (ant debugでビルドが失敗するため)
  7. デバッグビルド (R.java等の生成のため)
    ant debug
  8. 実行
    (Eclipseのパッケージ・エクスプローラでプロジェクトを右クリック → [実行] > [Androidアプリケーション] など)

ZXingTestActivity(zxing\androidtest\)も同じ要領で実行できます。

2011-12-01

色相環とHSLカラーピッカー

色を上手く選べるようになりたいと思っていたところHSB(HSV)だと色を選びやすいと聞いたので最近はHSBで色を選ぶようにしているんですが、色相(hue)の値が覚えられないので画像を作って覚えることにしました。

画像を作った後でプログラム作ったほうがわかりやすいんじゃないかと思ってTM LifeさんのCSS3 で追加された HSL の使い方にあるサンプルプログラムを参考にカラーピッカーを作りました。ただ<canvas>, <input type=range>などを使っていてChromeでしかしっかり動かないです…。

あと作ったプログラムの色空間はHSB(Hue, Sturation, Brightness)ではなく今のところHSL(Hue, Saturation, Lightness)です。HSBだとS=0%/B=100%が白、S=0%/B=50%が灰色、B=0%が黒ですがHSLだとL=100%が白、S=0%/L=50%が灰色、L=0%が黒です。


2011-11-23

カレンダーを出力するプログラム

HTML等で月のカレンダーを出力するプログラムを書くとき毎回変な感じになってしまうのでコードの見やすさ重視で下のような考えに変えました。

1. 「1 - 初日の曜日番号」した数値を保持
   (曜日番号が0(日曜日)から6(土曜日)の言語。
    曜日番号が1(日曜日)から7(土曜日)なら 「2 - 初日の曜日番号」)
2. 6行×7列表示している間
  2-1. 1.の数値が1から末日の間であればマスの中に1.の数値を表示。違えば空白を表示
  2-2. 1.の数値を1増やす

JSPのタグファイルで書くとこんな感じです。

2011-11-12

i.softbank.jpのメール設定(iPhone 3GS→4S)

iPhone 3GSから4Sに機種変更した端末でi.softbank.jpのメールのパスワードが分からなくて移行ができなかったので157に電話したんですが、とても丁寧に手順を教えてもらえました。パスワードの再設定をするんだと思っていたんですが「一括設定」というものでメールアカウントの設定が簡単にできるそうです。

手順はソフトバンクのページにも載っていました。iPhone 4S / 4:Eメール(i) | ソフトバンクモバイルのページ内のiPhone一括設定マニュアル(PDF)がそれです。

Wi-Fi接続中だと一括設定に途中から繋がらないので、設定でWi-Fiをオフにして、3G回線で進めてください。

2011-10-23

C#: Bloggerに新しいエントリを投稿する例


結果

C#はプログラムが書きやすくて好きです。このサンプルでいうと

  • 拡張メソッド (16, 51行目)
    • すでにあるクラスや組み込み型にメソッドを独自に追加できる(追加したように使える)
  • 型推論 (18行目等) 
    • 特定の条件下で型宣言を「var」にできる
  • Linq (23行目)
    • コレクションの操作が簡単にできる (クエリ式よりメソッド形式のほうが好きです)
  • ラムダ (23行目のWhere()内部)
    • 処理(関数)をリテラルで書ける
  • オブジェクト初期化子 (35行目)
    • オブジェクト生成時にプロパティに値を設定できる
  • 逐語的文字列リテラル (44行目)
    • 文字列リテラルにエスケープや改行を含められる

Test

Test with Blogger API(C#)

2011-07-10

WSH: jQuery 1.6.2を使用する

WSHはJScriptが使えるのでjQueryも使用できないかと思って調べていて、HIRACCHI H.D.さんの「fenrirで気温を確認する」という記事を見つけました。記事中にWSHでのjQueryの動かし方が書かれていたので感謝しつつ現時点で一番新しいjQuery 1.6.2で動かそうとしたんですが、エラーが出て動かなかったので動くように修正してみました。


何故動かなかったのかをコード内にコメントとして残したかったんですが見辛いのでここに書き記します。行数はjQuery 1.6.2のdevelopment (minifyされていないもの)のコードのものです。

1. documentElementの設定
4639行目、Sizzle.uniqueSort()で使用するsortOrderを定義する際のコードの一部が if ( document.documentElement.compareDocumentPosition ) となっていて、document.documentElementがnullだとエラーになるのでダミーHTMLを書き込んでdocument.documentElementを設定します。

2. ActiveXObjectの設定
7786行目、ActiveXObjectがある場合のXMLHttpRequestの作成コードが new window.ActiveXObject( "Microsoft.XMLHTTP" ) となっているので、XMLHttpRequestを生成できるようにwindow.ActiveXObjectには空オブジェクトではなくActiveXObjectを代入します。

3. setTimeout()の定義
939行目、doScrollCheck()の定義中にsetTimeout()が使用されていますがWSHにはsetTimeout()がないためsetTimeoutを定義します。ただし素直にvar setTimeout = window.setTimeout;とすると「書き込みできません」というエラーが出るため関数式でラップします。

4. jQuery.support.corsの修正
7818行目、jQuery.ajaxTransport内のクロスドメインリクエストが出来るかのチェックがif ( !s.crossDomain || jQuery.support.cors ) となっていて、クロスドメイン通信と見なされている状態(※1)でCORS(Cross Orign Resource Sharing)が有効でない(※2)場合jQuery.ajax()が"No Transport"エラーになるため、jQuery.support.corsを手動で有効(true)にします。

※1: location.hrefとjQuery.ajaxで渡されるurlの同一生成元チェックによる(7227行目)
※2: 生成したXMLHttpRequestオブジェクトにXMLHttpRequest level2のwithCredentialsがあるかどうかの判定による(7809行目)

5. セレクタの変更
Googleの構造が変わっているのでセレクタを変更します。

以上です。

jQuery.support.corsのところだけはjQuery.supportが定義されてからでないと修正できないですが、setInterval()等を使ってjQuery.supportが定義された瞬間にcorsをtrueに修正する形にすれば、修正コードを1つのファイルとしてまとめて、jQueryを読み込む前に読み込ませることができるのかなと思います。

2011-04-24

Compass 0.11.beta.7のインストール

beta版のCompassだとCSS3 PIEをサポートしているということだったので試しにbeta版をインストールしてみたんですが、 0.11.beta.7のインストール後にcompassコマンドでエラーが出るようになってしまいました(環境はWindows 7とRuby 1.9.1でした)。

gem install compass --pre
compass create test

結果

C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/compass/sass_exte
nsions/functions/urls.rb:21:in `<module:Urls>': undefined method `declare' for S
ass::Script::Functions:Module (NoMethodError)
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass/sass_extensions/functions/urls.rb:1:in `<top (required)>'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass/sass_extensions/functions.rb:9:in `block in <top (required)>'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass/sass_extensions/functions.rb:5:in `each'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass/sass_extensions/functions.rb:5:in `<top (required)>'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass/sass_extensions.rb:4:in `<top (required)>'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass.rb:5:in `block in <top (required)>'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass.rb:4:in `each'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/lib/comp
ass.rb:4:in `<top (required)>'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:3
6:in `require'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/bin/comp
ass:20:in `block in <top (required)>'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/bin/comp
ass:8:in `fallback_load_path'
        from C:/rumix/ruby/lib/ruby/gems/1.9.1/gems/compass-0.11.beta.7/bin/comp
ass:19:in `<top (required)>'
        from C:/rumix/ruby/bin/compass:19:in `load'
        from C:/rumix/ruby/bin/compass:19:in `<main>'

試しに「Sass::Script::Functions compass」で調べると https://github.com/chriseppstein/compass/issues/310 に同じ症状になった方がいたみたいで、「haml-3.1.0.alpha.147を入れたら動いた」ような(? 原文はIt installed haml-3.1.0.alpha.147, and now the install at least runs ok.で、Railsのアプリケーションを生成しようとしたときにエラーになっていたみたいです)コメントがありました。

手元の環境ではSassのサイトにあるとおりにgem install haml していただけで安定版の3.0.25しか入っていなかったので、gem install haml --pre して3.1.0.alpha.147をインストールしてからcompassコマンドを使ったところエラーがなくなりました。

gem install haml --pre
compass create test
cd test

この状態だと compass install compass/pie でCSS3 PIEのインストールも問題なくできます。

2011-03-20

Google Apps Script: 簡単な問い合わせフォームをつくる

Google Apps Scriptが普通のGoogleアカウントでも使えることを知ったので、試しに問い合わせフォームをつくってみました。

フォームで氏名、メールアドレス、件名、本文を入力してもらい、お問い合わせが送信されると指定したアドレスに問い合わせメールが届くという簡単なものです(メール自体はスプレッドシートの「通知」 > 「ユーザーがフォームを送信したとき」にチェック で届きますが、「フォームが送信されました」というメッセージだけで内容は含まれていないので内容を含めるためにGoogle Apps Scriptを使いました)。

作成する手順は下記です。

  1. フォームを作成する
    1. Googleドキュメントの「新規作成」 > 「フォーム」でフォームの編集画面を開く
    2. 「氏名」「メールアドレス」「件名」をテキスト形式で、「本文」を段落テキスト形式で作成
    3. 必要なら「その他の操作」 > 「確認を編集」でフォーム送信後のメッセージを入力
    4. フォームを保存して閉じる

  2. スクリプトを適用する
    1. 保存したフォームをスプレッドシートで開いて「ツール」 > 「スクリプト」 > 「スクリプトエディタ」からスクリプトエディタを開く
    2. スクリプト(後述)を記入して「トリガー」 > 「Current script's triggers...」を選択
    3. 保存していない場合保存ダイアログが出てくるので適当に名前をつけて保存
    4. 「No triggers set up. Click here to add one now.」となっているリンクテキストをクリック
    5. 「Run」で実行したい関数名(後述のスクリプトでは「OnFormSubmit」)、「Events」で「From spreadsheet」と「On form submit」を選択して保存

スクリプトは下記です。

これで作成したフォームからデータが送信されると指定したアドレスに内容メールが届くようになります。

ただ1つ問題があって、データの適切な検証エラーメッセージを出す方法がわからないのでメールアドレスの検証ができていません。メールアドレスの検証と拒否は

  1. スプレッドシートでメールアドレスの列をすべて選択
  2. 「ツール」 > 「データの検証」で「条件」を「テキスト」「有効なメール」にする
  3. 「無効なデータも入力を許可するが、警告を表示する」のチェックを外す

ことで行うことができますが、これで問い合わせを拒否したときに表示されるメッセージは「エラーが発生しました。このエラーはスプレッドシート チームに通知されています。Google が解決に取り組みます。」というメールアドレスが間違っているとは到底考えられないものになります。

Google Apps Script自体はcronのようなスケジューラ機能があったりいろいろなことができそうなので、時間があったらまた調べてみます。

2011-02-09

PEAR::HTTP_OAuthとLimonadeではてなOAuth認証

Consumer key を取得して OAuth 開発をはじめよう - Hatena Developer Center にPHPのサンプルコードが載っていなかったので、PEAR::HTTP_OAuth(0.2.2-alpha)とLimonade(0.5.1)を使ってサンプルコードを書いてみました。

下のコードを保存して (index.php)、YOUR_CONSUMER_KEY, YOUR_CONSUMER_SECRET となっている部分を自分の consumer_key, consumer_secret で置き換える…と動くと思いますが、ラムダ関数を使っているのでバージョン5.3以上でないと動きません。

コードはなるべくRubyのものに合わせてあります。

最初 {app_root_url}/oauth_callback という形でCallback URLを指定していたらoauth_verifierが$_GETから取得できなかったので、Callback URLを {app_root_url}/?u=oauth_callback のようにしています(/oauth_callbackの箇所も実際はurlとしてクエリで渡っているので、 /?/oauth_callback?oauth_verifier=... のようにクエリが二重になるようです)。

あとPHPは__END__はない(と思います)のでインラインテンプレートが変な書き方になっています…。

2011-01-22

Zen Coding for Notepad++(0.6.1): 標準の言語以外の設定を登録する(JavaScript, PHP)

標準ではHTML, CSS, XML, XSL, HAMLしかスニペット等を設定できませんが、JavaScriptとPHPの設定も入れてみたかったので方法を調べていました。

Zen Coding.jsを見てみると3955行目にknow_syntaxesという変数があったので、それにJavaScriptとPHPを追加したらそれぞれの設定ができるようになりました。

 var know_syntaxes = {
  'html': 1,
  'css': 1,
  'xml': 1,
  'xml': 1,
  'haml': 1,
  'js': 1, // JavaScript
  'php': 1 // PHP
 };

確認のため、Zen Coding.jsのzen_settings内か、my_zen_settings内にJavaScriptとPHPの設定をしてみます。下記の例ではmy_zen_settings内にJavaScriptとPHPの設定をしています(my_zen_settingsについてはZen Coding for Notepad++(0.6.1): Zen Codingの自分用コードを別ファイルに書く を参照して下さい)。

/* var */ my_zen_settings = {

/* ... 略 ... */

  'js': {
    'snippets': {
      'fn': 'function(){|}'
    }
  },
  'php': {
    'snippets': {
      'echo': '<?php echo | ?>'
    }
  }
};

Notepad++を再起動し、成功していれば.jsファイル内ではjsの設定で、.phpファイル内ではphpの設定で展開ができるはずです。

追記: ただ、上記例のようなHTML内でも使うスニペットなどはHTMLの設定に入れたほうがいいかも知れません。

Zen Coding for Notepad++(0.6.1): NppScriptingでincludeされるjsファイル内の日本語が文字化けするのを回避する

Notepad++でZen-Codingの自分用のコードが書けるようにできたのでいろいろコードを付け加えてみたんですが、日本語を入れたら一部の文字が化けてしまったので回避方法を考えました。

A. NppScriptingのstart.jsのinclude()を修正する

文字が化ける原因を調べたところ、jsファイルを読み込んでいるstart.jsのinclude()にはUTF-8でファイルを保存するようコメントがあるんですが、

  1. ファイルをASCIIで読み込む ( fso.OpenTextFile(file,1, false,0) )
  2. 読み込んだデータをUTF-8(コードページ65001)でデコードする ( var scr = Editor.decodeFrom(65001,f.ReadAll()) )
  3. ファイルの内容を実行 ( eval(scr) )

というようにファイルを読み込んでいて、UTF-8でデコードするところでデコードに微妙に失敗していました。

そのため、ファイルを読み込む方法をUTF-8で直に読み込むように修正します。つまりstart.jsの

var fso = new ActiveXObject("Scripting.FileSystemObject");
function include(file){
 if (fso.FileExists(file)){
  var f = fso.OpenTextFile(file,1, false,0);
  var scr = Editor.decodeFrom(65001,f.ReadAll());
  if (scr && scr.length>0){

を、

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = new ActiveXObject("ADODB.Stream");
f.Charset = "UTF-8";
function include(file){
 if (fso.FileExists(file)){
//  var f = fso.OpenTextFile(file,1, false,0);
//  var scr = Editor.decodeFrom(65001,f.ReadAll());
  f.Open();
  f.LoadFromFile(file);
  var scr = f.ReadText();
  if (scr && scr.length>0){

に修正します。

B. ファイル内の日本語をUnicodeエスケープする

日本語を直に使わずにUnicodeエスケープ(例: 「あいう」→「\u3042\u3044\u3046」)して保存しても文字化けがなくなります。楽にUnicodeエスケープ/アンエスケープできるように、ファイル内の日本語(というかASCII文字以外の文字)をUnicodeエスケープするスクリプトを作りました。

上記スクリプトをunicode_escape.jsなどと名前をつけて保存して、includesフォルダ(おそらく C:\Program Files\Notepad++\plugins\NppScripting\includes )に置くと下記のことができるようになります(Notepad++の標準機能でUnicodeエスケープ/アンエスケープできるか調べたんですがわからなかったので、取りあえずのものです)。

  • メニューバーに「my」という項目が追加され、Unicodeエスケープとアンエスケープの項目が置かれる
  • Ctrl+Uでファイル内のASCII文字以外の文字のUnicodeエスケープを行う
  • Ctrl+Shift+UでUnicodeエスケープのアンエスケープを行う

2011-01-18

Zen Coding for Notepad++(0.6.1): Zen Codingの自分用コードを別ファイルに書く

Notepad++(5.8.6)でZen Codingの自分用のコードを本体のZen Coding.jsに書きたくなかったので別ファイルに書く方法を探したところ、Zen Coding.jsを少し修正したら上手くいったようなので手順を書き残しておきます。

1. Zen Coding.jsのコードを一部変更する

変更するのはZen Coding.jsの2254行目です。

if ('my_zen_settings' in this) {

if ('my_zen_settings' in this || typeof my_zen_settings !== 'undefined') {

に変更します。これによって、どこかにmy_zen_settings変数があればmy_zen_settingsを含めた設定が使われるようになります。

上記変更は2251行目に倣って
if ('my_zen_settings' in this || my_zen_settings) {

でもよいですが、これだとmy_zen_settings変数がどこにもないときにはNotepad++起動時にエラーになるようになるので注意して下さい。

2. my_zen_settings.jsファイルを作成する

Zen Coding.jsを入れたところと同じところ(おそらくデフォルトの状態なら「C:\Program Files\Notepad++\plugins\NppScripting\includes」)にmy_zen_settings.jsファイルを作成します。

ファイル名は「my_zen_settings.js」でなくてもよいですが、includeの順番がZen Coding.jsより前でないとZen Coding.jsがmy_zen_settings変数を認識できないのでファイル名がZen Coding.jsの前になるようにする必要はあります。

3. my_zen_settings.jsファイルに設定を書く

Zen Coding.js冒頭にあるzen_settingsと同じ構造で、自分用のコードを書いていきます。ただmy_zen_settings変数はグローバル変数にしないとZen Coding.js側に認識してもらえないので、varを付けずに変数宣言を行います。下のような感じで書いていきます。

/*var */ my_zen_settings = {
 'html': {
  'snippets': {
   'test': '<strong>test!</strong>'
  }
 }
};

EC studio デザインブログさんの Zen-Codingでさらにコーディングを1.5倍くらい速くするためのカスタマイズ方法 に、Aptanaでの設定方法と併せてmy_zen_settingsの例がありますのでそちらが参考になります。

4. Notepad++を再起動する

一旦Notepad++を終了して、再度立ち上げてみて下さい。成功していればmy_zen_settingsに書いたコードをCtrl+Eで展開するなどできます。

以上です。my_zen_settingsをグローバル変数にしないといけないのが少し引っかかりますが、何か問題が起きたらまた追記します。