アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

Mac OS X おすすめキーバインド

こんにちは。MacBookAirで仕事している坂本です。

自分はショートカットキーが大好きです。
ただアプリによってはショートカットキーが動かずイライラすることがあります。
今回はそんなようなことがないようにアプリを使ったオススメのキーバインドを紹介しようと思います。。

まずキー割り当てを変更するアプリにはKeyRemap4MacBookを使用します。


KeyRemap4MacBook


https://pqrs.org/macosx/keyremap4macbook/

こちらからお使いのOSXバージョンに合ったインストーラーをダウンロードしてインストールしてください。
LaunchpadまたはアプリケーションディレクトリにKeyRemap4MacBookというアプリが出てくるのでダブルクリックで起動させましょう。

するとChange Keyというタブで利用できるキーバインドの一覧が表示されます。
この中から使いたいキーバインドにチェックすれば良いというわけです。


ホームポジションのままフロントスペースを!!


まずはフロントスペースです。
フロントスペースはバックスペースが前の文字を消すことに対して後ろの文字を消すためのキーです。
WindowsではBSキーがBackSpaceでDeleteキーがフロントスペースですね。

Macのデフォルトでもcontrol+Dでカーソルの後ろの文字を削除することができますが一部の対応していないMicrosoft Wordなどで動きません。
そこでFn+deleteではなくcontrol+deleteにキーを割り当てることでタイムロスを防ぐことにします。



▼ Change Delete Key
  □ Control + Delete to Forward Delete


になります。
これで文字を削除する時は右手の小指は迷わずにdeleteへ向かうことができ前の文字を消すか次の文字を消すかはcontrolキーでコントロールできるわけです。

非常に便利です。


ホームポジションのままカーソル移動!!


次にカーソルキーです。

カーソルを動かすため頻繁に使うキーなのですがどうやっても右手がホームポジションから離れてしまいます。
ホームポジションへ右手を戻す時に人差し指でJキーの凹凸を探す手間が増えます。
そこでcontrolキーと合わせてカーソルを移動させるキーバインドを設定しましょう。

私はサーバでファイルを編集する時はViコマンドを使っているのでViの設定をキーバインドに持ち込みます。

KeyRemap4MacBookキーバインド一覧に



▼ Vi Mode
  □ Control_L + hjkl to Left/Down/Up/Right


にチェックを入れましょう。
するとViの操作と一緒にhキーを押すと左へ、jキーを押すと下へとカーソルが動くようになります。

Emacs派の方は



▼ Emacs Mode
  □ Control + PNBF to Up/Down/Left/Right

があるのでこちらを使ってください。
最初は違和感がありますが、慣れてくるとプログラミングでもメールでも驚くほど早くなります。


キーリピート速度アップ!!


最後にキーを押しっぱなしにした時のキーリピート速度を早めたいと思います。
これもKeyRemap4MacBookで変更することができます。

Key Repeatタブ内の



▼ Basic Configurations
 ▼ Key Repeat
   Key Repeat


こちらのvalue値を小さくすることでキーリピート速度が早くなります。
おすすめは23msくらいでしょうか。

以上の3つだけですが自分はこれだけでかなり業務を効率化できています。
デメリットとしてはViを開いた時にカーソル移動でちょっと混乱する程度でしょうか。

キーバインド方法は人それぞれです。
Controlキーにバックスペースを割り当ててcapsキーにControlキーを割り当てる人もいます。

KeyRemap4MacBookを使ってどんどん使いやすい環境を整えましょう。

TextMateで全角スペースと半角スペースの区別ができるようにする

こんにちは。先日、我慢しきれずに、MacBookを購入してしまった橋本です。
開発環境がMacになったということで、最近はTextMateを使って開発をしているのですが、
TextMateを使ってコーディングをしていると、ぱっと見問題なさそうなコードなのにバグが出て、調べてみると全角スペースが隠れていたということがよくあります。
TextMateは元々マルチバイト文字に対応していないため、日本語を無理やりまともな形で表示させると、全角スペースと半角スペースが等幅で表示されてしまい、一見半角なのか全角なのか判断がつきません。
そこで、今回はTextMateで全角スペースと半角スペースを見分けるために、全角スペースをハイライト表示するという設定を紹介します。

設定は以下の手順で行います。
(今回はHTMLファイルで表示させるための設定を例にすすめます。)
1.TextMateのメニューから、「Bundles」の中の「Bundle Editor」の中の「Edit Languages」を選択。

2.左のメニューでHTMLを選択。


3.以下の場所に次のコードを挿入


whitespace-multi = {
	patterns = (
		{	name = 'invalid.whitespace-multi';
			match = '( )';
		},
	);
};




