himadatenodeの日記 このページをアンテナに追加 RSSフィード

*日記だけど 本人のメモや整理が垂れ流されてるだけなので。誤字脱字だらけで意味不明な電波が送信されてます。まともな漢字で翻訳されたのは、その内どこかにまとめて書くかもしれません。

HimaDataNode bookmark archive

xyzzyを使いたい人向け

2018-03-10 財務省、書き換え認める方針=森友決裁文書、政権に大打撃

[][]Emacsでもwinkey.l

少し前からemacsを色々試していてそれなりに便利に使えるように調整は出来てきたなとは思っていたのだけど、xyzzyでいうところのwinkeyっぽい挙動にするlispがあるのかどうか良く分からなかったので適当に作ってみたりした。ついでにxyzzyのWinkeyと少し変えてクリックしている時にはC-vでpasteも出来るようにしたら何気に便利。もうこれでWindowsキーバインドとの衝突は起きないですむし複雑なキーバインドも必要なくて極めて直感的になった。xyzzyと違うのはクリップボードとキルリングが同じなのでemacsの方がやや低機能になってしまう所だけどキルリングが同じだから便利みたいな所もあるような気がする。

org-modeを最近使っているのだけどorg-modeは何気に重い。最近のPCでもまだemacsが重いとは思ってなかっただけにちょっとびっくりした。その点xyzzyは相当やっても異常に軽いのはWindowsとの親和性と基本性能の高さによるのかもしれない。あとはマイナーモードで使うアウトラインモードの設定もイマイチよく分からないのと、grepが結局xyzzyの方が簡単というかgrepの基本UIが高性能とか不満はまだ残っている。逆にemacsでファイラがないから仕方がなく使ってた、diredが慣れてくると逆に便利だというのに気づいたので、xyzzyでも移植されていたxdiredを導入してみた。xdiredを入れるまでは結局全部バッファに呼び出してoltでバッファを切り替えていたのだけど、xdiredだとそもそもバッファ呼び出さなくてもC-c C-d でフォルダからそのつど編集する奴を開けば十分だというのに気づいた。その方がバッファの数が少ないのでC-xC-bやらF2、スイッチバッファでのバッファの切り替えが楽。まあxyzzyだとemacsと違って何個バッファ開いてもほぼ重さは変わらないけど、

細かい所の使い方がある程度分かったら最近のバージョンのEmacs日本語環境で、定番カスタマイズの話でも書くかも。

2017-11-04 父がアップルを解雇された娘の「号泣謝罪動画」 500万再生を突破

[]xyzzyって便利だなって

昨日Emacsかviがいいぞなんていった手前ちょっと思い出したように今の情報をかき集めようとした結果、手前味噌というか相変わらず今でもxyzzyのすばらしさに気づいてしまう。今の新しいすっぴんemacs25.3をダウンロードしてみて思ったけどC-xC-bでバッファの切り替えしたらキャレットを毎回C-xC-o必要で思わず無表情になってしまうわコレ。すっぴん過ぎるだろと。xyzzyだったら初めからC-xC-bしたらキャレットも一覧に映るという親切さ、いやマジでxyzzyの痒い所に手が届いてる感はすばらしいと思うんだ。てかxyzzyなんにもしなくてもほとんど初めから付いてくるし、ネットインストーラで拡張も一発。tree-viewつけれちゃえば、そもそもバッファの一覧をC-xC-bで出す必要なくて、その上tree-viewで解析されちゃうのでアウトラインプロセッサーみたいになるという。C-xC-bと大差のないtreeではないし、C-xdやらやたら分割しているのを大体一つで代替できるという。しかもファイラ自体はC-cC-fの付属のファイラが普通にあるし。

基本的な設定で、行番号表示や日本語入力から、仮想行の扱い(これは未だにemacsだとどうやるのかよくわからない)とか基本GUIでマウスポチポチで設定が終わるという。マウスポチポチしてたらタグジャンプだって数回クリックするだけで出来るという。infoも探さなくてもいいし適当にリファレンス入れるだけで日本語のヘルプが出てくれる。検索もインクリメンタルサーチが事実上標準だし、それどころかxyzzyだとoccurなんて単語も知らずに単にC-s連打すりゃ難しい事は何にもなくても直ぐにバッファ内の検索結果を一覧で返してくれるというお手軽。しかも処理速度もはやい。そこに自分で手を入れまくってるからC-xC-fすらなんか自前のxyzzyと比べると素うどんemascは異次元の使いにくさである。これは私じゃなくてもフォースの暗黒面に染まってしまうかもれしん。

いやダウンロードしたばかりのemacsすっぴん過ぎる。本当に揚げ玉すら入ってない。昨日ふわっと使ってるなんて書いておいてなんだけど確かにコレは人を寄せ付けない雰囲気は十分あるわ。でもまあ機能がないわけじゃないんだよemacsは設定に時間がかかるだけで設定してけば一応出来るようにはなるから。多分。

いやウィンドウの表示位置とかどうやって記憶させるのかとか、仮想行どうやってやるのかとか、xyzzyでやってる沢山のことが今の私のemacsの使い方程度だとよく分からないという問題はあるかもしれない。だってgoto-virtual-bolとかがないんだよねemacs。

2017-11-03 安倍首相、女性支援のイバンカ氏基金に57億円拠出を表明

[]Emacsが衰退したという話を見て

- https://www.slideshare.net/taumu/emacs-76377586

 これ。ちがくね?まず衰退したのはEmacsやViではないと思う。xyzzyは間違いなく衰退した。そうWindowsの雑多にあった沢山の微妙な感じでシェアを分けていた日本人むけの大量のエディタが衰退したのである。秀丸やらサクラくらいはまだ良い。でも昔はもっと有象無象のエディタが沢山あったそしてそれはほぼ絶滅危惧種になってんじゃないのかな。こっちの意味の衰退は間違いない。まずネコも杓子のPCという時代が終わり、スマホとオフィス使えれば十分な流れでユーザーの数が減ったのである。これによりわけも分からずエティタを使っていた多くのホームページを作っていた層とかがほぼ絶滅したと思う。今はやってもブログか日記。それも少数派でブログすらなくてfacebook。これによりブログパーツとかそういうノウハウも必要ないし。facebookも完全に金のためにやるツールなので、できれば手を出したくない人の方が多数。そもそも、facebookはそう別に便利でもなんでもないという事実がある。その結果、オープンな場所にはtwitterもあればいいほうという風になった。普通はもっと閉じててLINEとかで十分だから。発信力が高い人がtwitterとかインスタみたいなのをやっている。

 結果エディタが必要ない。この流れ。viやらemacsはlinuxとかunix好きな人が一定数いてメモ帳代わりに使うので好き嫌い以前にメモ帳が絶滅しないように実用ツールとして絶対viやらvim、emacsあたりは残ってしまう。emacsが残る理由も割りと消極的でviの変なキーバインドよりはemacsの方が全然windowsに近いからっていうだけだと思う。

 emacsに関してはむしろ昔より絶対に簡単になっている。パッケージ特に日本語向けのパッケージが簡単に手に入るし。windowsっぽい操作にも簡単にできるし設定がGUIで普通のエディタの設定位のができるのでそもそもメモ帳代わりが本気で現実的。vimをメモ帳代わりにするとモード切替で躓く人も多いからね。そしてWindows環境では日本語とviのキーバインドは決定的に相性が悪いIMEとモードの切り替えが2重苦でその辺を設定で誤魔化す必要があるのだけどこれは個人がやる事なのでぶっちゃけ個人次第になる。その点からいくともはやEmacsの方が初期の敷居すら低いといわざるを得ない。だってlispなんてなくても別に普通のWindowsに割りと近い感じでかけるからね。

 あとメンテナンスに関してはvimも実は数人しか触れてないのでOSアップデート次第ではやばい事には変わりはないと思う。ただviはもうそんな極端な変更はしなさそう。Emacsはその辺カスタマイズの範疇になりそうな部分もパッケージ化して色々フォークしているので細かい調整で徐々に敷居が下がり続けるのではないかって言うか、実際ここ10年位で凄く簡単になってると思う。前は日本語使うだけで結構面倒だったというか実際は日本語では使えるソフトでなかったのでxyzzyみたいのが人気だったというか。まあ今もWindows環境で日本語打つソフトとしてはxyzzyの方が敷居が低いと思うけど

