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

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

HimaDataNode bookmark archive

xyzzyを使いたい人向け

2016-08-23 リアル「安倍マリオ土管」説も 池袋駅前に謎の「緑の物体」

[]git for windows だけで出来る ssh

最近 xyzzy の git のを色々試してみて気づいたのでちょっと色々試した事とかを書いてみる。git で ssh を使う時の解説ページがいくつもある。ただ何故かほぼ putty を使っている。個人的にも putty を使ってたので、putty で ssh を使う人がいるのは分かるんだけど、git の場合 git bash があるから別に絶対 putty って事もないはず・・・。しかし Windows だと何故かほぼ ssh を使う時 putty を使ってる説明になっている。もしかして putty じゃないと上手くいかないのかなとか色々思ったり。

なので putty を使わないで git for windows で ssh を試してみた。適当にやったら普通に出来た。なんで windows だと putty の説明になっているのか分からないが、説明で見た putty を使う方法より git for windows だけの方がインストールする手間も少なくて簡単な気がしないでもない。むしろ putty を使う事で複雑になっている気が。

これはもしかして布教なのか? Windows 以外の方が分かりやすくて簡単だよ的な布教なのか?ヨーダのようなすばらしい導師に導かれたい人は Mac にお布施をしろと?Windows でフォースの暗黒面を前面に押し出した Emacs もどきの xyzzy を使っているベーダーは putty 使っとけと?だが待ってほしい。フォースの暗黒面に染まりきってる xyzzy ユーザーなら Windows だけ除け者になる理由はない事に気づくはずだ。っていうか、Windows で git を使おうと思ったら大体インストールする git for windows に ssh も一緒に入っているわけで、あえて別のやり方って分かり難くないのかこれはと。ということで日本語だと何故か猫も杓子も putty で説明してるので、適当にやってみたらできた git for windows の ssh-agent を使って SSH をしてみる話。

  1. git for windows をインストールする
  2. git bash のエディタを xyzzy にする
  3. git bash で vi 開いちゃって閉じたい
  4. git for windows のインストールが終わったら確認
  5. git for windows で ssh の鍵を作る
  6. git for windows で ssh の鍵を登録する
  7. gitlab の SSH 設定をする
  8. ssh の設定が上手く言っているか試
  9. ssh の config 設定をしておく
  10. https で clone したのを ssh にする
  11. SSH で git push とかしてみる
  12. 簡単に`ssh-agent`して ssh-add する
  13. git bash すると ssh-agent を自動で起動
  14. SSHの方が遅いからHTTPSにする?

少々 git bash がとっつき難くても、ついでに bash にも慣れて ssh-agent も覚えてしまえば、実は mac でも linux でも似たような操作で出来ちゃって winndows 使ってる人が知識を広げるのに git bash はとても向いてる気がする。あと捻くれものの為に、説明は github じゃなくて gitlab を使う。github の説明はたくさんあるけど gitlab での説明は少ないので少しは為になるかと。

■詳しい話はもっと偉い人が書いてるのを読んだら良いと思う

ちなみに私は適当にやったら動くなと思っただけで、git for windows に関して本当に詳しいわけでも git に詳しいわけでもない。それどころかこの設定してそんな時間が経っているわけでもないし、まだ常用しているわけでもないのでずっと使ってみたら問題があるかも知れない。本当の細かい話は偉いヨーダ的な人に聞いたら良いと思う。

■xyzzy的な話

ここに書いた ssh の設定とかをしても、xyzzy から git add したり git commit したりする分には特に問題ない。push とか clone とかは git bash からやった方が安心かもしれないが、やっぱり add と commit が回数が多い気がするので、そこさえ抑えれば、後は別に git bash でいい気はする。

■git gui的な話

git gui でも ssh-agent の設定をすれば ssh 出来そうだったけど確かめてはいない。git gui の場合は help の show ssh key から鍵が見えるので多分出来るんじゃないかと思う。

