From 93658f69aa3e26512cafc44724dc986a6a4c3f8f Mon Sep 17 00:00:00 2001 From: ant Date: Fri, 15 May 2026 02:05:04 +0300 Subject: [PATCH] Greately expanded the WIKI article on the Tin newsreader. The previous version was merely a stup. This patch adds detail instructions on configuring and using Tin. --- wiki/source/tin.md | 377 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 372 insertions(+), 5 deletions(-) diff --git a/wiki/source/tin.md b/wiki/source/tin.md index cd3aaf7..92ce9fa 100644 --- a/wiki/source/tin.md +++ b/wiki/source/tin.md @@ -1,12 +1,379 @@ --- -title: tin (UseNet reader) +title: tin (Usenet client) category: software +author: + - ant +todo: + - describe the common entry prefixes on: + - groups + - threads + - articles + - arrange the principal keys in the way most convenient to the learner: + - with grouping by relative function + - with ordering by decreasing importance. + - abridge that list, leaving out the less important ones? --- -tin is a threaded NNTP and spool based [UseNet](usenet-news.html) newsreader for a variety of platforms. +[*tin*](http://www.tin.org/) +is a text-mode threading NNTP and spool-based +[Usenet](usenet-news.html) client +for a variety of platforms. -[http://www.tin.org/](http://www.tin.org/) +## Local connection -it is an actively maintained project, and is installed on ``tilde.club``. `tin` should be invoked as `tin -r` to read from the remote news spool. Use to go to the next unread article and `w` to write a new article. +`tin` is installed on `tilde.club` +and preconfigured to access +the local spool +of the `news.tilde.club` server by default. +You need only run `tin` without arguments: +``` +$ tin +``` +There is also a local NNTP server +on the `tilde.club` premises, +to which you can connect via: +``` +$ tin -r [-g localhost[:119]] +``` +You can forward this port over SSH +to your own machine +and point your local *tin* +(as well as any newsreader) +to it. + +## Remote connection + +### Server configuration + +To connect `tin` to a remote news server over NNTP, +a little bit of setup is required. +By default, most of your *tin* configuration +is located in the `.tin` directory in your home. +In order to register a remote server, +add a line to the `newsrctable` file +in that directory, +with the following whitespace-separated fields: + +1. server address with an optional port after a colon, + which is needed only for non-standard ports, + +2. path to the `newsrc` file for that server, + for internal use by *tin* + to store an index of downloaded articles. + for each newsgroup. + +3. optionally---but highly recommended---a + short alias for the server, + to facilitate invocation of *tin*. + +For example, here are a few lines from my `newsrctable`: +``` +news.tilde.club ~/.tin/newsrc.club tc +news.eternal-september.org ~/.tin/newsrc.e-s es +fidonews.mine.nu ~/.tin/newsrc.mine.nu fi +news.gmane.io ~/.tin/newsrc.gmane gm +* ~/.tin/newsrc.local +``` +Now you can connect to any of the registered servers +via `rtin -g`. +For example, +to read the `tilde.club` server configured above, +enter: +``` +$ rtin -g tc +``` +But you will not be able to post yet, +if the server requires authorisation, +as most servers do: + +### Authorisation + +*tin* reads your credentials +for each server from the file `.newsauth`, +by default located in your home directory. +It also has a table structure similar to `.newsrc`, +with one line per server, +but this time the fields are: + +1. server address, +2. password, +3. username. + +For example, my line for tilde.club server +(with a dummy password, however) is: +``` +news.tilde.club ant H1dd3nPa$$w0rd +``` +Some servers +(*Eternal September* is +[one of them](https://www.eternal-september.org/index.php?language=en&showpage=faq#Login-No-Auth)) +require that the client authorise +immediately upon connect, +or they will not show you all newsgroups, +if any. +To cause *tin* to authorise immediately, +pass the `-A` option, e.g: +``` +rtin -Ag es +``` +If you are among the unlucky fellows +who are guilty of using a password +with space or +(I tremble to say) +tab characters, +you will need to enclose it +in double quotes (`"`). +Make sure your `.newsauth` +is not readable by other users: +``` +$ chmod 600 ~/.newsauth +``` + +### Specifying the NNTPS protocol + +By default, `rtin` connects over the unencrypted NNTP protocol. +These days, however, most servers support the more secure NNTPS. +To cause *tin* to use it, +it should be invoked with the `-T` option. +So, the final invocation for *Eternal September*, +with the necessary initial authorisation +and the recommended encrypted connection, +is: +``` +$ rtin -ATg es +``` + +### Simplifying the invocation + +If remembering to supply +`-T` and `-A` +for servers that require them +annoys you, +consider storing +the complete invocation +in an alias in your shell's initialisation script +(`~/.shrc` for `sh`, +`~/.bashrc` for *Bash*), e.g.: +``` +alias news_es='rtin -ATg es' +``` +or use an the wrapper script below, +which will determine +whether `-T` and `-A` are needed +and supply them to *tin* for you: +
+``` +#! /bin/sh +# tinr--launch the tin(1) newsreader +# with a specified newsserver alias, +# automatically providing the options +# -A (authorisation) and -T (NNTP over TLS) +# if they are required, +# to save the user remembering +# the respective properties of each server. +# Invoke as: +# # $ tinr [params] +# supplying a server alias +# and optionally whatever parameters +# you want to pass to tin. +# -A is provided if the server is present in .newsauth, +# and -T--if newsrctable in its fourth field +# specifies any second alias for the server. +# # +# #Written by: Anton Shepelev +# #and released into the void under The Unlicense: +# # +#SPDX-License-Identifier: Unlicense +#URL: + +help()\ +{ sed -ne ' + 1d +# prefix-juggling to keep the script compatible +# after conversion of tabs to spaces, +# as Markdown processors will often do: + s/^#\([ ]\+\)/PREF/ + t cont; q + :cont + s/^PREF#// + p + ' $0 \ + | fmt -74 -p "PREF"\ + | sed -e 's/^PREF//' + exit 1 +} + +help_ref="See tinr -h for instructions." +while getopts h opt; do + case $opt in + h) help; exit 0;; + ?) [ ${OPTARG-x}=x ] && echo $help_ref && exit 1; + esac +done +shift $(($OPTIND - 1)) + +if [ $# -lt 1 ]; then + echo 1>&2 \ +A server alias is not specified. $help_ref + exit 1 +fi +alias=$1 + +nrct=${TIN_HOMEDIR:-"$HOME"}/.tin/newsrctable +naut=${TIN_HOMEDIR:-"$HOME"}/.newsauth + +get_serv() \ +{ + [ ! -r $nrct ] && return 1 + + script=$( + awk -e ' + /^[^#]/{ if( $3=="'${alias}'" ) + { print $1 + if( $4 ) + print("T") + exit + }}' \ + < $nrct + ) +# awk failed, exiting: + if [ $? -gt 0 ]; then exit 1; fi +# no server entry was found: + if [ ! -n "$script" ]; then return 1; fi +# a server entry was found: + while read s o; do + server=$s + opts=$o + done < +The script above will add `-A` +if the server is present in your `.newsauth` +and `-T` if a secondary alias is assigned to it +in the fourth column of `newsrctable`. +Invoke it with the primary alias of the desired server, +optionally followed by +whatever arguments you may want to pass to *tin*, e.g.: +``` +$ tinr es # connect to Eternal September +$ tinr tc -o # submit all postponed articles +``` + +## Interface overview + +*tin* works at four nested levels +with (more or less :-) +uniform navigation +within and between them: + +-- +Level Operates on Symbol +------ ------------ ------- +selection newsgroups S + +group threads G + +thread articles T + +article single article A +- + +*tin* starts at the topmost level (selection). + +Whereas +the selection, group, and article levels +are linked with fixed up/down transitions, +the thread level is the odd one out, +for it comes between the group and article levels +only upon explicit invocation +from either of them +by the `l` key. +Furthermore, +if the article level was entered from the thread level +the *level-up* command (`q`) +goes back to the thread level +instead of the group level. + +The levels share many common keys +for navigation and operations, +often borrowed from +[The Vi editor](vi.html) interface. +The most important keys are: + +---- ------ -------------------- +Key Level Action +---- ------ -------------------- +H SGTA toggle on-screen help, + useful for learning + +h SGTA list available commands + +j/k SGT next/prev. group/thread/article + +j/k A next/prev. line in text + +[0-9]+ SGR highlight by number + +Return SGT level-down (into highlighted element) + +q SGTA level-up, or *q*uit + +l GA open thread view, mem. as *l*ist of articles + +/ SGTA search forward + +? SGTA search backwards + +y S toggle display of all/subscribed groups + +s/u S subscribe/unsubscribe to/from selected group + +r SG switch between read/all + +TAB SGTA to next unread article from anywhere + +p/n GA prev/next + +P/N A prev/next unread + +w G make a new post + +f A follow-up (reply) + +c/C SGTA mark group (SG) or thread (TA) as read + and move to the next unread (C) one + +K GTA mark current thread (G) or article (TA) + as read and move to the next unread one + +z SGA mark group/base article/article unread + +Z TA mark thread unread + +Y S load new posts from the server (if any) + +M SGTA open the menu +- + +For a complete UI reference and settings, +see the +[tin(1)](http://www.tin.org/bin/man.cgi?section=1&topic=tin) +manpage. -if you have `tin` on your local box and can do [[ssh port forwarding]], you can read news using it. (details forthcoming).