[]エディタの持続性

SublimeTextとかNeovimとかSpacemacsが10年後もあるかっていったら大いに怪しい。けどvimやemacsなら10年後もあるだろう。

昔流行っていたTextMateやら様々な和製エディタとかの並びが今ほとんど見かけないように、流行モノはすぐ廃れる割にかけるコストがでかい

そういう意味じゃ最近ある新参エディタの中でマシなのはAtomとVisualStudioCodeとかだと思う。理由はもはや新参で何とかなるには最低限オープンソースっぽい方向性、そしてMicrosoftGitHubみたいな後ろ盾。MSとかは一度やると一過性の明らかにネタくさいモノをのぞけば結構長引く傾向があるから。どちらも設定自体は比較的簡単なほうだし方向的に生き残りそうなのは伝統じゃなきゃ後ろ盾のデカさで直ぐコロコロ変わるソフトは基本駄目だと思う長持ちしないから本当に学習コストや設定コストが高い。

特にAtomはGitHub使ってもらう為のツールの一つだとすればGitHubと便利に連携する機能を付けまくれば結果GitHubの利益になるので収益構造も何となく分かるし、無料で配っても収入源が後ろでつながっているから割と長持ちしそうな気がする。

[]カスタマイズ性能と学習コスト

あと

「Emacs」と「Squeak」(Pharo)に共通するのは、際限のない拡張性と自由度です。単なるコードエディタというより、もはや仮想OSのようなフリーダムさを持っています。

それらの生みの親であるストールマンアラン・ケイが掲げる理想は立派ですし、今なお古びない設計思想の美しさは魅力的です。

しかしそのかわり、使いやすさが犠牲になっています。とくに初心者が迷子になりやすい、複雑さや難解さや不親切さを持っています。

カスタマイズするための(Emacs)LispやSmalltalkの言語からして難しいです。少なくとも、VSCode(カスタマイズ用)のTypeScriptやAtomのCoffeeScriptよりは難しいでしょう。

そもそも、冒頭のWebアプリの話から言えば、言語にJavaScriptRubyなどのLLを選ぶ時点で、エディタもライトなものの方が合っています。

https://qiita.com/lldev2/items/46d55f71bdc1af2e3b10

こういうのも全然理解できない。てかlispってどっちかっていうとライトだと思うんだよ。Cとかだと変数とかが凄い硬いけどlispって適当に1行書いて動かせる辞典でめちゃめちゃライトだと思う。しかもエディタ上で動作が一瞬で確認できるし、言語的にもこの適当さはむしろjavascriptに似てるくらいじゃないかと。自分はjavascriptは結構いいんじゃないだろうかとか思った理由は、むしろlispになんかにてるとなと思ったからいいなと昔思ったくらいで。けどエディタにlisp代わりでjavascriptでやれっていわれたら結構戸惑う。だってJavscriptってHTML前提のなら割と直ぐで切るけど、タグが書いてない文字列の操作って実際ほぼやった事ないわ。私は個人的にxyzzyつかって正直ワンライナー的なことをlispでやってる。てかLispで高尚な事とかもできるらしいけどぶっちゃけ今だに文字列操作しかほぼした事ない。Emacsとかもそうだけどエディタのマークとかキャレットの位置を使ってここからここまでとか範囲指定できるのがずるすぎると思うんだよ言語的に超絶楽チンじゃん。しかもスクラッチとかでエディタで書いてそのままエディタ開いた状態でそこに結果を直ぐ反映させられるからへんなスクリプトより簡単だし見てるファイルに直接つかって失敗したらそのままC-zでUndoできちゃう。何コレ失敗がありえないみたいな超簡単。それも別にそんな巨大ファイルじゃなきゃ重かろうがなんだろうがそれで書きゃ動くし凄いライトだと思うんだ。


