Emacs での テキストブラウザ eww を使えるレベルにする

    はじめに

    最近よくマックにいくのだけれども, ここがとても電波回線が悪い (@_@);

    ネットサーフィンをしてても, とてもストレスがたまる. このままだと, マックのせいでストレスから立ち直れなくなってしまうので なんとかしようと思った.

    テキストブラウザをつかえば, よりサクサクとネットを楽しめるのではとお もい, Emacs での テキストブラウザの eww をつかってみた.

    EWW とは

    Emacs での テキストブラウザ. Emacs24.4 からデフォルトで Emacs にはいっている.

    Basics Config

    KeyBindings

    • N (eww-next-url)
    • P (eww-previous-url)
    • l (eww-back-url)
    • r (eww-forward-url)
    • H (eww-list-histories)
    • & (eww-browse-with-external-browser)
    • b (eww-add-bookmark)
    • B (eww-list-bookmarks)
    • q (quit-window)

    見にくいときは, R eww-readable をすると, 余計なリンクやサイドバーが消えて見えやすくなる.

    いくつか自分でも追加.

    (define-key eww-mode-map "r" 'eww-reload)
    (define-key eww-mode-map "c 0" 'eww-copy-page-url)
    (define-key eww-mode-map "p" 'scroll-down)
    (define-key eww-mode-map "n" 'scroll-up)

    背景色の設定

    正直, 以下の記事をみつけなければ, eww は利用していなかった!!

    黒背景を利用していると, google の検索結果が白みががかってしまってつか いものにならなかった. 以下の設定をしたら, あらー不思議. いろが消えた.

    (defvar eww-disable-colorize t)
    (defun shr-colorize-region--disable (orig start end fg &optional bg &rest _)
      (unless eww-disable-colorize
        (funcall orig start end fg)))
    (advice-add 'shr-colorize-region :around 'shr-colorize-region--disable)
    (advice-add 'eww-colorize-region :around 'shr-colorize-region--disable)
    (defun eww-disable-color ()
      "eww で文字色を反映させない"
      (interactive)
      (setq-local eww-disable-colorize t)
      (eww-reload))
    (defun eww-enable-color ()
      "eww で文字色を反映させる"
      (interactive)
      (setq-local eww-disable-colorize nil)
      (eww-reload))

    default の検索エンジンを Google に変更

    default では, duckduckgo が設定されている. Google へ.

    (setq eww-search-prefix "https://www.google.co.jp/search?q=")

    dokudokgo

    こまかくパラメータ設定

    • kl=ja-jp 日本語
    • k1=-1 広告なし
    • kc=1 自動先読み
    • kf=-1 サイトアイコンなし
    • q = 検索文字

    => サイトアイコンなしは動かない.

    ;; (setq eww-search-prefix "https://duckduckgo.com/html/?kl=jp-jp&k1=-1&kc=1&kf=-1&q=")

    eww 複数起動する

    バッファ名を rename すればいい.

    (defun eww-mode-hook--rename-buffer ()
      "Rename eww browser's buffer so sites open in new page."
      (rename-buffer "eww" t))
    (add-hook 'eww-mode-hook 'eww-mode-hook--rename-buffer)
    • eww-list-buffers (S にキーバインドされている) 生成した eww を一覧で表示できる.

    クイック検索

    サクッと Google 検索をしたいので, 検索機能を強化した.

    • 検索結果にハイライトをつける.
    (defun eww-search (term)
      (interactive "sSearch terms: ")
      (setq eww-hl-search-word term)
      (eww-browse-url (concat eww-search-prefix term)))
    
    (add-hook 'eww-after-render-hook (lambda ()
                       (highlight-regexp eww-hl-search-word)
                       (setq eww-hl-search-word nil)))

    テキストブラウザは地味なので, ときには別のブラウザでも Web ページを閲覧したい. 私は普段は conkeror を利用しているので, これで開きたい.

    以下の関数で今見ているページを外部ブラウザで開くことができる. &にキーバインドされている.

    eww-browse-with-external-link

    以下の設定で, ブラウザを conkeror に指定.

    (setq browse-url-generic-program (executable-find "conkeror"))
    (setq shr-external-browser 'browse-url-generic)

    現在の url を eww で開く

    外部ブラウザで開きたいときもあれば, eww で開きたいときもある.

    (defun browse-url-with-eww ()
      (interactive)
      (let ((url-region (bounds-of-thing-at-point 'url)))
        ;; url
        (if url-region
          (eww-browse-url (buffer-substring-no-properties (car url-region)
                                  (cdr url-region))))
        ;; org-link
        (setq browse-url-browser-function 'eww-browse-url)
        (org-open-at-point)))
    (global-set-key (kbd "C-c p") 'browse-url-with-eww)

    画像表示

    画像は遅いので表示させない. 以下の記事のテクをそのまま借りた.

    (defun eww-disable-images ()
      "eww で画像表示させない"
      (interactive)
      (setq-local shr-put-image-function 'shr-put-image-alt)
      (eww-reload))
    (defun eww-enable-images ()
      "eww で画像表示させる"
      (interactive)
      (setq-local shr-put-image-function 'shr-put-image)
      (eww-reload))
    (defun shr-put-image-alt (spec alt &optional flags)
      (insert alt))
    ;; はじめから非表示
    (defun eww-mode-hook--disable-image ()
      (setq-local shr-put-image-function 'shr-put-image-alt))
    (add-hook 'eww-mode-hook 'eww-mode-hook--disable-image)

    eww-copy-page-url (w) で現在の URL をクリップボードにコピー.

    しかし, やりたいことは org-mode のリンクをクリップボードにコピーす ること.この機能かあるかどうかで, 情報収集のスピードが全然違う.

    別記事にしました.

    External Elisps

    eww-hatebu

    モードラインにはてぶ数を表示する.

    (require' eww-hatebu)
    (eww-hatebu-setup)

    はてなブックマークを投稿するには, メールからのブックマーク機能を利用する. wl-draft を起動して, コメント書いて送信.

    helm-eww-history

    helm インタフェースで履歴を見る.

    helm-eww-bookmarks

    helm インタフェースでブックマークを見る.

    (require 'helm-eww-bookmark)
    (define-key eww-mode-map "B" 'helm-eww-bookmark)

    auto-hightlight-symbol で語句をハイライト

    auto-hightlight-symbol を利用すると, 語句にカーソルを当てるだけで, キーワードがハイライトされる.

    なんかもうメンテナンスされていないようにみえる.

    (require ' auto-highlight-symbol)
    (add-hook 'eww-mode-hook 'auto-highlight-symbol-mode)
    (global-auto-highlight-symbol-mode t)

    ace インタフェースによるリンクの選択. これは必須!! conkeror のようなリンク選択ができる.

    o をおすと発動.

    (require 'ace-link)
    (eval-after-load 'eww '(define-key eww-mode-map "f" 'ace-link-eww))
    (ace-link-setup-default)