#### きっかけはVSCodeでツイートの読み込みをやろうとしたこと,不具合があったRubyのスクリプト,その問題も2020年5月22日に解決 Last update 2020-05-23_1017

:CATEGORIES: VSCode,プラグイン開発,Ruby

 今現在,Emacsで作業をしているのですが,5月21日日になるのかVSCodeで編集作業に専念していたところ,ツイートの読み込みに手間がかかり,作業効率の悪さを痛感しました。時間の無駄ということです。

 普通にブラウザを使い再捜査要請書_警察庁石川県警察御中(@kk_hirono)のアカウントでツイートを行い,そのツイートをTwitterAPIで読み込んで編集中のファイルに書き込んでいるのですが,事前に自作コマンドを実行して読み込みツイートの数をリセットしています。

 これも自分の工夫でやっていることなので我流になります。次がそのコマンドの実行と実行結果になります。以前のツイートのカウント数をテキストファイルに記録し,次に同じコマンドを実行した時とのツイート数の差分を表示させる処理としています。


[4793] % tweet_user_count.rb
kk_hirono
再捜査要請書_警察庁石川県警察御中(kk_hirono)
ユーザ名称:再捜査要請書_警察庁石川県警察御中 [screen_name]ユーザ名:kk_hirono フォロー数:551 フォロワー数:566 ツイート数:100185
6

 結果は6となっています。このあとブラウザなどでツイートの投稿をし,次に編集中のテキストファイルからTwitterAPIで投稿処理をする直前のタイミングで,外部でツイートされ,テキストファイルに存在しないツイートの数を確認することになります。

 今のところEmacsVim以外には見たことがないのですが,コマンドを実行する際の前置引数という操作があります。Emacs-Lispのコマンドではこの前置引数を使うことが出来るのでとても便利になります。

 私の場合,メインの再捜査要請書_警察庁石川県警察御中(@kk_hirono)のアカウントのツイートを最新のものから読み込むコマンドをF11のキーに割り当てています。前置引数はC-uに続く数値です。それに続けてF11を押すことで,指定した数のツイートを読み込みます。

 いちおう調べているのですが,SublimeTextやVSCodeではこの前置引数の情報が見当たりませんでした。Emacs-Lispの自作コマンドで,外部のスクリプトを読み出しているのですが,その引数を前置引数で渡していることになります。

 同じコマンドを通常のターミナルで行う場合は,「tl_kk 5」などとなります。この5という仮定の数値が,コマンドの引数で指定するツイートの数になります。

 一月ほど前までは,ほとんどEmacsで作業をしていたので,前置引数と自作のEmacs-Lispの関数を使っていたのですが,Emacs以外での作業がメインとなるため,Emacs-Lispで呼び出していたスクリプトのコマンドを修正し,出力をクリップボードに保存するようにしました。

 これが失敗していたのですが,最近になって他にもクリップボード絡みの不具合と修正を迫られることがあって,システムの変更が原因なのかとも考えていたのです。結局は,コードの記述に問題があって思うような処理が出来ていなかったらしく,修正することで解決が出来ました。

 直近の5つのツイートを貼り付けるときは,ターミナルで「tl_kk 5」というコマンドを実行することになります。これでクリップボードに結果のテキストが入るので,あとはテキストを挿入する場所で貼り付けを行うだけです。

 Emacsの場合はCtrl+yになりますが,ほとんどの場合はCtrl+vが貼り付けのキーボード操作になります。「tl_kk 5」の事前の実行は,範囲選択やコピーという通常の操作の手間を省けます。これも頻度が増えたり,コピーの範囲の数が多いと馬鹿にならない手間になります。

 Ubuntuのバージョンが20.04になってからだと思うのですが,Emacsの文字の表示が見づらくなりました。文字が大きめになり,行間がかなり広がっているように感じます。画面サイズを含めフォントの大きさも以前の設定が反映されなくなっているようです。

 細かいことは気にしない方の正確だと思いますが,細かいことが気になって意識が集中しづらくなることもあります。日本語の変換候補がミニバッファのインライン表示に出来るEmacsが特に使いやすくもあるのですが,他のエディタにも利点はあります。

 逆に高機能のエディタが不便に感じることもあって,SublimeTextもVSCodeも同じだと思うのですが,ファイルの変更が見た目でわからなくなっています。EmacsではSaveというアイコンが保存済みで薄い色に変わります。

 SublimeTextやVSCodeでは,ファイルの保存をしなくても終了した後の再開で以前の編集状態で読み込むようになっているようです。Wordのような自動保存とは違うようですが,逆にEmacsなどの別のエディタでファイルを開くと,編集が未保存の状態で読み込まれたりします。

 Emacsでは編集中の行数が分からず,設定をしても日本語の文字数ではないバイト数で表示されるようです。これも自作のコマンドで対処はしているのですが,ステータスバーですぐに確認できる文字数ではありません。

 Caps+hというキーに割り当てているのですが,ずいぶん前に作ったEmacs-Lispで,コードの内容もさっぱり思い出せません。EmacsではC-h kとやってから調べたいキーを押すことで,割り当てたコマンドだけではなく,ファイルのコードにジャンプすることまで出来ます。


h runs the command h-count-line (found in global-map),
which is an interactive Lisp function in ‘h-elisp.el’.

It is bound to t, h.

(h-count-line)

Not documented.

[back]

 上記の’h-elisp.el’という部分がコマンドの関数の記述のあるファイルで,リンクを開くことでそのファイルの中の関数の部分にジャンプします。その関数の内容は次の通りになっています。


(defun h-count-line ()
(interactive)
(save-excursion
(beginning-of-line)
(let *1
(e nil))
(end-of-line)
(setq e (point))
(message "現在行には、%d文字あります。" (- e s)))))

 Emacsではカーソル位置を含め,ファイルの先頭からの位置がpointという関数にもなっているのですが,行末のポイントから行とのポイントを引いた数となっていました。

 このファイル内の文字位置の操作は,WordのVBAを始め,Atom,SublimeText,VSCodeと共通してとてもややこしい面倒な操作となっています。ネットで調べても情報が少なく,調べるだけでもずいぶんと時間を費やしてしまいました。

 これをみてもEmacsではバイト数に関わりなく半角も全角も同じ1文字として扱っているようですが,日本語の取り扱いでもとても便利に感じるのがEmacsになります。逆に日本を扱わないプログラムのコードの場合は,Vimなど他のエディタを使うことが多いです。

 テキストエディタでは次の改行までという行の概念が当たり前なのですが,Wordなどのワープロソフトでは段落という概念や見た目の行の折返しが優先され,非常に扱いづらさを感じます。見た目の折返しに何の意味があるのか不思議で理解ができません。

 探せば他に方法があるのかもしれないですが,VSCodeではキーボードの割当が,キーではなく割り当てるコマンドが主体となっているようです。行のテキストをツイートするキーをF12の他F9にも割り当てたかったのですが,方法が見つかりませんでした。

*1:s (point