下腹オプティマイザ

主にIT関係の雑記帳です。全然関係ないことも書くかもしれないです。

0から始めるEmacs 業務カイゼン計画 第0回 ~インストール編~

Emacsの世界へようこそ

 

ここではあらゆる政治や宗教上の理由を無視して、あなたの業務をカイゼンし、快適な生産的活動をサポートするためのツールEmacsを導入、活用する方法をお伝えできればと思っています。

 

Emacsになにができるのか、ということですが、

 

・プログラム、テキストを記述する

・日々のタスク、作業時間を管理する

・etc.

 

個人的には上の二つがメインな訳ですが、Emacsはカスタマイズ性が非常に高いのが特徴で、人によって様々な使い方があります。

最近流行りのUnityを筆者もしばしば使うのですが、そのスクリプトを書く際にもEmacsを使用しており後々紹介できればと思っています。

 

インストール

今回は第0回ということで、インストール方法をご紹介させて頂きます。

環境はMacで進めていきます。

WindowsでもGNUPackなどで提供されていますが、Emacsプラグイン(package)にはLinuxシステムに依存するものが多くあり、Emacsをフルに活用することは難しいと思われます。

 

インストールにはhomebrewを使用します。

homebrew自体のインストールはここから(Homebrew — OS X用パッケージマネージャー)

 

homebrewをインストールした状態でターミナルに次のコマンドを入力します。

 

 大体2,3分くらいでインストールが終わります。

2015-04-23現在では24.4.1がインストールされました。

 

では起動してみましょう。

アプリケーションフォルダに.App形式で入っているのでこのアイコンをクリックすれば起動します。SpotlightやAlfredからでも"Emacs"で起動できます。

f:id:kurogomapurin11:20150423145110p:plain

 

f:id:kurogomapurin11:20150423145423p:plain

おめでとうございます、今日からあなたもEmacsユーザーです。

 

終わりよければ全て良し?

まずは最初に覚えるべきコマンドは終了かと思います。

 

終了: C-x C-c 

 

Emacsではショートカットをこのように表記します。公式を含め、色々なところで目にすることになるかと思います。

読み方は

C-x : Ctrlを押しながらx

C-c:Ctrlを押しながらc

つまりCtrlを押しながらxcと入力すればよいということです。

 

式日本語チュートリアル

また、Emacsにはチュートリアルが標準で搭載されており日本語版もありますので

是非やってみてください。

やり方は 

 

M-x help-with-tutorial-spec-language RET Japanese RET

 

今度は

M-x :Alt(Metaキー)を押しながらx

"M-xというのはEmacsではコマンド入力が割り当てられていて押すとコマンド入力状態になります。このあとにEmacsのコマンドを入力して機能を呼び出すことができます。"

f:id:kurogomapurin11:20150423151451p:plain

 

 help-with-tutorial-spec-language :コマンド、長いですがターミナルのようにTabキーで補完が効きます。

f:id:kurogomapurin11:20150423151604p:plain

*補完候補の表示

 

RET :Return(Enter)、見慣れない書き方に感じる方もいるかもしれませんがEmacs関連では大抵このように表記されます。

次のような状態でReturnを押します。

f:id:kurogomapurin11:20150423152008p:plain

 

言語を選択するように問われますので "Japanese"と入力してRET

f:id:kurogomapurin11:20150423152157p:plain

 

チュートリアルが開始されるのであとはチュートリアルの内容に沿ってチュートリアルを進めましょう。

f:id:kurogomapurin11:20150423152453p:plain

 

第0回ですので今回はここまで。

 

最後に

チュートリアルを終えた段階ではEmacsが言われるほど便利に感じる方は少ないかと思います。それはごく自然でEmacsの最大の魅力はカスタマイズ性にあります。

チュートリアルでは基本的な動作しか使われませんし、そこで得た操作方法を毎日全て使うかと言えばそんなことは無く、下手をすれば全く違う操作方法をしているEmacsユーザーもいることでしょう。

 