なんかEmacsやEmacsen使ってないユーザーには勘違いされて凄い重厚そうなものと思われてるみたいだけど、実際そんな重厚そうなのは一部のスパーハカーだけで、普通の人はもっとふわっとした感じで使ってると思うんだよ。てか楽だから使ってる以外何者でもないし。Emacsバインド自体が汎用性が高くてはっきりいってviより学習コストも低いでしょ。shellとか使ってたって何使ってもだいたいEmacsキーバインド通るからね。つまりOSがunixだろうがlinuxだろうがmacだろうがみんな大体Emacsのキーバインドが通るってわけでWindows以外のキーバインドでは最も汎用性が高いキー設定の一つで一つ覚えたらみんな同じのが使える。OSまたぐっていう意味ではWindowsよりもユニバーサルかもしれない。キーバインドとかの学習コストは相当低い部類だと思う。そもそもlisp自体がただのマクロじゃなくて言語なので覚えて無駄になるわけでもないしlispが消え去る事もまず考えられない。javascriptも似たようなところはあるけど、仕様や使われ方が結構変わる過渡期の言語だから、今覚えたことがほぼ使えない環境になる可能性ってのは結構あると思う。

[]結局基本性能

 AtomだとかSublimeTextだとかいっても結局最後に重要なのは基本性能。ぶっちゃけ色が変わってうれしいとかはどれも程度の差はあれみんなできるわけで、最後の所は立ち上がる起動速度とかファイルを開く速度とか置換する速度とかがイライラしないかが凄い大事だと思う。そういう意味じゃemacsは機能に対して十分すぎるほど洗練されている。昔は遅いといわれてたらしいけど今時のエディタなんてそれをいったらクソ重いことになってしまう。emacsはもはや十分すぎるほど軽く、十分すぎるほど速い。そしてイライラするほどの致命的な速度の問題はない。でもxyzzyの方がもっと早い。時にWindows上でファイルを開いたり閉じたりするのは本当にxyzzy早い。

でもこういうのは一度してしまうと移行するのが面倒なので、はじめっからviかemacsに専念するべきだと思う。特にemacsばかり使うのが結局楽だと思う。viに行くとキーバインドで余程使い込まないと体得できないのでそのへんはemacsの方が指が楽。アタマの方はlisp覚えるのでややviより苦しいがタイプで分けたほうがいいと思う。でも学生とかなら悪い事はいわないからそのどちらかで慣れておけば何かと都合がいいと思う。windows以外のにも慣れれるし一度体得するとwindows上でも絶対使いたくなる。しかも長い目でみたら学習コストも安い。他の奴は乗り換えるたびに覚えるハメになるし設定を何度も繰り返すのは意味がない。かといって設定ができもしないカスタマイズもないような奴じゃ使いやすくないというジレンマ。だから継続性があってカスタマイズはできるっていうと必然的にvimかemacsしかない。特に学生なら余計なのやるくらいなら徹底してemacsかviにした方がいい。時間の関係もあって後からじゃこの二つはほぼほぼ体得できない。悪い事いわないから本当にemacsかviにした方がいい。

追記:ただしviの場合は別の問題点もあって、viのキーバインドになれるとむしろvi以外が使いにくくなる。emacsもやや似たような傾向はあるが、viほど酷い症状はない。

基本性能以外で重要だとしたら既にかいた継続性と拡張性能とか。Emacsなんかは拡張性だけで生き延びている気がする。特殊な環境でしか存在しない奴もだめ。そういう意味じゃメモ帳くらいの一般性があるのが最も望ましいと思うけど、流石にメモ帳は機能がなさ杉。短期的に見た場合と違って継続的に見た場合、数年したら開発が止まって凄い不便みたいな流れもある。拡張機能がないのも直ぐに陳腐かしてまた別の新しい環境を設定してみたいな流れになって結局時間を取りまくる。昔はやったあのエディタ。あのIDE。でも結局今から見て残ってるのはemacsやvi。変な環境の学習に時間かけるならむしろ言語を覚えた方がマシだけど、直ぐに廃れる流行のプログラミング言語とかVBとかみたいな前例もあるから言語としてみてもlispはそんな悪くないんだよね。

