mirror of
https://github.com/tildeclub/site.git
synced 2026-06-08 14:10:18 +00:00
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.
This commit is contained in:
@@ -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 <tab> 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:
|
||||
<details>
|
||||
```
|
||||
#! /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 <alias> [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 <ant@tilde.club>
|
||||
# #and released into the void under The Unlicense:
|
||||
# #<https://unlicense.org/>
|
||||
#SPDX-License-Identifier: Unlicense
|
||||
#URL: <svn://insomnia247.nl:5120/ant-dots/bin/tinr>
|
||||
|
||||
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 <<EOF
|
||||
$(echo $script)
|
||||
EOF
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ -r $naut ] && get_serv; then
|
||||
# the server is found by the alias,
|
||||
# let's see whether it has an auth entry:
|
||||
if awk -e '$1=="'$server'"{exit 1}' $naut; then :
|
||||
else opts=${opts}A
|
||||
fi
|
||||
fi
|
||||
|
||||
# Swallow the alias:
|
||||
shift
|
||||
# The final invocation:
|
||||
rtin -${opts}g $alias "$@"
|
||||
```
|
||||
</details>
|
||||
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).
|
||||
|
||||
Reference in New Issue
Block a user