[]git for windowsインストールする

 まず適当に適切にインストールする。古い Git for Windows だと何か日本語が化けたりするらしいので新しい奴を入れなおした方が良いと思う。ここで使っている環境は Git for Windows v2.9.0 。それだけ。新規でやる人は Cygwin とかその手のを入れたりすると環境変数の関係で条件が変わるきがするけど、そういうの入れてる人には説明が必要ない気がするというか、自分で何とかしたら良いと思う。もう一度書いとくけど、ここで使っている環境は Git for Windows v2.9.0 だけ。WinSCP とか TortoiseGit とか Putty とか OpenSSH を別途入れたりはしない。勿論 Cygwin とか Mingw-w64/MSYS2 も入れない。というか、こういう話って、色々入れる方が条件が変わったり失敗パターンが増えてかえって難しい気がする。挫折した人のための xyzzy の話でも書いたけど、まず基本的な奴でやって理解してないと、飛ばして先に進むとわからなくなる気がするので、先に一番スタンダードそうなので試して上手く行ったら便利そうなのを試せばいいんじゃないかと。

 やりかたは Putty をいれないから当然だけど Pageant じゃなくて、git for windows に付属している ssh-agent でやる。っていうか 付属してるんだからそれを使っても良いと思うんだよ。一応みんな基本で入れてる git for windows で満足出来ない人は putty とかを自分で設定くらいできるでしょっていう気もするので。

■一応インストール時の注意点

Run Git from the Windows Command Prompt

これを選ぶと環境変数 path に

C:\Program Files\Git\cmd(パスはGitをインストールした場所による)

を追加する。

Run Git and included Unix tools from the Windows Command Prompt

これを選ぶと環境変数 path に

C:\Program Files\Git\cmd

C:\Program Files\Git\mingw64\bin

C:\Program Files\Git\usr\bin

の3つを追加する。らしい。

ssh は Git\usr\bin に入っているのでここでは "Run Git and included Unix tools from the Windows Command Prompt" を選んだ方が都合がいい気はするが、個人的には確か Run Git from the Windows Command Prompt を選んだきがするのに Git\usr\bin のパスが通っていたのでその辺はよく分からない。適当にインストールをして試して駄目なら変えればいいと思う。Cygwin とか他のツールを使ってる人は慣れてると思うので、そういう人は自分で調節したら良いと思う。使えないけど趣味で Cygwin を入れてるという人は使うものだけ入れた方が良い。というかそうしないと挫折する。xyzzy でも同じだけど、使えないのに入れてると問題を引き起こすので。特に環境変数のあたりは問題が起きるし、インストーラでも実際警告の一文が出ている。

[]エディタxyzzy にする

 まずエディタの設定の話を先にしておかないと、設定ファイルを変えるたびに vi が立ち上がって操作方法が分からない人がいる気がするので先にエディタの設定。

core.editor

コミットやタグのメッセージを編集するときに使うエディタは、ユーザーがデフォルトエディタとして設定したものとなります。デフォルトエディタが設定されていない場合は Vi エディタを使います。このデフォルト設定を別のものに変更するには core.editor を設定します。

$ git config --global core.editor emacs

xyzzy ならば、 emacs となっている所を、xyzzycli にでもすればいい。.gitconfig の場所は ~/.gitconfig なので、一度

$ vi ~/.gitconfig

から .gitconfig の設定をして

editor = "エディタのパス"

をチェックすればいい気はする。UTF-8(BOMなし)で保存にすると良いらしい。ただ、 git bash 使う時だけならどうせちょっと設定ファイルいじるだけなので vi を使った方が親和性は高い気がする。説明しといてなんだけど、ここは後から変えたい人が変えればいい場所だと思う。個人的にも vi のままにしている。

[]vi の閉じ方

 vi を使えば良いといっても閉じ方が違うので慣れてないと困るかもしれないから一応。

$ vi ~/.bashrc

とかをやると、bash から vi が立ち上がってどうやって戻ればいいのか分からないかもしれないが、基本的にはESCを連打しておいて、

:wq

を打てば保存して閉じる事が出来る。 vi での編集を済ませたたら :wq で普通に閉じるだけ。 :wq で無理な場合は :wq! で閉じると閉じれるかもしれない。 vi なので閉じ方は何個もあるが基本は :wq を打てばおk。一応他の方法は :x 、ZZ なんかも似たような感じで閉じるが例によってなんでこんな何個も用意しているのかは似非ベイダーじゃなくてヨーダにでも聞かないとよく分からない。

[]インストールが終わったら確認

 SSHで通信する前に git bash を動かして

$ ssh-key

で tab を連打してみる

上手くいってる場合

$ ssh-key
ssh-keygen.exe   ssh-keyscan.exe

という感じで ssh-keygen.exe などの候補が出る。上手くいってない場合は候補に出ないかもしれない。普通は git for windows を上手くインストールすれば勝手にパスが通ってる気がする。っていうか個人的には選択肢を選んで適当にインストールしただけでこうなっていたので他の環境はよく分からないけど。 Cygwin とか入れてると環境変数が面倒な事になるとかはどこかで見た。

[]sshの鍵を作る

打つコマンド

$ ssh-keygen.exe -t rsa -C "メールアドレス"

打った後

$ ssh-keygen.exe -t rsa -C "メールアドレス"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/username/.ssh/id_rsa):  #左のパスで良ければ[Enter]。
Created directory '/c/Users/username/.ssh'.
Enter passphrase (empty for no passphrase): #パスフレーズを打つ
Enter same passphrase again: #もう一度確認でパスフレーズ

 keyを作る場所は、変えない方が面倒ないのでそのまま推奨する。そのままだと普通に使ってるwindowsの場合は[~/.ssh]で鍵のパスが指定できてフルパスが必要ないので打つのが楽。パスフレーズはパスワードみたいなものだと思えば良い。覚えておかないと駄目。

成功した場合

Your identification has been saved in /c/Users/username/.ssh/id_rsa.
Your public key has been saved in /c/Users/username/.ssh/id_rsa.pub.
The key fingerprint is:

こんな表記が出て~/.ssh/以下にid_rsaというファイルがで作られる。

The key's randomart image is:
+---[RSA 2048]----+
|     .o...o.oo++ |
|     +.*.o.+.=o o|
|    o E %.=.+o . |
|   . o B X +...  |
|    . . S = o    |
|     . + o +     |
|      =   . o    |
|     .     o     |
|                 |
+----[SHA256]-----+

あと何かこんな模様が出てくる。模様の詳細はランダムなので細かくは違ってもいい。

失敗した場合

open /c/Users/username/.ssh/id_rsa failed: No such file or directory.
Saving the key failed: /c/.ssh/id_rsa.

とか出た場合は

$ cd ~/

で移動して

$ mkdir .ssh

でフォルダを作れば良い。別に git bash からじゃなくてもc/Users/user/の所に.sshという名前のフォルダを作れば問題ない。

[]sshの鍵を登録する

鍵が出来たら、ssh-agentを起動して鍵を登録

  1. $ ssh-agent
  2. $ eval `ssh-agent`
  3. $ $ ssh-add

をやる。

$ ssh-agent
$ eval `ssh-agent`

しておいてから ssh-add で鍵を登録

$ ssh-add ~/.ssh/id_rsa

成功した場合

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/username/.ssh/id_rsa: #パスフレーズを入れる
Identity added: /c/Users/username/.ssh/id_rsa (/c/Users/username/.ssh/id_rsa)

失敗した場合

Could not open a connection to your authentication agent.

とかエラーがでる

失敗した場合の対策

 前の手順を見直す。

 ssh-agent が起動してないとエラーがでる

 eval `ssh-agent` してないとエラーがでる(これはWindowsの場合だけらしい)

$ eval `ssh-agent`で成功した場合

$ eval `ssh-agent`
Agent pid number

成功しているとAgent pid で数字が出るだけ。色々出てる場合は何か違う事しているんじゃないかと思う。

$ eval `ssh-agent`で失敗した場合

$ eval `ssh-agent`
bash: `ssh-agent`: command not found

どこかの設定をコピペしてて表記が変わっている場合とかがある。

例えば、`(半角)が`(全角)とかになってると失敗する。

[]gitlabの設定をする

$ clip < ~/.ssh/id_rsa.pub

クリップボードに公開鍵をコピーして、gitlab の profile bから SSH keys の設定をする。Key の所にコピーしたのを貼り付けて、title に適当な名前を入れて Add key で登録

[]sshの設定が上手く言っているか試す

$ ssh -T git@gitlab.com

成功した場合

$ ssh -T git@gitlab.com
Welcome to GitLab, username

失敗した場合

$ ssh -T git@gitlab.com
The authenticity of host 'gitlab.com (104.210.2.228)' can't be established.

失敗した場合の対策

gitlab の profile から ssh key がちゃんと登録されているか確認する。SSH をはじめに使う場合、鍵が何個も登録されている場合はとりあえず使う奴に絞って、後は remove しとく。何個も登録されてると、違う鍵になってたりする。あと回線がhttpsしか許可されてない場合とかも稀によくあるかもしれない。