2016-08-06 <尖閣>周辺に中国船230隻…接続水域侵入、政府が抗議

[]xyzzyhtmlを書く人向け

最近xyzzyのWikiが何かスパムが増えすぎている気がする。前からあったけど、日本語がないコメントをはじくプラグインか何かないんだろうか。ワードプレスにあるbotを弾く奴みたいなのがあればいいのにとか思いつつhtmlを書く人向けの話

■入れた方がいいと思う拡張

javascriptを使わない人でも、html+-modeだけじゃなくてjavascript-modeも一緒に入れておいたほうが良いと思う。最近のhtmlは読むときにコードにjavascriptが混じってるので。multi-major-modeは色分けの問題を大分解消する。

■必要なら入れた方がいいと思う拡張

  • emmet
  • php-mode

php-modeはphpが混じったファイルを見る日とならhtmlだけじゃなくてついでに入れたら良いと思う。emmetはhtmlを大量に手で書く必要がある人なら便利。

div>ul>li*3>a>span.outlink{click}

みたいな風に書くと

<div>
  <ul>
	<li><a href=""><span class="outlink">click</span></a></li>
	<li><a href=""><span class="outlink">click</span></a></li>
	<li><a href=""><span class="outlink">click</span></a></li>
  </ul>
</div>

みたいに展開してくれるらしい。emmetはxyzzywikiとかであまり見かけないと、便利だと思う。多分手打ち速度はめちゃくちゃ速くなるんじゃないだろか。

個人的にやってるの

個人的にやっているのはfirefoxで画面を選択してコピーしたテーブルとかをxyzzy上でもう一度テーブルとかに戻すlispとかは作ったりしている。原理的には

  • html+-mode
  • javascript-mode
  • multi-major-mode

これをfirefoxでコピーすると

    html+-mode
    javascript-mode
    multi-major-mode

見たいに前に半角スペースが4つ入ったのになるので、半角スペース四つならリストにして

<li>html+-mode</li>
<li>javascript-mode</li>
<li>multi-major-mode</li>

見たいなのにするだけなんだけど。これの何が便利なのかというと別にそんなに便利じゃないはずなのに何故か頻繁に使っている気がする。自分で何でこういうのをそんなに使っているのか理解できないが何故か便利になるタイミングが結構ある。特にテーブルの奴はよく使っている。

2016-08-05 8日午後3時に「お気持ち」=天皇陛下、ビデオ形式で表明―生前退位め

[]xyzzyでgitを使う場合

今は猫も杓子もgitの時代なので、git用のxyzzyの奴が何かないか探してみた。

Xig: xyzzy interface for git

https://github.com/yosugi/xyzzy.xig

という拡張があるらしい。

[]gitのコマンドをxyzzyから打つやつ

Xigはdiffとかが見れる。私はGUIが付いてるソフトとかも使ってるので、xyzzy上では簡単なコマンドを打てればいいなと思ったのでコマンドを補完するのを適当に作った。私の作った奴は一応動くけど、動けばいいという程度なので自分が普段使わないコマンドだと問題が起きるかもしれない。

■これは何をするか

C-c g を打つと git のコマンドが1行打てるだけ。

■使うのに必要なもの

必要なもの:git for windows

■これのいいところ

  • 一応コマンドが適当に補完される。
  • 一行打てればいいコマンドならgit bashを起動しなくてもいい
  • 今開いているファイルの所でgit bashを開ける
  • 今開いているファイルの所でgit guiを開ける

本当は初めは今編集しているファイルの場所でgit bashを開ければ別に良いんじゃないかと思って作ったけど、開いて一行commitするだけなら別にgit bash開かなくてもhgの時みたいな一行コマンドで良いなと思い直して1行打てるようにした。打つ時にgit 〜って毎回gitが付くコマンドなんだからgitは打たなくてもgitが初めから入力されるようにしてその後ろに続くコマンドを補完できるようにした。ツリー図みたいなのはテキストのgit bashよりgit guiの方が優れてるなと思っているので、git guiでも開けるようにした。

