php-mode contributerのLennart Borgmanからメールが来た!

昨日久しぶりにメールを確認したところ、Lennart Borgmanからメールが来ていた。
全然知らない人だと思っていたのだけど、内容見て php-mode.el の中を見てみたら、どうやらメンテナ?の人らしい。
内容を解釈すると、どうやら僕が以前書いたEmacsのphp-modeでインデントが妙な事になる件 - kengpongをどこからか聞きつけた模様。
僕は致命的なまでに英語がパッパラパーなため、一応メールを返信したが意味不明になっている可能性もありえるので、ここにやりとりを晒してみる事にする。ちなみに先方の許可は取ってないけど、まぁこれぐらいなら大丈夫かな!


まず来たメール

Indentation problems with PHP in Emacs

Hi

I saw you had some problems with indentation of PHP code in Emacs. Are you using nXhtml? If you are could you please send me an example so I can try to fix the problems?

Kind regards,
Lennart

で、返信したメール

Hi

I am using php-mode by the standards of Carbon Emacs.
(http://homepage.mac.com/zenitani/emacs-e.html)
The problem occurs in such a case.
===============================================

僕の伝えたい事はEmacsのphp-modeでインデントが妙な事になる件 - kengpongにある通り。


ここで重要なのは、僕の意図がしっかり伝わっているかとかそういう部分。
僕より英語が得意な大多数のみなさんは、ここがおかしい、これはねーよとか、思う事があればコメントください!

PHP配列での添字指定方法

<?php
$array = array();
$array[] = 1;
echo $array[0]; //=> 1
echo $array{0}; //=> 1

僕は今日まで後者の書き方が出来る事をさっぱり知らなかったのだけど、こういう書き方って普通知ってるもの?
http://d.hatena.ne.jp/gegegen/20080524/1211622711に出てるコードで後者の書き方をしているところがあって、これ動くのか?と実行してみたらバッチリ動いたのでとても驚いているところです。

<?php
$array = array();
$array{} = 1; //=> syntax error

とかやると syntax error になるので、[]と{}は同一のものという訳では無さそうだ。


マニュアルの配列周辺をざっと見る限りだと、後者の書き方に言及しているところが見つからなかったので、
どこに載ってるよ!とか、こういう歴史的経緯だよ!とかご存知の方がいれば教えてください!

yasnippetを使ってみた(php-modeアルヨ!)

yasnippetの便利さについては yasnippetがすごい!!!!1112345! - Kentaro Kuribayashi's blog
yasnippet + php話題のyasnippetのphp-modeをインストールしてみた - 大阪で働くソーシャルゲームエンジニア ダイアリー


で、上記を参考にして使ってみたんだけど、これすっごく便利。
snippetを展開するキーバインドをタブからスペースにする*1と、特別な動きを意識する事なく展開してくれるのでかなりlife changingな感じなのです。
スペースに変更すると慣れるまでは急に展開されてビックリな部分もありますが、すぐに慣れると思うよ!


んで、自分用にphp-modeのsnippetを改変したり追加したりしたので、ちょっと紹介するよ!*2


function

#contributor : Andrew Gwozdziewycz <web@apgwoz.com>
#name : function ...(...)
# --
function ${function_name}(${args}) {
    $0
}

これは引数が入るところがfunction_argsだったのをargsに変えただけ。
でもfunction_argsだと引数空にするのにM-dを2回押さなきゃいけないけど、これだと一回で済んで嬉しいです。
vimのdi(みたいなことが出来ればいいのだけど、そういう方法が見つからなかったので。


function.public

#contributor : kengpong <kengpong2@gmail.com>
#name : public function ...(...)
# --
public function ${function_name}(${args}) {
    $0
}

めんどくさいから貼らないけど、上と同じ様にprotected,privateも作ったよ!
これは普通のfunctionで補完した場合

<?php
Public function function_name(args) {
           
       }

こんな感じになっちゃうのの対策で書きました。
ほんとはpublic functionまで書いて補完した時に絞り込めれば良いのだけど、ちょっと試した感じだと上手い事できなかった。
人のsnippets読んだりとかしてないから、このへんどうやって対応してるのか分からないなぁ。


という事で、基本的には便利です。snippetsも書いてある奴を見て「こんな感じ?」でいじくれば簡単な事ならすぐに試せるので、ばしばしいじってやろうかと思う。

追記

よく考えたら

public static function hoge() {
}

みたいな状況も考えられるし、それらを入れるとfunctionでの補完が7つぐらいになっちゃって微妙にめんどいかも知れないので、このアプローチは正しくないかなと思い始めました。

さらに追記

スペースで展開はやめる事にした。すぐ慣れるとか嘘ついてごめんね。
もうちょっとyasnippetelispのおべんきょするるよ!

*1:yasnippetのトリガをスペースキーにする - Kentaro Kuribayashi's blog

*2:改変したもののcontributorとかいじっていいのかわからんのでそのままだけど、まずかったら教えてください!

EmacsでPHP書く時(php-mode)に感じる不満点まとめ

不満点をあげていく事によってEmacs使いの方々からツッコミが入る事を期待しています。
解消したら随時アップデートする!

  • 不満点
    • 標準関数に色がつかない
    • var_dump(1)とかするとvarだけ色がついたりする
    • htmlと混ざるとえらいことになるらしい*1(mmm-modeで一生懸命設定するの?)
    • php-mode時にecho "<br />";とか書いて改行すると「html書かれてるみたいだから、mmm-modeでphp-modeとhtml-modeを設定して使えよ!じゃないと大変な事になるぞ!y/n」みたいな*2質問にNoと答えても改行するたび毎回聞かれる。
    • 特殊な書き方でもないのにインデントがえらい崩れたりする => Emacsのphp-modeでインデントが妙な事になる件


とりあえずざっとあげるとこんなもんかな。
php-mode時にhtmlタグ見つけるとしつこく質問してくる問題は、どう対処するのが良いのかサッパリわからんかったので、php-mode.elを直接触ってhtmlタグがあるか探している正規表現っぽい奴の所に、通常ありえない適当な文字を入れてだまくらかしてる。
ツッコミ期待とか書いてるけど、問題は自己解決が基本だから、リストアップしたことだしぐぐりまくちゃ!

*1:まだあんまり混ざったコードは触ってません

*2:英語読めないのですごい適当です

Emacsのphp-modeでインデントが妙な事になる件

タイトルの通り*1で、なんか僕の環境だと、インデントが数十個みたいな意味分からん事になる。
僕は良く

<?php
require_once dirname(__FILE__) . '/../hoge.php';
require_once dirname(__FILE__) . '/../huga.php';

みたいなコードを書くのだけど、こういうコードを書くとその後からのインデントがすごい事*2になる。

どうも__FILE__がいけないらしく

<?php
$self_file = __FILE__;
require_once dirname($self_file) . '/../hoge.php';
require_once dirname($self_file) . '/../huga.php';

とか書けば大丈夫なんだけど、そういう対策はありえないですよね。


環境の晒し方とかの作法がわからんのですが

M-x emacs-version
GNU Emacs 22.2.1 (i386-apple-darwin8.11.1, Carbon Version 1.6.0) of 2008-04-02 on seijiz.local

M-x php-mode-version
PHP mode 1.4.1-nxhtml of nil

という感じになっております。


ならないよ!とか、こう直したよ!みたいなお話があれば、じゃんじゃんお寄せ下さい!

*1:はてぶにブクマされると(*タイトル)がタイトルとして出ないようだけどそういうもの?見出しとタイトルは別?

*2:数十スペース

redmine install memo

http://redmine.jp/tech_note/install/の通りにやれば大体出来ます。
1点ちょっとはまったのがDBの初期化処理で

# rake db:migrate RAILS_ENV=production
no such file to load -- iconv

という感じでストップしてしまった事。
FreeBSDportsからRubyを入れた人は converters/ruby-iconv をインストールする必要があります。


と、進めていき現在トップページの動作確認完了。
今は3000番で動いているので、これからApacheとの連携とやらを進めるー。