header

2014年12月31日水曜日

vi.el、Emacsやめるってよ

Emacs newsの24をみてたら、vi.el, vpi.elがObsoleteになるみたい(なった?)ようです。以下のS式をEmacs上で評価するとみれます。

(view-emacs-news 24)

一応コメントを抜き出すと、

* Changes in Specialized Modes and Packages in Emacs 24.5
** Obsolete packages
...
*** vi.el, vip.el (try M-x viper instead)



ということで変わりにviper-modeを使えということらしいです。まぁ使ってる人がいるのか謎のvi modeですが、まだ(require 'vi)で注意はでますがまだ使うことはできました。

なんでこんなこと書いてるかというと、来年は心を入れかえて(Emacsで)vi(っぽい)操作を少しずつ覚えようと思い調べたからです。この記事のメインはEmacsよりのevilの設定なんですが、この Evil: EmacsをVimのごとく使う - 導入編 をみるといろいろ歴史があるんですねー。

さて僕自身はvi(vim)の操作は移動方法と終了方法がわかるくらいで、ギリギリvisudoで設定編集できるくらいなんですがちょっと観光するくらいの気持ちでevil.el挑戦してみました。あまり急にviっぽい操作を入れるとなかなかストレスフルなので、かなりEmacsよりの設定になっています。

Evilの設定

一般的な設定

(require 'evil)

(setq evil-default-cursor 'box ; 'hbar box
evil-normal-state-cursor '("#Ff00ff")
evil-insert-state-cursor '("#4169e1" (bar . 2))
evil-emacs-state-cursor '("#00ced1" (bar . 2))
evil-cross-lines t
;; Do not move eol when normal state
evil-move-cursor-back t)

;; window移動するときcursorを更新
(advice-add 'other-window :after 'evil-refresh-cursor)

Emacsよりのevilにする設定:キーバインドまとめて無効化するのにmykie.el というキーバインド拡張を利用しています。(作者によるステマ)

(require 'cl-lib)
(require 'mykie)
;; Override Evil's keybinds
;; (自分が使わない)一部のEvilキーバインドを無効化する
(cl-dolist (map `(,evil-normal-state-map
,evil-motion-state-map))
;; 以下の設定で指定したキーが無効化され、global-mapのキーが利用され
;; るようになる
(mykie:set-keys map
"C-e" "C-o" "C-r" "C-s" "C-t" "C-w" "C-z" "C-^" "C-="
"M-n" "M-p"))

(setq
;; デフォルトのevilの状態をemacsに(それevil使う意味ry)
evil-default-state 'emacs
;; term-mode or eshell-mode didn't work well in my environment.
;; For more info, see `evil-emacs-state-modes', `evil-insert-state-modes' or
;; `evil-motion-state-modes'.
evil-insert-state-modes nil)

;; insertモードはemacsモードです
(advice-add 'evil-insert-state :override 'evil-emacs-state)

自分の設定を解説すると、最初のdolistの部分はnormalモードとmotionモードの一部のキーでglobal-mapのキーが使いたいので無効化しています。evil-insert-state-modesについては、デフォルトではterm-modeやeshell-modeが入っていましたがこのままだと自分が設定した各モード用のキーバインドが反映されなかったのでnilとして default のstateをemacsとして使っています。

あと最後のevil-insert-stateの設定については、あまりこういうことはしたくないのですがorg-modeでtabキーでorg-tableを広げられなかったり上述のterm-modeやeshellの問題があり、各モードごと設定するのはめんどうかなと思い、このように設定しました。(何かよい解決策あれば教えてください)

InsertモードからNormalモードへの切替え

ESC と C-[ はちょっと押しづらいと感じていて、muhenkanキーに割り当てています。これもmykie.elを利用していて、2回押したらmagitを起動するようにしてます。

(mykie:set-keys global-map
"<muhenkan>"
:default
(if (bound-and-true-p evil-mode)
(call-interactively 'evil-normal-state)
nil)
:repeat magit-status

"C-e"
;; C-u2回押したあと、C-eでevil-modeになる
;; mykieがこんな設定もできるよという例なので、:C-uとregion&C-uはいりません。
:default end-of-line
:C-u eww
:C-u*2 evil-mode
:region&C-u align)

おわり

こんな感じでevil.el使い始めました。ほんとはvi.elが一度も登場しないもやもやとした構成も考えましたがさすがにあれかなぁと思って最初にちょっと書きました。

桐島、部活やめるってよ (本編BD+特典DVD 2枚組) [Blu-ray]
バップ (2013-02-15)
売り上げランキング: 6,195

2014年12月29日月曜日

EmacsでGoogle日本語入力のSKKサーバーを利用するようにした

以前は Ruby製のGoogle日本語入力サーバー を使っていたが、OSを変えたついでに調べたら Golang製のGoogle日本語入力のSKKサーバー があったのでこちらを使うようにした。(どちらもlocalのマシンでサーバー起動して、Google日本語入力APIとやり取りする)

SKKについてあまりわかっていないので、自分のやり方が正しいかよくわからないがとりあえず利用できるようになったので記事にしておく。(自分は辞書含めて全てutf-8で設定しているので、以降の設定もそれようとなっているので適当に読み替えてください)

まずはインストール

Golang製なので


go get github.com/akiym/go-skkserv


これでインストールできる。

作者さんの書いてる例をコピペ&ビルド

コピペしたけど、文字エンコーディングの部分は"utf8"にした。その後、go buildでビルドした。

Emacsの設定

ほんとは設定値をsetqしたら後はskk-server-openでいけそうな気がするけど、(よくわからず)できなかったので、自分は以下のように設定した。

(require 'skk-server)

(setq skk-server-host "0.0.0.0"
skk-server-prog "pass/to/go-serv" ; ビルドしたgo-skkservへのパス
skk-server-portnum 55100)

(defun my/boot-skk-server ()
"Start SKK server."
(unless (skk-server-live-p)
(async-shell-command skk-server-prog (get-buffer-create "*goskk*"))
(setq skkserv-process (skk-open-server-1))
(when (skk-server-live-p)
(set-process-coding-system skkserv-process 'utf-8 'utf-8))))

(defun my/skk-close-server ()
(interactive)
(when (skk-server-live-p)
(skk-disconnect-server)
(kill-process (get-buffer-process "*goskk*"))
(message "Server disconnected")))

(add-hook 'kill-emacs-hook 'my/skk-close-server)

最初文字コードを特に設定せずに利用した場合、文字化けしたので`skk-process-coding-system'の部分を追加したら動くようになった。設定変数でこのあたりなんとかできるのかもしれないけれど、自分が調べたかぎりではeuc-jpに強制的にかわるようだった。(詳しいかたいたらコメントいただければうれしいです。)

上のコードを利用するにはmy/boot-skk-serverをSKKでキーインプットする前に呼び出せばいい。

おわり

ハードコアなSKKユーザーの方には軟弱者と罵られそうですが、SKKを使いつつGoogle日本語入力で補助してもらうのは、なかなか快適です。便利なGoogle日本語入力SKKサーバー(のコード)を公開してくださっているかたたちに感謝です。

Raspberry Piでリモートデスクトップ環境を作った

現在Raspberry PiはHDMI経由でテレビにつなっがっているので、こちらのほうが大画面でみやすいのでRaspberry PiからノートPCのほうにリモートで接続して使用できないかと思い試した。(自分は)あんまりやることではないので、メモとして残す。

結論からいうと、できることはできるけどあんまり快適ではなかったのでたぶん継続しては使わないと思う。

やりかた

リモートデスクトップで調べると、xrdp, remix, x11vnc, tightvncserverとかあるらしい。このページ をみてx11vncを試してみた。

接続されるPC:

sudo apt-get install x11vnc
# マシンのパスワードを保存
x11vnc -storepasswd
# パスワード付きでサーバー起動
x11vnc -usepw -forever

実行すると、メッセージで最後の方に"ホスト名:0"みたいのがでた。

接続するPC(自分の場合Raspbery Pi)

# 確かこんな名前のパッケージだった
sudo apt-get install vncviewer
# sshで接続
ssh 接続されるPC
# 別タブを開いた後,その別タブで(上で出たホスト名を入れる)
vncviewer ホスト名:0

sshで接続する前は、エラーが出て接続できなかった。

書きわすれたがPiはstartxしてから確認した。ログインターミナルの状態では確認していない。

使い勝手

リモートPC側でキーバインドの変更をしているが、Raspberry Piではしていないので(あたりまえだけど)設定したキーバインドが使えなくて違和感を覚えた。あと自分の環境ではそんなにさくさく使えなかった。ただこのあたりPiの性能なのか自分のとこのネットワークが遅いのかよくわからなかった。

おわり

快適じゃないけど、Raspberry Piでリモートで自分のPCをいじるのはちょっと快感だった。Raspberry Piおもしろい。

Popular Posts

Blogger templates

Blogger news