4.以下の場所に次のコードを挿入


{ include = '#whitespace-multi'; },



↓ここに挿入することで、PHPタグ内でもハイライト表示がされるようになります。



5.TextMateのメニューから「Preferences」の「Fonts & Colors」を選択。
6.「+」アイコンをクリックしてElementを追加し、以下のとおり設定する。
Element名: whitespace-multi(ここは他の名前でも大丈夫です)
Scope Selecter: invalid.whitespace-multi(ここはこのとおり入力してください)
背景色(BG): 目立つ色(ここも自由です)



設定は以上です。
上記の設定を行うと、全角スペースが以下のように表示されます。


これで、全角スペースが入っている場合にはハイライト表示されるため、全角スペースの消し忘れに悩まされることもなくなります。

TextMate愛好家の皆様、TextMate2.0が出るまでは上記の方法でなんとか乗り切りましょう!

サクラエディタでFlashをコンパイル

こんにちは、中川です。
最近、暇を見つけては、ちょこちょこFlash(ActionScript)をいじっています。

普段は、FlashDevelop(beta5がでましたね^^)を使って書いているのですが、ちょっとしたスクリプトを書いてみるときには、いちいちFlashDevelopを起動しなくて、サクラエディタを使うほうが楽だったりします。しかし、サクラエディタで書いた場合、コンパイルするためにcmdを起動してコンパイルという作業が非常に面倒くさいわけです。

rascutを使ってやる方法は確かに便利ですが、先日書いたようにサクラエディターの私としてはなんとかサクラエディタだけでやってみたいものです。

そこで、サクラエディタから一発で、Flashコンパイルできる方法を考えてみました。
(flexSDK2やfcshについては【Flexはじめました。 : アシアルブログ】を見てみてください。)


まず、サクラエディタでは、マクロをJScriptVBScriptでかけますので、これを利用します。
mxmlcだけを使った簡単なものは、以下のようになります。

[mxmlc.js]


var shell = new ActiveXObject("WScript.Shell").Run("cmd.exe /k mxmlc " + '"' + GetFilename + '"');

(cmd.exeに「mxmlc filename」を引数で渡しているだけです。)

これをマクロに登録すれば、とりあえずコンパイルはできるのですが、生のmxmlcでは遅くてやってられません。

で、fcshを使ってコンパイルする方法を検討してみたいと思います。
最終的には、課題がいろいろと残りましたが、なんとか動いています。

では、マクロからのfcshを使ったコンパイルの流れとしては、


fcshシェルが起動されているか確認。ない場合cmd.exeを起動しfcshを起動。
fcshシェル内でmxmlc
コマンドプロンプトのプロセスIDを記憶。

こんな感じです。


fcshでは、2回目以降のコンパイルは最初に起動したシェルにコマンドを渡したいので、最初のcmdのプロセスIDが必要です。さっきみたいに、コマンドプロンプトを起動すると、 WScript.Shell の Run ではcmdのプロセスIDがとれませんでした。
で、WScript.Shell のExecを使ってcmdを起動しても、一瞬で窓が閉じてしまいます。

そこで、【WMI による Windows の管理 [WMI からメモ帳を起動する]】を参考に
プロセスIDを取れるように起動するには以下のようにしました。



function CreateProcess(title, msg, defaultValue) {
	var oSC = new ActiveXObject("ScriptControl");
	oSC.Language = "VBScript";
	var sFunc = 'Function ProcessCreate() \n';
	sFunc 	 += '    Set Process = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Process") \n';
	sFunc    += '    Process.Create "cmd.exe",Null,Null,pid \n';
	sFunc    += '    ProcessCreate = pid \n';
	sFunc    += 'End Function \n';
	oSC.AddCode(sFunc);
	var Ret = oSC.Run("ProcessCreate");
	return Ret; 
}


cmd.exeの起動は、VBScriptでやっています。JScriptでもできるかもしれませんが、分りませんでした。そこでJScript内で、VBを使うために、「ScriptControl」を使用します。
(詳しくは【サクラエディタマクロ - ScriptControlの使用】を参照。)

これで、起動したcmdのプロセスIDが取得できました。

あとは、


var WshShell = new ActiveXObject("Wscript.Shell");
var res = WshShell.AppActivate(pid);

で、アクティブにして、コマンドを送ればOKです。

が、しかし、「WshShell.SendKeys(str);」では、日本語(パスの「デスクトップ」など)が送れません。
方法をいろいろ調べてみたのですが、単独のファイルでは、無理かもしれません・・・。
別途外部ファイルを使えば、【WSH の SendKeys で日本語を入力する】できる方法もあるようです。)
とりあえず、今回はパスに日本語が含まれないということ前提でいきましょう。

