スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

rc-vstudio.elで、VisualStudioをEmacsの手中に収める

EmacsAdventCalendarJP:2011の30日目です。
29日目はid:poginさんのsmartchrの設定例でした。

なんか初参加でトリになってしまったぽいです。このエントリで、何か引っかかるものがあれば嬉しいです。
タイトルはアオリ気味のタイトルです。


・rc-vstudio.elの紹介
 本日は、EmacsからVisualStudioを操作するrc-vstudio.elを開発致しましたので、プロトタイプ版をご紹介致します。
今回のelispは、id:ohtoriiさんの秀丸エディタからVisualStudioを制御するマクロを使用させていただいております。
Emacsとの連携の使用許可をいただき、ありがとう御座いました。

・こんな人にオススメ
 Windowsで、VisualStudioからEmacsへの移行を試してみたい人に。
コードはEmacsで打ちたい、ビルド設定はVisualStudioで設定したい(しなければいけない)人に。
少しでも、風になりたい人に。

・動作環境
 動作環境は、秀丸エディタからVisualStudioを制御するマクロと同じです。
VisualStudioを使用するので、Windows限定です。
また、僕の場合は、WindowsXP・VisualStudio2005Proで動作を確認してます。


・rc-vstudio.elの使い方

・Emacsの設定
 id:ohtoriiさんの秀丸エディタからVisualStudioを制御するマクロのエントリを辿って、visual_studio_hidemaru.exeをダウンロードして、PATHの通った場所に置きます。

僕のGitHubからrc-vstudio.elをダウンロードして、EmacsのLoadPathの通ったところに置きます。
Emacsの設定で、rc-vstudioをrequireします。