ssh -vT git@gitlab.com

デバッグできるらしい。-T のオプションは使っていない人も多いみたいなのでつけないと駄目って事もないと思う。

[]configで設定しておく

$ vi ~/.ssh/config

SSH の config を設定しておく。

ex

Host gitlab
  HostName gitlab.com
  User git
  ForwardAgent yes

この例では

$ ssh -T git@gitlab.com

の代わりに

$ ssh -T gitlab

で同じ事ができるようになる。あくまで例なので、ここは config の書き方をよく調べて自分に都合が良いように設定すれば良い。

Host 任意の接続名
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのPATH(例 ~/.ssh/hoge.key)
ServerAliveInterval 秒数
ProxyCommand

ServerAliveInterval は放置しとくとログアウトしてしまうサーバーなどを一定間隔で生存報告してログアウトさせない。

[]https で clone したのを ssh にする

 既に https で clone してて ssh に出来ないよって言う人も origin を ssh に変更すれば普通に ssh になるはず。

今の origin を確認する

$ git remote -v

https になっている場合

origin  https://gitlab.com/accountname/hoge.git (fetch)
origin  https://gitlab.com/accountname/hoge.git (push)

見たいに https が出るはず。hogeの所は変動する。

origin を変更する

$ git remote set-url origin git@gitlab.com:accountname/hoge.git

git@gitlab.com:accountname/hoge.git の所は自分の gitlab のページの HTTPS/SSH の URL を入れる。HTTPS と SSH はプルダウンメニューから選べるので SSH の URL を選ぶ。

上手く言ったかを確認する

$ git remote -v
origin  git@gitlab.com:accountname/hoge.git (fetch)
origin  git@gitlab.com:accountname/hoge.git (push)

のように https の所が git@gitlab.com: になっていれば変更できている。

[]SSHgit push とかしてみる。

$ git pull

して上手くいってれば

$ git pull
Already up-to-date.

となる。

$ git push origin master

して上手くSSHで接続できていればファイルの情報が表示されて下の方に

To git@gitlab.com:accountname/hoge.git

のように To git@gitlab.com:accountname/hoge.git になっているはず。

[]簡単に`ssh-agent`して ssh-add する

このままだと git bash を起動する度に ssh-agent を動かす事に。それが面倒な場合の色々

$ vi ~/.bashrc

で.bashrcを編集して

alias ssh-set='eval `ssh-agent -s` ; ssh-add'

とかすると、ssh-set で 'eval `ssh-agent -s` と ssh-add を実行してくれる。ssh-set の所は好きな名前にすれば良い。でもこの設定はぶっちゃけあまり必要はなくて、ssh-agent を自動で起動する方がらくだと思う。

[]git bash すると ssh-agent を自動で起動

$ vi ~/.bashrc

で.bashrcを編集して

#ssh-agent
eval `ssh-agent`
ssh-add

と追記しておくと、git bash を動かす時に自動で ssh-agent を起動してパスフレーズの入力を一度だけ求められるようになる。git bash が起動している間は何度もパスフレーズを入力する必要はない。 devian のページとか見るとパスフレーズなしで ssh の話が出てるので、案外一人で触るならパスフレーズもなくてもいいのかもしれない。やりたい人は下のURLを参考にでもすれば良いと思う

個人的にはパスフレーズは入れている。あと、パスフレーズを設定しても~/.bash_profilとかにパスフレーズを書いてしまって入力を省略する方法とかもあるらしい。パスフレーズの入力も省略はできるらしいが、折角 SSH にしてもそれじゃ本末転倒な気がするので、一度くらいは打てばいい気がする。

実は上に書いた設定だと ssh-agent はログアウトしても残る。ので、ログアウトする時に終了するように .bash_logout に

eval `ssh-agent -k`

を追記しておく。これをやらないと git bash を動かすたびに ssh-agent のプロセスが増えまくる。

何度も git bash を立ち上げたり消したりするような使い方をする場合は ssh-agent が起動する度にパスフレーズを聞かれる。それが嫌な場合はログアウトしたときに ssh-agent を消さないでおく方法もある。 ssh-agent のプロセスを消さないと起動するたびに Windows のプロセスに残ってしまうので $ vi ~/.bashrc で書き換える内容を下のようなのにしておくと幸せになれる。

