msys2 をインストールした

Download

MSYS2 installer から msys2-x86_64-20150916.exe をダウンロード&実行.

C:\msys64\ にインストール.

SHELL は C:\msys64\mingw64_shell.bat を使う.

pacman でいろいろインストール

以下の3つ覚えとけばおk.

  • pacman -Ss {name} {name} を検索.
  • pacman -S {name} {name} をインストール.
  • pacman -R {name} {name} を削除.

まずはサイトに書いてある通りに.

$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
$ pacman -Su

さらに適当に.

$ pacman -Sy base-devel msys2-devel
$ pacman -Sy mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-numpy mingw-w64-x86_64-python3-scipy mingw-w64-x86_64-python3-matplotlib mingw-w64-x86_64-python3-pandas mingw-w64-x86_64-python3-Pillow

結論:便利.

グラフィカルなポジション表示プラギン graphical-position.js (for Vimperator) 書いた

はじめに

簡単に言うと Vimperator で現在の垂直スクロール位置を表示するデフォルトの設定である

set status=position

のテキストではなくて円グラフで表示する版.名前は graphical な position ということで gposition とした.

position と gposition の対応表

位置 position と gposition の
実際の表示
0%
69%
100%
(Loading *1 )
Google トップのように
一ページ内に収まってるケース

分かりにくいけど,一番右の円っぽい図形(だけ)が gposition 担当.

設定,または set noscrollbars ノススメ

graphical-position.js

上記ファイルを plugin フォルダに置くだけで有効になる.

内部で set status+=gposition 相当の処理をしているので,.vimperatorrc 内で設定する必要はない.がしかし,ステータスバーの並び順を気にする場合は以下のようにプラグイン有効後に設定すればよい.

autocmd VimperatorEnter ".*" set status=input,location,bookmark,history,tabcount,gposition,ssl

また,これを機にスクロールバーを非表示にすべく set noscrollbars を設定してもいいかもしれない.ちなみに私はこのプラギンを作ってから思い切ってスクロールバーを非表示にして使ってるが,特に支障は出ていない.

あとがき

言葉で表現するのは難しいけどスクロールバーはあの可動部分の長さで全体のスクロール量を表現しているんだけど,これを gposition で実装すべきかどうかは迷った.けどとりあえず今回はシンプルに position と同等の機能をグラフィカルに置き換えるのみに留めた.

あと gposition の表示色をユーザーが自由に CSS で変更できる機能は,現在実装中・・・.

*1:positionには該当する表示は実装されていないけど,gposition では適当な図形をアニメーションしている

SoundCloud Keybind on Vimperator

はじめに

SoundCloud で用意されてるキーボード・ショートカットを Vimperator で使いたい!

ってことで vimpr にあるプラギン feedSomeKeys_3.js 用の設定してみる.

キー対応表

original key description on vimperator
(case sensitive)
space Toggle play & pause p
⇧→
( J でも可 )
Play next track j
⇧ L Repeat playing track r
⇧←
( K でも可 )
Play previous track k
⇧↓ Decrease volume <S-Down>
⇧↑ Increase volume <S-Up>
M Mute volume m
Seek forward <Right>
Seek backward <Left>
0…9 Seek to position <A-0>…<A-9>
P Current playing track <Leader>p
L Like playing track <Leader>l
R Repost playing track <Leader>r
S
( / でも可 )
Search s
H Show keyboard shortcuts ?

自分の stella.js の設定とある程度共通したキーバインドにしてみた.

(※ 2014-04-17追記: P, L, R の対応先を <Leader>p, <Leader>l, <Leader>r に変更した.)

.vimperatorrc 設定例

vkeydown や keydown,keypress などが入り混じってるけどこの辺はトライアンドエラーで決めた.それと j,k がトラック移動に取られているので,このサイトに限り通常のページ上下は大文字の J,K で代用するようにしてる.

Let's enjoy SoundCloud on Vimperator!

Vimperator で「いま読む」「あとで読む」支援コマンド (2013梅雨期編)

