(defvar monitor-http-buffer--timer nil
"Таймер для мониторинга буфера *X*.")
(defun monitor-http-buffer ()
(setq monitor-http-buffer--timer
(run-at-time 1 1
(lambda ()
(let ((buf (get-buffer "*X*")))
(when (and (buffer-live-p buf)
(> (with-current-buffer buf
(- (point-max) (point-min)))
0))
(psysho-log "[MONITOR] Буфер *X* заполнен, открываю...")
(display-buffer buf)
(when monitor-http-buffer--timer
(cancel-timer monitor-http-buffer--timer)
(setq monitor-http-buffer--timer nil))))))))
(defun monitor-http-buffer ()
(run-at-time 1 1
(lambda ()
(let ((buf (get-buffer "*X*")))
(when (and (buffer-live-p buf)
(> (with-current-buffer buf
(- (point-max) (point-min)))
0))
(psysho-log "[MONITOR] Буфер *X* заполнен, открываю...")
(display-buffer buf)
(cancel-function-timers 'monitor-http-buffer))))))
psysho-log - это то же что и message но с моими шрифтами
я хочу monitor-http-buffer чтобы прекращалась после показа буффер - соообщение только один раз
выходило чтоб
в елисп емакс проверить что буффер - существует и что там есть контент
(with-current-buffer "*X*" (- (point-max) (point-min)))
где буффер X - это вывод http запроса - runtime-at - надо использовать и вот так мониторить буду
есть ли в емакс возможности реагировать на события кроме таймера?
;;(process-send-string "tcp-client" "GET / HTTP/1.1\r\nHost: gnu.org\r\n\r\n")
;;(start-process "x1" "*xxxxx*" "/root/glibc/dark_c/sfirot" "")
;;(get-process "x1")
;;(set-process-sentinel (get-process "x1")
;; (lambda (proc event)
;; (psysho-log "Process %s message: %s" proc event)))
;;(print (copy-sequence timer-list))
;;;(mapc #'cancel-timer timer-list)
(defun my-buffer-change-fn (beg end len)
(message "Buffer changed from %d to %d (replaced %d chars)" beg end len))
(add-hook 'after-change-functions #'my-buffer-change-fn)
(defun my-watch-buffer (beg end len)
(when (string= (buffer-name) "*X*")
(message "*X* was modified")))
(add-hook 'after-change-functions #'my-watch-buffer)
(defun my-monitor-buffer-change (beg end len)
(when (> (- (point-max) (point-min)) 0)
(psysho-log "[HOOK] Буфер *X* получил данные, открываю...")
(display-buffer (current-buffer))
;; Удаляем хук, чтобы сработал только один раз
(remove-hook 'after-change-functions #'my-monitor-buffer-change t)))
(with-current-buffer "*X*"
(add-hook 'after-change-functions #'my-monitor-buffer-change nil t))