#ssh-agent
SSH_AGENT_FILE=$HOME/.ssh-agent
test -f $SSH_AGENT_FILE && source $SSH_AGENT_FILE
if ! ssh-add -l > /dev/null 2>&1; then
    ssh-agent > $SSH_AGENT_FILE
    source $SSH_AGENT_FILE
    ssh-add $HOME/.ssh/id_rsa
fi

個人的にはこっちのが楽なんじゃないかと思ったが、このやり方は色々な方法があるようなので、自分の好きなのを選べばいい気がする。こういう話は私みたいなフォースの暗黒面たる windows に染まっていない詳しそうな人が書いているのを色々見た方が良いと思う。この場合は .bash_logout には何も追記しないで良い。 ssh-agent の多重起動を防ぐので ssh-agent が一つだけになる。ただし、ログアウトしてもプロセスをキルしないので、一度 git bash を立ち上げたら後はログアウトしても ssh-agent が立ち上がった状態になる。そのため2度目の git bash 起動時にはパスフレーズの入力も必要ない。 ssh-agent のプロセスはつけっぱなしになる。プロセスをキルしたい場合は git bash を閉じる前に

$ ssh-agent -k

とすれば ssh-agent のプロセスもキルする事が出来る。この辺の問題は OpenSSH を利用するとかなり改善するらしい。多重起動防止とかがあるので。

[]SSHの方が遅いからHTTPSにする?

SSHの方が遅いからHTTPSにするという話を見かけたけど、よく見ると追記されてて

~/.ssh/config に次の設定をすれば、SSH でも十分速くなるようです。

Host github.com
  Compression yes
  Ciphers arcfour256

すれば早くなるらしい。

*1:フォースの暗黒面たる windows の力も結構なものなので多分 Mac じゃないからじゃなくて ssh-agent の種類で色々違うというか。 OpenSSH じゃないからじゃないかと思った。

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時に「お気持ち」=天皇陛下、ビデオ形式で表明―生前退位め

[]xyzzygitを使う場合

今は猫も杓子も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)

2016-08-03

[]キーボードは白か黒かマットかツヤか

 白しか使った事がない人とか、黒しか使った事がない人が多いので、よく自分が使っていないほうの色なら汚れにくいと思っている人がいるけど、実際は白でも黒でも汚れると思う。ただ、汚れ方が違うだけで。マウスやキーボードは色々乗り換えたので過去の経験から来る傾向を。

  • 白:手垢などの黒い汚れが残る。プラスチックが黄ばむ、黄ばみはタバコと思われてるけど、実はタバコじゃなくても黄ばむし、日焼けもする。印字が薄くなる。
  • 黒:白い埃などが目立つ。部屋の埃などは大体白っぽいので実は埃には凄く弱いと思う。印字は落ち難い気がする。
  • メッキ:表面に何か塗ってあって汚れにくいのもあるが、メッキ自体が擦れたり剥げる。
  • テカテカ:汚れは染み付きにくいけど、触ると指紋がベタベタ付く。綺麗にして置くのが大変
  • マット:マットは短時間では汚れないが、長期で見ると油汚れが染み付くテカテカと違い拭いても取れない
  • ラバー:ラバー加工してある部分が剥げる。剥げた後ベタベタになって使えない。滑り止めにラバーを使っているマウスは大体この傾向が

 その点アルミとかの筐体はよくてメッキじゃないので剥げない。しかもさびない。ただし引っかき傷が付くので、テカテカじゃなくてはじめからアルミに表面加工して Brushed Metal とかにしてあるのは本当は思われいる以上にアイデアが入っている気がする。ただ、アルミはプラスチックより重くなるのでノートPCとかだと不利な所もありそう。白の黄ばみに関しては実は漂白すれば一応取れるけど面倒。

2016-08-02 「握手、嫌そうな顔してたね」初登庁の小池百合子氏を待ち受けていた

[]いい加減書いてる内容が勝手に消えるのがほんと嫌

ブラウザで適当に書いてたら書いてるのが途中で消えてイライラする。前からよくやるんだけど、これ本当に何とかならないんだろうか。更新ボタンとか更新関係のfirefoxとかでカスタマイズしてショートカットキーを全部つぶせばいいんだろうか。この更新ボタンとか同じタブで別のページを開く機能って人類の敵だと思うんだよ。割とマジで。