はじめに

サイトを見やすく表示してくれる系の Firefox アドオンを Vimperator から呼ぶコマンド群を用意してみた.

この記事で実現すること

  • e で Clearly 発動.
    いま見てるサイトをスッキリ表示.
    もう一度 e すると Clearly オフ,つまりもとの表示に戻る.
  • E (または <Leader>ea) で Evernote にクリップ.あとで見てね!
  • <Leader>ia で Instapaper へ保存.
  • <Leader>ra で Readability へ保存しつつ,
    いま見てるサイトをスッキリ表示.
  • <Leader>rl で Readability へ保存,だけを行う.
  • <Leader>rkKindle へ送る.
  • !CSS オフ.ある意味スッキリ表示.
    もう一度 ! すると CSS オンに戻る.

とりあえずキーバインドはこんな感じ.

利用サービス

使用アドオン

.vimperatorrc

.vimperatorrc に書くコードは.

g:instapaper_usernameg:instapaper_password の設定

上記コードで

let g:instapaper_username = 'USERNAME'
let g:instapaper_password = 'PASSWORD'

の箇所は Instapaper でアカウントを取得して USERNAME と PASSWORD を自分のものに書き換えることが必要.

要 _libly.js

Instapaper 用のコマンド内部で HTTP Request するために Vimperator のプラグイン _libly.js の機能を利用している.ので,要 _libly.js.

あとがき

Clearly 発動コマンドとかもともとウェブ上に情報転がってたけど,そこでアドオンのソース見たら云々って話があったので,自分でもソース覗いて作ってみた.

アドオンの XPI ファイルって実体は ZIP だったと知って,XPI ファイルをダウンロードしてきて拡張子を ZIP に変更し,解凍していろいろ覗いてるうちにできた.

例によって動けばいいじゃんっていうスタンスなので以下略・・・(おわり)

vim-unite-toho つくった

この記事は Vim Advent Calendar 2012 : ATND の 156 日目の参加記事です.

