TIN(5)

๐ŸŒธ TIN(5) โ€” the files edition, bestie ๐ŸŒธ

okay so you already know tin(1) โ€” the Usenet newsreader, our beloved โ€” but this page? this page is about all the little (config) files and their formats that tin(1) reads, and honestly it's giving "backstage tour of the whole operation" ๐Ÿ’…

one thing before we go any further: all of these files are expected to have unix style line endings โ€” that's '\n' aka LF. no cap. don't come at me with CRLF, she will not be serving that here ๐Ÿ™ˆ


โœจ DESCRIPTION โœจ

This man page describes the various (config) files and their formats used by the tin(1) newsreader. All files are expected to have unix style ('\n' aka LF) line endings.


๐Ÿ“ FILES ๐Ÿ“

$MAILCAPS, ~/.mailcap, /etc/mailcap, /usr/etc/mailcap, /usr/local/etc/mailcap, /etc/mail/mailcap

these are the mailcap(5) files, as defined in RFC 1524 ๐ŸŽ€ tin(1) reads them to figure out how to display non-text messages at the local site. so like, when a message isn't plain text, who do we call? the mailcap, that's who.

the deets:

  • any line that starts with # is a comment ๐Ÿ’ฌ
  • blank lines are ignored
  • otherwise, each line defines a single mailcap entry for a single content type
  • long lines may be continued by ending them with a backslash character, "\"

each individual mailcap entry is made of a content-type specification, a command to execute, and (possibly) a set of optional "flag" values. the holy trinity, fr fr โญ

the "type" field is simply any valid content type name. it's the string that will be matched against the ''Content-Type:'' header to decide if this is the mailcap entry that matches the current message. additionally, the type field may specify a subtype or a wildcard to match all subtypes ๐Ÿ‘‘

the "command" field is any UNIX command and is used to specify the interpreter for the given type of message. it will be passed to the shell via the system(3) facility.

semicolons and backslashes within the command or any flag field must be quoted with backslashes. and now the substitutions, which are lowkey the whole magic trick โœจ:

  • if the field contains "%s", those two characters will be replaced by the name of a file that contains the body of the message.
  • if it contains "%t", those two characters will be replaced by the content-type field, including the subtype, if any.
  • if it contains "%{" followed by a parameter name and a closing "}", then all those characters will be replaced by the value of the named parameter, if any, from the ''Content-Type:'' header.
  • finally, if the field contains "\%", those two characters will be replaced by a single % character.

