(require 'super) (require 'scroll) (require 'close) (require 'gnus-group) (defun gnus-make-group-if-not-there (name method server) (condition-case nil (gnus-group-make-group name method server) (error nil) )) (defun gnus-restore-groups () (interactive) (let ((gmane-groups '( "gmane.comp.video.image-magick.user" "gmane.comp.shells.zsh.devel" "gmane.comp.shells.zsh.user" "gmane.emacs.erc.general" "gmane.emacs.gnus.general" "gmane.emacs.gnus.user" "gmane.emacs.help" "gmane.emacs.w3m" )) (aioe-groups '( "rec.bicycles.tech" "rec.sport.boxing" ))) (cl-dolist (group gmane-groups) (gnus-make-group-if-not-there group "nntp" "news.gmane.org") ) (cl-dolist (group aioe-groups) (gnus-make-group-if-not-there group "nntp" "nntp.aioe.org") ))) ;; level (defun gnus-group-up-or-downgrade-group (&optional options) (interactive "p") (let ((level (cl-case options ((4) 6) ((16) (string-to-number (read-from-minibuffer "Level: "))) (t 3) ))) (gnus-group-set-current-level 1 level) )) (defun gnus-summary-kill-buffer (group) (gnus-kill-buffer (format "*Summary %s*" group)) ) ;; group line (setq gnus-group-line-format "%0{%L%} %2{%3~(ignore \"0\")T%} %G%45= %1{%6~(ignore \"0\")y%} %3{%6~(ignore \"0\")t%} %4{%7n%} %2{%12s%}\n") ; group line ;; mode line (setq gnus-group-mode-line-format "%M: %S") ;; sort (setq gnus-group-sort-function #'gnus-group-sort-by-real-name) (setq gnus-group-use-permanent-levels t) ; ? ;; no confirm on `gnus-group-catchup-current' (setq gnus-interactive-catchup nil) (defun gnus-message-wait () (message " ...")) (defun gnus-message-done () (message " o-)")) (defun gnus-group-list-all-groups-sort () "Show all groups." (interactive) (gnus-message-wait) (gnus) (gnus-group-list-all-groups) (gnus-group-sort-groups gnus-group-sort-function) (goto-char (point-min)) (gnus-message-done) ) (defun online () (interactive) (let ((OK-string "1")) (or (string= OK-string (shell-command-to-string "check-online")) ;; the below is so it will work in /sudo:root[...]: buffers as well (string= OK-string (shell-command-to-string (format "zsh -c 'source /home/%s/.zsh/remote && check-online'" user-login-name) ))))) (defun gnus-group-refresh () "Show a refreshed Gnus *Group* buffer. Start Gnus and change buffer if necessary." (interactive) (if (online) (progn (gnus-message-wait) (if (gnus-alive-p) (progn (gnus-group-list-groups gnus-level-subscribed) (gnus) ) (progn (gnus) (gnus-group-list-groups gnus-level-subscribed))) (gnus-message-done) ) (error "Cannot use Gnus (you are not online)") )) (defun gnus-group-post-news-to-group-at-point () (interactive) (gnus-group-post-news 4) ) (defun gnus-group-show-mails (&optional number) "Show every or a NUMBER of posts of the nnml:mail.misc group." (interactive "p") (gnus-group-read-group number nil "nnml:mail.misc") ) (defun gnus-group-show-sent (&optional number) "Show every or a NUMBER of posts of `gnus-message-archive-group'" (interactive "p") (gnus-group-read-group number nil gnus-message-archive-group) ) (let ((the-map gnus-group-mode-map)) (disable-super-global-keys the-map) (set-vertical-keys the-map) (set-close-key the-map) ;; show groups (refresh) (define-key the-map "l" #'gnus-group-list-all-groups-sort) (define-key the-map "g" #'gnus-group-refresh) ;; fast open (define-key the-map "m" #'gnus-group-show-mails) (define-key the-map "s" #'gnus-group-show-sent) ;; group (define-key the-map "L" #'gnus-group-up-or-downgrade-group) (define-key the-map "d" #'gnus-group-delete-articles) (define-key the-map "A" #'gnus-group-make-group) (define-key the-map "a" #'gnus-group-post-news-to-group-at-point) ;; misc (define-key the-map "\M-e" nil) (define-key the-map "S" #'gnus-group-enter-server-mode) (define-key the-map "\M-0" #'gnus-undo) ) (provide 'group)