2009/06/15


ついカッとなってやった。今も後悔してない。
Peepの改造としてはじめたcpeepですが、今cpeepが実装している機能くらいならばvimで出来るやん...と思って勢いで書いてみました。
GoogleReader.vim - vimscript for googlereader : vim online

This is vimscript for googlereader (www.google.com/reader/)

http://www.vim.org/scripts/script.php?script_id=2678
開発はこの辺でやってます。
mattn's googlereader-vim at master - GitHub

This is vimscript for googlereader

http://github.com/mattn/googlereader-vim/tree/master
起動は :GoogleReader
で <c-n> と <c-p> で上下移動、リターンキーで閲覧、qで終了です。一応 <c-i> でブラウザ起動ですがキーは変えるかもしれません。
vimrcとかに g:googlereader_email と g:googlereader_passwd を設定してあれば curl だけで動作します。
画面はこんな感じ。
googlereader-vim1
googlereader-vim2
作りかけなので、まだまだです。
えっ?cpeep?何でしたっけそれ...

正直言うと、これがキッカケだったりする。
はてなブックマーク - pekepekesamuraiのブックマーク

だれかEmacsのpeep-mode作ってくれないだろうか。と期待している

http://b.hatena.ne.jp/pekepekesamurai/20090615#bookmark-13902255

mattn the vimmer!
Posted at by



2009/06/14


先日書いた、「コマンドラインからGoogle Readerが使えるPeepを試した」でLinuxでは快適になった。ただWindowsでは動かない。まずWindowsのpython2.6にはcursesのバイナリモジュールが含まれていなかった。これは「Python2.6にはcursesのバイナリが含まれていないので作る」で解決したのだけど、元になっているpdcursesがWindows上ではまともに動かなくて、例えばマルチバイト文字を含んだ複数行をscrl(スクロール)すると、正しくマルチバイト文字の幅を取れていないのか下段の行が上段の行にゴミとなって重なったりした。
Peep自身を触っても良かったのだが修正非量も多い。常に残念だったのでCで書く事にした。APIの呼び出しまわりはPeepを参考にさせて頂き、libxml2やcurl、pdcurses(linuxではncurses)で書き直す事にした。ただWindows上でcursesの動作が変なのは変わらない話なので、scrlを使わない事にした。どうやったかというとスクロールの度にclear()を呼んで全行書き直し。試してみた所、それ程操作感も悪く無かった。また色属性についてもACS_REVERSEを使うと幅計算が間違っているのか1行の幅で反転してくれなかったので、A_BOLDを使う事にした。現状、WindowsでもLinuxでも動作するようになっているけど、C++のstlをふんだんに使っててメモリ効率を何も考えてないソースになっています。
mattn's cpeep at master - GitHub

terminal front-end for Google Reader writen in C

http://github.com/mattn/cpeep/tree/master
cpeep1
cpeep2
まだまだ、全く作りかけなので閲覧しか出来ません。
j,kスクロールと、oで閲覧、qで閉じる、vでブラウザ(現状Windowsは通常使うブラウザ、それ意外はfirefox限定)です。
ちなみにPeepはHTMLをテキストに変換するのにw3mを内部で呼び出していたけど、cpeepでは自前でウンチャラカンチャラやってます。
まだまだ、これからです。

ちなみに今気付いたのですが、PeepのAuthorさんからPeepのcommit bitを付与して頂いている様です。ありがとうございます。何か協力出来る事があればcommitさせて頂きます。

追記
なんかの間違いだった様です。すみません。
Posted at by



2009/06/13


追記
パッチがいるのを忘れていました。
一番下にあります。

バッチファイル。実行すると直接バイナリ配置するので気をつけて。バッチの先頭にあるパスを環境に合わせ修正して下さい。
pythonのソースはオフィシャルから「Python-2.6.2.tar.bz2」を、pdcursesもオフィシャルから「pdcurs34.zip」をダウンロードし"C:¥TEMP¥"に展開しておきます。
@echo off
setlocal

set PYTHON26=c:\Python26

set PYSOURCE=c:\temp\Python-2.6.2
set PDSOURCE=c:\temp\pdcurses

if "%1" == "msvc" goto msvc
if "%1" == "gcc" goto gcc
goto usage

:msvc
set FLAGS=/nologo /LD -DHAVE_CURSES_RESIZE_TERM -DNCURSES_MOUSE_VERSION=2
echo building _curses.pyd
cl %FLAGS% -I%PYTHON26%\include -I%PDSOURCE% %PYSOURCE%\Modules\_cursesmodule.c /link %PYTHON26%\libs\python26.lib %PDSOURCE%\win32\pdcurses.lib %PDSOURCE%\win32\panel.lib /out:%PYTHON26%\lib\_curses.pyd
echo building _curses_panel.pyd
cl %FLAGS% -I%PYTHON26%\include -I%PDSOURCE% %PYSOURCE%\Modules\_curses_panel.c /link %PYTHON26%\libs\python26.lib %PDSOURCE%\win32\pdcurses.lib %PDSOURCE%\win32\panel.lib /out:%PYTHON26%\lib\curses\_curses_panel.pyd
goto end

:gcc
set FLAGS=-DHAVE_CURSES_RESIZE_TERM -DNCURSES_MOUSE_VERSION=2 -Wl,--enable-auto-import -Wl,--export-all -s -shared
echo building _curses.pyd
gcc %FLAGS% -I%PYTHON26%\include -I%PDSOURCE% %PYSOURCE%\Modules\_cursesmodule.c %PYTHON26%\libs\libpython26.a %PDSOURCE%\win32\pdcurses.a %PDSOURCE%\win32\panel.a -o %PYTHON26%\lib\curses\_curses.pyd
echo building _curses_panel.pyd
gcc %FLAGS% -I%PYTHON26%\include -I%PDSOURCE% %PYSOURCE%\Modules\_curses_panel.c %PYTHON26%\libs\libpython26.a %PDSOURCE%\win32\pdcurses.a %PDSOURCE%\win32\panel.a -o %PYTHON26%\lib\curses\_curses_panel.pyd
goto end

:usage
echo pycurses_build.bat [msvc or gcc]

:end
endlocal
以下ソースにあてるパッチです。Windows上のsetuptermは必ずエラーで返すコードになっているので呼ばないようにしています。
--- Modules/_cursesmodule.c.orig    2009-06-13 01:30:02.000000000 +0900
+++ Modules/_cursesmodule.c 2009-06-13 01:30:23.000000000 +0900
@@ -2036,6 +2036,7 @@
        }
    }
 
+#ifndef _WIN32
    if (setupterm(termstr,fd,&err) == ERR) {
        char* s = "setupterm: unknown error";
        
@@ -2048,6 +2049,7 @@
        PyErr_SetString(PyCursesError,s);
        return NULL;
    }
+#endif
 
    initialised_setupterm = TRUE;
 
Posted at by