2018/03/06(火) [n年前の日記]
#1 [ruby][emacs] Rubyソースの整形ツール rufoをインストールしてみた
Rubyソースを整形してくれる、rufoというツールがあるらしい。
_Rubyの高速フォーマッタ−"Rufo"を使ってみる - Qiita
_ruby-formatter/rufo: The Ruby Formatter - created by @asterite
インストールしてみた。環境は Windows10 x64。
rufo hoge.rb で整形できる…のかな。たぶん。
_Rubyの高速フォーマッタ−"Rufo"を使ってみる - Qiita
_ruby-formatter/rufo: The Ruby Formatter - created by @asterite
インストールしてみた。環境は Windows10 x64。
gem install rufo
rufo hoge.rb で整形できる…のかな。たぶん。
◎ Emacsからrufoを呼び出す。 :
自分は普段、Rubyソースを Emacs (NTEmacs) で書いてるけれど、Emacs から rufo を呼び出すために、rufo.el をインストールしてみた。
_aleandros/emacs-rufo: Emacs integration with the Rufo ruby code formatter
gitを使ってローカルにクローン。
rufo.el を、~/.emacs.d/elisp/ 以下にコピー。
~/.emacs ( ~/.emacs.d/ntemacs.el ) に以下を記述。
rufo.el の中で、C-c f を rufo-format-buffer に割り当ててあったが、自分の環境では既に利用していたショートカットキーだったので、rufo.el を直接弄って C-z f に変更しておいた。とメモ。
_aleandros/emacs-rufo: Emacs integration with the Rufo ruby code formatter
gitを使ってローカルにクローン。
gti clone https://github.com/aleandros/emacs-rufo.git
rufo.el を、~/.emacs.d/elisp/ 以下にコピー。
~/.emacs ( ~/.emacs.d/ntemacs.el ) に以下を記述。
;; rofu - Ruby source formatter ;; C-z f rufo-format-buffer (require 'rufo) ;; (setq rufo-enable-format-on-save t)(setq rufo-enable-format-on-save t) を有効にすれば、.rb ファイルを保存するたびに rufo が呼び出されるのではないだろうか。試してないけど。
rufo.el の中で、C-c f を rufo-format-buffer に割り当ててあったが、自分の環境では既に利用していたショートカットキーだったので、rufo.el を直接弄って C-z f に変更しておいた。とメモ。
[ ツッコむ ]
#2 [xyzzy] xyzzyのlispを少し勉強
この日記ページを書く際には、xyzzy というEmacs系のエディタを使っているのだけど。時々、同じような編集作業をする時があるので、多少自動化できないかと xyzzy の lisp についてググって勉強してみたり。
◎ リンクの記述を変更する関数。 :
以下のような行があったとして。
上記の記述を、以下のように変更したい。
そういう処理をする関数を書いてみたり。
lisp の達人が見たらゲロを吐きそうなソレだろうけど…目的が果たせそうだから、これでいいや…。
少し説明すると…。
正規表現をテストして遊ぶ (xyzzy[しょぼしょぼすくりぷと]) http://edutainment-fun.com/script/xyzzy/tips/regular.html
上記の記述を、以下のように変更したい。
LINK http://edutainment-fun.com/script/xyzzy/tips/regular.html 正規表現をテストして遊ぶ (xyzzy[しょぼしょぼすくりぷと])
そういう処理をする関数を書いてみたり。
(defun transpose-hnf-link () (interactive) (progn (goto-bol) (forward-line) (transpose-lines) (backward-line 2) (goto-eol) (insert " ") (delete-char) (goto-bol) (insert "LINK ") (goto-bol) (forward-line))) (define-key *hnf-mode-map* '(#\C-c #\k) 'transpose-hnf-link)
lisp の達人が見たらゲロを吐きそうなソレだろうけど…目的が果たせそうだから、これでいいや…。
少し説明すると…。
- 関数を作る時は、(defun hoge () 〜 ) と書く。
- (interactive) と書いておくと、「この関数はコマンドだよ」「M-x 関数名で呼び出せるよ」という意味になる。
- (progn 〜 ) と書いておくと、上から順々に処理をしてくれる。
- (goto-bol) で行頭に、(goto-eol) で行末に、カーソルが移動する。
- (forward-line) で、1行下に、(backward-line)で、1行上に、カーソルが移動する。
- (forward-line n) (backward-line n) で、n行下、n行上に、カーソルが移動する。
- (transpose-lines) で、現在行と一行上を入れ替える。カーソルは、現在行の1つ下に移動する。
- (insert "hoge") で、現在のカーソル位置に hoge という文字列を挿入できる。
- (delete-char) で、現在のカーソル位置で、1文字削除できる。Deleteキーを押した時と同じ動作、だろうか。
- (define-key *hoge-mode-map* '(#\C-c #\k) 'fuga-func) で、ショートカットキーが設定できる。この場合は、「hoge-mode 時に、C-c k のキー入力で fuga-func を呼び出せ」という設定になる。
◎ リンクURLを変更したいけどやり方が分からず。 :
以下のような記述があったとして。
以下のように変更したい。
しかし、やり方が分からない。
正規表現を使えば、該当文字列にマッチさせることはできそう。
ただ、xyzzy の lisp から、それを呼び出す方法が分からない…。
余分な部分を削除するだけなら、以下のような感じだろうか…。
待てよ? 余分な部分を削除できたら、後は「{」「,」「}」を挿入していくだけなのでは…。(forward-char n) で、カーソルをn文字右に移動して、(insert ",") で挿入していけばなんとかなるかも。
LINK http://hogefuga/~piyo/diary/201312203.html#201312203 piyo's diary - 記事名
以下のように変更したい。
LINK #{2013,12,20,3} piyo's diary - 記事名
しかし、やり方が分からない。
正規表現を使えば、該当文字列にマッチさせることはできそう。
M-x query-replace-regexp Query repla regexp: ^LINK http:///hogefuga/.+# With: LINK #
ただ、xyzzy の lisp から、それを呼び出す方法が分からない…。
余分な部分を削除するだけなら、以下のような感じだろうか…。
(defun change-hnf-link-uri () (interactive) (if (looking-at "^LINK http://hogefuga/.+#") (progn (delete-region (match-beginning 0) (match-end 0)) (goto-bol) (insert "LINK #"))))
- (if a b) で、a が t なら、b を実行。
- (looking-at "正規表現") で、正規表現とマッチするか場所があるかを調べられる。マッチしたら t、しなかったら nil が返る。
- (delete-region A B) で、A から B までの範囲を削除。
- (match-beginning 0) で、正規表現に一致した場所の先頭を、(match-end 0) で、正規表現に一致した場所の末尾を取得。
待てよ? 余分な部分を削除できたら、後は「{」「,」「}」を挿入していくだけなのでは…。(forward-char n) で、カーソルをn文字右に移動して、(insert ",") で挿入していけばなんとかなるかも。
[ ツッコむ ]
#3 [pc] 無線LANルータが正しいIPアドレスを渡してくれない
手持ちのタブレットPC、DELL Latitude 10 がインターネットに接続できなくて悩んだり。調べてみたら、無線LAN(Wi-Fi)が、正常なIPアドレスを取得できてなくて。ウチの場合は、192.168.n.xxx になるはずが、192.168.27.3 になっていて…。なんでや。
使ってるルータは、NEC Aterm WR8300N。
ルータを再起動したり、タブレットPCの Windows8.1 x86 を再起動したり、管理者権限でコマンドプロンプトを開いて ipconfig /release や ipconfig /renew を打ってみたりしたけど変化無し。
よく分からないことに、Aterm WR8300N が提供する、2種類の無線LANのうち、暗号化が甘いほう(WEP)に繋ぐと、正しく 192.168.n.xxx が得られる。しかし、WPA/WPA2-PSK(AES)のほうに繋ごうとすると、妙なIPアドレスが返ってくる。
結局、ルータ側のDHCP固定割当設定を使って、IPアドレスを固定する方向で対処。タブレットPC側も、DHCPを使わず、IPアドレスを決め打ちで設定してみたり。
しかし、どうしてこんな状況になるのだろう…。
使ってるルータは、NEC Aterm WR8300N。
ルータを再起動したり、タブレットPCの Windows8.1 x86 を再起動したり、管理者権限でコマンドプロンプトを開いて ipconfig /release や ipconfig /renew を打ってみたりしたけど変化無し。
よく分からないことに、Aterm WR8300N が提供する、2種類の無線LANのうち、暗号化が甘いほう(WEP)に繋ぐと、正しく 192.168.n.xxx が得られる。しかし、WPA/WPA2-PSK(AES)のほうに繋ごうとすると、妙なIPアドレスが返ってくる。
結局、ルータ側のDHCP固定割当設定を使って、IPアドレスを固定する方向で対処。タブレットPC側も、DHCPを使わず、IPアドレスを決め打ちで設定してみたり。
しかし、どうしてこんな状況になるのだろう…。
[ ツッコむ ]
以上、1 日分です。