Function: gnus-article-read-summary-keys

gnus-article-read-summary-keys is an autoloaded, interactive and byte-compiled function defined in gnus-art.el.gz.

Signature

(gnus-article-read-summary-keys &optional ARG KEY NOT-RESTORE-WINDOW)

Documentation

Read a summary buffer key sequence and execute it from the article buffer.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-art.el.gz
(defun gnus-article-read-summary-keys (&optional _arg key not-restore-window)
  "Read a summary buffer key sequence and execute it from the article buffer."
  (interactive "P" gnus-article-mode)
  (gnus-article-check-buffer)
  (let ((nosaves
	 '("q" "Q" "r" "m"  "a" "f" "WDD" "WDW"
	   "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
	   "=" "^" "\M-^" "|"))
	(nosave-but-article
	 '("A " "A<" "A>" "AM" "AP" "AR" "AT" "A\C-?" "A\M-\r" "A\r" "Ab" "Ae"
	   "An" "Ap" [?A (meta return)] [?A delete]))
	(nosave-in-article
	 '("AS" "\C-d"))
	keys new-sum-point gnus-pick-mode func)
    (with-current-buffer gnus-article-current-summary
      (setq unread-command-events (nconc unread-command-events
					 (list (or key last-command-event)))
	    keys (read-key-sequence nil t)
	    func (key-binding keys t)))

    (message "")

    (when (eq func 'undefined)
      (error "%s is undefined" keys))

    (cond
     ((eq (aref keys (1- (length keys))) ?\C-h)
      (gnus-article-describe-bindings (substring keys 0 -1)))
     ((or (member keys nosaves)
	  (member keys nosave-but-article)
	  (member keys nosave-in-article))
      (if (or (not func)
	      (numberp func))
	  (ding)
	(unless (member keys nosave-in-article)
	  (set-buffer gnus-article-current-summary))
	(when (and (symbolp func)
		   (get func 'disabled))
	  (error "Function %s disabled" func))
	(call-interactively func)
	(setq new-sum-point (point)))
      (when (member keys nosave-but-article)
	(pop-to-buffer gnus-article-buffer)))
     (t
      ;; These commands should restore window configuration.
      (let ((obuf (current-buffer))
	    (owin (current-window-configuration))
	    win in-buffer selected new-sum-start new-sum-hscroll err)
	(cond (not-restore-window
	       (pop-to-buffer gnus-article-current-summary)
	       (setq win (selected-window)))
	      ((setq win (get-buffer-window gnus-article-current-summary))
	       (select-window win))
	      (t
	       (let ((summary-buffer gnus-article-current-summary))
		 (gnus-configure-windows 'article)
		 (unless (setq win (get-buffer-window summary-buffer 'visible))
		   (let ((gnus-buffer-configuration
			  '((article ((vertical 1.0
						(summary 0.25 point)
						(article 1.0)))))))
		     (gnus-configure-windows 'article))
		   (setq win (get-buffer-window summary-buffer 'visible)))
		 (select-frame-set-input-focus (window-frame win))
		 (select-window win))))
	(setq in-buffer (current-buffer))
	(when (and (symbolp func)
		   (get func 'disabled))
	  (error "Function %s disabled" func))
	(if (and func
		 (functionp func)
		 (condition-case code
		     (progn
		       (call-interactively func)
		       t)
		   (error
		    (setq err code)
		    nil)))
	    (progn
	      (when (eq win (selected-window))
		(setq new-sum-point (point)
		      new-sum-start (window-start win)
		      new-sum-hscroll (window-hscroll win)))
	      (when (or (eq in-buffer (current-buffer))
			(when (eq obuf (current-buffer))
			  (set-buffer in-buffer)
			  t))
		(setq selected (ignore-errors (gnus-summary-select-article)))
		(set-buffer obuf)
		(unless not-restore-window
		  (set-window-configuration owin))
		(when (and (eq selected 'old)
			   new-sum-point)
		  (set-window-start (get-buffer-window (current-buffer))
				    1)
		  (set-window-point (get-buffer-window (current-buffer))
				    (if (article-goto-body)
					(1- (point))
				      (point))))
		(when (and (not not-restore-window)
			   new-sum-point
			   (window-live-p win)
			   (with-current-buffer (window-buffer win)
			     (derived-mode-p 'gnus-summary-mode)))
		  (set-window-point win new-sum-point)
		  (set-window-start win new-sum-start)
		  (set-window-hscroll win new-sum-hscroll))))
	  (set-window-configuration owin)
	  (if err
	      (signal (car err) (cdr err))
	    (ding))))))))