1% $Id: t-prot.sl,v 1.20 2012/02/07 11:19:57 jochen Exp $ 2% Copyright (c) 2003-2005 Jochen Striepe <t-prot@tolot.escape.de> 3% 4% This file is provided as an example implemention for articles to be 5% filtered through t-prot before displayed. They are still filtered if 6% you reply to such a message so you will have to deactivate this if 7% you want to include quotes of the original article. 8% 9% Activate this macro by adding 10% interpret t-prot.sl 11% to your ~/.slrnrc. 12% 13% If you are not happy with the suggested t-prot default parameters, 14% put something like 15% variable t_prot_params = "-c -emtS"; 16% variable t_prot_tmpdir = "$HOME/.tmpdir"; 17% variable t_prot_qp = ""; 18% into ~/.slrn/t-prot-cfg and add 19% interpret .slrn/t-prot-cfg 20% to your ~/.slrnrc (after 'interpret t-prot.sl'). If "mimedecode" is 21% installed on your system you might want to use 22% variable t_prot_qp = "mimedecode"; 23% You can get mimedecode at 24% http://packages.debian.org/stable/mail/mimedecode.html 25% 26% However, please keep in mind that the path of the temp directory should 27% NOT be readable to other users -- otherwise it might reveal information on 28% what you read, and probably even be a security hole. Please see t-prot's 29% man page for details on command line parameters. 30% 31% If you want to toggle t-prot filtering on/off without leaving slrn, 32% you may want to add something like 33% setkey article register_t_prot "\e6" 34% setkey article unregister_t_prot "\e7" 35% to your ~/.slrnrc -- press ESC-6 to activate t-prot filtering, and 36% ESC-7 to disable it (this will take effect on the next article you 37% read, see the package's TODO file). 38% 39% Requirements/Bugs: tr(1) and rm(1) are POSIX and should be available 40% on any Unix-like system, mktemp(1) should be available on any recent 41% OpenBSD or Debian Linux system -- you can get the sources there 42% if your system happens to lack this program. This macro has been 43% written for S-Lang v2.x (and will definitely fail with S-Lang v1.x). 44% As always, bug reports, patches (preferrably in unified diff format), 45% comments and suggestions are welcome. 46% 47% License: This file is part of the t-prot package and therefore 48% available under the same conditions. See t-prot's man page for 49% details. 50 51 52% these should be reasonable defaults (they work fine for me, SCNR): 53variable t_prot_params = "-aeklmtc -S --diff --bigq -L$HOME/.slrn/mlfooters -A$HOME/.slrn/adfooters"; 54variable t_prot_tmpdir = "$HOME/tmp/slrn"; % you better make sure it exists 55variable t_prot_qp = "perl -i -p -e '$p=1 if /^Content-Transfer-Encoding: quoted-printable/i; if ($p==1) { s/=([0-9a-f][0-9a-f])/chr(hex($1))/egi; s/=\n//eg; };'"; 56 57define t_prot () { 58 variable art, f, fname, line, qp; 59 art = ""; 60 61 % Keep in mind that the path should NOT be readable to other users -- 62 % otherwise it might reveal information on what you read, and probably 63 % even be a security hole: 64 f = popen ("mktemp -q "+t_prot_tmpdir+"/t-prot.sl.XXXXXX | tr -d '\n'", "r"); 65 if (f == NULL) return; 66 if (-1 == fgets (&fname, f)) return; 67 pclose (f); 68 69 70 if (t_prot_qp != "") { qp = t_prot_qp+"|"; } else { qp = ""; } 71 72 f = popen (qp+"t-prot "+t_prot_params+" >"+fname, "w"); 73 if (f == NULL) { 74 message ("Unable to filter article to "+fname); 75 return; 76 } 77 () = fputs (article_as_string(), f); 78 () = pclose (f); 79 80 81 f = fopen (fname, "r"); 82 if (f == NULL) { 83 message (fname+" could not be opened."); 84 return; 85 } 86 while (-1 != fgets (&line, f)) { 87 art = art + line; 88 } 89 fclose (f); 90 91 if (0 != remove(fname)) message ("Unable to remove "+fname); 92 93 replace_article (art); 94} 95 96define register_t_prot () { 97 if (1 == register_hook("read_article_hook", "t_prot")) { 98 message ("t-prot filtering activated"); 99 } 100 else { 101 message ("t-prot filtering NOT activated"); 102 } 103} 104 105define unregister_t_prot () { 106 if (1 == unregister_hook("read_article_hook", "t_prot")) { 107 message ("t-prot filtering deactivated"); 108 } 109 else { 110 message ("t-prot filtering NOT deactivated"); 111 } 112} 113 114% filtering is enabled by default: 115register_hook("read_article_hook", "t_prot"); 116