basyura’s blog

2012-02-01

新はてブの本文を非表示にしたら新はてブを見るようになった

修正前

f:id:basyura:20120201201040p:image

修正後

f:id:basyura:20120201201041p:image

keysnailer なので、_keysnail.js に追記。

style.register(<><![CDATA[
    @-moz-document url-prefix("http://b.hatena.ne.jp/") {
    .entry-summary, .entry-data {display:none}
    .entry-comment-fold, .others {background-color:white}
    .entry-image {width:32px;height : 32px;}
    .entry-image-block {display:none;}
    .trigger {display:none;}

    }
    ]]></>.toString(), style.XHTML);

2012-01-29

Firefox でピン留めされたタブの判定

ピン留めれたタブは「×」(閉じるボタン)が出ないから "簡単には" 閉じられないって理解でいいんだろうか。

「閉じたくない」「ブラウザを起動するときには表示してほしい」からピン留めするんだろうけど、keysnail でガシガシ閉じちゃうので勢い余ってピン留めされたタブまで閉じてしまう。

ちらっと JSReference で検索したら「ピン留めされているかどうか」の判定があっさり見つかったので追加してみた。

pinned Requires Gecko 2.0

Type: boolean

This attribute is set to true if the tab has been pinned (that is, if it's an app tab). The tabbrowser element's pinTab and unpinTab methods handle pinning and unpinning tabs.

pinned

_keysnail.js

key.setGlobalKey('C-w', function (ev) {
    setTimeout(function () {
        var tab = getBrowser().selectedTab;
        if (!tab.pinned) {
          getBrowser().removeTab(tab);
        }
      } , 100);
  }, 'タブ / ウィンドウを閉じる');

なぜ setTimeout を使っているのかが思い出せない・・・・。確か、Firefox がフリーズするからクッションを入れたんだったと思う。Firefox 2 か 3 の時に入れたものなので今はもういらないのかも。

ピン留めしたいのが「Remember The Milk」

メモリと CPU 使用量のトラウマでタブを何個も開いてるのが嫌で嫌で仕方がなく、用がすんだら「C-w」でスパスパと消していく。「C-w」を連打したその先に Remember The Milk が現れ、タスクを思い出すことができるというライフハックを思いついたのであった。

2012-01-27

TweetVim 1.1 Release !!

vim 用の twitter クライアント、TweetVim 1.1 をリリースします。

https://github.com/basyura/TweetVim

変更内容

  • search action を追加
  • block action を追加
  • source (クライアント)表示オプション(g:tweetvim_display_source)
  • 入力可能文字数をステータスラインに表示
  • tweetvim_say バッファで改行が入っていたのを削除
  • qt の際のカーソル位置を先頭に
  • デフォルトキーマッピングの上書きができるように修正
  • ハッシュタグの Enter でハッシュタグ検索
  • 検索数の初期値(g:tweetvim_tweet_per_page) を 50 → 20 に変更
  • バッファの使い回しがおかしくて増殖していたのを修正
  • ツイート時間の表示(vital.vim) (g:tweetvim_display_time)
  • 日本語ハッシュタグのハイライト対応

pull request ありがとう

thinca さんに入力文字数をステータスラインに表示するもの、wipple_ さんにハッシュタグの syntax 全角対応の pull request を頂きました。ほんとうに有難うございます _(_ _)_

master をリリースブランチとして、dev ブランチの方で随時開発を行なっています。人柱 & pull request 募集中です♪

vital.vim

勝手にvital.vim API Reference で使い方がよく分からなかった vital.vim が分かった気になって、そろそろ導入したいなぁと思ってたところで Vital.DateTime 書いた が ktkr !!!

正直、日付はもう諦めかなぁと思ってたところだったのでほんとに嬉しかった。thinca ++

ただ、vim script で頑張ってるだけあってちょっと時間を食う。40 件のツイートを表示する際に +0.3 ~ 0.5 [s] ぐらい。

ちょっとでも早くしたい人用に g:tweetvim_display_time 変数を用意しときました。

レスポンス

今のところ ruby とか python とか perl の力を借りないと、今のところ +3 ~ 4[s] ぐらいかかってしまう(README参照)。それを除くと僕の端末で 3 [s] ぐらいで表示される。

3[s] のうち 1.5 ~ 2 [s] ぐらいが twitter api の応答。で、それ以外がリクエスト前後の処理 + json からの変換。

streaming api を除くと、他のクライアントも似たようなものかなぁと思っている。アニメーションであまり感じないようになっているだけで。

とはいえちょっとでも早くしたいなぁと。pure Vim script で。

1.2 へ向けて

2011.12.30 に 1.0 をリリースしたので、だいたい一ヶ月ぐらい。これぐらいのペースで何かしら改善を続けられたらなぁと思っている。リリースの条件はこんな感じで緩く。

  • リリースしたいと思ったとき
  • なにかしら一区切りついたとき
  • dev ブランチが安定してると判断したとき

1.2 でやろうと思っているのは以下。

  • 検索時の次ページ、前ページ
  • ライブラリチェック
  • highlight の link 化
  • POST しようとしてまだ認証してなくて PIN の入力求められて、これをキャンセルしても sending ... ok って出る。
  • フィルタリング(NGワード)

全部できるかもしれないし、できないかもしれない (汗)

あとは、2.0 ぐらいのタイミングでドキュメントを整備して vim.org に登録したい(と思ってるけど英語ドキュメント・・・)。

2012-01-22

def に対応する end に移動する(またその逆)の試作

:help searchpairpos

searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
        [, {stopline} [, {timeout}]]]])
    |searchpair()|と同様だが、マッチの行番号と桁番号からなるリスト
    |List|を返す。このリストの最初の要素は行番号で、次の要素はマッ
    チの桁位置のバイトインデックスである。マッチが見つからなかった
    場合は[0, 0]を返す。 >
      :let [lnum,col] = searchpairpos('{', '', '}', 'n')
    より大規模で役に立つ例に関しては|match-parens|を参照。

