2011-09-17 11 views
5

私は最も簡単な関数を記述しようとしています:Webページ上の特定の場所を見つけ、その後のw3mブラウザにクエリを送信し、:Emacs Lisp関数でイベントを待つ方法は?

(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-searchとの間に役立ちますが、読み込み時間は任意であるため、あまり便利ではありません。

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

答えて

7

これを達成する方法は、hooksです。したがって、ページがロードされたときにw3mがフックを呼び出すかどうかを確認する必要があります。もしそうなら、あなたはあなたが望むことをするそのフックのフック関数を登録することができます。

C-h v w3m-display-hook RETはあなたが探しているようです。ここからはgood exampleです。

(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) 

"domain"が一致するように、URLのキーワードであると"Search"がジャンプする一意の文字列です:誰もが同じ考えを持っている場合

+0

ありがとう、ロス。 'w3m-display-hook'は適切なタイミングでジョブを実行します。 –

1

は、念のために、それは私がロスのおかげで終わっているものです。もっと柔軟な検索が必要な場合は、確かにsearch-forwardre-search-forwardに置き換えることができます。

関連する問題