これで、運がよければ動くのですが、
コマンドプロンプト起動後のコマンド実行がアクティブにする前に実行されてしまう場合があります。
そのため、起動後のコマンドは遅延させたいのですが、「WScript.Sleep」は、「wscript.exe」 か 「cscript.exe」がホストの場合にしか使えないみたいです。
そこで、今回はしょうがなく、whileでAppActivateの戻り値を監視するという危険な感じになっています。
(別に考えたのでは、for文をブン回しておくとか。。。。)



while(WshShell.AppActivate(pid) == 0) {
	//こんな危険な・・・。
}


これで、遅延(起動アクティブ後の実行)もOKとなりました。

最後にPIDの保持ですが、マクロではさすがに値の保持は無理っぽいので、ファイルに書き出す方法をとっています。
「filename.pid」にpidを保存し、2回目以降のマクロ実行では、「filename.pid」からpidを取得しています。
この方法だと、「filename.pid」ファイルが最終的にはゴミとして残ってしまうので、あまりいい方法とは言えませんね。。。

とりあえず、こんな感じで、fcshを使ったコンパイルのマクロは動作しました。
これで、サクラエディタからも、flashの作成がちょっとは簡単になったような気がします。

※動作確認は、WindowsXP SP2 (FlexSDK2)環境でしか行っておりません。
 VBJScriptはほとんど触ったことないので、変なことしている可能性が多々あります。
 このマクロを使用する場合は自己責任でお願いいたしますm(_ _)m


■[fcsh.js]ソース
>>JS
var FLEX_HOME = 'C:\\usr\\flex_sdk_2'; // FLEXディレクトリを設定してね。
var FCSH_PATH = FLEX_HOME + '\\lib\\fcsh.jar';

/**
* local functions
*/
function delayedSendKeys(str) {
//WScript.Sleep(100);
//sleep(100000);
WshShell.SendKeys(str);
}
/*
function sleep(count) {
WScript.Sleep();
for(var i = 0; i < count; i++) {
//遅延させたいだけなのにーー(><)
}
}
*/

function CreateProcess(title, msg, defaultValue) {
var oSC = new ActiveXObject("ScriptControl");
oSC.Language = "VBScript";
var sFunc = 'Function ProcessCreate() \n';
sFunc += ' Set Process = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Process") \n';
sFunc += ' Process.Create "cmd.exe",Null,Null,pid \n';
sFunc += ' ProcessCreate = pid \n';
sFunc += 'End Function \n';
oSC.AddCode(sFunc);
var Ret = oSC.Run("ProcessCreate");
return Ret;
}

function writePid(file, pid) {
var fso, f, r
var ForReading = 1, ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject")
f = fso.OpenTextFile(file, ForWriting, true)
f.Write(pid);
f.Close();
f = fso.OpenTextFile(file, ForReading);
r = f.ReadLine();
return(r);
}

function readPid(file) {
var fso, f, r;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject")
if (fso.FileExists(file)) {
f = fso.OpenTextFile(file, ForReading);
r = f.ReadLine();
} else {
r = false;
}
return(r);
}


/**
* ここから実行
*/
var fileName = GetFilename;
var pidFileName = fileName + ".pid";
var _pid = readPid(pidFileName);

var WshShell = new ActiveXObject("Wscript.Shell");
var res = WshShell.AppActivate(_pid);
if (res == 0) {
var pid = CreateProcess();
var isInit = true;
} else {
var pid = _pid;
var isInit = false;
}

//sleep(10000);
//var res = WshShell.AppActivate(pid);
while(WshShell.AppActivate(pid) == 0) {
//こんな危険な・・・。
}

if (isInit) {
//delayedSendKeys('cd "' + WshShell.CurrentDirectory + '"~');
delayedSendKeys("java -Dapplication.home=" + FLEX_HOME + " -jar " + FCSH_PATH + "~");
}
delayedSendKeys("mxmlc " + fileName + "~");

var res = writePid(pidFileName, pid);

PHPにおすすめのエディタ(個人的に)

こんにちは、中川です。
アシアルPHPスクールで講師をしたりしていますが、その際に、よく生徒から受ける質問のひとつに

PHPにおすすめのエディタを教えてください。」



というものがあります。
ここで、私、一個人としては、フリーのPHPのエディタなら、迷わず【サクラエディタ】と答えたいところですが、ほかのエディタをじっくりとは使用したことがないので、返答が難しいところです。