このあたりを使えば入れ子も考慮して見つけられるらしい。

ただ、Ruby は if に対応するのも end だし、do に対応するのも end なのだ。何か解決できる関数があるのかもしれないけど、synIDattr を使って検索するようにしてみた。30 分ぐらいのやっつけ。

command! Pair :call s:search_pair()
function! s:search_pair()
  let word = expand('<cWORD>')
  if word == 'def'
    let flg = 'n'
  elseif word == 'end'
    let flg = 'b'
  else
    return
  endif
  while (line('.') != 0 || line('.') != line('$'))
    let pos = searchpairpos('\s\{}\zsdef\ze', '', '\s\{}\zsend\ze', flg)
    if pos == [0,0]
      let line = line('.') + (flg == 'n' ? 1 : -1)
      call cursor(line,col('.'))
      continue
    endif
    call cursor(pos[0],pos[1])
    let attr = synIDattr(synID(line('.'),col('.'),1),'name') 
    if attr == 'rubyDefine'
      break
    endif
  endwhile
endfunction

他言語でも使えるように汎用的にするのは無理ぽいんだけど・・・。

2012-01-04

textile も quickrun を使ってブラウザ確認

Textile is a lightweight markup language originally developed by Dean Allen and billed as a "humane Web text generator".

Textile_

markup language としては markdown の方が有名かつ圧倒的な人気であると感じますが、textile もなかなかです。

redmine に標準搭載されているので、僕も最初は「なにこれ使いにくい」と思いながらも仕方なく使っている感じでした。ところが慣れてくると「これもなかなかありだな」と思い始め、最近では markdown より書きやすいと感じます。記法が変わるときは空白行を入れないと認識してくれないとか最高ですよね(遠い目)。

markdown + quickrun に関しては、Hack #52: Markdown形式の文書を書く にある通りです。textile も同様に quickrun からブラウザを起動して生成された html を確認することができます。

syntax

これがいい!というのは見つけれていませんが、timcharper/textile.vim をいじったものを使っています。

RedCloth

RedCloth is a module for using the Textile markup language in Ruby.

RedCloth

パーサをインストールします。

gem install RedCloth

gem が入ると redcloth という実行ファイルもインストールされるので

redcloth -v

でバージョンを確認してみてください。

quickrun

vimrc 等に設定します。

let g:quickrun_config = {
    \ 'textile': {
    \   'command'   : 'redcloth',
    \   'exec'      : '%c  %s',
    \   'outputter' : 'browser',
    \ },
    \}

あとは :QuickRun するだけです。バッファの内容をが redcloth で html に変換され、ブラウザで表示されます。

windows では・・・

mac では上記設定で簡単にできたんですが、、、windows + gvim + ruby(cygwin) + utf8 環境だとうまくいかず・・・いろいろいじりました。

まず、bin/redcloth で utf-8 で読みこむように変更。Windows-31J の変換に失敗したよエラー対応。

- red = RedCloth.new( ARGF.read )
+ red = RedCloth.new( open(ARGV[0], 'r:utf-8').read )

quickrun の設定を変更。日本語ファイル名が化けて入ってくるので必ずテンポラリファイルを経由するように設定(確実にサポート外)。

let g:quickrun_config = {
      \ '*' : {'into' : 0},
      \ 'uiki': {
      \   'exec'      : 'redcloth  %s',
      \   'outputter' : 'browser',
      \   'region': {
      \     'first': [1, 0, 0],
      \     'last':  [line('$'), 0, 0],
      \     'wise': 'V',
      \    },
      \ },
      \}

ひとまず windows でも mac でもうごくようになりました。ファイル名は bin/redcloth で変換すればいいと思うのですが Kconv.toutf8 とかしてもだめだったのであきらめ。

まとめ

快適な textile ライフを!