ayu-mushi's website
自分が使ってるw3mの設定と拡張
- Published
2017-4-8 - Last Modified
2017-4-8
- Source of This Page(GitHub)
- https://github.com/ayu-mushi/ayu-mushi.github.io/blob/develop/src/article/w3m.mdk
1. はじめに
w3mはタブが使えたり、表や画像が表示できたりする1、軽量テキストブラウザです。 w3mでは、キーによる操作を拡張するkeymapや、CGIをローカルで実行できるローカルCGIなどを使って、機能を追加・拡張することができます。 この記事では私がこれを利用して作った機能を紹介します。
2. ローカルCGI
作ったものを紹介する前ににローカルCGIについて説明します。
w3mではシェルスクリプトやPerlで書かれたCGIをローカルで実行でき、CGIのテストや、w3mに機能を追加したいときに使えます。 公式で提供されているものとして、Googleで検索できるgoogle.cgiや、w3mmail.cgiなどがあります。 CGIは、urimethodmapに短縮URLを書いておくと使いやすいです。2
ローカルCGIでシェルスクリプトを使う場合、理由は知りませんが、空白echoをはさみながらechoしないとうまく出力されません。
local CGIについて詳しくは、w3m の local CGI 機能 “w3m Tips | インサイドフラッギング” などを参照してください。
3. ページごとにメモを取る
1つ目。
あるページをフォーカスしてるときctrl-Aを押すと、タイトルとURLとを書き込んだファイルを生成し、そのファイルにメモできるようにします。 ページ毎にコメントを付けるのは記憶術的にも正解
keymapに以下を追加。ただしpath/to
はw3m_commentary.pyへのパスとします。
keymap A EXEC_SHELL "python3 path/to/w3m_commentary.py"
4. ページのはてなブックマーク情報を見る
keymap に次のように設定。
keymap HA EXTERN "hateinfo %s && read YES"
#!/usr/bin/env python
# -*- coding: utf-8- -*-
import urllib2
import argparse
import json
def bukome(args):
req = urllib2.Request('http://b.hatena.ne.jp/entry/json/' + args.uri);
response = urllib2.urlopen(req)
json_hate = response.read()
parsed_hate = json.loads(json_hate)
print "-----"
print "count:" + str(parsed_hate["count"])
print "comments: \n" + reduce(lambda comm0, comm1: comm0 if comm1 == "" else comm0 + "\n\n[ " + comm1 + " ]", map(lambda bkm: bkm["comment"], parsed_hate["bookmarks"]), "")
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='print bookmark comments in hatena.ne.jp')
parser.add_argument('uri', type=str, help='the URI of the target web page')
parser.set_defaults(func=bukome)
args = parser.parse_args()
args.func(args)
ページをはてなブックマークする方は、Big Sky :: w3mから「はてなブックマーク」するを参照。
5. ダウンロードしたPDFファイルの履歴
~/.w3mにある、pdf(htmlも対応)の要約と、タイトルとを抜き出して一覧。
history.cgiはローカルCGIなので、シェルスクリプトをローカルCGIとして実行できる位置に置きます。
使うときは、file:///cgi-bin/history.cgi?n=0&size=20&ext=html や file:///cgi-bin/history.cgi?n=0&size=20&ext=pdf などのURLを使います。extが探索する拡張子、sizeが一度に表示するファイル数、nが表示するファイルの順位(ls -t
で上から)です。
doctitleはPDFファイルからタイトルを抽出するのに使います。
【Python】Web上にあるpdfのタイトルを取得する(中間報告) - 歩いたら休めを参考にしました。
6. カーソルが載ってる単語から英単語辞書を引く
w3mはそのときカーソルがある単語を記録しており、printenv
で出力できます(日本語は無理っぽいですが)。
それを使って、英単語辞書を引くことが可能。
printenv
の実行例(Githubのサイト):
W3M_CURRENT_FORM=
W3M_CHARSET=UTF-8
W3M_CURRENT_WORD=developers
W3M_FILENAME=/
W3M_TITLE=How people build software GitHub
W3M_CURRENT_LINE=9
W3M_CURRENT_IMG=
W3M_CURRENT_LINK=
W3M_URL=https://github.com/
W3M_TYPE=text/html
W3M_SOURCEFILE=/home/ayu-mushi/.w3m/w3mtmp1991-970.gz
W3M_CURRENT_COLUMN=15
以下はkeymapの設定例です。ただし、je
は英単語を渡すと辞書を引くコマンドです。CUI超お手軽英語辞書 - capriccioso String Creating(Object something){ return My.Expression(something); }を利用します。
keymap O EXEC_SHELL "je $(printenv | ag 'W3M_CURRENT_WORD' | sed -e 's/^W3M_CURRENT_WORD\=\([^<]\)/\1/')"
7. おわりに
私のkeymapは dotfiles/keymap at master · ayu-mushi/dotfiles です。