授業中は、アシアルでも使っている人が多い、【秀丸】(有料ですが)、viやemacs(初心者向けでは無いと思いますが。)、【PHPエディタ】(アシアルでは使ってる人いませんが、PHP入門にはいいかなと)。
あとは、統合開発環境(IDE)ですが、【eclipse】(参考:Eclipseを使う : アシアルブログ)、【Vs.Php】(宣伝。。。アシアルでも使ってる人いるし。)あたりを挙げています。


と、まあ、比較できるほど使っていないのと、使う人の好みも様々なので、授業では「サクラエディタ」をゴリ押しするのも厳しいわけですね。しかし、生徒の中には、このブログを見てくれている人もいると思いますので、サクラエディタがいかにPHPエディタとして便利かを伝えられたらと思います。
※開発サーバでsamba上で開発している場合。samba無理なときは、viでやってますが。。。

1.シンタックスPHP関数)ハイライト
エディタとして、シンタックスハイライト(コードの色付け)がないとはじまりません。この機能は、どのエディタにも大抵あります。初心者に限らずPHPになれた方でも、しょうもないtypoでエラーをだしたりしますよね。
サクラエディタでは、PHPの色設定ファイルがすでにありますが、設定ファイルの作成も非常に簡単です。
関数名を改行で区切ったテキストファイルを作ればいいだけなので、PHPで、以下のように簡単に作れます。



<?php
//(※使っているPHPエクステンションにより、使える関数が変化します)
$func_list = get_defined_functions();
sort($func_list["internal"]);
echo implode("\n", $func_list["internal"]);
?>


あとは、PHPをやる場合は、必ずひつようになってくるHTMLと、JavaScript用の設定ファイルが、たしか同梱されていたと思いますので設定しておきます。(同梱されてなくても、Web探せばすぐ見つかると思います。)

2.コード補完
これも、どのエディタにも大抵あります。単語等を最初数文字入力してCtl+Spaceなどで残りの文字を補完して出してくれる機能です。
さらに、PHPの関数も補完対象に設定ですが、これもサクラエディタの場合、さっきのスクリプトで使ったファイルを設定してしまえばOKです。


3.キーヘルプ(単語説明)
あまり使わない関数になると、スペルや引数、戻り値で迷うことがありますね。いちいち、phpマニュアルを
見に行かなくても、単語を選択すると、ポップアップで簡単な説明を表示できます。私は【ココ】で公開されているものを使わせていただいています。



足りないものもありますが、そこはマニュアルで。
※バージョンによって引数等が変わる関数があるので、注意が必要です。

4.ctagsで関数や定数の定義位置にジャンプ
実際の開発では、フレームワークやライブラリ、共通ファイル等々、
ひとつのファイルに収まらず、いろいろなファイルを読み込んで動くのが当たり前です。他人が書いた実行ファイルを見ても、「この関数は何だよ?」なんてことが、よくあります。
そこで、ctagsを使って、一気に関数と定数のタグファイルを作ってしまいます。
サクラエディタでも、このタグファイルを使って定義位置にジャンプすることができます。
ただ、【ココ】にあるものでは、ネットワーク越しのタグファイルが作成できなかったので(私のやり方がまずかったのかもしれません)、以下のctagsのコマンドで作っています。



ctags -a -R --langmap=PHP:.php.inc --php-types=c+f -n		//定数なし
ctags -a -R --langmap=PHP:.php.inc --php-types=c+f+d -n		//定数含む


これを、プロジェクトのトップディレクトリで実行すれば、作成できます。


5.マクロ
どうしても、似たような作業がつきものですので、そういったものはマクロを作ってしまいましょう。
サクラエディタでは、JScriptを使ってマクロがつくれますので、JavaScriptを使ったことがある人には非常にありがたいですね。

私が、使っているものを何個か。
【直前の閉じていない HTML/XML タグを閉じる】

・HTMLコメント/アンエスケープ/エスケープ



///どこで見つけたか忘れた。。。
// SakuraEditor + JScript macro
// Author: tp+
// Description: HTML comment
function html_comment(){
	var str = Editor.GetSelectedString(0);
	str = "<!-- " + str + " -->";
	Editor.InsText( str );
}
html_comment();
//エスケープ、アンエスケープも文字を置き換える似たようなもの。


・テンプレ作成
【createTemplate.js】
ほぼサンプル作成とかテスト用にしか使ってないので、中身のテンプレは適当。。。

・などなど、ほかにも細かいのいっぱい。


と、ずらずら書いてみましたが、結局、ほかのエディタでもできるような機能ばかりですね。
エディタは最初は悩むかもしれませんが、使っているうちに、それが自分にとって一番になるようなものですから、いろいろ使って自分の気に入ったものを使えばいいと思います。
※ただ、EUC-JPやUTF-8文字コードを扱えるエディタにしましょう。