途中まで書いていた内容はxyzzyとかfirefoxとかatomとかいうエディタとかの話だけど、それだったらatomよりkeySnailがエディタになったほうが未来図的にはよかったんじゃないのかとかいてたら更新が暴発して全部消えたって言う。

atomとかSublime Textとかはどうも重いらしいので、あと何年かしてPCが速くなったら今のxyzzyみたいに気にならないいいソフトになるんじゃないかとは思った。けど、今使うのはちょっと嫌かなとか。まあそれ以前にemacsで良いんじゃないかという気も。最近見かけるエディタの話だと何故かatomとかSublime Textの話が多いのだけど、それとemacsを比べた場合どうナノかが気になる。秀丸とかサクラエディタの話ならもっとカジュアルな用途も含まれそうだけど、プログラミングっぽい話で使うならemacs、vi、IDEとかとの比較なしにはよく分からないというか。でも大体atomとかSublime Text、Bracketsで比較しているのが謎。

http://vivi.dyndns.org/sse/replaceAll.html

ここ見たらSublime Textも比較に出ていたけど、やっぱり重そう。

[]もしxyzzyが将来のWindowsで動かなくなった場合とか

 最近firefoxも拡張、特にKeySnailが動かなくなりそうとかいう話をみて、xyzzyもあまり更新があるわけではないので、Windowsの次のバージョンとかになっても動くのかとか、そういう心配がある。

 まあアップデートがないのは動く限りは別にいいとして、流石に動かないとかだと困るなとか。xyzzyからどうしても乗り換えるならやっぱりemacsになってしまいそう。似てる所が多いし。まあatomとかもemacsのキーバインドには出来るらしいけど。でもxyzzyでやってる自分用設定があると、やっぱり変えるならemacsじゃないと再現するのが大変そう。emacsなら時間をかければ多分ほぼ同じ事が出来るだろうなぁとは思う。ただ日本語とwindowsとの親和性に関してはやっぱりxyzzyのがemacsより上だなと。GNU Emacs 24.5.1を試して思った。

 前はこんな感じで、日本語IMEの扱いが変だった。まあemacsの場合は日本語はSKKでやれとか、IMEを使いたい場合はMeadowだったりパッチを当てたり見たいな話があった。その上パッケージがいっぱいあってどれを入れて良いのか迷うし、 Cygwin も入れろ見たいな流れで、正直普通の人には論外だったけど。まあshellの問題とかを考えるとCygwinが必要になるかもしれない。しかし、エディタの問題から遠い所で迷う要素が多すぎて、いいんだか悪いんだかよく分からない。その点もxyzzyは動かすのに迷う部分が少ない。IMEでそのまま打てて、パッチもいらないし、GUIチェックボックス押すだけでいいxyzzyのWindowsと仲良しっぷりにはかなわない。しかもxyzzyは起動も軽い。

 ちなみに前はgnupackがいいとか見たけど、今回はこの辺を参考にして、新しい GNU Emacs 24.5.1 を試してみた。

[]メモ帳に劣るのか

237 名無し~3.EXE sage 2016/07/20(水) 22:35:10.30 GWmfR9/U

A&#1608;&#1617;
&#1608;&#1617;A
上記文字を含むテキストを開くと、
メモ帳では表示されるのにxyzzyではテキストが文字化けします(半角の■が表示される)。
エンコーディングはUTF-8Nで、他にもNotepad++でも正常に表示できています。
xyzzyで文字化けする理由及び回避方法はありますか?
238 名無し~3.EXE sage 2016/07/21(木) 01:16:51.45 0XimXEp9

xyzzyの内部コードはいわゆるUnicodeの文字全部をカバーしてない
239 96 sage 2016/07/31(日) 10:46:54.53 GupKY8XH

メモ帳にも劣るのかw

この辺の話はたしかメモ帳が最強みたいな話を前2chではよく見た。メモ帳は変わりにEUCの読み書きが出来ない。だから総合的には、xyzzyのほうが文字化けは置きにくい。Unicodeに対応しているエディタ自体がまず少ないので、xyzzyはUnicodeに対応しているだけまだマシなほうだろう。むしろ今でもWindows文字コードに関してはメモ帳はある意味最強の部類らしいとかスレでよく見た気がする。