(require 'rc-vstudio)




・実行
 コマンドの流れは、

1.visual studioを起動して、Emacsから操作したいソリューションを開く
2.開いたソリューションで管理されているファイルを開く
3.動作させたいコマンドを実行する(vstudio-pid-を除くコマンド名)

か、

1.visual studioを起動して、Emacsから操作したいソリューションを開く
2.M-x vstudio-select で、操作したいソリューションのファイルパスを選択する
3.動作させたいコマンドを実行する(vstudio-pid-で続くコマンド名)

お好きな方法でどうぞ。


・操作したいソリューションのファイルパスを選択する操作方法
 C-nで次のプロジェクトへ、C-pで前のプロジェクトへ選択を移動します。
RETで操作するプロジェクトを決定します。
正直作りかけですが、何とか動いている感じです。

・動作するコマンド
 コマンドは、以下のものがinteractiveで呼び出せます。

vstudio-activate … VisualStudioのウィンドウをアクティブにする
vstudio-build … VisualStudioのビルドコマンドを実行する
vstudio-build-cancel … VisualStudioのビルドをキャンセルする
vstudio-rebuild … VisualStudioのリビルドコマンドを実行する
vstudio-clean … VisualStudioのクリーンコマンドを実行する
vstudio-debug … VisualStudioのデバッグの開始コマンドを実行する
vstudio-run … VisualStudioのデバッグなしで開始コマンドを実行する
vstudio-stop … VisualStudioのデバッグを停止する
vstudio-compile … 現在開いているファイルで、VisualStudioのコンパイルコマンドを実行する
vstudio-activate-with-openfile … 現在Emacsで開いているファイルを、VisualStudioで開く
string-current-vstudio-output-console … 現在の出力ウィンドウの内容の文字列を取得する
vstudio-select … 操作するVisualStudioを選択する



以下は、vstudio-selectで選択したソリューションに対して実行される。

vstudio-pid-activate … VisualStudioのウィンドウをアクティブにする
vstudio-pid-build … VisualStudioのビルドコマンドを実行する
vstudio-pid-build-cancel … VisualStudioのビルドをキャンセルする
vstudio-pid-rebuild … VisualStudioのリビルドコマンドを実行する
vstudio-pid-clean … VisualStudioのクリーンコマンドを実行する
vstudio-pid-debug … VisualStudioのデバッグの開始コマンドを実行する
vstudio-pid-run … VisualStudioのデバッグなしで開始コマンドを実行する
vstudio-pid-stop … VisualStudioのデバッグを停止する
vstudio-pid-openfile-compile … 現在開いているファイルで、VisualStudioのコンパイルコマンドを実行する



・以下は内部用
vstudio-project-absolute-path-list
vstudio-select-current-pid-count-line
vstudio-select-current-pid-next-line
vstudio-select-current-pid-previous-line

2012/01/07、以下の関数が動作しない問題を修正しました。
vstudio-build
vstudio-stop
vstudio-pid-activate
vstudio-pid-stop
vstudio-pid-openfile-compile


・c++のcompile-commandに設定する
 以下の設定を追加することで、VisualStudioのソリューションにあるcppファイルを開いている時に
C-c cをすると、Emacs上でコンパイルすることができます。

;; visual studioのコンパイルをEmacsに設定する
(require 'compile)
(add-hook 'c++-mode-hook
(lambda ()
(set (make-local-variable 'compile-command)
(vstudio-compile-command))))
)



動作イメージ。
rc-vstudio.elでコンパイル結果


・その他、やっておくといい設定
 VisualStudio.NETとMeadowの連携を参考にして、VisualStudioで開いているファイルをEmacsで開けるようにしておき、
vstudio-activate-with-openfileを何かのキーに割り当てておくと、互いの行き来が楽です。

例:

(global-set-key [M-return] 'vstudio-activate-with-openfile)




 VisualStudioのメニュー->オプション->環境->ドキュメントの、”保存する場合、変更を自動的に読み込む”をチェックしておく。すると、外部からテキストが変更された時、確認ダイアログが出ずに自動的にVisualStudioが再読み込みしてくれます。
ただし、Emacs側も外部で変更されたときに最新のソースコードを開くようにしておかないと、どちらが最新のソースなのかわからなくなるので注意。

・開発の経緯
 このelispの開発は、ottoriiさんのマクロを見つけて「これってEmacsにも流用できそうだなー」と思ったのがきっかけです。
自分も本当はEmacsを使いたいのに、仕事ではプロジェクトファイルがVisualStudioを使用しているので、Makefileがなく、Emacsを使用する機会って少ないです。仕方がないので、VisualStudioをEmacsに近づけていましたが、何か上手く利用できることがないかなーと思っていたのですが、これなら出来そうと感じて作りました。

 また、この出来事(と、会社のライブラリでごちゃごちゃ結合されたコード)を見て、Unixの哲学「Do one thing, do it well.」って大切なんだなと思いました。使いたい時に組み合わせて使える幸せ。プログラムは小さくするべきってこういうことなんだと身をもって学びました。


「Alt+TabでVisualStudioとEmacs切り替えていればいいじゃない?」
それではelispと連携できないじゃないですか!


・開発中の部分
以下は現在開発中の部分です。正直まだどう実装すればいいのか分かっていない部分ですので、アドバイスいただけると嬉しいです。

・ビルド中に出力を順次表示していく
 表示するのはcomplileコマンドなどで出てくる、*compilation*でいいと思うのですが、これでいいのかわからずに実装中。popwin.elと組み合わせるといい感じになるかもしれません。

・ビルドしたときに、エラーした行に飛ぶ
 compileのときと同じく、*compilation*に出力すれば、c++-modeでnext-errorで飛べる?
飛べないから、modeがあるのかな?

・vstudio-activate-with-openfileにて、VisualStudioで開いたときの位置
 Emacsではタブの数も半角スペースとして数えているみたいなのですが、VisualStudioはタブを1カラムとして数えるみたいなので、微妙にカーソル位置がずれます。
直しておきたい。

2012/01/02対応しました。

・anythingのソースに現在開いているソリューションのファイルを追加する
 これは資料があるので、作る気になればいけると思います。ソリューションの位置から相対パスで管理しているみたいなので、階層が深いのはちょっと面倒そうですが……

・VisualStudioの文字コードについて
 Meadow3だと上手くやってくれるっぽいのですが、EmacsNTとか使っていると文字化けをします。
僕の場合は、C-x RET f utf-8-with-signature-dosとかで誤魔化しているのですが、
何かいい設定がありましたら、教えてください。




・今後のEmacs界で期待していること
 auto-complete.elも素晴らしいのですが、まだ補完機能が弱い部分があり、代用があったとしても導入が難しい部分もあると思います。
 なので、Vimのneocomplcache.vimみたいなものが出るといいなーと期待しています。
まあ、毎回Vimに似たような機能を作るのも大変だと思いますので、VimScriptを動作させるelispとかをパイプとして作ることができれば、すぐに取り込めるようになると思うんですけどね-。


さて、このエントリで、飛び入り参加がなければ、EmacsAdventCalendarJP:2011も終了となります。
皆様、お疲れ様でした!

では、よいお年をー。



作成時の参考サイト及び書籍:
GNU Emacs Lispリファレンスマニュアル
カーソル位置の情報で遊ぼう。-日々、とんは語る。

やさしいEmacs‐Lisp講座やさしいEmacs‐Lisp講座
(2011/06)
広瀬 雄二

商品詳細を見る

Emacs LispテクニックバイブルEmacs Lispテクニックバイブル
(2011/11/26)
るびきち

商品詳細を見る


・自己紹介
 FINA、もしくはFINAP(ふぃなっぷ)と申します。ふぃなっぷだと他の人と判断しやすいので、今後はふぃなっぷでいこうかなと思っています。アイマスと島本和彦先生が大好きです。アイマス関連の仕事ができたら一片の悔い無し。
 Emacs歴は4年ぐらいです。elispは今回初めて書きました。プログラミングが好きなので、
若い今のウチに、仕事でももっとプログラミングをしていきたいです。
関連記事
スポンサーサイト

コメント

素晴らしいですね。
使わせていただきます。

>・ビルドしたときに、エラーした行に飛ぶ
上記は、compilation-error-regexp-alist に正規表記で設定すればいいと思います。
今後の拡張も頑張ってください。

Re: タイトルなし

使っていただきありがとう御座います。
拡張は積極的にはできないと思いますが、こつこつやっていきたいと思います。

> 上記は、compilation-error-regexp-alist に正規表記で設定すればいいと思います。
ここら辺は設定ファイルの方でサンプルを参考にいじってみたのですが、上手く適用できなかったんですよね。もう少し調べてみます。
情報ありがとう御座いました!
非公開コメント

プログラミング関連ブログ

ハッカーと同人作家

プログラミング関連雑多などは上記のブログにて。

twitter

プロフィール

ふぃなっぷ

Author:ふぃなっぷ
ふぃなっぷです。こんな名前だけど、男性です。
好きなことを楽しくやっていきます。同人ゲームを制作したり、本を書いたり。
同人を通じて成長していけたらなぁと思っています。

>∩( ・ω・)∩< テーレッテー
ζ*'ヮ')ζ∩< テッテッテー

ご意見、ご感想、お問い合わせはこちらからどうぞ

応援中

相州戦神館學園 万仙陣 応援中! Dies irae ~Amantes amentes~応援中!

ブロとも申請フォーム

QRコード

QRコード

FC2カウンター

エリア51

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。