besides the type and command field, the following "flags" are defined. get comfy, this is a long list and we're doing every single one ๐Ÿ’–

  • compose โ€” The "compose" field may be used to specify a program that can be used to compose a new body or body part in the given format. Its intended use is to support mail composing agents that support the composition of multiple types of mail using external composing agents. As with the view-command, the semantics of program execution are operating system dependent. The result of the composing program may be data that is not yet suitable for mail transport โ€” that is, a Content-Transfer-Encoding may need to be applied to the data.
  • composetyped โ€” The "composetyped" field is similar to the "compose" field, but is to be used when the composing program needs to specify the ''Content-Type:'' header field to be applied to the composed data. The "compose" field is simpler, and is preferred for use with existing (non-mail-oriented) programs for composing data in a given format. The "composetyped" field is necessary when the Content-Type information must include auxiliary parameters, and the composition program must then know enough about mail formats to produce output that includes the mail type information.
  • edit โ€” The "edit" field may be used to specify a program that can be used to edit a body or body part in the given format. In many cases, it may be identical in content to the "compose" field, and shares the operating-system dependent semantics for program execution.
  • print โ€” The "print" field may be used to specify a program that can be used to print a message or body part in the given format. As with the view-command, the semantics of program execution are operating system dependent.
  • test โ€” The "test" field may be used to test some external condition (e.g., the machine architecture, or the window system in use) to determine whether the mailcap line applies. It specifies a program to be run to test some condition. The semantics of execution and of the value returned by the test program are operating system dependent. If the test fails, a subsequent mailcap entry should be sought. Multiple test fields are not permitted โ€” since a test can call a program, it can already be arbitrarily complex.
  • needsterminal โ€” The "needsterminal" field indicates that the view-command must be run on an interactive terminal. This is needed to inform window-oriented user agents that an interactive terminal is needed. (The decision is not left exclusively to the view-command because in some circumstances it may not be possible for such programs to tell whether or not they are on interactive terminals.) The needsterminal command should be assumed to apply to the compose and edit commands, too, if they exist. Note that this is NOT a test โ€“ it is a requirement for the environment in which the program will be executed, and should typically cause the creation of a terminal window when not executed on either a real terminal or a terminal window.
  • copiousoutput โ€” The "copiousoutput" field indicates that the output from the view-command will be an extended stream of output and is to be interpreted as advice to the UA (User Agent mail-reading program) that the output should be either paged or made scroll-able. Note that it is probably a mistake if needsterminal and copiousoutput are both specified.
  • description โ€” The "description" field simply provides a textual description, optionally quoted, that describes the type of data, to be used optionally by mail readers that wish to describe the data before offering to display it.
  • textualnewlines โ€” The "textualnewlines" field, if set to any non-zero value, indicates that this type of data is line-oriented and that, if encoded in base64, all newlines should be converted to canonical form (CRLF) before encoding, and will be in that form after decoding. In general, this field is needed only if there is line-oriented data of some type other than text/* or non-line-oriented data that is a subtype of text.
  • x11-bitmap โ€” The "x11-bitmap" field names a file, in X11 bitmap (xbm) format, which points to an appropriate icon to be used to visually denote the presence of this kind of data.
  • nametemplate โ€” The "nametemplate" field gives a filename format, in which %s will be replaced by a short unique string to give the name of the temporary file to be passed to the viewing command. This is only expected to be relevant in environments where filename extensions are meaningful, e.g., one could specify that a GIF file being passed to a gif viewer should have a name ending in ".gif" by using "nametemplate=%s.gif".
ok so real talk, bestie: tin(1) currently only respects the "test", "description", "nametemplate" and partly the "needsterminal" flags, all other flags are internally ignored. It also can't handle the "%F" and "%n" expansions yet. so don't be out here setting up flags she's just gonna ghost ๐Ÿ’€

Example:

# mailcap file example
image/*;\
   xv -8 -geometry +0 '%s';\
   description=%{name} %t-Image;\
   test=test "$DISPLAY" != "";\
   nametemplate=%s.IMAGE

message/rfc822;\
   ${PAGER:-"more"} '%s';\
   edit=${EDITOR:-"vi"} '%s';\
   compose=${EDITOR:-"vi"} '%s';\
   print=a2ps '%s';\
   needsterminal

/etc/nntpserver

the default NNTP-server to read news from if not reading from the local spool. and here's the priority situation, in order, bestie ๐Ÿซถ:

  • ''-g server'' has the highest priority
  • then $NNTPSERVER
  • then this file's default
  • and the default server given at compile time has the lowest priority

${TIN_HOMEDIR:-"$HOME"}/.cancelsecret

the secret to be used for cancel-locks (RFC 8315) โ€” but only if tin(1) is built with support for it. an empty secret file disables the cancel-lock creation in that case.

๐Ÿ”’ This file should be readable only by the user. it's a secret, babe, act like it.

${TIN_HOMEDIR:-"$HOME"}/.mime.types, /etc/mime.types, /etc/tin/mime.types

mime type / filename extension pairs ๐ŸŽ€


${TIN_HOMEDIR:-"$HOME"}/.newsauth

"nntpserver[:port] password [user]" pairs for NNTP servers that require authorization.

the rules, because this file is picky and valid:

  • if the password contains a space or a tab it must be enclosed in double quotes (").
  • usernames must not be enclosed in double quotes and thus can't contain spaces or tabs.
  • any line that starts with # is a comment.
  • blank lines are ignored.
๐Ÿ˜ญ๐Ÿšจ This file should be readable only for the user as it contains the user's unencrypted password for reading news! like literally just sitting there in plain text. protect her.

the fields:

  • nntpserver โ€” full qualified domain name of the news server. Additionally, a port can be specified by appending :portnumber.
  • password โ€” user's unencrypted password for reading news.
  • user โ€” username on the news server if it differs from the local login. This field is optional.

Example:

# sample .newsauth file
news.example.org  secret
news.example.net  arcane  guest
news.example.com  "top secret"  james.bond@example.com

${TIN_HOMEDIR:-"$HOME"}/.newsrc

"newsgroupflag [article[,article | -article]...]" lines.

the fields:

  • newsgroup โ€” the name of the newsgroup.
  • flag โ€” a flag indicating if the group is subscribed ':' or not '!'.

and that's where we're pausing, bestie โ€” more parts are coming, so don't go anywhere ๐Ÿ’–

  • article โ€” the range of articles you've already read in that group ๐Ÿ’–. Numbers get separated by commas, and runs of sequential numbers get collapsed with hyphens (so cute, so efficient). Empty lines? Ignored. Lines that start with #? Also ignored โ€” and not written back either, bestie. โœจ

Example:

# sample .newsrc file
news.software.b! 1โ€“666,669
news.software.nntp: 1โ€“13245,13247,13249
news.software.readers: 1โ€“19567,19571โ€“19597
  • ${TIN_HOMEDIR:-"$HOME"}/.tin/$NNTPSERVER/.oldnewsrc โ€” the backup of ${TIN_HOMEDIR:-"$HOME"}/.newsrc ๐Ÿซถ
  • ${TIN_HOMEDIR:-"$HOME"}/.signature
  • ${TIN_HOMEDIR:-"$HOME"}/.Sig โ€” your signature, obviously ๐Ÿ’…
  • ${TIN_HOMEDIR:-"$HOME"}/.sigfixed โ€” the fixed part of a randomly generated signature. This gets added first. ๐ŸŽ€
  • ${TIN_HOMEDIR:-"$HOME"}/.tin/.inputhistory โ€” history of the last strings you used ๐Ÿฆ‹
  • ${TIN_INDEX_MAILDIR:-"${TIN_HOMEDIR:-"$HOME"}/.tin"}/.mail/ โ€” mailgroups index files
  • ${TIN_INDEX_NEWSDIR:-"${TIN_HOMEDIR:-"$HOME"}/.tin"}/.news${NNTPSERVER:+"-$NNTPSERVER"}/ โ€” newsgroups index files
  • ${TIN_INDEX_SAVEDIR:-"${TIN_HOMEDIR:-"$HOME"}/.tin"}/.save/ โ€” saved newsgroups index files
  • ${TIN_HOMEDIR:-"$HOME"}/.tin/active.mail โ€” the active file of your mailgroups, built out of "mailgroupname maxnum minnum mailspool" quadruples separated by spaces, not tabs (not me being picky, that's literally the rule ๐Ÿ™ˆ). Requires tin(1) to be built with mh-mail-handling support.
    • mailgroupname โ€” has to be the pathname of the mailbox relative to field #4, with / changed to .
    • maxnum โ€” just put a large number here, something higher than the highest message in the mailbox
    • minnum โ€” put 0 here
    • mailspool โ€” path of the mail spool directory. This must be the full pathname to the root of the mail folder area.

Example:

Mail.inbox 12345 00000 /home/foo
Mail.outbox 23456 00000 /home/foo

This lets you get to the 'inbox' and 'outbox' folders of user foo. They're accessed via /home/foo/Mail/inbox and /home/foo/Mail/outbox ๐ŸŒธ

  • ${TIN_HOMEDIR:-"$HOME"}/.tin/active.save โ€” the active file of your saved newsgroups, used by tin -R.
  • /etc/tin/attributes
  • ${TIN_HOMEDIR:-"$HOME"}/.tin/attributes โ€” okay bestie, these are the group attributes files ๐Ÿ‘‘ and they're lowkey powerful. They let you override some global settings from ${TIN_HOMEDIR:-"$HOME"}/.tin/tinrc on a per group basis.

Order matters here, fr fr โ€” the last match counts, which is what lets you refine attributes for narrowed scopes. Also note that the scope=<grouplist> line has to be specified before the attributes are specified for that list, and each attribute can only be set once per scope section. Every attribute already has a reasonable default, so you only have to specify the one you actually want to change. All toggle attributes are set by specifying ON/OFF. Other than that, they function exactly as their global equivalents. The following group attributes are available:

  • scope โ€” this changes the list of groups that the attributes following it will be applied to. See the section NEWSGROUP LISTS & WILDCARDS in tin(1) for the types of pattern you can use here.
  • add_posted_to_filter โ€” identical to the tinrc variable of the same name
  • advertising โ€” identical to the tinrc variable of the same name
  • alternative_handling โ€” identical to the tinrc variable of the same name
  • ask_for_metamail โ€” identical to the tinrc variable of the same name
  • auto_cc_bcc โ€” identical to the tinrc variable of the same name
  • auto_list_thread โ€” identical to the tinrc variable of the same name
  • auto_select โ€” automatically performs the GroupMarkUnselArtRead ('X') command after you enter the group. โœจ
  • batch_save โ€” can be used to override the global setting in tinrc on a per group basis. For more info, read the section AUTOMATIC MAILING AND SAVING NEW NEWS in tin(1).
  • date_format โ€” identical to the tinrc variable of the same name
  • delete_tmp_files โ€” if this is set to ON, then saved article files that have been post-processed get automatically deleted. Otherwise the user gets asked whether to delete the post-processed files. Automatic processing of marked articles using GroupAutoSave ('S') will suppress that prompting.
  • editor_format โ€” identical to the tinrc variable of the same name
  • extquote_handling โ€” identical to the tinrc variable of the same name
  • fcc โ€” mailbox to save sent mails into. The format of the mailbox is controlled via the tinrc mailbox_format variable.
  • followup_to โ€” set the ''Followup-To:'' header to the specified group(s).
  • from โ€” identical to the tinrc variable mail_address
  • getart_limit โ€” identical to the tinrc variable of the same name
  • group_catchup_on_exit โ€” identical to the tinrc variable of the same name
  • group_format โ€” identical to the tinrc variable of the same name
  • hide_inline_data โ€” identical to the tinrc variable of the same name
  • mail_8bit_header โ€” identical to the tinrc variable of the same name
  • mail_mime_encoding โ€” identical to the tinrc variable of the same name
  • maildir โ€” identical to the tinrc variable of the same name
  • mailing_list โ€” used when a group is a mailing list. All responses to the group get directed to this email address instead ๐Ÿ“ง
  • mark_ignore_tags โ€” identical to the tinrc variable of the same name
  • mark_saved_read โ€” identical to the tinrc variable of the same name
  • mime_forward โ€” decides whether usenet articles get forwarded as an attachment or inline. When it's set to OFF, the forwarded article goes into the body of the mail; setting it to ON makes the article get attached as a separate MIME part. Enabling mime_forward is especially useful for articles made of multiple MIME parts โ€” think PGP/MIME signed messages, or stuff encoded in a different character set than your local one. It's also useful if the receiver should be able to operate on the entire forwarded article (i.e., view or save it without your comments). On the other hand, if you want to forward only some parts of the article, or to insert 'inline' annotations, you might want to disable this option. Currently mime_forward is forced if the article to be attached is a multipart MIME article โ€” this may change in a future version. And please note: for this option to have any effect, the tinrc variable interactive_mailer has to be set to 0 (which is the default). ๐Ÿ’…
  • mime_types_to_save โ€” a comma separated list of MIME major/minor Content-Types that get saved when you use the view/save and save/autosave features. A single * can be used to wildcard the major and/or minor type, and a ! as the first character in an entry negates it, eg: image/*,!image/bmp,!text/html. Default is */*
  • news_headers_to_display โ€” identical to the tinrc variable of the same name
  • news_headers_to_not_display โ€” identical to the tinrc variable of the same name
  • news_quote_format โ€” identical to the tinrc variable of the same name
  • organization โ€” this can be used to set the article header field ''Organization:''. It overrides whatever setting (if any) organization has in /etc/tin/tin.defaults and $ORGANIZATION (or $NEWSORG on Apollo DomainOS). If it points to a readable file, a random line from that file gets used. Note that some news servers might still overwrite the ''Organization:'' header, so don't come for me if it doesn't stick ๐Ÿ˜ญ
  • pos_first_unread โ€” identical to the tinrc variable of the same name
  • post_8bit_header โ€” identical to the tinrc variable of the same name
  • post_mime_encoding โ€” identical to the tinrc variable of the same name
  • post_process_type โ€” identical to the tinrc variable of the same name
  • post_process_view โ€” identical to the tinrc variable of the same name
  • print_header โ€” identical to the tinrc variable of the same name
  • process_only_unread โ€” identical to the tinrc variable of the same name
  • prompt_followupto โ€” identical to the tinrc variable of the same name
  • quote_chars โ€” identical to the tinrc variable of the same name
  • savedir โ€” identical to the tinrc variable of the same name
  • savefile โ€” (the original page literally gives this one no description, so I'm not inventing one, bestie ๐Ÿ’€)
  • show_art_info โ€” identical to the tinrc variable of the same name
  • show_author โ€” identical to the tinrc variable of the same name
  • show_only_unread_arts โ€” identical to the tinrc variable of the same name
  • show_signatures โ€” identical to the tinrc variable of the same name
  • sigdashes โ€” identical to the tinrc variable of the same name
  • sigfile โ€” identical to the tinrc variable of the same name
  • signature_repost โ€” identical to the tinrc variable of the same name
  • sort_article_type โ€” identical to the tinrc variable of the same name
  • sort_threads_type โ€” identical to the tinrc variable of the same name
  • tex2iso_conv โ€” identical to the tinrc variable of the same name
  • thread_articles โ€” identical to the tinrc variable of the same name
  • thread_catchup_on_exit โ€” identical to the tinrc variable of the same name
  • thread_format โ€” identical to the tinrc variable of the same name
  • thread_perc โ€” literally identical to the tinrc variable of the same name ๐Ÿ’–
  • trim_article_body โ€” identical to the tinrc variable of the same name, no notes bestie
  • suppress_soft_hyphens โ€” identical to the tinrc variable of the same name
  • verbatim_handling โ€” identical to the tinrc variable of the same name
  • wrap_on_next_unread โ€” identical to the tinrc variable of the same name
  • x_body โ€” a lil chunk of text that gets added at the start of a message body. ok so there's lore here ๐Ÿ‘€ if this string starts with a / or ~ then it's assumed to be the name of a file holding the text to insert. and if the string starts with a ! then what follows is assumed to be the path to a program to be executed to generate the content. %G expands to the current news.group.name and %P expands to the news.group.name with all '.' replaced by '/'. slay ๐Ÿซถ
  • x_comment_to โ€” insert the ''X-Comment-To:'' header. this is only useful in FIDO groups, periodt.
  • x_headers โ€” a string including the header-name and the contents of the header that'll be automatically added when posting. if the string starts with a / or ~ then it's assumed to be the name of a file containing the header and its content to be inserted. if it starts with a ! then what follows is assumed to be the path to a program to be executed to generate the header and its content. %G expands to the current news.group.name and %P expands to the news.group.name with all '.' replaced by '/'. โœจ
  • quick_kill_scope โ€” a comma-separated list of newsgroup patterns (wildmat-style) deciding which groups the filter rule added by QuickFilterKill gets applied to. if it's unset, the default from the tinrc variable default_filter_kill_global gets used.
  • quick_kill_expire โ€” identical to the tinrc variable default_filter_kill_expire
  • quick_kill_case โ€” identical to the tinrc variable default_filter_kill_case
  • quick_kill_header โ€” identical to the tinrc variable default_filter_kill_header
  • quick_select_scope โ€” a comma-separated list of newsgroup patterns (wildmat-style) deciding which groups the filter rule added by QuickFilterSelect gets applied to. if unset, the default from the tinrc variable default_filter_select_global gets used.
  • quick_select_expire โ€” identical to the tinrc variable default_filter_select_expire
  • quick_select_case โ€” identical to the tinrc variable default_filter_select_case
  • quick_select_header โ€” identical to the tinrc variable default_filter_select_header
  • ispell โ€” path and options for an ispell(1)-like spell-checker, e.g., "aspell --mode=email --dont-backup check" ๐Ÿ’…
  • mm_network_charset โ€” identical to the tinrc variable of the same name
  • undeclared_charset โ€” assume that (broken) articles with no MIME charset declaration have this charset โ€” default is US-ASCII. โš ๏ธ this attribute only works on systems with a working iconv(3) or ucnv_*(); everyone else might have to compile tin(1) with --disable-mime-strict-charset.
  • undeclared_cs_guess โ€” guess the charset for (broken) articles with no MIME charset declaration. this attribute only works on systems with a working iconv(3) or ucnv_*() and ucsdet_getName() from libicui18n. default is 0. the possible values are:
    • 0 โ€” don't guess undeclared charset
    • 1 โ€” guess if not set via undeclared_charset
    • 2 โ€” always guess undeclared charset
  • Example: โ€” the vibes, demonstrated ๐ŸŒธ
# include extra headers
# assume ISO-8859-1 as charset if no charset is declared
# in all but fido7.* groups
scope=*,!fido7.*
x_headers=~/.tin/headers
undeclared_charset=ISO-8859-1

# in *sources* set post process type to shar only
scope=*sources*
post_process_type=1

# in *binaries* turn on full post processing,
# remove tmp files and set Followup-To: poster
scope=*binaries*
post_process_type=2
delete_tmp_files=ON
followup_to=poster

# in fido.* newsgroups change quote_chars
# and add X-Comment-To: line
scope=fido.*
quote_chars=%I>_
x_comment_to=ON

# in fido7.* newsgroups guess charset
scope=fido7.*
undeclared_cs_guess=1

# in *.test newsgroups, don't append signature
# and preset Subject
scope=*.test
sigfile=--none
x_headers=Subject: test - ignore - no reply

# assume ISO-2022-JP-2 as charset
scope=fj.*,japan.*
undeclared_charset=ISO-2022-JP-2

๐ŸŽ€ ${TIN_HOMEDIR:-"$HOME"}/.tin/filter ๐ŸŽ€

ok so the filter file is where you assign scores to certain articles. based on that score, an article can be filtered out (hidden) or marked hot ๐Ÿ”ฅ. the tinrc variables score_limit_kill and score_limit_select are the limits that must be crossed to mark an article as killed or selected. empty lines, or lines starting with a '#', are ignored. and listen: multiple matching-rules in the same scope are all applied individually, not only when they all hit at the same time (logical OR, not AND) โ€” iykyk ๐Ÿงš

  • comment โ€” every entry (rule) in the filter file might get a comment. multiple lines are allowed (but only for comments yet). every line must start with the "comment=" keyword. comments must appear first in the rule. comment lines placed within a rule will be moved to the beginning of the next rule. this might be changed in the future. > โš ๏ธ don't use '#' to mark comments, because those lines are ignored and your comments will get lost on the next write of the file. not the vibe. ๐Ÿ’€
  • group โ€” a comma-separated list of newsgroup patterns in wildmat-style, deciding which groups the filter rule gets applied to. this line is mandatory! no cap.
  • case โ€” 0 = case-sensitive, 1 = case-insensitive
  • score โ€” the score value of the rule; can also be one of the magic words "kill" or "hot". โœจ
  • subj โ€” match against ''Subject:''. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • from โ€” match against ''From:''. tin(1) converts the contents of the ''From:'' header to an old style e-mail address, e.g., ''some@body.example (John Doe)'' instead of ''John Doe <some@body.example>'', before trying to match the patterns in the filter rule. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • msgid โ€” match against ''Message-ID:'' and the full ''References:''. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • msgid_last โ€” match against ''Message-ID:'' and the last ''References:'' entry (direct responses) only. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • msgid_only โ€” match against ''Message-ID:''. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • refs_only โ€” match against ''References:''. the matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • lines โ€” match against ''Lines:''. <num matches less than, >num matches more than.
  • gnksa โ€” match against ''From:'' address parser return codes. <num matches less than, >num matches more than the returned numeric value. GNKSA_LOCAL_DOMAIN_LITERAL or GNKSA_INVALID_DOMAIN are only returned if disable_gnksa_domain_check in /etc/tin/tin.defaults is set to OFF. as the built-in domain list may be outdated, this should be considered carefully ๐Ÿ‘€. GNKSA_ILLEGAL_LABEL_BEGNUM is only returned if tin(1) was compiled with ENFORCE_RFC1034 defined, which is usually not the case.
    • internal codes
      • 0 โ€” GNKSA_OK
      • 1 โ€” GNKSA_INTERNAL_ERROR
    • general syntactical errors
      • 100 โ€” GNKSA_LANGLE_MISSING
      • 101 โ€” GNKSA_LPAREN_MISSING
      • 102 โ€” GNKSA_RPAREN_MISSING
      • 103 โ€” GNKSA_ATSIGN_MISSING
      • 104 โ€” GNKSA_RANGLE_MISSING
    • FQDN part syntax and semantics errors
      • 200 โ€” GNKSA_SINGLE_DOMAIN
      • 201 โ€” GNKSA_INVALID_DOMAIN
      • 202 โ€” GNKSA_ILLEGAL_DOMAIN
      • 203 โ€” GNKSA_UNKNOWN_DOMAIN
      • 204 โ€” GNKSA_INVALID_FQDN_CHAR
      • 205 โ€” GNKSA_ZERO_LENGTH_LABEL
      • 206 โ€” GNKSA_ILLEGAL_LABEL_LENGTH
      • 207 โ€” GNKSA_ILLEGAL_LABEL_HYPHEN
      • 208 โ€” GNKSA_ILLEGAL_LABEL_BEGNUM
      • 209 โ€” GNKSA_BAD_DOMAIN_LITERAL
      • 210 โ€” GNKSA_LOCAL_DOMAIN_LITERAL
      • 211 โ€” GNKSA_RBRACKET_MISSING
    • localpart syntactical errors
      • 300 โ€” GNKSA_LOCALPART_MISSING
      • 301 โ€” GNKSA_INVALID_LOCALPART
      • 302 โ€” GNKSA_ZERO_LENGTH_LOCAL_WORD
    • realname part syntactical errors
      • 400 โ€” GNKSA_ILLEGAL_UNQUOTED_CHAR
      • 401 โ€” GNKSA_ILLEGAL_QUOTED_CHAR
      • 402 โ€” GNKSA_ILLEGAL_ENCODED_CHAR
      • 403 โ€” GNKSA_BAD_ENCODE_SYNTAX
      • 404 โ€” GNKSA_ILLEGAL_PAREN_CHAR
      • 405 โ€” GNKSA_INVALID_REALNAME
      • 406 โ€” GNKSA_MISSING_REALNAME
  • xref โ€” matches against the ''Xref:'' line. before any matching happens, the line gets turned into the same format ''Newsgroups:'' has: it becomes a comma-separated newsgroup list with all other info (i.e., the article counter) removed. The matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard. โœจ
  • path โ€” matches against the ''Path:'' line. warning bestie: this may not work on some servers. The matching type used (wildmat or regex) depends on the setting of the tinrc variable wildcard.
  • time โ€” a time_t value for when the rule expires. โฐ
Like, here's an example, no cap:
comment=mark all articles about tin, rtin,
comment=tind, ktin or cdtin as hot
group=*
case=1
score=hot
subj=\b(cd|[rk]?)?tin(d|pre)?[-.0โ€“9]*\b

comment=downscore postings in nsr from google based on
comment=message-id or path, if both hit they end up with
comment=a score of -66 which is enough to mark them killed
group=news.software.readers
case=1
score=-33
path=.googlegroups.com!not-for-mail$
msgid_only=@googlegroups.com>

Now, the keymap file lives in one of these iconic spots ๐Ÿ’…:

${TIN_HOMEDIR:-"$HOME"}/.tin/keymap${${LC_ALL:-"${LC_MESSAGES:-"${LC_CTYPE:-"$LANG"}"}"}:+".${LC_ALL:-"${LC_MESSAGES:-"${LC_CTYPE:-"$LANG"}"}"}"}
/etc/tin/keymap${${LC_ALL:-"${LC_MESSAGES:-"${LC_CTYPE:-"$LANG"}"}"}:+".${LC_ALL:-"${LC_MESSAGES:-"${LC_CTYPE:-"$LANG"}"}"}"}

So the keymap-file is this adorable thing containing "keyname value [value]" pairs separated by spaces or tabs. If the keymap-file named with the full specified locale(5) isn't found, it looks for less specific ones. It strips off various parts of the name in this order: codeset, normalized codeset, territory, and modifier when looking for the keymap-file. Below is a list of all rebindable keynames and their defaults. If a keyname is bound to NULL it's unassigned. ๐Ÿฆ‹

Here's the full list, bestie โ€” don't lose it ๐Ÿ’–:

              ShellEscape                    !
              SetRange                       #
              LastPage                       $
              ToggleColor                    &
              LastViewed                     -
              SearchRepeat                   \
              SearchSubjF                    /
              SearchSubjB                    ?
              SearchAuthB                    A
              SearchBody                     B
              CatchupNextUnread              C
              EditFilter                     E
              ToggleHelpDisplay              H
              ToggleInverseVideo             I
              ConnectionInfo                 J
              LookupMessage                  L
              OptionMenu                     M
              Postponed                      O    ^O
              QuitTin                        Q
              BugReport                      R
              DisplayPostHist                W
              MarkThrUnread                  Z
              FirstPage                      ^
              SearchAuthF                    a
              Catchup                        c
              Help                           h
              ToggleInfoLastLine             i
              Down                           j    ^N
              Up                             k    ^P
              Print                          o
              Quit                           q
              Version                        v
              Post                           w
              MarkArtUnread                  z
              QuickFilterSelect              [
              QuickFilterKill                ]
              Pipe                           |
              ScrollUp                       <
              ScrollDown                     >
              PageUp                         b    ^B   ^U
              PageDown                       ^D   ^F   SPACE
              RedrawScr                      ^L
              Postponed                      ^O
              MenuFilterSelect               ^A
              MenuFilterKill                 ^K
              MarkFeedRead                   ^X
              MarkFeedUnread                 ^W
              MarkAncientArtRead             ^E

              AttachSelect                   ^J   ^M
              AttachPipe                     p
              AttachSave                     s
              AttachTag                      t
              AttachUntag                    U
              AttachTagPattern               =
              AttachToggleTagged             @

              ConfigToggleAttrib             TAB
              ConfigSelect                   ^J   ^M
              ConfigLastPage                 G
              ConfigNoSave                   Q
              ConfigScopeMenu                S
              ConfigServerrcMenu             s
              ConfigFirstPage                g
              ConfigResetAttrib              r

              FeedTag                        T
              FeedArt                        a
              FeedHot                        h
              FeedPat                        p
              FeedRepost                     r
              FeedSupersede                  s
              FeedThd                        t

              FilterEdit                     e
              FilterSave                     s

              GroupNextUnreadArtOrGrp        TAB
              GroupReadBasenote              ^J   ^M
              GroupSelThd                    *
              GroupDoAutoSel                 +
              GroupToggleThdSel              .
              GroupSelThdIfUnreadSelected    ;
              GroupSelPattern                =
              GroupReverseSel                @
              GroupCancel                    D
              GroupToggleGetartLimit         G
              GroupMarkThdRead               K
              GroupNextUnreadArt             N
              GroupPrevUnreadArt             P
              GroupAutoSave                  S
              GroupTagParts                  T
              GroupUntag                     U
              GroupMarkUnselArtRead          X
              GroupToggleSubjDisplay         d
              GroupGoto                      g
              GroupListThd                   l
              GroupMail                      m
              GroupNextGroup                 n
              GroupPrevGroup                 p
              GroupToggleReadUnread          r
              GroupSave                      s
              GroupTag                       t
              GroupToggleThreading           u
              GroupRepost                    x
              GroupUndoSel                   ~

              HelpLastPage                   G
              HelpFirstPage                  g

              PageReplyQuoteHeaders          ^E
              PagePGPCheckArticle            ^G
              PageToggleRaw                  ^H
              PageNextUnread                 TAB
              PageNextThd                    ^J   ^M
              PageToggleTabs                 ^T
              PageFollowupQuoteHeaders       ^W
              PageToggleTex2iso              "
              PageToggleAllHeaders           *
              PageArticleInfo                '
              PageToggleRot                  %
              PageToggleUue                  (
              PageReveal                     )
              PageSkipIncludedText           :
              PageTopThd                     <
              PageBotThd                     >
              PageCancel                     D
              PageFollowup                   F
              PageLastPage                   G
              PageKillThd                    K
              PageNextUnreadArt              N
              PagePrevUnreadArt              P
              PageReply                      R
              PageAutoSave                   S
              PageGroupSel                   T
              PageViewUrl                    U
              PageViewAttach                 V
              PageToggleHighlight            _
              PageToggleVerbatim             ,
              PageEditArticle                e
              PageFollowupQuote              f
              PageFirstPage                  g
              PageListThd                    l
              PageMail                       m
              PageNextArt                    n
              PagePrevArt                    p
              PageReplyQuote                 r
              PageSave                       s
              PageTag                        t
              PageGotoParent                 u
              PageRepost                     x

              PgpEncSign                     b
              PgpEncrypt                     e
              PgpIncludekey                  i
              PgpSign                        s

              PostAbort                      a
              PostContinue                   c
              PostCancel                     d
              PostEdit                       e
              PostPGP                        g
              PostIspell                     i
              PostIgnore                     i
              PostMail                       m
              PostPostpone                   o
              PostPost                       p    y
              PostSupersede                  s
              PostSend                       s    y

              PostedArticlesSelect           ^J   ^M

              PostponeOverride               Y
              PostponeAll                    A

              PromptYes                      y    Y
              PromptNo                       n    N

              PProcNone                      n
              PProcShar                      s
              PProcYes                       y

              SaveAppendFile                 a
              SaveOverwriteFile              o

              SelectEnterNextUnreadGrp       TAB  n
              SelectReadGrp                  ^J   ^M
              SelectResetNewsrc              ^R
              SelectSortActive               .
              SelectNextUnreadGrp            N
              SelectSubscribePat             S
              SelectUnsubscribePat           U
              SelectQuitNoWrite              X
              SelectSyncWithActive           Y
              SelectToggleDescriptions       d
              SelectGoto                     g
              SelectMoveGrp                  m
              SelectToggleReadDisplay        r
              SelectSubscribe                s
              SelectUnsubscribe              u
              SelectYankActive               y
              SelectMarkGrpUnread            z    Z

              ScopeSelect                    ^J   ^M
              ScopeEditAttributesFile        E
              ScopeAdd                       a
              ScopeDelete                    d
              ScopeMove                      m
              ScopeRename                    r

and here's the rest of that list of key bindings, bestie ๐Ÿ’…

ThreadReadNextArtOrThread      TAB
ThreadReadArt                  ^J   ^M
ThreadSelArt                   *
ThreadToggleArtSel             .
ThreadReverseSel               @
ThreadCancel                   D
ThreadFollowup                 F
ThreadMarkArtRead              K
ThreadAutoSave                 S
ThreadUntag                    U
ThreadToggleSubjDisplay        d
ThreadFollowupQuote            f
ThreadMail                     m
ThreadSave                     s
ThreadTag                      t
ThreadTagParts                 T
ThreadUndoSel                  ~

UrlSelect                      ^J   ^M

๐ŸŒธ ${TIN_HOMEDIR:-"$HOME"}/.tin/mailgroups

This one's the cheat sheet of short descriptions for each mailgroup. (heads up: it only works if tin(1) was built with mh-mail-handling support, so if it's not doing anything, that's why ๐Ÿ˜ญ). Every line is two tab-separated fields, like this: "mailgroupname one-line description".

  • mailgroupname โ€” the name of the newsgroup
  • description โ€” a short single-line description of the group

๐ŸŒˆ ${TIN_HOMEDIR:-"$HOME"}/.tin/newsrctable

These are your "nntpserver[:port] newsrc [shortname [...]]" pairs, the ones you pair up with the -g command-line switch. The matching is case-insensitive, and any line starting with "#", ";" or " " counts as a comment. Ngl this only exists if you're reading via NNTP.

  • nntpserver โ€” the full qualified domain name of the news server. A plain IPv6 address has to be wrapped in square brackets. You can also tack on a port by appending :portnumber. โš ๏ธ Be aware that if a port is given it will override any port given with -g or -p or implied by -T or -k or set via $NNTPPORT. The string "default" or "*" acts as a wildcard to match any name, and a line like that should be placed last.
  • newsrc โ€” the related newsrc. A file specified via -f has a higher priority.
  • shortname โ€” nickname(s) for the nntpserver. Nicknames must not contain ":" and must be unique.

Example, because examples ate fr fr:

# sample newsrctable file
news.tin.org .newsrc-tin.org tinorg
news.example.org /tmp/nrc-ex example ex
[::1]:1119 /tmp/localhost6โ€“1119 lh6
# catch all rules should go last
# with the more specific one on top
*:563 ~/.tin/newsrcs/${NNTPSERVER-localhost}:563/newsrc
* ~/.tin/newsrcs/${NNTPSERVER-localhost}/newsrc

โœจ ${TIN_HOMEDIR:-"$HOME"}/.tin/posted

Your posting history, periodt. The file is written by tin(1) and used by the DisplayPostHist ('W') command. ๐Ÿšซ It should not be altered manually, bestie, hands off. Any line that starts with "#" is a comment. Blank lines are ignored. All other lines shall consist of at least four pipe-separated fields, starting with a time stamp "dd-mm-yy", a single letter indicating the action which initiated the message, a group name or a mail address the message was sent to, the subject of the message and optionally the messages Message-ID if known.

๐ŸŽ€ ${TIN_HOMEDIR:-"$HOME"}/Mail/posted

A copy of all posted articles in mbox(5) format. The filename can be changed by setting posted_articles_file.

๐Ÿ’œ ${TIN_HOMEDIR:-"$HOME"}/.tin/postponed.articles

The pool of postponed articles. This file is in mbox(5) format too. ๐Ÿ’…

๐Ÿฆ‹ ${TIN_HOMEDIR:-"$HOME"}/.tin/$NNTPSERVER/motd

This file is a copy of the servers message of the day (MOTD) message. It is automatically created on startup except when using the -Q command-line option, and it gets unlinked on exit. It's giving very temporary main character energy ๐Ÿ˜Œ

๐Ÿ“ ${TIN_HOMEDIR:-"$HOME"}/.tin/$NNTPSERVER/msglog

The file where $NNTPSERVER related info- and error-messages get stored. It's overwritten on startup and meant for debugging. If something's acting up, this is your girl.

๐Ÿงš ${TIN_HOMEDIR:-"$HOME"}/.tin/$NNTPSERVER/newsgroups

A copy of the servers newsgroups file, which provides short descriptions of each newsgroup. It is automatically updated on startup except when using the -X or -q command-line option and an old copy exists. Each line consist of two tab-separated fields: "group.name one-line description".

  • group.name โ€” is the name of the newsgroup
  • one-line description โ€” is a short single-line description of the group

๐Ÿ‘‘ ${TIN_HOMEDIR:-"$HOME"}/.tin/$NNTPSERVER/serverrc

This is where $NNTPSERVER related data lives, stored as a list of "variable=value" pairs. Currently there are only a few variables, and some of them are not meant to be changed by the user. See also ConfigServerrcMenu ('s') in section "SERVERRC MENU" in tin(1).

  • version โ€” Internal version number.
  • add_cmd_line_opts โ€” Additional command-line options. Acts like $TINRC but server specific. โš ๏ธ Be aware that the file is read after the command-line options and may override them. The allowed options are currently limited to -4, -6, -A, -C, -d, -G limit, -k, -n, -p port, -q, -Q, -t timeout, -T and -x. The default is unset.
  • disabled_nntp_cmds โ€” A comma separated list of NNTP commands which should be avoided. This can be used to work around some buggy servers and usually should left blank. Switching off XHDR also switches off HDR and vice versa. The following commands can be disabled:
    • AUTHINFO SASL
    • CAPABILITIES
    • COMPRESS DEFLATE
    • HDR
    • LIST COUNTS
    • LIST DISTRIB.PATS
    • LIST DISTRIBUTIONS
    • LIST HEADERS
    • LIST MOTD
    • LIST NEWSGROUPS
    • LIST OVERVIEW.FMT
    • LIST SUBSCRIPTIONS
    • LISTGROUP
    • NEWGROUPS
    • NEXT
    • OVER
    • XHDR
    • XOVER
    • XPAT
  • nntp_pipeline_limit โ€” Number of pipelined NNTP commands to send. Set to 1 if server does not support pipelining. Default is 50. Allowed maximum is 256.
  • cache_overview_files โ€” Identical to the tinrc variable of the same name but overrides it. โš ๏ธ Be aware that the serverrc variable will not be promoted to the tinrc, but the tinrc variable will be promoted to the serverrc if changed in the OptionMenu ('M').
  • compress_overview_files โ€” Identical to the tinrc variable of the same name but overrides it. โš ๏ธ Be aware that the serverrc variable will not be promoted to the tinrc, but the tinrc variable will be promoted to the serverrc if changed in the OptionMenu ('M').
  • motd_hash โ€” Internal hash of the servers MOTD, so displaying it can be skipped if it is unchanged.
  • last_newnews โ€” Internal timestamp used by tin(1) to keep track of new newsgroups on the server.

๐ŸŒŸ /etc/tin/tinrc and ${TIN_HOMEDIR:-"$HOME"}/.tin/tinrc

At startup, tin(1) reads in the configuration file. This contains a list of "variable=value" pairs that can be used to configure the way tin(1) works. value strings are limited to 1022 chars and will be discarded if exceeding this limit. If it exists, the global configuration file, ${TIN_LIBDIR:-NEWSLIBDIR}/tinrc is read first. After that, the user's own configuration file ${TIN_HOMEDIR:-"$HOME"}/.tin/tinrc is read. The global file is useful for distributing system-wide defaults to new users who have no private tinrc yet (see also /etc/tin/tin.defaults).

  • abbreviate_groupname โ€” If ON abbreviate long newsgroup names at group selection level and article level (if necessary) like this: news.software.readers โ†’ n.software.readers โ†’ n.s.readers โ†’ n.s.r. Default is OFF.
  • add_posted_to_filter โ€” If ON add posted articles which start a new thread to filter for highlighting follow-ups. Default is ON.
  • advertising โ€” Turn ON advertising in header (User-Agent:). Default is ON.
  • alternative_handling โ€” If ON strip multipart/alternative messages automatically. Default is ON.
  • art_marked_deleted โ€” The character used to show that an article was deleted. Default is 'D'.
  • art_marked_inrange โ€” The character used to show that an article is in a range. Default is '#'.
  • art_marked_return โ€” The character used to show that an article will return as an unread article when the group is next entered. Default is '-'.
  • art_marked_selected โ€” The character used to show that an article/thread is auto-selected (hot). Default is '*'.
  • art_marked_recent โ€” The character used to show that an article/thread is recent (not older than X days). See also recent_time. Default is 'o'.
  • art_marked_unread โ€” The character used to show that an article has not been read. Default is '+'.
  • art_marked_read โ€” The character used to show that an article was read. Default is ' '.
  • art_marked_killed โ€” The character used to show that an article was killed. Default is 'K'. kill_level must be set accordingly.
  • art_marked_read_selected โ€” The character used to show that an article was hot before it was read. Default is ':'. kill_level must be set accordingly.
  • Ask before using MIME viewer (ask_for_metamail) โ€” If ON tin(1) will ask before using a MIME viewer (metamail_prog) to display MIME messages. This only occurs if a MIME viewer is set. Default is OFF.
  • attachment_format โ€” the format string tin(1) uses to show stuff at the Attachment level. Default is "%t%s%e%c%d". โœจ
  • auto_cc_bcc โ€” when you mail an article, this auto-drops your name into the Cc: field (that's 1), the Bcc: field (that's 2), or both (3). Default is 'No' (0). ๐Ÿซถ
  • auto_list_thread โ€” if it's ON, entering a thread with the right arrow key automatically lists the thread for you. Default is ON.
  • auto_reconnect โ€” reconnect to the server all by itself. Default is OFF.
  • batch_save โ€” when it's ON, articles/threads get saved in batch mode whenever save -S or mail -M, -N is given on the command-line. Default is ON.
  • beginner_level โ€” ON means a lil mini menu of the most useful commands pops up at the bottom of the screen for each level, plus a short posting etiquette shows after you compose an article. Default is ON. ๐Ÿ’–
  • cache_overview_files โ€” ON makes local copies of NNTP overview files, which can considerably speed up accessing large groups when you're on a slow connection. Default is OFF.
  • compress_overview_files โ€” ON saves those locally cached NNTP overview files (that's cache_overview_files, the one right above) in compressed form (RFC 1952). Great for saving local disk space. Default is OFF.
  • cancel_lock_algo โ€” pick the hash algorithm for cancel-locks (RFC 8315). Only available when built with cancel-lock support, bestie. none disables the generation of cancel-locks entirely. Valid values are none, sha1, sha256 and sha512. Default is sha1.
  • catchup_read_groups โ€” ON means you get asked on quit whether all the groups you read during the current session should be marked read. Default is OFF.

๐ŸŽจ the color squad (col_*) ๐ŸŽจ

okay so this is the whole glow-up section, every single one is a color setting, no skips:

  • col_back โ€” standard background color
  • col_extquote โ€” color of quoted text from external sources
  • col_from โ€” color of the sender (From:)
  • col_head โ€” color of header-lines
  • col_help โ€” color of help pages
  • col_invers_bg โ€” color of the background for inverse text
  • col_invers_fg โ€” color of the foreground for inverse text
  • col_markdash โ€” color of words emphasized like _this_. See also word_h_display_marks and word_highlight.
  • col_markslash โ€” color of words emphasized like /this/. See also word_h_display_marks and word_highlight.
  • col_markstar โ€” color of words emphasized like *this*. See also word_h_display_marks and word_highlight.
  • col_markstroke โ€” color of words emphasized like -this-. See also word_h_display_marks and word_highlight.
  • col_message โ€” color of status messages in the last line
  • col_minihelp โ€” color of the mini help menu
  • col_newsheaders โ€” color of the actual news header fields
  • col_normal โ€” standard foreground color
  • col_quote โ€” color of quoted lines
  • col_quote2 โ€” color of twice quoted lines
  • col_quote3 โ€” color of >=3 times quoted lines
  • col_response โ€” color of the response counter. That's the text that says "Response x of y" in the article viewer.
  • col_signature โ€” color of signatures
  • col_score_neg โ€” color of negative score
  • col_score_pos โ€” color of positive score
  • col_urls โ€” color of urls highlight
  • col_verbatim โ€” color of verbatim blocks
  • col_subject โ€” color of the article subject
  • col_text โ€” color of text-lines
  • col_title โ€” color of help/mail sign

  • confirm_choice โ€” tin(1) can ask for manual confirmation to protect you ๐Ÿ›ก๏ธ. Available choices:
    • commands: asks for confirmation before executing certain dangerous commands (e.g., Catchup (c)). Commands affected by this are marked in this manual with [after confirmation].
    • quit: you'll be asked to confirm that you wish to exit tin(1) when you use the Quit (q) command.
    • select: asks for confirmation before marking all not selected (with GroupMarkUnselArtRead (X) command) articles as read.

Default is commands & quit.

  • date_format โ€” the format string used for date representation. You can find a description of the different format options at strftime(3). tin(1) uses strftime(3) when available and supports most format options in his fallback code. Default is "%a, %d %b %Y %H:%M:%S".
  • default_art_search
  • default_author_search
  • default_config_search

^ these three are the last article/author/config option that was searched for.

  • default_filter_days โ€” Default is 28.
  • default_filter_kill_case โ€” the default for quick (1 key) kill filter case. ON = filter case sensitive, OFF = ignore case. Default is OFF.
  • default_filter_kill_expire โ€” the default for quick (1 key) kill filter expire. ON = limit to default_filter_days, OFF = don't ever expire. Default is OFF.
  • default_filter_kill_global โ€” the default for quick (1 key) kill filter global. ON = apply to all groups, OFF = apply to current group. Default is ON.
  • default_filter_kill_header โ€” the default for quick (1 key) kill filter header:
    • 0 โ€” Subject: (case sensitive)
    • 1 โ€” Subject: (ignore case)
    • 2 โ€” From: (case sensitive)
    • 3 โ€” From: (ignore case)
    • 4 โ€” Message-ID: & full References: line
    • 5 โ€” Message-ID: & last References: entry only
    • 6 โ€” Message-ID: entry only
    • 7 โ€” Lines:
  • default_filter_select_case โ€” the default for quick (1 key) auto-selection filter case. ON = filter case sensitive, OFF = ignore case. Default is OFF.
  • default_filter_select_expire โ€” the default for quick (1 key) auto-selection filter expire. ON = limit to default_filter_days, OFF = don't ever expire. Default is OFF.
  • default_filter_select_global โ€” the default for quick (1 key) auto-selection filter global. ON = apply to all groups, OFF = apply to current group. Default is ON.
  • default_filter_select_header โ€” the default for quick (1 key) auto-selection filter header:
    • 0 โ€” Subject: (case sensitive)
    • 1 โ€” Subject: (ignore case)
    • 2 โ€” From: (case sensitive)
    • 3 โ€” From: (ignore case)
    • 4 โ€” Message-ID: & full References: line
    • 5 โ€” Message-ID: & last References: entry only
    • 6 โ€” Message-ID: entry only
    • 7 โ€” Lines:

and now, the โœจ name-only section โœจ โ€” these next ones are listed with literally no blurb attached, so we're just naming them, no cap:

  • default_goto_group
  • default_group_search
  • default_mail_address
  • default_move_group
  • default_pattern
  • default_pipe_command
  • default_post_newsgroups
  • default_post_subject
  • default_range_group
  • default_range_select
  • default_range_thread
  • default_repost_group
  • default_save_file
  • default_save_mode
  • default_select_pattern
  • default_shell_command
  • default_subject_search

  • dont_break_words โ€” don't break long lines inside a word. This applies to the body, except for verbatim blocks. See also wrap_column. Default is OFF.
  • draw_arrow โ€” lets groups/articles be selected by an arrow 'โ†’' if set ON, or by a highlighted bar if set OFF. Default is OFF.
  • editor_format โ€” the format string used to create the editor start command with parameters. Default is '%E +%N %F' with %E=Editor, %N=Linenumber and %F=Filename (e.g., /bin/vi +7 .article). See also $VISUAL and $EDITOR under "ENVIRONMENT" in tin(1).
  • extquote_handling โ€” if ON, quotes from external sources will be detected. Default is OFF.
  • extquote_regex โ€” a regular expression that gets applied when reading articles. All matching lines are shown in col_extquote. If extquote_regex is blank, then tin(1) uses a built-in default.
  • force_screen_redraw โ€” specifies whether a screen redraw should always be done after certain external commands. Default is OFF.
  • getart_limit โ€” if getart_limit is > 0, not more than the last getart_limit articles/group are fetched from the server. If getart_limit is < 0, tin(1) will start fetching articles from your first unread minus absolute value of getart_limit. Note that setting getart_limit to anything except 0 disables cache_overview_files. Default is 0, which means no limit.
bestie read that one twice, the "anything except 0 disables cache_overview_files" part is doing a LOT of work ๐Ÿ’€
  • goto_next_unread โ€” which keys tin(1) should accept to jump to the next unread article. Possible is any combination of PageDown and PageNextUnread. When PageDown is set, tin(1) jumps to the next article at the end of the current one. When PageNextUnread is set, tin(1) jumps immediately to the next article when PageNextUnread ('<TAB>') is pressed. Default is PageNextUnread.
  • group_catchup_on_exit โ€” if ON, catchup group when leaving with the left arrow key. Default is ON. ๐Ÿ‘‘
  • group_format โ€” the format string for the Group level, bestie. Default is "%n %m %R %L %s %F". Here's everything you can sub in:
    • %D โ€” date
    • %F โ€” from, name and/or address
    • %I โ€” initials
    • %L โ€” line count
    • %M โ€” message-id
    • %R โ€” number of responses in thread
    • %S โ€” score
    • %m โ€” article marks
    • %n โ€” current thread number
    • %s โ€” subject
    • %% โ€” %

  • hide_inline_data โ€” okay so this one is all about hiding the raw junk. If it's set to 'Nothing' (0) then raw data is displayed, periodt. If it's set to 'Complete UU/YENC' (1) then sections of uuencoded or yenc data get shown with a single tag line showing the size and filename (basically the same energy as a MIME attachment). If it's set to 'Any UU/YENC' (2) then any line that looks like uuencoded or yenc data gets folded into a tag line โ€” super handy when uuencoded or yenc data is split across more than one article, but ngl it can also lead to false positives. If it's set to 'Inline PGP' (4) then any inline PGP data is hidden. If it's set to 'Shar' (8) then shar-archives are hidden โ€” and babe, use this one with care, 'cause it may hide other shell snippets and any following text as well. You can also toggle this setting in the article viewer via PageToggleUue ('('). Default is 'Nothing' (0). The possible values are:
    • 0 โ€” Nothing
    • 1 โ€” Complete UU/YENC
    • 2 โ€” Any UU/YENC
    • 4 โ€” Inline PGP
    • 5 โ€” Complete UU/YENC & Inline PGP
    • 6 โ€” Any UU/YENC & Inline PGP
    • 8 โ€” Shar
    • 9 โ€” Complete UU/YENC & Shar
    • 10 โ€” Any UU/YENC & Shar
    • 12 โ€” Inline PGP & Shar
    • 13 โ€” Compl. UU/YENC & PGP & Shar
    • 15 โ€” Hide all

  • hideline_regex โ€” a regular expression to hide matching lines in the pager. Could be used to hide excessive quoting, e.g. via '^>\s?>\s?>'. If left blank, no lines will be hidden. Heads up: this option does not affect lines within verbatim blocks, and it's applied after trim_article_body and suppress_soft_hyphens.
  • inews_prog โ€” path, name and options of the external inews(1). If you're reading via NNTP the default value is "--internal" (that's the built-in NNTP inews), otherwise it's "inews -h". The article gets passed to inews_prog on STDIN via '< article'.
  • info_in_last_line โ€” if ON, show the current group description or article subject in the last line (not in the global menu) โ€” ToggleInfoLastLine ('i') toggles the setting. This facility is lowkey iconic 'cause the full width of the screen is available to display long subjects. Default is OFF.
  • interactive_mailer โ€” if it's greater than 0, your mailreader gets invoked earlier for reply so you can use more of its features (e.g., MIME, pgp, ...). 1 means include headers, 2 means don't include headers (that's the old use_mailreader_i=ON option). 0 turns off usage. This option has to suit mailer_format. Default is 0.
  • inverse_okay โ€” if ON, use inverse video for page headers and URL highlighting. Default is ON.
  • keep_dead_articles โ€” if ON, keep all failed postings in ${TIN_HOMEDIR:-"$HOME"}/dead.articles besides keeping the last failed posting in ${TIN_HOMEDIR:-"$HOME"}/dead.article. Default is ON.
  • keep_expired_filters โ€” if ON, keep expired filter rules in the file, but no longer evaluate them. Default is OFF.
  • kill_level โ€” this option controls the processing and display of articles that are killed. There are 3 options, default is 0 (Kill only unread arts).
    • 0 โ€” Kill only unread arts is the 'traditional' behavior of tin(1). Only unread articles are killed once only by marking them read. As filtering only happens on unread articles with kill_level set to 0, art_marked_killed and art_marked_read_selected are only shown once. When you reenter the group the mark will be gone.
    • 1 โ€” Kill all arts & show with K will process all articles in the group and therefore there is a processing overhead when using this option. Killed articles are threaded as normal but they will be marked with art_marked_killed.
    • 2 โ€” Kill all arts and never show will process all articles in the group and therefore there is a processing overhead when using this option. Killed articles simply does not get displayed at all.
  • mail_8bit_header โ€” allows 8-bit characters unencoded in the header of a mail message. Default is OFF. Turning it ON is effective only if mail_mime_encoding is also set to 8bit. Leaving it OFF is safe for most users and compliant to Internet Mail Standard (RFC 5322 and RFC 2047).
  • mail_address โ€” user's mail address (and full name), if not username@host. This is used when creating articles, sending mail and when pgp(1) signing.
  • mail_mime_encoding โ€” MIME encoding of the body in a mail message, if necessary (8bit, base64, quoted-printable, 7bit). Default is quoted-printable.
  • mail_quote_format โ€” format of the quote line when replying (via mail) to an article (%A=Address, %D=Date, %F=Fullname+Address, %G=Groupname, %M=Message-ID, %N=Fullname, %C=Firstname, %I=Initials). If the article has multiple addresses, only the first is evaluated. Default is "In article %M you wrote:"
  • mailbox_format โ€” select one of the following mailbox-formats: MBOXO (default, except on SCO), MBOXRD or MMDF (default on SCO). See mbox(5) and RFC 4155 for more details on MBOXO and MBOXRD and mmdf(5) for more details about MMDF.
  • maildir โ€” the directory where articles/threads are to be saved in mbox(5) format. This feature is mainly for use with the mutt(1) mail program. It lets you save articles/threads/groups simply by giving '=' as the filename to save to. Default is ${TIN_HOMEDIR:-"$HOME"}/Mail.
  • mailer_format โ€” the format string used to create the mailer command with parameters that is used for mailing articles to other people. Default is '%M "%T" < %F' (e.g., /bin/mail "iain" < ~/.article). The flexible format allows other mailers with different command-line parameters to be used, such as:
sendmail -oem -t < %F
mutt -H %F
claws-mail --compose "mailto:%T?subject=%S&insert=%F"

interactive_mailer must be set adequate. The following substitutions are supported:

  • %F โ€” filename
  • %M โ€” default_mailer
  • %S โ€” subject-field
  • %T โ€” to-filed
  • %U โ€” username
  • %% โ€” %
  • mark_saved_read โ€” if ON, mark articles that are saved as read. Default is ON.
  • mark_ignore_tags โ€” when this is ON, the GroupMarkThdRead ('K'), ThreadMarkArtRead ('K'), MarkThdUnread ('Z') at Group level and MarkArtUnread ('z') at Thread level functions mark just the current article or thread, ignoring other tagged, (un)read articles. When OFF, the same function presents a menu with choices of the current thread or article, all tagged, unread articles, or nothing.
  • metamail_prog โ€” path, name and options of the external metamail(1) program used to view non-textual parts of articles. To use the built-in viewer, set it to --internal. This is the default value when metamail(1) is not installed. Leave it blank if you don't want any automatic viewing of non-textual attachments. The PageViewAttach ('V') command can always be used to manually view any attachments. See also ask_for_metamail.
  • mm_charset โ€” charset supported locally, which is also used for the MIME header (charset parameter and charset name in header encoding) in mail and news postings. If MIME_STRICT_CHARSET is defined at compile time, text in a charset other than the value of this parameter is considered not displayable and represented as '?'. Otherwise, all character sets are regarded as compatible with the display. If it's not set, the value of the environment variable $MM_CHARSET is used. US-ASCII or the compile-time default is used in case neither of them is defined. If your system supports iconv(3) or ucnv_*(), this option is disabled and you should use mm_network_charset instead.
  • mm_network_charset โ€” bestie, this is the charset used for posting and MIME headers, and it replaces mm_charset. ๐Ÿ’… Conversion between mm_network_charset and your local charset (which gets figured out via nl_langinfo(3)) is done via iconv(3) or ucnv_*(). If neither of those functions exists on your system, this option is just disabled and you have to use mm_charset instead. ๐Ÿ˜ญ And mm_network_charset is limited to only these charsets:
    • US-ASCII, ISO-8859-{1,2,3,4,5,7,9,10,13,14,15,16}, KOI8-{R,U,RU}, EUC-{CN,JP,KR,TW}, ISO-2022-{CN,CN-EXT,JP,JP-1,JP-2}, Big5, UTF-8

Not every value might work on your system, so peek at iconv_open(3) for the details. If it's not set, the value of the environment variable $MM_CHARSET is used. And if neither of those is defined, US-ASCII or the compile-time default gets used. ๐Ÿฆ‹

  • mono_markdash โ€” the character attribute for words emphasized like _this_. Whether a given attribute actually works depends on your terminal, bestie. See also word_h_display_marks and word_highlight. Default is 2 (best highlighting). The possible values are:
    • 0 โ€” normal
    • 1 โ€” underline
    • 2 โ€” best highlighting
    • 3 โ€” reverse video
    • 4 โ€” blinking
    • 5 โ€” half bright
    • 6 โ€” bold
  • mono_markslash โ€” the character attribute for words emphasized like /this/. Again, it depends on your terminal which attributes are usable. See also word_h_display_marks and word_highlight. Default is 5 (half bright). Same possible values as mono_markdash, bestie. โœจ
  • mono_markstar โ€” the character attribute for words emphasized like *this*. Terminal-dependent again, as always. See also word_h_display_marks and word_highlight. Default is 6 (bold). Same possible values as mono_markdash. ๐ŸŒธ
  • mono_markstroke โ€” the character attribute for words emphasized like -this-. Yeah yeah, terminal-dependent. See also word_h_display_marks and word_highlight. Default is 3 (reverse video). Same possible values as mono_markdash. ๐Ÿ’–
  • newnews โ€” okay so these are internal timers that tin(1) uses to keep track of new newsgroups. ๐Ÿซถ Do not change them unless you genuinely understand what they're for. No cap.
  • news_headers_to_display โ€” which news headers you wanna see, bestie. If you want to see all the headers, put an '*' as the value โ€” and heads up, that's the only way a wildcard can be used. If you enter 'X-' as the value, you'll see all headers beginning with 'X-' (like X-Alan or X-Pape). You can list more than one by delimiting with spaces. Not defining anything turns this option off. ๐Ÿ’€
  • news_headers_to_not_display โ€” same as news_headers_to_display except it means the opposite. ๐Ÿ™ˆ An example of using both options might be if you thought 'X-' headers were A Good Thing(tm), but thought Alan and Pape were miscreantsโ€ฆ well then you'd do something like this:
news_headers_to_display=X-
news_headers_to_not_display=X-Alan X-Pape

Not defining anything turns this option off.

  • news_quote_format โ€” the format of the quote line when you post or follow up an article. The expansions are: %A=Address, %D=Date, %F=Fullname+Address, %G=Groupname, %M=Message-ID, %N=Fullname, %C=Firstname, %I=Initials. ๐ŸŽ€ If the article has multiple addresses, only the first is evaluated. Default is "%F wrote:".
  • nntp_read_timeout_secs โ€” time in seconds to wait for a response from the server. โณ Default is 120.
  • normalization_form โ€” the normalization form that should be used to normalize Unicode input. The possible values are:
    • 0 โ€” None: no normalization
    • 1 โ€” NFKC: Compatibility Decomposition, followed by Canonical Composition
    • 2 โ€” NFKD: Compatibility Decomposition
    • 3 โ€” NFC: Canonical Decomposition, followed by Canonical Composition
    • 4 โ€” NFD: Canonical Decomposition
    • 5 โ€” NFKC_CF: Compatibility Decomposition, followed by Canonical Composition and Case Folding

Some normalization modes are only available if they're supported by the library tin(1) uses to do the normalization. NFC should be used if possible (RFC 5198). ๐Ÿ‘‘

  • page_mime_format โ€” the format string tin(1) uses for the mime header at Page level. Default is "[-- %T%S%*n%z%*l%!c%!d%*e --]".
  • page_uue_format โ€” the format string tin(1) uses for the uue header at Page level. Default is "[-- %T%S%*n%I%!d%*e --]".
  • page_yenc_format โ€” the format string tin(1) uses for the yenc header at Page level. Default is "[-- %*N%!d%I [%F%G]%V%W%X --]".
  • pos_first_unread โ€” if ON, put the cursor at the first unread article in the group; otherwise it goes to the last article. Default is ON. ๐ŸŽฏ
  • post_8bit_header โ€” allows 8-bit characters unencoded in the header of a news article, and if it's set this also disables the generation of MIME-headers when they'd usually be required. Default is OFF. โš ๏ธ Only enacted if post_mime_encoding is also set to 8bit. In a number of local hierarchies where 8-bit characters are used, using unencoded (raw) 8-bit characters in the header is acceptable and sometimes even recommended โ€” so you need to check the convention adopted in the local hierarchy of your interest to determine what to do with this and post_mime_encoding. Iykyk.
  • post_mime_encoding โ€” MIME encoding of the body in a news message, if necessary. Options are 8bit, base64, quoted-printable, 7bit. Default is 8bit, which leads to no encoding at all. ๐Ÿ“ Heads up: base64 and quoted-printable are usually undesired on usenet.
  • post_process_view โ€” if ON, then tin(1) will start an appropriate viewer program to display any files that were post processed and uudecoded. The program is determined using the mailcap(5) file. Default is ON. ๐Ÿ”ฅ
  • post_process_type โ€” this specifies whether to perform post processing on saved articles. โš ๏ธ Because the shell archive may contain commands you may not want to be executed, be careful when extracting shell archives. The following values are allowed:
    • 0 โ€” No (default), no post processing is done.
    • 1 โ€” Shell archives, unpacking of multi-part shar(1) files only.
    • 2 โ€” Yes, binary attachments and data will be decoded and saved.
  • posted_articles_file โ€” keep posted articles in the given file. If the given filename doesn't contain any expandable strings, it will be prefixed with ${TIN_HOMEDIR:-"$HOME"}/Mail/. If no filename is set, then postings will not be saved. See the section "MAILING PIPING PRINTING REPOSTING AND SAVING ARTICLES" for more info about the various expansion characters. Default is 'posted'. ๐Ÿ’Œ
  • print_header โ€” if ON, then the full article header is sent to the printer. Otherwise only the ''Subject:'' and ''From:'' fields are output. Default is OFF. ๐Ÿ–จ๏ธ
  • printer โ€” the printer program (with options) that's used to print articles. The default is lpr(1) for BSD machines and lp(1) for SysV machines. Heads up bestie: printing from tin(1) may have been disabled by the System Administrator. ๐Ÿ˜ญ
  • process_only_unread โ€” if ON, only save/print/pipe/mail unread articles (tagged articles excepted). Default is OFF. ๐ŸŒˆ
  • prompt_followupto โ€” if ON, show an empty ''Followup-To:'' header when editing an article. Default is OFF.
  • quote_chars โ€” the character used in quoting included text to article followups and mail replies. The '_' character represents a blank character and is replaced with ' ' when read, and %I is replaced by the author's initials. โœ๏ธ If the article has multiple addresses, only the first is evaluated. Default is '>_'.
  • quote_style โ€” this bit coded integer value controls how articles are quoted when following up or replying to them. Any of the following options can be combined by adding all relevant values. Default is 5, which means that quote characters are compressed and empty lines are quoted. ๐ŸŽ€
    • 0 โ€” Nothing special. Non-empty lines are quoted.
    • 1 โ€” Compress quotes. Compress quote characters together when quoting multiple times (for example, '> > >' will be turned into '>>>'). This option is on by default.
    • 2 โ€” Quote Signatures. This option is off by default. Signatures are always quoted regardless of this option when you're viewing an article in raw mode PageToggleRaw ('^H') and followup or reply to it. Signatures are never quoted regardless of this option when show_signatures is off.
    • 4 โ€” Quote empty lines. This option is on by default.
  • quote_regex โ€” a regular expression that will be applied when reading articles. All matching lines are shown in col_quote. If quote_regex is blank, then tin(1) uses a built-in default. ๐Ÿงš
  • quote_regex2 โ€” a regular expression that will be applied when reading articles. All matching lines are shown in col_quote2. If quote_regex2 is blank, then tin(1) uses a built-in default. ๐Ÿ’œ
  • quote_regex3 โ€” okay bestie, this is a regular expression that gets applied when reading articles. Every matching line is shown in col_quote3. If quote_regex3 is blank, then tin(1) uses a built-in default. โœจ
  • recent_time โ€” if you set it to 0, this feature is deactivated; otherwise it means the number of days. Default is 2. ๐Ÿ—“๏ธ
  • render_bidi โ€” if ON, tin(1) does the rendering of bi-directional text. If OFF, tin(1) leaves the rendering of bi-directional text to the terminal. Default is OFF. ๐Ÿ’…
  • reread_active_file_secs โ€” the news ${TIN_LIBDIR:-NEWSLIBDIR}"/"${TIN_ACTIVEFILE:-active} file is reread at regular intervals to show if any new news has arrived. Default is 1200. Setting this to 0 will disable this feature. ๐Ÿ‘‘
  • savedir โ€” directory where articles/threads are saved. Default is ${TIN_HOMEDIR:-"$HOME"}/News. ๐ŸŽ€
  • scope_marked_global โ€” the character used to show that a scope was read from the global attributes file. Default is '!'.
  • scope_marked_global_match โ€” the character used to show that a scope was read from the global attributes file and the current group matches. Default is ':'.
  • scope_marked_local โ€” the character used to show that a scope was read from the local attributes file. Default is ' '.
  • scope_marked_local_match โ€” the character used to show that a scope was read from the local attributes file and the current group matches. Default is '*'.
  • score_limit_kill โ€” if the score of an article is below or equal this value, the article gets marked as killed. ๐Ÿ’€
  • score_limit_select โ€” if the score of an article is above or equal this value, the article gets marked as hot. ๐Ÿ”ฅ
  • score_kill โ€” score of an article which should be killed, this must be <= score_limit_kill.
  • score_select โ€” score of an article which should be marked hot, this must be >= score_limit_select.
  • scroll_lines โ€” the number of lines that will be scrolled up/down in the article pager when using cursor-up/down. The default is 1 (line-by-line). Set to 0 to get traditional tin(1) page-by-page scrolling. Set to -1 to get page-by-page scrolling where the top/bottom line is carried over onto the next page. This setting supersedes show_last_line_prev_page=ON. Set to -2 to get half-page scrolling. This setting supersedes full_page_scroll=OFF. ๐Ÿ“œ
  • select_format โ€” the format string used for the Selection level. Default is "%f %n %U %G %d". The following substitutions are supported:
    • %G โ€” group name
    • %U โ€” unread count
    • %d โ€” description
    • %f โ€” group flag
    • %n โ€” current group number
    • %% โ€” %
  • sort_function โ€” function used for sorting articles. Default is 0.
    • 0 โ€” Use qsort(3) for sorting.
    • 1 โ€” Use heapsort(3) for sorting. This might be faster in large groups with long threads (somewhat presorted data).
  • show_author โ€” which information about the author should be shown. Default is 2, authors full name.
    • 0 โ€” None, only the ''Subject:'' line will be displayed.
    • 1 โ€” Address, ''Subject:'' line & the address part of the ''From:'' line are displayed.
    • 2 โ€” Full Name, ''Subject:'' line & the authors full name part of the ''From:'' line are displayed (default).
    • 3 โ€” Address and Name, ''Subject:'' line & all of the ''From:'' line are displayed.
  • show_art_info โ€” show additional information about the article at the page level. The article's score can be displayed in the lower left corner (see also col_score_neg and col_score_pos), and the article's language, if detectable, can be displayed in the page header to the right of the line count. If the language is prefixed by a '~' the value is guessed, if it is prefixed by a '+' the value is inherited. If possible, a language tag is converted to the name of the language. In this case, the tag is specified in round brackets after the name. Default is 0.
    • 0 โ€” None, don't show article's score or language.
    • 1 โ€” Article score, show only the article's score.
    • 2 โ€” Article language, show only the article's language.
    • 3 โ€” Score and language, show both, article's score and language.
  • show_description โ€” if ON show a short group description text after newsgroup name at the group selection level. The ''-d'' command-line flag will override the setting and turn descriptions off. The text used is taken from the ${TIN_LIBDIR:-NEWSLIBDIR}/newsgroups file and if supported (requires tin(1) to be built with mh-mail-handling support) from ${TIN_HOMEDIR:-"$HOME"}/.tin/mailgroups for mailgroups. Default is ON. ๐ŸŽ€
  • show_help_mail_sign โ€” allows you to select whether tin(1) shows a help indication, a new mail indication, both, or neither in the various level titles. Default is 3.
    • 0 โ€” Don't show help or mail sign.
    • 1 โ€” Show only help sign.
    • 2 โ€” Show only mail sign if new mail, show only the mail sign, and only if new mail has arrived.
    • 3 โ€” Show mail if new mail else help s., show mail sign if new mail has arrived otherwise show help sign.
  • show_only_unread_arts โ€” if ON show only new/unread articles otherwise show all articles. Default is ON. ๐Ÿ‘‘
  • show_only_unread_groups โ€” if ON show only subscribed groups that contain unread articles. Default is OFF.
  • show_signatures โ€” if OFF don't show signatures when displaying articles. Default is ON.
  • sigdashes โ€” if ON prepend the signature with sigdashes. Default is ON.
  • sigfile โ€” the path that specifies the signature file to use when posting, following up to or replying to an article. If the path is a directory then the signature will be randomly generated from files that are in the specified directory. If a file named .sigfixed does exist in that dir or ${TIN_HOMEDIR:-"$HOME"}/.sigfixed does exist it will be prepended to the chosen signature (first match counts). If the path starts with a ! the program the path points to will be executed to generate a signature. In order to pass the group name to the program, %G can be specified. This will be replaced by the name of the current newsgroup. --none will suppress any signature. Default is ${TIN_HOMEDIR:-"$HOME"}/.Sig. See also ${TIN_HOMEDIR:-"$HOME"}/.sigfixed. ๐Ÿ–‹๏ธ
  • signature_repost โ€” if ON add signature to reposted articles. Default is ON.
  • slashes_regex โ€” a regular expression that will be applied when reading articles. All matching words are shown in col_markslash or mono_markslash. If slashes_regex is blank, then tin(1) uses a built-in default.
  • sort_article_type โ€” this specifies how articles should be sorted. Sort by ascending Date (6) is the default. The following sort types are allowed:
    • 0 โ€” Nothing, don't sort articles.
    • 1 โ€” Subject: (descending), sort articles by ''Subject:'' field descending.
    • 2 โ€” Subject: (ascending), sort articles by ''Subject:'' field ascending.
    • 3 โ€” From: (descending), sort articles by ''From:'' field descending.
    • 4 โ€” From: (ascending), sort articles by ''From:'' field ascending.
    • 5 โ€” Date: (descending), sort articles by ''Date:'' field descending.
    • 6 โ€” Date: (ascending), sort articles by ''Date:'' field ascending (default).
    • 7 โ€” Score (descending), sort articles by filtering score descending.
    • 8 โ€” Score (ascending), sort articles by filtering score ascending.
    • 9 โ€” Lines: (descending), sort articles by ''Lines:'' field descending.
    • 10 โ€” Lines: (ascending), sort articles by ''Lines:'' field ascending.
  • sort_threads_type โ€” this specifies how threads will be sorted. Sort by descending Score (1) is the default. The following sort types are allowed:
    • 0 โ€” Nothing, don't sort threads.
    • 1 โ€” Score (descending), sort threads by filtering score descending (default).
    • 2 โ€” Score (ascending), sort threads by filtering score ascending.
    • 3 โ€” Last posting date (descending), sort threads by date of last posting descending.
    • 4 โ€” Last posting date (ascending), sort threads by date of last posting ascending.
  • spamtrap_warning_addresses โ€” set this option to a list of comma-separated strings to be warned if you are replying to an article by mail where the e-mail address contains one of these strings. The matching is case-insensitive. Example:
spam,delete,remove

โญ stars_regex

A regex that gets applied the whole time you're reading articles, bestie. Every word that matches shows up in col_markstar or mono_markstar. And if stars_regex is blank? Chill, tin(1) just uses a built-in default. No thoughts, head empty, defaults loaded. โœจ


๐ŸŒธ strip_blanks

Strips the blanks off the end of every line โ€” which speeds up the display when you're reading on a slow terminal or over a modem. Default is ON. Lowkey free performance, we love that. ๐Ÿ’…


๐ŸŽ€ strip_bogus

Okay so first: what even is a bogus group? It's a group sitting in your ${TIN_HOMEDIR:-"$HOME"}/.newsrc file that doesn't exist on the news server anymore. Gone. Deleted. Not returning your texts. And you get three ways to handle that:

  • 0 โ€” Do nothing & always keep bogus groups.
  • 1 โ€” Bogus groups will be permanently removed.
  • 2 โ€” Bogus groups will appear on the Group Selection Menu, prefixed with a 'D'. This lets you unsubscribe from them as and when you wish.

Default is 0 (Always Keep). Hoarder energy, honestly. ๐Ÿซถ


strip_newsrc

If this is ON, then unsubscribed groups get permanently removed from your ${TIN_HOMEDIR:-"$HOME"}/.newsrc file. Default is OFF. Periodt, no take-backs.


strip_re_regex

A regular expression for finding Subject prefixes like "Re:" so they can be removed. If strip_re_regex is blank, tin(1) uses a built-in default. ๐Ÿ’–


strip_was_regex

Same vibe, but for Subject suffixes like "(was:" โ€” this regex finds them so they get removed. If strip_was_regex is blank, tin(1) uses a built-in default. ๐ŸŒˆ


strokes_regex

A regex that gets applied while reading articles. Every matching word is shown in col_markstroke or mono_markstroke. If strokes_regex is blank, tin(1) uses a built-in default. Not me matching words for the aestheticโ€ฆ ๐Ÿ‘‘


tex2iso_conv

Decode German style TeX umlaut codes to ISO. If ON, it shows "a as Umlaut-a, etc. Default is OFF.

Cute bonus: this behavior can also be toggled in the article viewer via PageToggleTex2iso ('"'). Yes, that's a double-quote key. Slay. ๐Ÿ’…


thread_articles

This one defines which threading method to use. The choices are:

  • 0 โ€” Don't thread
  • 1 โ€” Thread on Subject only
  • 2 โ€” Thread on References only
  • 3 โ€” Thread on References then Subject (default)
  • 4 โ€” Thread multipart articles on Subject
  • 5 โ€” Thread on Percentage Match of the Subjects

And plot twist: you can also set the threading type on a per group basis by setting the group attribute variable thread_articles to 0 โ€“ 5 in the file ${TIN_HOMEDIR:-"$HOME"}/.tin/attributes. Main character customization fr. ๐Ÿฆ‹


thread_format

The format string used for the Thread level. Default is "%n %m [%L] %T %F".

The following substitutions are supported:

  • %D โ€” date
  • %F โ€” from, name and/or address
  • %I โ€” initials
  • %L โ€” line count
  • %M โ€” message-id
  • %S โ€” score
  • %T โ€” thread tree
  • %m โ€” article marks
  • %n โ€” current article number
  • %% โ€” %

Build your own little thread aesthetic, bestie. It's giving โœจpersonalizedโœจ.


thread_perc

Defines how close the subjects have to match while threading by Percentage Match, for threads to be considered part of a single thread. The value lives in the range 0 to 100. The default is 75. Picky but not too picky, yk?


thread_catchup_on_exit

If ON, catchup the group/thread when you leave with the left arrow key. Default is ON. Left arrow said "I'm clocking out" and everything got caught up. ๐Ÿšช


thread_score

How the total score of a thread gets computed. Default is 0, the maximum score in this thread.

  • 0 โ€” Max, the maximum score in this thread.
  • 1 โ€” Sum, the sum of all scores in this thread.
  • 2 โ€” Average, the average score in this thread.

Math girlies rise. ๐Ÿงฎ


tls_ca_cert_file

The name of the file containing all trusted CA certificates used for NNTPS (RFC 8143) connections. If you leave it empty, the system default will be used. Security but make it chill. ๐Ÿ”’


translit

If ON, append //TRANSLIT to the first argument of iconv_open(3) to enable transliteration. What does that even mean? It means that when a character can't be represented in the target character set, it can be approximated through one or several similarly looking characters. On systems where this extension doesn't exist, this option is disabled. Default is OFF. It's giving "close enough" ๐Ÿ’€


trim_article_body

Lets you pick how tin(1) treats blank lines in article bodies. Default is 0.

Heads up: this option does not affect lines within verbatim blocks, and it's applied before hideline_regex.
  • 0 โ€” Don't trim article body, do nothing.
  • 1 โ€” Skip leading blank lines.
  • 2 โ€” Skip trailing blank lines.
  • 3 โ€” Skip leading and trailing blank l., skip leading and trailing blank lines.
  • 4 โ€” Compact multiple between text, replace multiple blank lines between text blocks with one blank line.
  • 5 โ€” Compact multiple and skip leading, 4 + 1
  • 6 โ€” Compact multiple and skip trailing, 4 + 2
  • 7 โ€” Compact mltpl., skip lead. & trai., 4 + 3

(Yes, option 3 really does say it twice up there. We don't ask questions, we just report the facts. ๐Ÿ˜ญ)


suppress_soft_hyphens

If ON, remove soft hyphens (U+00AD) from non verbatim blocks when displaying articles. Default is OFF. Ghosting the soft hyphens, honestly deserved. ๐Ÿ‘ป


underscores_regex

A regex that gets applied while reading articles. Every matching word is shown in col_markdash or mono_markdash. If underscores_regex is blank, tin(1) uses a built-in default. ๐Ÿ“


unlink_article

If ON, remove ${TIN_HOMEDIR:-"$HOME"}/.article after posting. Default is ON. Clean up after yourself bestie, we love a tidy queen. ๐Ÿงน


url_handler

The program that will be run when launching URLs in the article viewer using PageViewUrl ('U'). The actual URL gets appended. Default is url_handler.pl. Link clicker behavior activated. ๐Ÿ”—


url_highlight

Enable highlighting URLs in the message body. Default is ON. Blue links are iconic, periodt. ๐Ÿ’™


use_color

If enabled, tin(1) uses ANSI-colors. Default is OFF. Turn it on, the palette is chef's kiss. ๐ŸŒˆ


use_keypad

Use scroll keys on keypad. Default is OFF. Old school. Respect. โŒจ๏ธ


use_mouse

Allows the mouse button support in xterm(1x) to be enabled/disabled. Default is OFF. Clicks! In a terminal! We live in the future. ๐Ÿ–ฑ๏ธ


use_slrnface

If enabled, slrnface(1) will be used to interpret the ''X-Face:'' header. For this option to have any effect, tin(1) must be running in an xterm(1x) and slrnface(1) must be in your $PATH. Default is OFF.

Read that again: must be in an xterm(1x) and must be in your $PATH, or this does nothing. No vibes without the prerequisites. ๐Ÿ™ˆ

utf8_graphics

Use UTF-8 characters for the indicator ('โ†’'), thread/attachment tree and ellipsis ('...'). Default is 0.

  • 0 โ€” Don't use UTF-8 characters.
  • 1 โ€” for ellipsis. Use UTF-8 characters for ellipsis.
  • 2 โ€” for indicator and tree. Use UTF-8 characters for indicator and thread/attachment tree.
  • 3 โ€” for ..., indicator and tree. Use UTF-8 characters for ellipsis, indicator and thread/attachment tree.

Pretty arrows AND pretty ellipsis? Level 3 is the whole package. โœจ๐Ÿฆ‹


verbatim_begin_regex

A regular expression that tin(1) will use to find the begin of a verbatim block. Default is #v+


verbatim_end_regex

A regular expression that tin(1) will use to find the end of a verbatim block. Default is #v-


verbatim_handling

Lets you pick how tin(1) treats verbatim blocks in article bodies. Default is 1.

  • 0 โ€” Don't detect verbatim blocks. Do nothing.
  • 1 โ€” Detect and show verbatim blocks. Detect and show verbatim blocks, including begin and end marks.
  • 2 โ€” Detect, hide begin and end marks. Detect and show verbatim blocks, hide begin and end marks.
  • 3 โ€” Don't show verbatim blocks. Detect verbatim blocks and hide them completely.

Choose your fighter. ๐ŸฅŠ


wildcard

Lets you pick how tin(1) matches strings. The default is 0 and it uses the wildmat(3) notation, which is how this has traditionally been handled. Setting this to 1 lets you use perl(1) compatible regular expressions pcre(3) or pcre2(3). (see also perlre(1) and pcrepattern(3) or pcre2pattern(3)).

You will probably want to update your filter file if you use this regularly.
NB: Newsgroup names will always be matched using the wildmat(3) notation. No exceptions, no cap. ๐Ÿงข

word_h_display_marks

Should the leading and ending stars, slashes, strokes and dashes also be displayed, even when they're highlighting marks?

  • 0 โ€” no
  • 1 โ€” yes, display mark
  • 2 โ€” print a space instead

Pick your little punctuation policy. ๐Ÿ’…


word_highlight

Enable word highlighting. See word_h_display_marks for the options available. If use_color is enabled, the colors specified in col_markdash, col_markslash, col_markstar and col_markstroke are used for word highlighting; else the character attributes specified in mono_markdash, mono_markslash, mono_markstar and mono_markstroke are used. Default is ON. Highlighting words is the main character behavior. ๐Ÿ”ฅ


wrap_column

Sets the column at which a displayed article body should be wrapped. Okay, this one has layers, so stay with me:

  • If this value is equal to 0, it defaults to the current screen width.
  • If this value is greater than your current screen width and dont_break_words is unset, the part off-screen is not displayed. So setting this option to a large value can be used to disable wrapping.
  • If this value is negative, the wrap margin is the current screen width plus the given value (as long as the result is still positive, otherwise it will fall back to the current screen width).

Default is 0, wrapping at the current screen width. ๐ŸŽ€

  • wrap_on_next_unread โ€” when this is ON, searching for the next unread article wraps around all the articles so it also finds unread stuff that came before. Turn it OFF and the search just... stops at the end of the thread list. No wrap, no going back. Default is ON. ๐Ÿ’ซ
  • xpost_quote_format โ€” same format as news_quote_format, but this one kicks in when you're replying to a crosspost to several groups and there's no Followup-To: set. ๐ŸŽฏ

/etc/tin/tin.defaults

Yet another global config file, bestie, and it's also full of variable=value pairs. This one handles the more general options โ€” the ones that usually can't be controlled via ${TIN_LIBDIR:-NEWSLIBDIR}/tinrc and/or ${TIN_HOMEDIR:-"$HOME"}/.tin/tinrc, like resetting newslibdir (aka overriding the built-in default). โœจ

  • domainname โ€” sets a global domain name used in From lines. ๐Ÿ“ฎ
  • organization โ€” defines the name of your organization. $ORGANIZATION overrides whatever you put here. ๐Ÿ’ผ
  • newslibdir โ€” defines the default place for some configuration files. Common values are /usr/lib/news, /var/lib/news, /usr/local/lib/news or /news/db. $TIN_LIBDIR overrides any specified value. ๐Ÿ—‚๏ธ
  • bugaddress โ€” defines the email address users can send bug reports to using a built-in function. The default points to a developers mailing list located at tin.org. You might want to change this address to one of your local admins if you'd rather deal with your lusers' problems yourself. ๐Ÿ˜ญ (no shade, we've all been there)
  • inewsdir โ€” defines the directory containing the inews(1) executable. ๐Ÿ› ๏ธ
  • mm_charset โ€” default charset used in MIME's Content-Type: header. $MM_CHARSET overrides any specified value. ๐Ÿˆบ
  • post_mime_encoding โ€” default encoding scheme used in MIME articles. 8bit might be the best value. ๐Ÿ‘‘
  • mail_mime_encoding โ€” default encoding scheme used in MIME letters. quoted-printable is a good choice here. โœ‰๏ธ
  • disable_gnksa_domain_check โ€” allows unregistered top level domains. Since the list of valid TLDs is no longer actively maintained, the default was changed to ON starting with tin(1) version 2.1.5. ๐Ÿ’…
  • disable_sender โ€” don't generate a Sender: header. This only has an effect if inews_prog is set to --internal. ๐Ÿšซ
  • spooldir โ€” base of your newsspool (Bnews, Cnews and INN traditional spool style). Common values are /var/spool/news, /usr/spool/news, /news/spool. $TIN_SPOOLDIR overrides any specified value. ๐ŸŒ€
  • overviewdir โ€” base of your NOV database newsoverview(5) (tradspool style; might be the same dir as spooldir). Common values are /var/spool/overview, /usr/spool/overview, /news/overview. $TIN_NOVROOTDIR overrides any specified value. ๐Ÿ”
  • overviewfile โ€” name of a single overview file. Common values are .overview or over.view. $TIN_NOVFILENAME overrides any specified value. ๐Ÿ“„
  • overviewfmtfile โ€” full pathname of your newssystem's overview.fmt file. Usually it lives in newslibdir and is named overview.fmt, so you only have to change this setting if your configuration differs. ๐Ÿงพ
  • activefile โ€” full pathname of your newssystem's active file. Usually it lives in newslibdir and is named active, so you only have to change this setting if your configuration differs. $TIN_ACTIVEFILE overrides any specified value. โšก
  • activetimesfile โ€” full pathname of your newssystem's active.times file. Usually it lives in newslibdir and is named active.times, so you only have to change this setting if your configuration differs. ๐Ÿ•ฐ๏ธ
  • newsgroupsfile โ€” full pathname of your newssystem's newsgroups file. Usually it lives in newslibdir and is named newsgroups, so you only have to change this setting if your configuration differs. ๐Ÿ“š
  • subscriptionsfile โ€” full pathname of your newssystem's subscriptions file. Usually it lives in newslibdir and is named subscriptions, so you only have to change this setting if your configuration differs. ๐Ÿซถ

/usr/local/share/locale/$LC_MESSAGES/LC_MESSAGES/tin.mo

translation into the language specified in $LC_ALL, $LC_MESSAGES or $LANG ๐ŸŒ

${TIN_LIBDIR:-NEWSLIBDIR}"/"${TIN_ACTIVEFILE:-active}

This file lists the newsgroups that the local site receives. Each newsgroup should be listed only once. Each line specifies one group; within each newsgroup, articles get assigned unique names, which are monotonically increasing numbers. ๐Ÿ”ข

If an article is posted to newsgroups not mentioned in this file, those newsgroups are ignored. And if no valid newsgroups are specified, the article is rejected. ๐Ÿ’€

Each line consists of four space-separated fields: "name highmark lowmark flags".

  • name โ€” is the name of the newsgroup
  • highmark โ€” is the highest article number that has been used in that newsgroup
  • lowmark โ€” is the lowest article number in the group; this number is not guaranteed to be accurate, and should only be taken to be a hint. Note that because of article cancellations, there may be gaps in the numbering sequence. If the lowest article number is greater than the highest article number, then there are no articles in the newsgroup. ๐Ÿ•ณ๏ธ
  • flags โ€” can be one of those:
    • y โ€” local postings are allowed โœ…
    • n โ€” no local postings are allowed, only remote ones ๐Ÿšซ
    • m โ€” the group is moderated and all postings must be approved ๐Ÿ›ก๏ธ
    • j โ€” articles in this group are not kept, but only passed on ๐Ÿƒ
    • x โ€” articles cannot be posted to this newsgroup โ›”
    • =foo.bar โ€” articles are locally filed into the foo.bar group ๐Ÿ“ฅ

tin(1) only tries to read the file if you read directly from the local spool. If you read news via NNTP, tin(1) uses the LIST (RFC 3977) or LIST COUNTS (RFC 6048) command instead. ๐Ÿ“ก

${TIN_LIBDIR:-NEWSLIBDIR}/active.times

This file provides a chronological record of when newsgroups are created. It's normally updated by the local news server (e.g., innd(8)) whenever a new group is created. Each line consists of three space-separated fields: "name time creator".

  • name โ€” is the name of the newsgroup
  • time โ€” is the time when the group was created, expressed as the number of seconds since the Epoch โณ
  • creator โ€” is the electronic mail address of the person who created the group

tin(1) only tries to read the file if you read directly from the local spool. If you read news via NNTP, tin(1) uses the NEWGROUPS (RFC 3977) command instead. ๐Ÿ“ก

${TIN_LIBDIR:-NEWSLIBDIR}/newsgroups

This file provides short descriptions of each newsgroup. It's normally updated by the local news server (e.g., innd(8)) whenever a new group is created. Each line consists of two tab-separated fields: "group.name one-line description".

  • group.name โ€” is the name of the newsgroup
  • one-line description โ€” is a short single-line description of the group

tin(1) only tries to read the file if you read directly from the local spool. If you read news via NNTP, tin(1) uses the LIST NEWSGROUPS (RFC 3977) command instead. ๐Ÿ“ก

${TIN_LIBDIR:-NEWSLIBDIR}/organization

This file might hold a default organization to be used in the Organization: header. $ORGANIZATION has a higher priority if set. ๐Ÿข

${TIN_LIBDIR:-NEWSLIBDIR}/overview.fmt

This file specifies the organization of the news overview database (see also newsoverview(5)). The order of lines in this file is important โ€” it determines the order in which the fields will appear in the database. See also overview.fmt(5). tin(1) only tries to read the file if you read directly from the local spool. If you read news via NNTP, tin(1) uses the LIST OVERVIEW.FMT (RFC 3977) command instead. ๐Ÿ“‹

${TIN_LIBDIR:-NEWSLIBDIR}/subscriptions

This file contains a list of newsgroups โ€” one per line โ€” which the client should subscribe to when the user has no ${TIN_HOMEDIR:-"$HOME"}/.newsrc for the news server. tin(1) only tries to read the file if you read directly from the local spool. If you read news via NNTP, tin(1) uses the LIST SUBSCRIPTIONS (RFC 6048) command instead. ๐Ÿ’Œ


๐Ÿ‘€ SEE ALSO ๐Ÿ‘€

inews(1), ispell(1), lp(1), lpr(1), metamail(1), mutt(1), perl(1), perlre(1), pgp(1), rn(1), shar(1), slrnface(1), tin(1), xterm(1x), heapsort(3), iconv(3), iconv_open(3), nl_langinfo(3), pcre(3), pcre2(3), pcrepattern(3), pcre2pattern(3), qsort(3), strftime(3), system(3), active(5), mailcap(5), mbox(5), mmdf(5), newsoverview(5), overview.fmt(5), innd(8), RFC 1524, RFC 1952, RFC 2045, RFC 2046, RFC 2047, RFC 2231, RFC 2980, RFC 3977, RFC 4155, RFC 4643, RFC 5198, RFC 5322, RFC 5536, RFC 5537, RFC 6048, RFC 6838, RFC 8143, RFC 8315 ๐ŸŒˆ


and that's the whole page, bestie โ€” you made it to the end ๐ŸŽ€ This one's from version 2.6.6, dated 2026-08-23, and it's the TIN(5) man page. Go forth and configure your newsreader like the main character you are ๐Ÿ’…โœจ periodt.

๐Ÿ“ฆ where this page comes from