7

最も単純な関数を作成しようとしています: w3m ブラウザーにクエリを送信し、Web ページ上の特定の場所を見つけます。

(defun w3m-define-word (word)
  (interactive "sDefine: ")
  (progn (w3m-search "Dictionary" word)
         (set-window-start nil (search-forward "Search Results"))))

ここで間違っているのは、ページがリロードされて古いページw3m-searchで実行されるまで待機しないことです。set-window-start次に、ページが再読み込みされ、カーソルがバッファーの先頭に配置されます。

(sleep-for ..)との間w3m-searchset-window-start役立ちますが、ロード時間が任意なのであまり便利ではありません。

この関数を書き直して、バッファがリロードされるまで待ってから残りを実行するにはどうすればよいですか?

4

2 に答える 2

7

elisp でこれを実現する方法は、フックを使用することです。そのため、ページが読み込まれたときに w3m がフックを呼び出すかどうかを確認する必要があります。もしそうなら、あなたが望むことをするそのフックのフック関数を登録することができます。

それはC-h v w3m-display-hook RETあなたが探しているもののようです。ここから始める良い例です。

于 2011-09-17T22:26:35.723 に答える
1

誰かが同じ考えを持っている場合に備えて、それはロスのおかげで私が最終的に得たものです:

(defun w3m-goto-on-load (url)
  "Go to a position after page has been loaded."
  (cond
    ((string-match "domain" url)
      (progn
        (set-window-start nil (search-forward "Search" nil t) nil)))
    (t nil)))
(add-hook 'w3m-display-hook 'w3m-goto-on-load)

where"domain"は一致する URL のキーワードで、"Search"ジャンプ先の一意の文字列です。確かに、より柔軟な検索が必要な場合は、search-forwardに置き換えることができます。re-search-forward

于 2011-09-18T14:52:54.313 に答える