Emacsはあなたに合わせたオーダーメイドのエディタをあなた自身がつくり上げることができるのです。

 

「自分で全部カスタマイズしなきゃいけないの?」と思うかもしれませんが、Emacsには様々なプラグインが公開されておりそれらをパッケージシステムを用いていとも簡単に導入することができます。そのためEmacsのカスタマイズにはさほど労力は割かれませんし、カスタマイズした分だけあなたの生産性を向上させてくれる、と言っても過言ではありません。

 

一般的に専用よりも汎用的な物が好まれることが多いです。

汎用的な物というのは確かに便利に感じることが多いですが、それらは多くの場合で時間や性能のトレードオフが生じます。

コンピュータ分野では専用プロセッサが用意されると性能が向上する場合が多くあり、

プログラミングにも同じことが言えます。

個人個人によっても指の長さ、キーボードなどのハードウェア的に、計算能力や記憶力、反射神経などソフトウェア的に、誰一人として全く同じ人は存在しませんし、その人がやる作業、方法もまた時と場合によって変化していきます。

 

それにも関わらず皆が同じエディタを同じ設定、同じ操作方法で日々使い続けるというのは実にナンセンスです。

 

勿論Emacs以外にもカスタマイズ性の高いエディタはありますし、エディタを選ぶということ自体もカスタマイズの1つとも言えます。

大切なことは万人に通用する絶対的な解決策など無く、自分自身に合った方法を自分自身で模索するということなのです。

 

ここではEmacsをその1つとしてご紹介させていただきます。

 

 

 

 

 

 

参考

EmacsWiki: Emacsビギナー

Macで本家EmacsとHomebrew IMEパッチ版とEmacs Mac PortとAquamacsを比べてみる。 | たったのセブンクレジット

ゲームプログラミングにおけるMVCモデルの用法とは

今日はluaでもcocos2dでもないです。

プログラムを書いてるとどんどんスパゲッティーになるんですよ。私。

 

コードを整理するためにとりあえずMVCの基礎を固めようと思って、ググった

 

 
とてもわかり易い、具体例っぽいのもある。
こういうのをさ、学校でおしえてほしいよね。うん。

cocos2d-x マルチタッチ Touchクラスのリファレンスを読んでおく

また、こんな時間だ。

 

マルチタッチ対応のアプリを作ろうと思うとシングルタッチの時みたいに

タッチの座標だけみてゴニョゴニョするだけではうまくいかないことがたくさん

でてきそう。そこでTouchクラスにどんな機能が用意されてるのか

理解しておこうと思う。

 

とりあえずここ参照

cocos2d-x: Touch Class Reference

 

意外と単にgetLocationがあるだけじゃなくて色々あるんですね。

特にマルチタッチだとgetID()関数とかめっちゃ使えそう(というか使わないときつそう)

他にもgetStartLocation()関数とか、知らなかったら普通にonTouchBeganで値取っておいてーとかやってた。

getDelta()とか使えばピンチイン・アウトもすぐ実装できそう。使うかは微妙ですが。

 

 

cocos2d-x lua binding マルチタッチ対応

気づけば朝でした。

 

luaでマルチタッチやってみます。

cocos2d-x-lua-MultiTouches.lua

 

こんな感じ。

基本はC++APIを呼び出してるのでC++の情報をそのまま使ってできました。

何故か

for i,v in ipairs(touches) do

のところで全部の要素のiが1になる。

そんなに大きな問題では無いような気もするけど間違ってたら誰か教えてください。

 

onTouchesBeganしか書いてないけどMovedもEndedもおんなじ要領でできるはず。

実際のコードから引き抜いて名前をreplaceしたのでもしかしたらそのままじゃ動かないかもしれないので動かなかったら文句言ってください。何とかするかもしれないです。

 

うーん、眠い

追記 

