Mercurial > hg > xemacs
comparison my-news.el @ 21:7b2c4ed36302
for new maritain
| author | ht |
|---|---|
| date | Mon, 30 Nov 2020 16:00:15 +0000 |
| parents | 5f3a215f12eb |
| children | 0e5b39d2f8bb |
comparison
equal
deleted
inserted
replaced
| 20:06827fc8ae79 | 21:7b2c4ed36302 |
|---|---|
| 8 ; (debug-on-entry 'gnus-start-news-server) | 8 ; (debug-on-entry 'gnus-start-news-server) |
| 9 (setq gnus-nntp-server nil) | 9 (setq gnus-nntp-server nil) |
| 10 ; | 10 ; |
| 11 | 11 |
| 12 | 12 |
| 13 (setq gnus-article-save-directory "d:/mail") | 13 (setq gnus-article-save-directory "/home/ht/mail/Mail") |
| 14 | 14 (setq nnml-directory (expand-file-name "/home/ht/mail/Mail")) |
| 15 (setq gnus-message-archive-method | |
| 16 '(nnfolder "archive" | |
| 17 (nnfolder-directory "/home/ht/mail/cpy") | |
| 18 (nnfolder-active-file "/home/ht/mail/cpy/active") | |
| 19 (nnfolder-get-new-mail nil) | |
| 20 (nnfolder-inhibit-expiry t))) | |
| 21 (setq gnus-secondary-select-methods | |
| 22 '((nnml "ht" | |
| 23 (gnus-show-threads nil) | |
| 24 (gnus-article-sort-functions (gnus-article-sort-by-subject gnus-article-sort-by-date)) | |
| 25 ))) | |
| 26 (setq mail-sources '((file :path "/var/spool/mail/ht"))) | |
| 15 ;;; fixup clarinews | 27 ;;; fixup clarinews |
| 16 ;(autoload 'gnus-clarinews-fun "clari-clean" "Clean ClariNews articles" t) | 28 ;(autoload 'gnus-clarinews-fun "clari-clean" "Clean ClariNews articles" t) |
| 17 ;(add-hook 'gnus-article-prepare-hook 'gnus-clarinews-fun) | 29 ;(add-hook 'gnus-article-prepare-hook 'gnus-clarinews-fun) |
| 18 | 30 |
| 19 | 31 |
| 61 (if gnus-pre-config | 73 (if gnus-pre-config |
| 62 (set-window-configuration gnus-pre-config)) | 74 (set-window-configuration gnus-pre-config)) |
| 63 ; (setq gnus-pre-config nil) | 75 ; (setq gnus-pre-config nil) |
| 64 ) | 76 ) |
| 65 | 77 |
| 78 ;; Database stuff | |
| 79 (defun open-white () | |
| 80 (setq whitelist-db (open-database "/disk/scratch/mail/white" 'berkeley-db))) | |
| 81 (defun save-white () | |
| 82 (close-database whitelist-db) | |
| 83 (open-white)) | |
| 84 | |
| 85 (defun open-ad () | |
| 86 (setq adlist-db (open-database "/disk/scratch/mail/ad" 'berkeley-db))) | |
| 87 | |
| 88 (defun save-ad () | |
| 89 (close-database adlist-db) | |
| 90 (open-ad)) | |
| 91 | |
| 92 (defun open-quaker () | |
| 93 (setq quaker-db (open-database "~/mail/quaker" 'berkeley-db))) | |
| 94 (defun save-quaker () | |
| 95 (close-database quaker-db) | |
| 96 (open-quaker)) | |
| 97 | |
| 98 | |
| 99 (defun add-white (&optional addToBBDB) | |
| 100 (interactive "P") | |
| 101 (gnus-summary-goto-article (gnus-summary-article-number)) | |
| 102 (let* ((components (get-current-from-components)) | |
| 103 (addr (get-canonical-from-addr components))) | |
| 104 (if (new-white addr) | |
| 105 (save-white)) | |
| 106 (if addToBBDB | |
| 107 (let ((bbdb-no-duplicates-p t)) | |
| 108 (bbdb-create-internal (car components) nil (cadr components) | |
| 109 nil nil nil))))) | |
| 110 | |
| 111 (defun add-ad () | |
| 112 (interactive) | |
| 113 (gnus-summary-goto-article (gnus-summary-article-number)) | |
| 114 (let ((addr (get-current-from-addr))) | |
| 115 (if (or (not (get-database addr whitelist-db)) | |
| 116 (yes-or-no-p "Already white, really convert to ad?")) | |
| 117 (if (new-ad addr) | |
| 118 (save-ad))))) | |
| 119 | |
| 120 (defun add-quaker() | |
| 121 (interactive) | |
| 122 (let ((addr (get-addr-before-point))) | |
| 123 (when (new-quaker addr) | |
| 124 (save-quaker)) | |
| 125 (quaker-sig-maybe))) | |
| 126 | |
| 127 ; not needed anymore because of gnus-posting-styles (q.v. in gnus-init) | |
| 128 (defun quaker-sig-if-to-quaker () | |
| 129 (let ((message-options)) | |
| 130 (save-excursion (message-options-set-recipient)) | |
| 131 (let* ((recipStr (message-options-get 'message-recipients)) | |
| 132 (recips (split-string (downcase recipStr) | |
| 133 ",[ \f\t\n\r\v]+" t))) | |
| 134 (while (and recips | |
| 135 (not (quaker-sig-if-quaker-1 (car recips)))) | |
| 136 (setq recips (cdr recips)))))) | |
| 137 | |
| 138 (defun to-quaker-p () | |
| 139 (let ((message-options)) | |
| 140 (save-excursion (message-options-set-recipient)) | |
| 141 (let* ((recipStr (message-options-get 'message-recipients)) | |
| 142 (recips (split-string (downcase recipStr) | |
| 143 ",[ \f\t\n\r\v]+" t))) | |
| 144 (while (and recips | |
| 145 (not (get-database (car recips) quaker-db))) | |
| 146 (setq recips (cdr recips))) | |
| 147 (not (null recips))))) | |
| 148 | |
| 149 (defun quaker-sig-if-quaker () | |
| 150 (quaker-sig-if-quaker-1 (get-addr-before-point))) | |
| 151 | |
| 152 (defun quaker-sig-if-quaker-1 (addr) | |
| 153 (if (get-database addr quaker-db) | |
| 154 (progn (quaker-sig-maybe) | |
| 155 t))) | |
| 156 | |
| 157 (defun quaker-sig-maybe () | |
| 158 (save-excursion | |
| 159 (goto-char (point-min)) | |
| 160 (cond ((to-quaker-p) | |
| 161 (goto-char (point-min)) | |
| 162 (cond ((search-forward "\nFrom: ht@home.hst.name" nil t) | |
| 163 (backward-char 13) | |
| 164 (delete-char 4) | |
| 165 (insert "rsof"))))) | |
| 166 | |
| 167 (goto-char (point-max)) | |
| 168 (search-backward "\n-- \n") | |
| 169 (when (looking-at "\n-- \nHenry") | |
| 170 (forward-char 5) | |
| 171 (kill-entire-line 5) | |
| 172 (insert-file "~/.quaker-sig")))) | |
| 173 | |
| 174 (defun kill-white () | |
| 175 (interactive) | |
| 176 (gnus-summary-goto-article (gnus-summary-article-number)) | |
| 177 (let ((addr (get-current-from-addr))) | |
| 178 (rem-white addr))) | |
| 179 | |
| 180 (defun get-from-gnus-addr () | |
| 181 (get-from-addr (gnus-fetch-field "From"))) | |
| 182 | |
| 183 (defun get-from-addr (addr) | |
| 184 (get-canonical-from-addr (gnus-extract-address-components addr))) | |
| 185 | |
| 186 (defun get-canonical-from-addr (components) | |
| 187 (downcase (cadr components))) | |
| 188 | |
| 189 (defun get-current-from-addr () | |
| 190 (with-current-buffer gnus-article-buffer | |
| 191 (get-from-gnus-addr))) | |
| 192 | |
| 193 (defun get-current-from-components () | |
| 194 (with-current-buffer gnus-article-buffer | |
| 195 (gnus-extract-address-components (gnus-fetch-field "From")))) | |
| 196 | |
| 197 (defun get-addr-before-point () | |
| 198 (let ((cur (point))) | |
| 199 (save-excursion | |
| 200 (get-from-addr (buffer-substring (+ (search-backward " ") 1) cur))) | |
| 201 )) | |
| 202 | |
| 203 (defun blacken-and-delete (group) | |
| 204 ;; mis-named now | |
| 205 ;; this is part of the expiry processing for xxxSPAM groups, and | |
| 206 ;; actually whitens the from addresses of #-marked articles | |
| 207 ;; The return value is crucial (and crucially outside of the scope of the if) | |
| 208 (if (memq number | |
| 209 (with-current-buffer gnus-summary-buffer | |
| 210 gnus-newsgroup-processable)) | |
| 211 (let ((addr (get-from-gnus-addr))) | |
| 212 (new-white addr))) | |
| 213 'delete) | |
| 214 | |
| 215 (defun unwhiten-and-delete (group) | |
| 216 ;; unused except in stale groups -- usable as an expiry | |
| 217 (if (memq number | |
| 218 (with-current-buffer gnus-summary-buffer | |
| 219 gnus-newsgroup-processable)) | |
| 220 (let ((addr (get-from-gnus-addr))) | |
| 221 (remove-database addr whitelist-db))) | |
| 222 'delete) | |
| 223 | |
| 224 (defun known-black (list) | |
| 225 (if (get-database (get-from-gnus-addr) blacklist-db) | |
| 226 list)) | |
| 227 | |
| 228 (defun white-spam (list) | |
| 229 (if (or (equal (get-database (get-from-gnus-addr) whitelist-db) "t") | |
| 230 (let ((case-fold-search t) | |
| 231 (subj (gnus-fetch-field "Subject")) | |
| 232 (from (get-from-gnus-addr))) | |
| 233 (or | |
| 234 (and subj (string-match white-subjects subj)) | |
| 235 (and from | |
| 236 (let ((fromDom (substring from (+ 1 (search "@" from))))) | |
| 237 (and fromDom (member fromDom white-domains))))))) | |
| 238 list)) | |
| 239 | |
| 240 (defun ad-spam (list) | |
| 241 (if (let ((from (get-from-gnus-addr))) | |
| 242 (or | |
| 243 (equal (get-database from adlist-db) "t") | |
| 244 (and from | |
| 245 (let ((fromDom (substring from (+ 1 (search "@" from))))) | |
| 246 (and fromDom (member fromDom ad-domains)))) | |
| 247 )) | |
| 248 list)) | |
| 249 | |
| 250 (defun bogoNote (group) | |
| 251 (if (memq number | |
| 252 (with-current-buffer gnus-summary-buffer | |
| 253 gnus-newsgroup-processable)) | |
| 254 (let ((addr (get-from-gnus-addr))) | |
| 255 (new-white addr))) | |
| 256 (shell-command-on-region (point-min) (point-max) | |
| 257 "/afs/inf.ed.ac.uk/user/h/ht/share/bin/local/makeBogo") | |
| 258 'delete) | |
| 259 | |
| 260 (defun whiten-recip () | |
| 261 ;;; a hook for outgoing mail | |
| 262 (let* ((recips (message-options-get 'message-recipients)) | |
| 263 (res (mapcar (function new-white) | |
| 264 (split-string (downcase recips) | |
| 265 ",[ \f\t\n\r\v]*" t)))) | |
| 266 (while (and res (not (car res))) | |
| 267 (setq res (cdr res))) | |
| 268 (if res (save-white)))) | |
| 269 | |
| 270 | |
| 271 (defun new-white (addr) | |
| 272 (if (get-database addr whitelist-db) | |
| 273 nil | |
| 274 (put-database addr "t" whitelist-db) | |
| 275 t)) | |
| 276 | |
| 277 (defun new-ad (addr) | |
| 278 (if (get-database addr adlist-db) | |
| 279 nil | |
| 280 (put-database addr "t" adlist-db) | |
| 281 t)) | |
| 282 | |
| 283 (defun rem-ad () | |
| 284 (interactive) | |
| 285 (remove-database (downcase (get-current-from-addr)) adlist-db) | |
| 286 (save-ad)) | |
| 287 | |
| 288 (defun new-quaker (addr) | |
| 289 (if (get-database addr quaker-db) | |
| 290 nil | |
| 291 (put-database addr "t" quaker-db) | |
| 292 t)) | |
| 293 | |
| 294 (defun rem-white (addr) | |
| 295 (remove-database (downcase addr) whitelist-db)) | |
| 296 | |
| 297 (defun bogoOK (group) | |
| 298 (shell-command-on-region (point-min) (point-max) | |
| 299 "/afs/inf.ed.ac.uk/user/h/ht/share/bin/local/makeNonBogo") | |
| 300 'delete) | |
| 301 | |
| 302 (defun del-dups () | |
| 303 (interactive) | |
| 304 (gnus-summary-sort-by-subject) | |
| 305 (gnus-summary-clear-mark-forward 1) | |
| 306 (goto-char (point-min)) | |
| 307 (let ((pos)) | |
| 308 (while (setq pos (search-forward "] " nil t)) | |
| 309 (end-of-line) | |
| 310 (let ((subj (buffer-substring pos (point)))) | |
| 311 (unless (equal subj "") | |
| 312 (let ((target (if (< (length subj) 26) | |
| 313 (concat "] " subj "\n") | |
| 314 (concat "] " (substring subj 0 25)))) | |
| 315 (done 0) | |
| 316 (case-fold-search nil)) | |
| 317 (while (and (= done 0) | |
| 318 (search-forward target nil t)) | |
| 319 (forward-char -3) | |
| 320 (setq done (gnus-summary-mark-as-read-forward 1)))))))) | |
| 321 (gnus-summary-limit-to-unread) | |
| 322 (gnus-summary-sort-by-original)) | |
| 323 | |
| 324 | |
| 325 (defun showMPAhtml () | |
| 326 "Show the text/html parts of an multipart/alternative message using lynx" | |
| 327 (interactive) | |
| 328 (gnus-summary-select-article) | |
| 329 (with-current-buffer gnus-original-article-buffer | |
| 330 (shell-command-on-region (point-min) (point-max) "/home/ht/bin/showMPA.sh") | |
| 331 ) | |
| 332 ) | |
| 333 | |
| 66 (provide 'my-news) | 334 (provide 'my-news) |