寝るまでがこどもの日(ry

本日,5 月 5 日は「こどもの日」,ということで Vim 弄りを少し離れて 東方 Project の作品をプレイしましょう!

まだプレイしたことがなければサイトのほうに体験版がありますのでお試しあれ.

というわけで Vim の Unite でプレイしたい東方作品を選べる Unite Source を作りました. アクションで設定に使う custom.exe と,非公式ながら一部のユーザーにはお馴染みの vpatch.exe を起動できます(設定すれば

インストール

NeoBundle 'Jagua/vim-unite-toho'

(vimproc もインストールしてればそれを利用するようにしてます)

設定

.vimrc に以下のように設定します.

" Linux 用.$LANG="ja_JP.UTF-8" とかしちゃう.
let g:unite_toho_lang_hack = 1
" <Leader>th で東方ランチャー
nnoremap <silent> <Leader>th :<C-u>Unite toho<CR>

" vim-unite-toho:
let g:unite_toho_config = [{
\   'title'          : 'th06  : 東方紅魔郷',
\   'dirname'        : expand('~/上海アリス幻樂団/東方紅魔郷'),
\   'th_command'     : '東方紅魔郷.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th07  : 東方妖々夢',
\   'dirname'        :  expand('~/上海アリス幻樂団/東方妖々夢'),
\   'th_command'     : 'th07.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th08  : 東方永夜抄',
\   'dirname'        : expand('~/上海アリス幻樂団/東方永夜抄'),
\   'th_command'     : 'th08.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th09  : 東方花映塚',
\   'dirname'        : expand('~/上海アリス幻樂団/東方花映塚'),
\   'th_command'     : 'th09.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th095 : 東方文花帖',
\   'dirname'        : expand('~/上海アリス幻樂団/東方文花帖'),
\   'th_command'     : 'th095.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th10  : 東方風神録',
\   'dirname'        : expand('~/上海アリス幻樂団/東方風神録'),
\   'th_command'     : 'th10.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th11  : 東方地霊殿',
\   'dirname'        : expand('~/上海アリス幻樂団/東方地霊殿'),
\   'th_command'     : 'th11.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th12  : 東方星蓮船体験版',
\   'dirname'        : expand('~/上海アリス幻樂団/東方星蓮船体験版'),
\   'th_command'     : 'th12.exe',
\ }, {
\   'title'          : 'th12  : 東方星蓮船',
\   'dirname'        : expand('~/上海アリス幻樂団/東方星蓮船'),
\   'th_command'     : 'th12.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th125 : ダブルスポイラー',
\   'dirname'        : expand('~/上海アリス幻樂団/ダブルスポイラー'),
\   'th_command'     : 'th125.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th128 : 妖精大戦争',
\   'dirname'        : expand('~/上海アリス幻樂団/妖精大戦争'),
\   'th_command'     : 'th128.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'th13  : 東方神霊廟',
\   'dirname'        : expand('~/上海アリス幻樂団/東方神霊廟'),
\   'th_command'     : 'th13.exe',
\ }, {
\   'title'          : 'th13  : 東方神霊廟 (Trial)',
\   'dirname'        : expand('~/上海アリス幻樂団/東方神霊廟体験版'),
\   'th_command'     : 'th13.exe',
\ }, {
\   'title'          : 'thdnh : 東方弾幕風',
\   'dirname'        : expand('~/上海アリス幻樂団/th_dnh'),
\   'th_command'     : 'th_dnh.exe',
\   'custom_command' : 'config.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }, {
\   'title'          : 'thdnh3: 東方弾幕風ph3',
\   'dirname'        : expand('~/上海アリス幻樂団/th_dnh_ph3'),
\   'th_command'     : 'th_dnh.exe',
\   'custom_command' : 'config.exe',
\   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
\ }]

dirname にインストールフォルダを指定します.その他は適当に. vpatch_command の設定は特に必要ってわけじゃないので,使ってなければ書く必要はありません. マニュアルもありません(後で書く

おまけ

一応 Ubuntu でも動くみたいです(要 Wine). 設定はこんな感じで.

if has('unix')
  let g:unite_toho_config = [{
  \   'title' : 'th10  : 東方風神録',
  \   'dirname' : expand('~/.wine/drive_c/Program Files (x86)/上海アリス幻樂団/東方風神録'),
  \   'th_command' : 'wine64 th10.exe',
  \   'vpatch_command' : 'wine64 vpatch.exe',
  \ }, {
  \   'title' : 'thdnh : 東方弾幕風ph3',
  \   'dirname' : expand('~/.wine/drive_c/users/$USER/bin/th_dnh_ph3'),
  \   'th_command' : 'wine th_dnh.exe',
  \   'custom_command' : 'wine config.exe',
  \   'vpatch_command' : 'vpatch.exe ../vpatch.ini',
  \ }]
endif

has('unix') が真なら自動で command の頭に wine とか付けたほうが便利ですかねー(要検討).

おわりに

なにかあればご報告下さい!

Vimperator Navigation!

Vimperator Advent Calendar 2012 25日目参加記事です.

できる男は知らない場所でもナビゲートできる

Vimperator で 前のページへ戻る次のページへ行く のは [[]] だ.グーグルの検索結果ページなど色んなサイトで使えるけど,もちろん全てのサイトに対応しているわけではない.

が,自分のよく行くサイトが対応していなかったら,やっぱり対応したくなっちゃうのが人情というもの.(というか同じキーバインドでページ繰りできないとムキィー!ってなるのが主な動機だけど

というわけでデフォルトの状態で [[]] で前後ページに移動できないサイトを,移動できるようにしてみたいと思う.

コード

以下のコードを .vimperatorrc にコピペすると,とりあえず

  1. 小説・コミック読み放題 - E★エブリスタ の前後ページヘの移動を [[]]
  2. Togetter の「残りを読む」を ]]
  3. 国立国会図書館デジタル化資料 の前後ページヘの移動を [[]]

できるようになる.

" Vimperator Navigation!
js << EOM
  [[
    '^http://estar\.jp/\.pc/_[a-z]+_viewer', // Site (RegExp)
    '#bq_prev_box',                          // Selector of Prev
    '#bq_next_box',                          // Selector of Next
  ], [
    '^http://togetter\.com/li/[0-9]+',
    false,                                   // Prev が必要ないときは false を指定
    'div[id^="more_tweet_box_"] a',
  ], [
    '^(http://kindai\.ndl\.go\.jp/info:ndljp/pid/[0-9]+|http://dl\.ndl\.go\.jp/info:ndljp/pid/[0-9]+)',
    'button[id="btn-prevpage"]',
    'button[id="btn-nextpage"]',
  ]].forEach(
    function (conf) {
      if (conf[1])
        liberator.execute('nnoremap -urls=\'' + conf[0] + '\' [[ :js let (n = content.document.querySelector(\'' + conf[1] + '\')) n ? n.click() : void(0)<CR>');
      if (conf[2])
        liberator.execute('nnoremap -urls=\'' + conf[0] + '\' ]] :js let (n = content.document.querySelector(\'' + conf[2] + '\')) n ? n.click() : void(0)<CR>');
    }
  );
EOM

おためし

上で設定したサイトでちゃんと [[]] が機能するか確認するために,てきとーに選んだサンプル用のページ,じっと見入ってしまうツイート2012 - Togetter」とエロエロ草紙」 を書いておく.正常に動作してることを確認できたら以後は追加したいタイミングが来たときに上の設定コードに適宜追加していけばどんどんムキィー!になることも少なくなるかも!

おしまい

というわけで,このように URL の正規表現や前後ページへ行くためのセレクタを調べて指定するだけで簡単に追加することができる.また,これをプラグイン化してしまうのもいいかも!

さぁこれで色んなサイトのページ繰りを [[]] のみで済ませて,あらゆる状況でもナビゲートできる男になっちゃいましょう!

Let's enjoy Vimperator!

Vimperator であの娘のサイトへスピーディにダイアル!

Vimperator Advent Calendar 2012 16日目参加記事です.

まずは QuickMarks,でも足りなくなったら・・・?

よく訪れるサイトへは QuickMarks(詳細は :help quickmarks)を常用してたけどそれだけでは足りない!そんな場合に,どのようにしてスムーズに各サイトへ行けば良いの?

解決法としてパッと思いついたものを以下に3つ挙げてみる.

  1. Vimperator の Bookmarks (詳細は :help bookmarks)を使う.
  2. Vimperator のプラグインを使う.
  3. Firefox のアドオンを探す.

まず 1. について,自分はまだ Bookmarks を使ってないのでよく分からない.

次に 2. については vimpr/vimperator-plugins をざっと眺めるとどうやら exopen.js というプラグインを使うと,予め .vimperatorrc で登録してあるサイトへ簡単に行けそうだ,ということが分かった.あとはキーバインドさえうまく設定してやれば今回の目的にちょうど合いそうだ.

だがしかし,今回は 2 + 3 の方法を取り上げたいと思う.すなわち Speed Dial アドオンを Vimperator から操作する ことで問題の解決としたい(と強引に記事タイトルの方向へ持っていくぅ)

できる男は電話が早い!

というわけで記事タイトルですでにネタバレ済みだけど今回は Firefox アドオンの Speed Dial を使う方法を提示してみたい.Speed Dial というのは Opera で有名なのでご存知の方も多いと思われるが,当該アドオンのページのスクショを見ていただければどんなものか直感でわかっていただけると思う. → 「Speed Dial | Firefox アドオン | Mozilla Japan の公式アドオン紹介サイト

また,数年前のものだけどアドオン公開初期の紹介記事があったのであわせてどうぞ. → 「窓の杜 - 【NEWS】「Opera」の“スピードダイアル”機能を再現するFirefox拡張「Speed Dial」

で,Vimperator からこのアドオンを操作するプラグイン speeddial.js (mattn 氏作)が vimpr にすでに公開されている.

使い方はコマンドラインから :sd のあとに半角スペースまで打つと,登録済みのダイアルが補完で現れるので,そこから選択することによってお好きなサイトへ行ける.

で,これでも十分便利なのだけど,このプラグイン公開当時から数年経ってる今,アドオン本体のほうも機能アップしているので,それを活かすためにオリジナル作者の mattn 氏のコードを改変したものを用意してみた.

気になるあの娘のサイトが沢山あるケースへの対応

どうやら昔の Speed Dial はダイアル数が9個固定で変更できなかったみたいだけど,現在のものは行数や列数を自由に変更可能.さらにグループ機能を搭載していて,これはつまり Firefox のタブグループ機能みたいなもんで,あるまとまったダイアル群ごとにグルーピングできる.前回の自分の Vimperator Advent Calendar 2012 の参加記事「パノラマワールドへのいざない」でもご紹介したように,グルーピング機能があると例えばカテゴリごとに分けられたりして便利.

なので,今 vimpr に上がっている speeddial.js でも動作はするけど,より高機能になった Speed Dial アドオンの性能を引き出すために mattn 氏のプラグインをちょこっと改造したものを置いておく.

mattn さんによる speeddial.js オリジナル (※本記事公開時の最新版)

拙作改変阪 speeddial.js (※本記事公開時の最新版)

なお,これは後日 vimpr の方に Pull Request する予定.

.vimperatorrc 設定例

では,自分の .vimperatorrc から speeddial.js 設定部分を抜粋してみる.

" speeddial.js
nnoremap <Leader>sd :<C-u>sd<CR>
nnoremap <Leader><Leader>sd :<C-u>sd!<CR>


js<<EOM
function addLocalMappings(buffer, maps) {
  maps.forEach(
    function (map) {
      let [cmd, action, extra] = map;
      let actionFunc = action;
      extra || (extra = {});

      if (typeof action == "string") {
        if (action.charAt(0) == ':')
          actionFunc = extra.open ? function () commandline.open("", action, modes.EX)
                                  : function () liberator.execute(action);
        else
          actionFunc = function () events.feedkeys(action, extra.noremap, true);
      }
      extra.matchingUrls = buffer;
      mappings.addUserMap(
        [modes.NORMAL],
        [cmd],
        "Local mapping for " + buffer,
        actionFunc,
        extra
      );
    }
  );
}

// require: x-hint.js
addLocalMappings(
  /^chrome:\/\/speeddial\/content\/speeddial\.xul$/,
  [
    ['f', ':xhintdo \'//*[starts-with(@id, "speedDialTab")] | //*[@class="speeddialThumb"]\' elem.click()', ],
  ]
);
EOM

これで,<Leader>sdカレントタブに Speed Dial を表示<Leader><Leader>sd新規タブに Speed Dial を表示する.

また,開いた Speed Dial 画面ではマウスに手を伸ばすことなく Vimperator らしくヒントを使ってダイアルを選択できるようにするために,vimpr にある x-hint.js っていうプラグインを使うことによってヒント機能を使えるようにしている.

なお,上記設定内の addLocalMappings 関数は .vimperatorrc 内ではよく使われる(?)関数のコピペなのですでに書いてある場合には今回は書く必要はない.

また設定例には書いてないけど :sd のあとに続けて半角スペースまで打つと,補完機能が働いて全ダイアルから選択することもできる.(が,登録数が多いとここから選ぶのは面倒)

おしまい

今回の speeddial.js を見つけたときもそうだったけど,たまにふと https://github.com/vimpr/vimperator-plugins を覗くと以前は気にならなかったプラグインを「発見」したりすることがあって面白いですよ.

さぁこれで気になるあの娘たち(人数制限無し)のサイトへスピーディにダイアルして,できる男になっちゃいましょう!

補足

一番最初に解決法として3つ挙げたけどよく考えたら,URL や タイトルの一部が分かってるならそれを元に絞り込める :tabopen も便利ですねっ!

Let's enjoy Vimperator!