iOSの場合はAppController.mmでマルチタッチを有効にする必要があった気がします。Androidはデフォでマルチタッチ有効です。 

cocos2d-x lua ":ctor()"メソッドについて

先週に続いてまた銭湯で書いてます。

 

cocos2d-xでluaのテンプレートを作成した際にできるデフォルトの

GameSceneクラスにctor()っていうメンバ関数がありますね。

こいつが一体どのタイミングで呼び出されるのか気になったので

cocos code IDEを使って調べてみました。

こういうところは便利ですね。リファレンスとか無くても自力で辿りやすいです。

 

もとをたどるとこんなファイルが

"cocos/scripting/lua-bindings/script/extern.lua"

こいつの中でctorメソッドが定義されてました。

タイミングとしてはnew()された中で呼び出されているみたいです。

初期化とかをまとめておくんですかね。

GameSceneでは

 self.visibleSize = cc.Director:getInstance():getVisibleSize()

    self.origin = cc.Director:getInstance():getVisibleOrigin()

    self.schedulerID = nil

この三行が書かれてるのでこれはそのままコピペしておけば便利そうですね。

pythonとかでこういうのをテンプレート化してコードを生成したいところ。

 

ではでは

EmacsでLuaを開いた時に最初からauto-completeが有効にならないとき

なんか気付いたらACが消えてて逐一M-x auto-complete-mode するのとても

怠いからStackOverFlowを漁った。

 

(global-auto-complete-mode t)
(add-to-list 'ac-modes 'lua-mode)

 

これで~/.emacs.d/init.elに追記したら最初からACが有効になった。

 

 

とても頭が痛いです。

EmacsでLuaスクリプトを編集するための準備 ~auto-complete Lua~

こんばんわ、クマガイです。

 

今週はもうバイトが無いので浮かれていたら日付が変わってました。

さて、昨日書いたauto-completeに関しては解決(追記↓)しました。

EmacsでLuaスクリプトを編集するための準備 ~auto-complete~ - 黒ごまプリンの雑記帳

 

今度はこのauto-completeをLuaに対応させます。

 

とりあえずググる

それっぽいelファイルを公開してるGitHubリポジトリを発見

emacs/lua-mode at master · boorad/emacs · GitHub

最終が2年前やけどまぁ大丈夫やろ。

 

とりあえずdl

luaのdictをコピー 

cp hoge/auto-complete/dict/lua-mode ~/.emacs.d/ac-dict/

(元ファイルが古いのでOSXではUNIXファイルで読み込まれるのでテキストの中身だけ移す必要があります(手こずった。。。))

 

auto-complete.elにlua-modeを追記

 

(defcustom ac-modes
'(emacs-lisp-mode
lisp-interaction-mode
c-mode cc-mode c++-mode
java-mode clojure-mode scala-mode
scheme-mode
ocaml-mode tuareg-mode
perl-mode cperl-mode python-mode ruby-mode lua-mode ;ココ
ecmascript-mode javascript-mode js-mode js2-mode php-mode css-mode
makefile-mode sh-mode fortran-mode f90-mode ada-mode
xml-mode sgml-mode)
"Major modes `auto-complete-mode' can run on."
:type '(repeat symbol)
:group 'auto-complete)

 

場所は多分多少この辺りだったらどこの行でもいいんだろうけどスクリプトでまとまってるから多分ここがいい感じ

 

うーんしかし、また動かない。

頭働いてないので寝て起きたらやります。

おやすみなさい

 

 追記 2014/08/22 11:39

 

この件、昨日の朝解決したんですが、昨日の夜に体調崩してしまって詳しくは忘れたしまいました。ごめんなさい。

とりあえず、私の環境だと.emacs.elがの残ってたのでこれを消してload-pathを再度合わせたら動きました。

 

が、IDEに比べると補完が弱いので色々悩み中。。。

IDEバリに補完できるように.el書ければいいんでしょうが私にはちょっと厳しいかな。。。