ただ、ぶっちゃけ適当なので、適当でいい人以外は迷うことなくXig: xyzzy interface for gitこっちを使ってほしい。

■使う時に設定するもの

      (git-gui "C:/Git/git-gui.exe") ;git gui のパス
      (git-bash "C:/Git/git-bash.exe")   ;git bash のパス

の所にgitのおいてあるパスを入れる。

後はしたの奴を.xyzzyとかにコピーしとく。

コマンド補完がない時は、comp-list の所の文字列に適当に加えればいい。でも実際1行で使うのはaddとかcommitくらいな気はする。ぶっちゃけ操作が必要ならgit bashを開くコマンドが一番便利じゃないかと。diffとかは作るのが面倒だからgit gui とかのを見れば良いんじゃないかな。って言うかxyzzyはemacsとちがってwindowsだから他のソフトもGUI付いてる奴もwindowsっぽく利用すればいい気はする。

(let ((output-buffer "*git*")
      (git-gui "C:/Git/git-gui.exe") ;git gui のパス
      (git-bash "C:/Git/git-bash.exe")   ;git bash のパス
      (comp-list '("add" "add -u" "add -A" "add *.l" "annotate" "bash" "branch"
                   "cat" "checkout" "commit" "copy" "clone" "diff" "diff --cached"
                   "grep" "gui" "init" "locate" "log" "log --graph" "ls-files"
                   "manifest" "merge" "mv" "pull" "push"
                   "reflog" "rm" "remove" "rename" "reset" "revert"
                   "show" "show HEAD" "shortlog" "status" "tag" "update"
                   "help" "--version")))
  (defun git-cmd(&key set-output set-list set-dir)
    "git cmd のコマンドを補完"
    (interactive)
    (cond (set-output (setq output-buffer set-output)) ;;設定用機能1
          (set-list   (setq comp-list set-list))       ;;設定用機能2
          ((or set-output set-list)                    ; 引数に設定がされた場合
           (message "arg set")
           (return-from git-cmd t))
          ((and (not (get-buffer-file-name))           ; ファイルがないバッファでは動かさない
                (not set-dir))
           (message "current buffer-file-name is nil")
           (return-from git-cmd))
          ((and set-dir
                (not (file-directory-p set-dir)))
           (message "arg is not dirctory")
           (return-from git-cmd)))
    (define-key minibuffer-local-completion-map #\SPC 'self-insert-command)
    (let* ((dir (or set-dir (directory-namestring (get-buffer-file-name))))
           (str (completing-read "git " comp-list :must-match nil))) 
      ;;補完後の動作
      (cond ((string= str "add")
             (setq str (concat str " \"" (read-file-name "file: ") "\"")))
            ((string= str "commit")
             (setq str (concat str " -m \"" (read-string "message: ") "\"")))
            ((string= str "diff")
             (setq str (concat str " \"" (read-file-name "file: ") "\"")))
            ((string= str "grep")
             (setq str (concat str " \"" (read-string "pattern ") "\" "
                               (buffer-name (selected-buffer)))))
            ((string= str "gui")
             (shell-execute git-gui dir)
             (return-from git-cmd))
            ((string= str "bash")
             (shell-execute git-bash dir)
             (return-from git-cmd))
            )
      (execute-shell-command (concat "git " str ) nil output-buffer nil dir)
      (if (or  (string= str "diff")
               (string= str "diff --cached")
               (string= str "log")
               (string= str "log --graph")
               (string= str "ls-files")
               (string= str "reflog")
               (string= str "show")
               (string= str "show HEAD")
               (string= str "shortlog")
               (string= str "status")
               (string= str "--version")
               (string= str "help"))
          (git-cmd :set-dir dir)
        (and (delete-buffer (find-buffer "*git*"))
             (if (> (count-windows nil) 1)
                 (delete-window))))
      (message "git cmd done")
      )))

(global-set-key '(#\C-c #\g) 'git-cmd)