mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 11:50:51 -08:00
Remove duplicate ERC prompt on reconnect
* lisp/erc/erc-backend.el (erc--unhide-prompt, erc--hide-prompt, erc--unhide-prompt-on-self-insert): Add functions to ensure prompt is hidden on disconnect and shown when a user types /reconnect in a disconnected server buffer. (erc-process-sentinel): Register aforementioned function with `pre-command-hook' when prompt is deleted after disconnecting. (erc-server-PRIVMSG): Ensure prompt is showing when a new message arrives from target. * lisp/erc/erc.el (erc-hide-prompt): Repurpose unused option by changing meaning slightly to mean "selectively hide prompt when disconnected." Also delete obsolete, commented-out code that at some point used this option in its prior incarnation. (erc-prompt-hidden): Add new option to specify look of prompt when hidden. (erc-unhide-query-prompt): Add option to force-reveal query prompts on reconnect. (erc-open): Augment earlier reconnect-detection semantics by incorporating `erc--server-reconnecting'. In existing buffers, remove prompt-related hooks and reveal prompt, if necessary. (erc-cmd-RECONNECT): Allow a user to reconnect when already connected (by first disconnecting). (erc-connection-established): Possibly unhide query prompts. (Bug#54826) * test/lisp/erc/erc-tests.el (erc-tests--test-prep, erc-tests--set-fake-server-process): Factor out some common buffer-prep boilerplate involving user input and the server process. Shared with bug#54536.
This commit is contained in:
parent
4ae0707704
commit
a63ed6f78a
3 changed files with 229 additions and 47 deletions
|
|
@ -705,6 +705,39 @@ Conditionally try to reconnect and take appropriate action."
|
|||
;; unexpected disconnect
|
||||
(erc-process-sentinel-2 event buffer))))
|
||||
|
||||
(defun erc--unhide-prompt ()
|
||||
(remove-hook 'pre-command-hook #'erc--unhide-prompt-on-self-insert t)
|
||||
(when (and (marker-position erc-insert-marker)
|
||||
(marker-position erc-input-marker))
|
||||
(with-silent-modifications
|
||||
(remove-text-properties erc-insert-marker erc-input-marker
|
||||
'(display nil)))))
|
||||
|
||||
(defun erc--unhide-prompt-on-self-insert ()
|
||||
(when (and (eq this-command #'self-insert-command)
|
||||
(or (eobp) (= (point) erc-input-marker)))
|
||||
(erc--unhide-prompt)))
|
||||
|
||||
(defun erc--hide-prompt (proc)
|
||||
(erc-with-all-buffers-of-server
|
||||
proc nil ; sorta wish this was indent 2
|
||||
(when (and erc-hide-prompt
|
||||
(or (eq erc-hide-prompt t)
|
||||
;; FIXME use `erc--target' after bug#48598
|
||||
(memq (if (erc-default-target)
|
||||
(if (erc-channel-p (car erc-default-recipients))
|
||||
'channel
|
||||
'query)
|
||||
'server)
|
||||
erc-hide-prompt))
|
||||
(marker-position erc-insert-marker)
|
||||
(marker-position erc-input-marker)
|
||||
(get-text-property erc-insert-marker 'erc-prompt))
|
||||
(with-silent-modifications
|
||||
(add-text-properties erc-insert-marker (1- erc-input-marker)
|
||||
`(display ,erc-prompt-hidden)))
|
||||
(add-hook 'pre-command-hook #'erc--unhide-prompt-on-self-insert 0 t))))
|
||||
|
||||
(defun erc-process-sentinel (cproc event)
|
||||
"Sentinel function for ERC process."
|
||||
(let ((buf (process-buffer cproc)))
|
||||
|
|
@ -727,11 +760,8 @@ Conditionally try to reconnect and take appropriate action."
|
|||
(dolist (buf (erc-buffer-filter (lambda () (boundp 'erc-channel-users)) cproc))
|
||||
(with-current-buffer buf
|
||||
(setq erc-channel-users (make-hash-table :test 'equal))))
|
||||
;; Remove the prompt
|
||||
(goto-char (or (marker-position erc-input-marker) (point-max)))
|
||||
(forward-line 0)
|
||||
(erc-remove-text-properties-region (point) (point-max))
|
||||
(delete-region (point) (point-max))
|
||||
;; Hide the prompt
|
||||
(erc--hide-prompt cproc)
|
||||
;; Decide what to do with the buffer
|
||||
;; Restart if disconnected
|
||||
(erc-process-sentinel-1 event buf))))))
|
||||
|
|
@ -1479,6 +1509,7 @@ add things to `%s' instead."
|
|||
(setq buffer (erc-get-buffer (if privp nick tgt) proc))
|
||||
(when buffer
|
||||
(with-current-buffer buffer
|
||||
(when privp (erc--unhide-prompt))
|
||||
;; update the chat partner info. Add to the list if private
|
||||
;; message. We will accumulate private identities indefinitely
|
||||
;; at this point.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue