Emacsでssh先のMatlabを快適に使うためのアレコレ

#Emacsでssh先のMatlabを快適に使うためのアレコレ
　どうも、やたら敷地の広い某大学の一生徒です。初めての投稿となりますが、学校の課題で大学側のMatlab(Gui起動はできない)を自宅のPCで弄りたくてこれを書きました。
　今回触る部分は、Emacsの設定ファイルである、init.el(コピペですが)、向こうのMatlabの設定などです。某大学仕様ですので、他大学や他企業、その他諸々で応用したい方は適宜読み替えて下さい。
##最低限揃えておいて欲しいもの
・MacOS(?) or Linux環境　(Windows環境の方は仮想環境を作ることをおすすめします)
・Emacs　(自分のPCにインストールされていること)
・sshが使える環境　(こちらの設定は環境よりけりですので、ご自分で調べて下さい。一度繋ぎたい先にssh接続できていることが望ましいです)


・広い心　(VimやVS、Sublime使いの方は広い心を持って見て下さい)
##Emacsを起動&設定
　(本当はもっと沢山便利な機能があるのですが、削れるだけ削りました。それでも長くなってしまってすみません。)
　Emacsを起動して下さい。それが終わったら`C-x、C-f` (コントロール/コマンドキーを押しながら、x、fと順に押す。)して下さい。すると、下のバーに、

`Find File: | `

という文字が出てくると思います。
そこで、

`~/.emacs.d/init.el` 

と打ち込んで、Enterキーを押して下さい。
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/147520/2ad83b9a-72ee-8a51-7df1-80a6497a5840.png)
恐らくそのファイルが開かれるで、
その画面上に、以下のコードを打ち込んで下さい(推奨：コピペ)。

``` init.el
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialise)
(when (require 'exec-path-from-shell nil t)
  (exec-path-from-shell-initialize))
(when (require 'auto-complete nil t)
  (global-auto-complete-mode t))
(setq auto-image-file-mode t)
(when (require 'image+ nil t)
	 (setq auto-image-file-mode t))
```


既に打ち込んである方は不要です...
さて、次にこのコマンドを実行してください。`M-x` = metaキーを押しながらx (Macなら恐らくESCキーとx)

`M-x eval-buffer `

これで今書き込んだものがEmacsに読み込まれます。
ここから色々な拡張ファイルをインターネット上からインストールするので、オンライン環境でお願いします。

以下のコマンドを実行して下さい。[RET] = エンターキー
`M-x pac-install [RET] image+`
`M-x pac-install [RET] matlab-mode`
`M-x pac-install [RET] auto-complete`
`M-x pac-install [RET] exec-path-from-shell`

それぞれ拡張ファイルのダウンロード&コンパイルを含んでいるので回線次第では時間がかかるかもしれません。
終わったら、一回Emacsを再起動させてください。

#学校側のMatlabの設定
こちらはまるでこちらを参考にしました。
https://www.coins.tsukuba.ac.jp/~s1311367/matlab/

とりあえずEmacsで処理してみます。(上のサイトを例に取って頂いても構いません。)
`C-x C-f` から、
Find file: `/ssh:[つなぎたいアドレス]:`でssh先に繋ぎます。恐らくパスワードを聞かれると思うので、パスワードを入力して下さい。繋ぎたいアドレスの例は、hogehoge＠hoge.ac.jpなどです。

ここでやっていることは、ssh先のパソコンにアクセスして、ホームディレクトリ内を閲覧する、ということです。

そこで恐らくbashで言う、lsしたような画面が出てくるので、そこから.bashrcというファイルを探して下さい。なければ、`C-x C-f`から
Find file: `/ssh:[つないでいるアドレス]:~/.bashrc`で、新しくファイルを作ってください。



それが終わったら、その.bashrcファイルに以下の行を追加してください。(ここの設定は各団体のMatlabのアプリケーションファイルを参照して下さい)

``` ~/.bashrc
alias matlab="/Applications/MATLAB_R2013b.app/bin/matlab -nodisplay" 
```
そして、`C-x C-s`で保存して下さい。ついでにこのバッファ(画面)はいらないので`C-x C-k`して下さい。
これで、お使いのシェルから、ssh先にログインして、MatlabをCUI起動させることが出来ます。

##EmacsでCUIなMatlabをGUIっぽく使ってみよう
ここからは、ちょっとむずかしくなるかもしれませんが、なんとかついてきて頂けると幸いです。

まず、Emacsの画面分割をマスターします。
Emacsの画面分割は、
- 縦分割=`C-x C-2`
- 横分割=`C-x C-3`
- リセット=`C-x C-1`
- いい感じに戻す=`C-x C-0`
となっています。お好みで画面分割をして下さい。

