3

私は Emacs がいくつかのチェックを行う一般的な方法を探しています。

現時点で2つの例があります。オークションのサイトがあって、Emacsで更新がないかチェックしてくれるといいなと思いました。(Emacs-ESS) を使用してこれをR行い、Web サイトのソース コードをロードしました。次に、Emacs で自作の関数を使用して、次のことを行います。

バッファを切り替え、URL 情報をリロードし、情報を画面に送信して(sleep-for )、少し待ちます。「今日」で検索してください。次に、この文字列の後の値をチェックする必要があります。値が 0 よりも大きい場合は、興味のある新しいものがあることを意味し、PING します。

これは長い紹介ですが、私はこれが機能することを本当に気に入っています。

Gnus10 秒ごとに Gnus を開き、"Inbox" を検索し、値をチェックし、値が 0 より大きい場合は通知します (そうでない場合は、バッファーを切り替えるだけです) という関数を実行するタイマーがあります。戻る)。唯一の問題は、これに約 0.5 秒かかることです。この間に、ポイントが別のバッファーに移動して元に戻ることがわかります。

ユーザーを邪魔することなく、これらの自動化された処理を行うための一般的なアプローチはありますか?

編集: Emacs がチェックを実行して、私たちのお気に入りのタグが付いた新しい投稿が Stackoverflow にあるかどうかを確認できたらいいと思いませんか?

4

2 に答える 2

1

Emacs はシングル スレッドであるため、私たちはうんざりしています。これを行うには、ユーザーにまったく迷惑をかけずに行う方法はありません。

秘訣は、ユーザーが負担できるように、チェックの頻度とコストのバランスを適切に選択することです。

于 2013-02-26T19:01:56.263 に答える
0

これが私が一度使用したコードです:

(defvar sds-new-mail-line nil "cache")
(defun sds-new-mail-line (&optional arg)
  "add or remove the mode-line new-mail marker"
  (or sds-new-mail-line (error "sds-new-mail-line has not been initialized"))
  (let* ((mlf (default-value 'mode-line-format))
         (already-have (eq sds-new-mail-line (car mlf))))
    (if (or (eq arg nil) (< arg 0))
        (when already-have
          (setq-default mode-line-format (cdr mlf)))
        (unless already-have
          (setq-default mode-line-format (cons sds-new-mail-line mlf))))))
(defun sds-gnus-scan-mail ()
  "check for new mail, notify if there is some"
  (when (gnus-alive-p)
    (with-current-buffer gnus-group-buffer
      (gnus-group-get-new-news 3)
      (gnus-group-get-new-news 2)
      (goto-char (point-min))
      ;; look for new messages in groups of level 1 and 2
      (cond ((search-forward-regexp "^ *s[12] *[1-9][0-9]*n" nil t)
             (message "you have new mail! (%s)" (user-time-format))
             (sds-new-mail-line 1)
             (ding))
            (t (sds-new-mail-line -1)
               (message "no new mail (%s)" (user-time-format))))
      (goto-char (point-min)))))

(defun sds-gnus-load-hook ()
  (unless sds-new-mail-line     ; init
    (let ((str "mail") (map (make-sparse-keymap)))
      (define-key map [mode-line down-mouse-1] 'ignore)
      (define-key map [mode-line mouse-1] read-mail-command)
      (add-text-properties 0 (length str)
                           (list 'display gnus-mode-line-image-cache
                                 'help-echo "you have new mail - read it!"
                                 'local-map map)
                           str)
      (setq sds-new-mail-line str))
    (gnus-demon-add-handler 'sds-gnus-scan-mail 3 t))
  (add-hook 'gnus-summary-prepared-hook 'gnus-summary-first-unread-subject)
  (add-hook 'gnus-summary-prepare-exit-hook 'gnus-summary-catchup))

;; cannot use gnus-load-hook here!
(eval-after-load "gnus-start" '(sds-gnus-load-hook))

私はあなたがあなたのニーズにそれを適応させることができると確信しています。

于 2013-02-22T16:46:49.653 に答える