次に、それぞれの画面に役割を与えます。
とりあえず、
- eshell  (ssh先のmatlabを実行)
- .mファイルの編集
- ファイラの画面
の3つに分割します。
![スクリーンショット_2017-05-03_23-51-05.png](https://qiita-image-store.s3.amazonaws.com/0/147520/7efc5a8b-a3f3-907f-6038-77078542146f.png)

###eshellでの作業
eshellはEmacsについているシェルです。`M-x eshell`で起動します。
一般にはここでパスの設定をしますが、先のinit.elでその問題は解決しています。
ここでは、sshで相手先にログインします。といっても普段使い慣れているbashなどと同じ機能があるので、同様につなげれば問題ないです。

``` bash
~$ ssh [つなげたいアドレス] [RET]
~~~~~(yes/no)? yes [RET]
Password: [パスワードを打ち込む]　[RET]

hogehoge@hoge ~$ 
```

恐らくこのような形でログインできると思います。
ここで、先程作成した~/.bashrcを読み込ませましょう

``` bash
hogehoge@hoge ~$ source ~/.bashrc
```

そこから、matlabを起動して下さい。

``` bash
hogehoge@hoge ~$ matlab [RET]
```

これでmatlabのCUI起動画面が出ると思います。

###.mファイルの編集での作業
ここではMatLabの.mファイルを弄る画面を作ります。
先程~/.bashrcを開いたことと同様の手順で、`C-x C-f`から
Find file: `/ssh:[つないでいるアドレス]:~/Documents/MATLAB/temp.m`
でtemp.mというファイル(適宜読み替えてください)を作ります。
アドレスは機関によりけりですので、読み替えて下さい。
また、検索で戸惑ったら、`Tab`で自動補完がされるのでご活用下さい。

ファイルを作ったら、その画面にカーソルを当てた状態で、`M-x matlab-mode`と打ち込んで下さい。
先程落としてきたmatlab-modeが起動して、大分コーディングしやすい環境になると思います。

※開いたバッファの場所を間違えた、という場合は、変えたい画面にカーソルを当てた状態で`C-x C-b`とすることで画面の内容(バッファ)を変えることが出来ます。



###ファイラでの作業
ここでは、実行結果を保存したりする際に使う画面であるファイラを用意します。
先程と同様に、`C-x C-f`で
Find file: `/ssh:[つないでいるアドレス]:~/Documents/MATLAB/`
で、MATLABが生成するファイルの保存先にアクセスします。
ここで作成したファイルを選択することでそのファイルを確認することが出来ます。
例えば、

``` matlab:temp.m
 plot(len, a, 'k-');
 print -dpng hoge.png
```

としたとき、そのhoge.pngの保存先は恐らく(機関による) ~/Documents/MATLAB/ 以下なので、このフォルダに常にアクセスしていると確認が楽、というわけです。

ところが、このファイラは自動で再読込しないため(させることも出来ますが、不安定気味)、出力をしたら毎回、`M-x dire-re`とコマンドを打って下さい。これで再読込が行われます。


再読込が終わって、自機にそのファイル、例えばfoo.pngを保存したい場合は、そのファイルを開いて、`C-x C-w`で別名で保存をするためのモードになるので、
Write file: `[保存したい先]`として[RET]で保存できます。(例えば、Write file : ~/my-PC/hoge.png)

また、ファイルを開いたあと、その画面を消したい場合は、`C-x C-k`で消すことができ、元のファイラに戻したい場合は、`C-x C-b`で元に戻すことが出来ます。

#以上で出来た環境(多分)
恐らくこのような画面になると思います。
![スクリーンショット_2017-05-04_00-36-18.png](https://qiita-image-store.s3.amazonaws.com/0/147520/7296d843-6381-fe24-7254-581091218a6e.png)

###続いて、この環境での主な作業チャートを示します。
- Emacsを立ち上げ、3画面にする
- eshellを立ち上げ、ssh接続、MatLabを起動する。
- 作業ファイルを、`C-x C-f`から、Find file : `/ssh:[adress]:`からパスワードを入力して入り、開く。
- ファイラを開いて、何かのファイルを作り次第 `M-x dire-re`で再読込、生成ファイルの閲覧をする
 - 開いたファイルは`C-x C-w`で自機に保存する。
 - 余分なバッファ(画面)は`C-x C-k`で削除　
 - バッファの変更は`C-x C-b`で

以上です。なんだか長くなってしまいましたが、お付き合い頂きありがとうございます。
若干急いで書いたので、間違っている部分等ありましたら、修正しますのでご連絡下さい。

##追記
環境
- Windows 10 
- Oracle VM VirtualBox 
- KonaLinux 4.0 xfce
- Emacs 24