Copyright © Luu Tran 1998-2000. All rights reserved.
http://xnews.3dnews.net
If you get an access violation when you try to retrieve a list of newsgroups, it probably means you don't have the right comctl32.dll and need to download from Microsoft. Also, if you don't see any icon, or if the list appears to be empty even though the program seems to be retrieving data, then download the comctl32.dll. In fact, if things start to go bad right away when you run Xnews (even though you're pretty sure you've put in the correct server info, etc.), chances are you need to download comctl32.dll.
This is freeware. It may be freely distributed provided the copyright and the contents of all files, including xnews.zip itself, are unmodified. Needless to say, you can't charge money for it. The usual caveats apply, i.e., use at your own risk, etc. etc. :-)
Now that I've released Xnews to the net, I'm getting lots of email. So, if you have a question or problem, please:
Xnews is a general-purpose reader. Although it handles binaries (quite nicely for my purpose), it's not a binary grabber or picture viewer. Also, Xnews is an on-line reader. It has pseudo offline features such as header storage, but if you need true off-line capabilities, use Agent, Gravity, or something else.
I'm a fan of NewsXpress so I liberally stole ideas from that program. NX users should find Xnews familiar. That said, Xnews is not NewsXpress. I didn't try to clone it. I have my own weird ideas of doing things. Although Xnews may bear some resemblance NX, it has some features the latter doesn't while lacking others.
About this document: I know it's rather minimal but please read it. I assume you have used other newsreaders before and basically know how usenet works, so I will only go over things that are different about/specific to Xnews.
I wrote Xnews for me to use. The program heavily reflects my preferences, habits, and sensibility. Yes, extensive end-user research went into the making of this software, albeit it's only of 1 user. The interface is a bit quirky and the program has that freeware feel to it. If you think Microsoft represents the apotheosis of good software design, this program is probably not for you. If not, you may learn to like it -- or not. It's free, so what the hey.
That said, if there's something you want to see added/changed, it doesn't hurt to ask. Provided that the change will result in the greatest happiness to the greatest number of people while causing the least amount of pain to me, I may just do it.
Cheers.
The first time you run Xnews, it will bring up the Setup dialog. Enter your name, etc. I'll only describe the unfamiliar items here.
That's it. You should now say yes when it asks if you want to retrieve the newsgroup list. Kick back and enjoy.
xnews.ini - global settings
servers.ini - server info and per-server custom settings.
groups.ini - per-group custom settings
You really only need to edit groups.ini manually. Use the setup dialog for the others.
A: Instead of pressing Return to open the group, press Ctrl+Return. This will bring up a dialog that lets you select how many headers to retrieve. This is useful for sampling a group with a huge number of headers. When in the article window, you can bring up this dialog by selecting Article | Refresh Headers Special (Ctrl+F5). For example: press Ctrl+Return open a group and specify 100 headers to retrieve. Xnews will retrieve the newest 100 headers. Then you decide you want to read the older articles. Hit Ctrl+F5, then move the slider back to the left until you get the number of headers you want, or all the way to the left to get everything.
Q: ... decode/save/transfer several articles at once?
A: Xnews uses a queuing system. To put an article into the queue, press Space. Pressing space again removes it from the queue. When you queue an article, you will see a number indicating its queue order in the Q column. Now, select Article | Decode/Save as... or Transfer | (folder). You can also queue/dequeue an entire thread at a time.
Q: ... decode multipart binaries?
A: By default, Xnews performs multipart threading in groups that have "binaries" in the name (much like NewsXpress does). Multipart threading means it will put all the parts of a file and roll it under a thread. If a file has all the parts, you will see a 4-block cube icon next to it; if it has one or more missing parts, the cube will have a missing block. Also, if you look at the lines column, it will tell you exactly how many parts there are and how many are present.
To queue a multipart file, just select the thread (with the block icon), and hit space. Xnews will tag all the individual parts for you. Then hit decode.
Hint: with certain file types, it's possible to "sample" the file this way: expand the multipart thread, then individually queue a few parts, e.g., 1/10, 4/10, 8/10 You must queue the first part. This works well for, say, mp3 files but obviously not zip files as they will be corrupted and unreadable. (Caveat: I think "sampling" doesn't work for MIME-encoded files.)
A few words on smart decoding
Starting with version Y2K-SE, Xnews can resume an interrupted multi-part decode from the last successfully decoded part (as opposed to doing the whole thing over). It does this by saving some state information about the decoded file in *.ini files in the temp\ folder. If you're decoding a multipart file and it gets interrupted, you'll see the name of the decoded file changed into
filename__error_part_X.ext
Don't delete or rename this file. You'll also see some *.ini files in the temp\ folder. Don't delete those either. Go back and queue the file you were decoding, starting from part X. Example: if the file is in 20 parts and X is 14, you should queue parts 14-20. Click decode and Xnews should pick up where it left off. (Actually, you don't need to queue just parts 14-20; you can queue the whole thing normally and Xnews should figure it out, but the first way may be safer.)
If this feature gives you problems, you can disable it by setting Xnews.ini [Misc] UseSmartDecode=0
Q: ... cancel a message?
A: To cancel a message, you have to find it and retrieve it first. You can do this by opening the group as usual, or by using XPAT search (see next section).
Q: ... use XPAT search?
A: Most servers have a function called XPAT search, which performs server-side search for articles (in other words, search what's on the server, as opposed to what you have on your computer). To do a search, select which field, or header, you want to search on. Most of the time, you probably want to search by subject or author. The search string is a Unix wildmat, which means unless you want to search for an exact string, you need to surround the string with wild cards (asterisks). For example, if you enter help, you won't turn up anything unless there's an article with the exact subject help. Instead, type *help* On the other hand, there's no need to type *[Hh][Ee][Ll][Pp]* (case insensitive search) because Xnews will do that for you (thank goodness).
Q: ... add custom headers to postings?
Select SetUp | Compose. Enter the custom headers you want on separate lines. If you want a header to be "on" by default, precede it with an asterisk. You can enter a blank header and fill in the value at compose time. Here's an example:
*X-No-Bananas: yes Approved: luutran@geocities.com *Keyword:
The first header will be on by default (you can turn it off at compose time). The second header, Approved, already has the value filled in but not turned on by default. You can switch it on on-the-fly and change the email address too if you want. The third header is on by default, but has nothing filled in yet. At compose time, you can enter something or just leave it blank. If you leave it blank, Xnews will simply ignore it (therefore, it's a good idea to switch all blank headers on by default). Note that even with a blank header, you still need to put in the colon (:)
You will find these custom headers in the Custom tab in the editor window. You can also add a header not in the Custom tab by switching to the Manual headers tab and type it in.
Q: ... use ROT-13?
ROT-13 is a very simple scheme to scramble text so it is not immediately readable. What it does is transpose every letter by 13 alphabet position, so A - M become N - Z and vice versa. People use ROT-13 to scramble messages that may be offensive or messages that contain spoilers (ending of movies, punch lines, etc.). The idea is that the reader must first unscramble the message before reading it, so s/he cannot read it by accident. Some people also scramble their email addresses to spur spammers.
Anyway, to unscramble a ROT-13 message, just select View|ROT-13. In the editor, you can scramble/unscramble a) the article text; b) the To: address; and c) your own Public Email. First place the caret on the text you want to scramble/unscramble then click ROT-13.
In all cases, you can also apply ROT-13 to just a portion of the text by first selecting it with the mouse or keyboard.
Q: ... hide a column in the list?
You can't hide a column, but you can just resize the width to nothing. Does more or less the same.
Q: ...save an attachment?
By default, Xnews does not automatically save attachments in articles when you open them. You can change this in Setup|Files. You can also specify which types of files you want to be automatically saved. To manually save an attachment, click the attachment icon (it looks like a pin) and select the attachment from the list. Selecting an attachment that's already saved will open it.
Q: ...post attachments / binaries?
To attach a file, click the Attachments tab then click Add... You can select multiple files at once. Alternatively, you can drag and drop files from the Windows Explorer.
The options:
My cat (with pictures) - 2 attachments (~/4)
If you uncheck "Show file count in subject" it will not display - 2 attachments.
This option is most appropriate for posting a few (<3) smallish files in a discussion group (assuming its members condone the practice). Your text (the part you wrote in the editor) will be embedded inside the message. Using MIME in conjunction with this option would be fine. Do NOT use this option when posting large files or a series of small or large files.
Some pictures of my cats - File 0 of 2 Some pictures of my cats - File 1 of 2 - socks.jpg (~/2) Some pictures of my cats - File 2 of 2 - socks2.jpg (~/4)
If you uncheck "Show file count in subject" it will not display - File X of Y.
File 0 will contain your text message. If you leave the text body blank (which you are allowed to when posting attachments), there'll be no file 0.
Some pictures of my cats - File 1 of 2 - socks.jpg (~/2) Some pictures of my cats - File 1 of 2 - socks.jpg (0/2) Some pictures of my cats - File 1 of 2 - socks.jpg (1/2) Some pictures of my cats - File 1 of 2 - socks.jpg (2/2) Some pictures of my cats - File 2 of 2 - socks2.jpg (~/4)
Some pictures of my cats - File 1 of 2 - socks.jpg (~/2) Some pictures of my cats - File 1 of 2 - socks.jpg (0/2) Some pictures of my cats - File 1 of 2 - socks.jpg (1/2) Some pictures of my cats - File 1 of 2 - socks.jpg (2/2) Some pictures of my cats - File 2 of 2 - socks2.jpg (~/4) Some pictures of my cats - File 1 of 2 - socks2.jpg (0/4) Some pictures of my cats - File 1 of 2 - socks2.jpg (1/4) Some pictures of my cats - File 1 of 2 - socks2.jpg (2/4) Some pictures of my cats - File 1 of 2 - socks2.jpg (3/4) Some pictures of my cats - File 1 of 2 - socks2.jpg (4/4)
Some people seem to like option 3 or 4. I prefer option 2. In any event, avoid option 1 if you are posting large files or get ready to be flamed.
Observe the rules and conventions for the group you are posting to. For starter, make sure binaries are allowed. Follow as much as possible the predominant posting patterns (i.e., cut size, whether to use MIME, etc.). Above all, post in a test group first to make sure you're getting the expected result.
A couple more points: 1) the options above only apply to usenet posting. When mailing, I always use MIME and send all attachments as only large message; 2) When posting a series of files, it is highly recommended that you save to the outbox and send from there. This way, if something goes wrong or if you need to stop the posting process, you can select which file to repost.
Q: ...cut/copy/paste text when there's no Edit menu?
Believe it or not, you use the keyboard. Shift+Del=cut, Ctrl+Ins=copy, Shift+Ins=paste.
In articles window:
Space | Queue/Dequeue article/thread (place in queue) |
Shift+Space | Queue/Dequeue article/thread, but put in head (instead of tail) of the queue |
Ctrl+Space | Queue everything in sight (WARNING: does NOT tag multipart binaries intelligently) |
Ctrl+Shift+Space | Clear queue |
Ctrl+Up/Down | Resize the split window. |
In article viewer:
Space | page down |
Shift+Space | skip to next non-quote paragraph |
Backspace | page up |
Return | switch to article listing |
Num1..Num9 | (number1 through 9 on the keypad). If using split screen, scroll the list while the cursor is in the viewer. |
In groups window:
Ins | manually add a group |
Del | permanently delete selected group(s) from the newsrc |
F4 | Switch between subscribed/all groups |
These shortcuts are in the keyboard map dialog but I'll list them here just in case.
In article listing and viewer
? / | previous / next unread |
> . | previous / next article (read or unread) |
< , | previous / next queued article |
; ' | previous / next thread |
\ | next article with >0 score (see scoring.txt) |
` | (backquote) next new article since last stored header retrieval (see the section on storage) |
Alt+Left | Go back in history |
Alt+Right | Go forward in history |
A few words on remapping the keyboard.
A: Try using a shorter IDToken (Setup | Identity). If that doesn't work, remove the IDToken.
Q: When a child window is maximized, why is its close (X) button grayed out?
A: It's a bug in the Delphi library. The close button only LOOKS disabled; you can still click on it and it will close the window. Pressing ctrl+F4 or Esc also works.
Q: Why is it that the get parent article command, when successful, sometimes inserts the found article in the listing and sometimes does not?
A: Xnews relies on the message number to insert articles into the list. If it doesn't show the found parent article in the list, it means that the server did not return the message number (the server assigns a number to every article in a group). I don't know enough about server software to explain why, but that's how it is.
Q: How come when I close an articles window, sometimes the program update the message count and sometimes it doesn't?
A: Xnews considers automatically updating the message count a low priority task, so if there's no available connection, it doesn't do it. Of course you can force it by pressing F5.
Q: When a download starts, the window caption shows the elapsed time and approximate remaining time. But this goes away after a few seconds. How do I get it back?
A: Just click on the gauge, aka progress bar.
Q: Do you plan to add inline jpeg/gif viewing?
A: Nope. I use an external viewer, and it works fine for me. I really don't want to rewrite the viewer code.
Q: Why doesn't crosspost killing seem to be working?
A: In order for crosspost killing to work, all of the following conditions must be satisfied:
Q: I use a foreign (non-English) keyboard, but I keep getting the English keyboard in the editor window
A: Open Control Panel -> Keyboard. Select the Languages tab. Now UNINSTALL all keyboards except the one for your language.
A: If you do not have storage on, when you do a catchup, the next time, you will not see the headers you've retrieved. If you mark an article or thread as keep, the program will retrieve it again the next time, even if you did a catchup. When you keep something, it automatically gets assigned a high score so it'll stand out next time.
One example where this is useful is when you have a multipart binary with some parts missing. If you do a catchup, next time you may retrieve the missing parts, but then the parts you had before will now be gone. In this case, you want to keep those parts you have and hopefully get the rest next time.
If you are storing headers, kept articles are never deleted except when they expire on the server. That is, they are protected against deletion and local expiration (the expiration you set in the Storage Options dialog). If you want to delete a kept article, you must first unkeep it.
You can specify what score to automatically assign to kept articles in Setup | Misc. If you set this to zero, no score will be assigned to kept articles.
Q: Mark High score/0 score?
A: This is equivalent to marking something as important/not important. It simply assigns a score of 9999 or zero to selected threads/articles. You can then right click on the Score column (or select View | Filter Scores) and select a score filter to view only high scored articles.
Q: What's with all the catchup options?
A: Traditionally, "catchup" in newsreaders means to update the read count to the last article seen. If you look at the newsrc, you'll see a bunch of number like
1-50,55,65-80.
Each article is assigned a number by the server, and these numbers in the newsrc indicate which articles you have read. When you do a catchup, the program sets this to
1-<highest-numbered article retrieved>
"Catchup" basically means "okay, I've seen all I care to. Don't show me these articles next time." Note that you may not have actually read all these articles; you just want to treat it as if you did.
In the articles window, there are 3 catchup options (all of which will close the window):
In the groups window, there are separate catchup and clear keep commands. Note that in order to do a catchup, you must have updated the message count once. The "Clear read and keep" command simply clears out the newsrc entry for the selected group(s), letting you essentially start anew.
Q:Reformat (in the editor window)?
Often, when you reply to an article and insert the quote character > in front of a line, it becomes too long and gets wrapped by the editor. You may end up with something like this:
Before quoted:
>this is a very very very very very long long line, >isn't it?After quoted:
>>this is a very very very very very long long line, >>isn't it?
You can fix this by 1) enlarging the window so the text will fit on one line; or 2) clicking Reformat. In the latter case, Xnews will rewrap the text as
>>this is a very very very very very long long >>line, isn't it?
Much nicer, right?
When you click Save or Send, Xnews will try to detect whether there is any badly wrapped text like the above example and ask if you want it fixed. If you say yes, it will fix it and return you to the editor. You should go over the text and make sure everything looks okay.
Btw, you can fix just a portion of text by selecting it before clicking Reformat.
I decided to leave it up to the user to do this rather than doing it automatically. I give you the mean, but it's up to you to help keep usenet beautiful (you'll also keep me from being flamed for making crappy software).
Q:the meaning of different icons in the article listing
I thought this was obvious, but then, I wrote the program :) Ok, here's the 411:
green dot = read article. green border = kept article. white note with lines = regular article (default icon) white note, no lines = (only if you are storing headers) the article is old i.e., it is in storage. The ones with lines are the headers that are new since last time you read this group. green note = article body is in the cache. If you re-read it, the article will be read off the disk (very fast) ! = article has 9999+ score 3 blue cube = incomplete binary (at least 1 or more missing parts) 4 blue cube = complete binary (more than 1 part and all parts present)
c:\bin\xnews.exe /d:c:\user\mary
mary can then have her own .ini files, score file, etc.
You've already seen the filter box in the groups and articles window, where you can type in a string to show only groups or articles whose names or subjects contain the string. In the articles window, the filter box at the bottom is pretty nifty. (I'll call this the B filter for want of a better name.) You can use a regex (regular expression) in the B filter. In addition, if you want to filter on the author (from) column instead of the subject, right click to the right of the filter box (or press Ctrl+F). The letter should change from S (subject) to F (from). When you are in a folder, you can also switch to G (group) and view only articles from certain groups.
There are some subtleties which I should point out. As you type in a regex, you'll see the result immediately. The list is not yet threaded. To thread it, press Return. Doing this sort of "locks" the filter in place. If you select another filter (see below), or type in another regex, the filter will be applied on top of the current list, i.e., what you see on the screen. On the other hand, you can undo the current filter by selecting View | Undo last filter or by pressing Backspace or Delete to clear the B filter before typing anything else.
There are also predefined filters you can apply. They are
To remove the filter and view all articles, select View | Remove All Filters or left click to the right of the edit box (where the letter S/F/G is). You can also undo the last filter and invert the filter.
Wait, there's more.
In the article list, click anywhere on the score column to bring up a menu that lets you do a filter based on score. The choices are:
Note that all the filters are cumulative, i.e., they're applied to what's currently in visible in the list, which may be the result of previous filters and may not be the full set of available articles. The exception is the filter dialog, where you can choose whether to apply the filter on top of the current filters by checking the box "Add to existing". Otherwise, if you want to apply a filter to the original set of articles, you must first remove the filter.
Finally, the last filter you applied will affect incoming articles when you refresh headers. For example, if you click B (hide incomplete binaries), then F5 (refresh), after the headers are loaded and the articles get threaded, any NEW binaries that are incomplete will be filtered out as well and you won't see them until you remove filter.
Here's an example of how you can use filters: assuming you have header stored, after you open alt.tv.x-files, press N. This shows just the new headers. then type in dream.*land (match "dream land" or "dreamland") in the B filter and press return to view articles about the "Dreamland" episode. Then browse through the list and mark the threads/articles you like with the '9' key. This sets their score to 9999. Now click on the score column and select >0 or >=9999 to see the articles you just tagged and any others scored by your score file.
You can collapse and expand all subscription folders by pressing -/+ on the numeric keypad (look at Special | Keyboard Mapping). You can collapse/expand a single folder by pressing Return or clicking on the icon.
You can delete a folder by pressing Del. Deleting a folder only removes the category, not the groups inside it.
When you sort the subscribed list, only the folders and the top level groups (those not inside folders) are sorted. If you want to sort the groups inside the folders as well, hold down the Ctrl key as you click on the column.
The subscription folders are saved separately from the newsrc in a file with extension .Xnewsrc (so newsrc remains backward compatible). If you click on the refresh icon on the toolbar, the program reloads the Xnewsrc file and discards any change made to the subscription folders. This is useful, for example, after you've sorted the folders and want to revert to what you had the last time they were saved.
Once in a while, though, when you quit in the middle of reading a busy group, you don't want to do a catchup since you're not done yet, but you don't want to have to retrieve a lot of headers next time. This is what the Storage feature is for. Storage is basically just a more permanent cache.
Press F7 in the articles window. You'll have the option to store the headers only or both headers and article bodies. You can also specify an expiration so that articles older than X days are automatically purged. If you select never expire, than the articles are removed when they expire on the server.
For efficiency reasons, when an article is removed from storage, it's not actually deleted but only marked as deleted. Thus, the size of the file remains the same. To reclaim disk space, hit F7 then click the "Compact" button.
Note #1: with storage, you can tell the new headers from the stored ones by black lines through their icons (stored headers have blank icons). Hit the ` (backquote) key to jump to the next unread, new article. Also, if the article itself (not just the header) has been stored, then the icon is yellow.
Note #2: on the toolbar, there's an icon indicating the current storage option. Click it for a quick way to change the storage option.
To organize folders, open the folders window by selecting Window|Folders (or Shift+F12). Once you've set up a folder, you can transfer articles into it for permanent storage. I already setup a folder called "Archive" for you.
As with NewsXpress, you can define a default folder where articles should be transferred when you click the archive button. Edit Xnews.ini. Under the [Misc] section, set Archive= to the name of the desired folder.
Advanced tricks:
Archive=xxx
to
Archive=*
(That's an asterisk). Ditto in servers.ini and groups.ini.
Queue folders
Version Y2K-SE introduces a new type of folders called Queue folders. Unlike the regular (archive) folder, a queue folder stores only the headers when you transfer articles into it. Then when you read or decode the articles, Xnews gets the articles from the server, just as if you're in a newsgroup.
What can you do with such an animal? You can use it as a global queue. You can use it to collect multipart binaries from different servers. Because you can switch what server you want to pull articles from in queue folders, you can pull down headers from one server then retrieve from a different server. If you're one of the lucky dogs with a broadband connection and your server is throttling your speed, you can split your download into two separate queue folders and download simultaneously.
Just as there's a default archive folder, there's a default queue folder. You can set this in Xnews [Misc]. If none is specified, Xnews creates a default queue folder called _Queue (you may also want to name your queue folders with a _ prefix to distinguish them from archive folders). Similarly, there's a counterpart to the Archive command called QArchive, which transfers articles (more accurately, headers) into the default queue folder.
A few notes
[Display] section:
Key | Type | Default | Description |
---|---|---|---|
ColumnLayOut | integer | 1 | Number to save the default column layout under. Can be overridden in groups.ini so that you can have different column layouts for different groups. |
DateFmtDay | Date format |
|
used for dates within 1 day of today |
DateFmtWeek | see below |
|
within 1 week of today |
DateFmtYear | see below |
|
within 1 year of today |
DateFmtShort | see below |
|
more than 1 year old; also, %d variable |
DateFmtLong | see below |
|
used in popup hints; also, %D variable |
FixFlashing | boolean | 1 | Whether to prevent flashing in list windows during pageup/pagedn. Set this to zero only if it causes problems on your system (e.g, if you see garbage on the screen). |
HideHorzScrollBar | boolean | 0 | Whether to hide the horizontal scroll bar in the article viewer, even if the text is too wide to fit in the window. Set to 1 to maximize screen space. You can still scroll left and right with the keyboard regardless. |
HighLightColor | color | system color | color for the highlight bar in list display. Change this if the default high light bar is hard to see. |
HighLightTextColor | color | system color | same as above, except it's for the highlight text. |
Panel1Width | integer | 140 | Width in pixel of bottom left panel in articles window. |
Panel2Width | integer | 190 | Width in pixel of bottom middle panel in articles window. |
ShowTabs | boolean | 1 | Whether to show the windows tabs (the little task bar that lets you switch between windows). |
SkipHeaders | boolean | 1 | When loading articles, whether to place the cursor past all headers at the start. (Does not apply if showing all headers. |
SwitchViewAtThreadEnd | boolean | 0 | When in full screen mode, whether to automatically return to the list when you are reading the last article in a thread and hit next. If 0, then it'll just go to the next thread. |
ViewerLeftMargin | integer | 3 | Left margin (in pixels) for the viewer. Set to 0 if you want no margin, or a higher number if you want a bigger margin. |
ViewerWordWrap | boolean | 0 | Whether to wrap text in viewer by default. |
Use24hrClock | boolean | 0 | Display time using 24 hour clock instead of am/pm. |
For Date format, use these values:
d Displays the day as a number without a leading zero (1-31). dd Displays the day as a number with a leading zero (01-31). ddd Displays the day as an abbreviation (Sun-Sat or equivalent) dddd Displays the day as a full name (Sunday-Saturday or equiv.). m Displays the month as a number without a leading zero (1-12). mm Displays the month as a number with a leading zero (01-12). mmm Displays the month as an abbreviation (Jan-Dec or equiv.). mmmm Displays the month as a full name (January-December or equiv.). yy Displays the year as a two-digit number (00-99). yyyy Displays the year as a four-digit number (0000-9999). h Displays the hour without a leading zero (0-23). hh Displays the hour with a leading zero (00-23). n Displays the minute without a leading zero (0-59). nn Displays the minute with a leading zero (00-59). s Displays the second without a leading zero (0-59). ss Displays the second with a leading zero (00-59). am/pm Uses the 12-hour clock and displays 'am' or 'pm' a/p Uses the 12-hour clock and displays 'a' or 'p' ampm Uses the 12-hour clock and displays the local language's equivalent of am/pm. / Displays the date separator character (varies depending on locale). : Displays the time separator character (varies depending on locale). 'xx' Characters in single or double quotes are displayed as-is.
[Misc] section:
Key | Type | Default | Description | ||||
---|---|---|---|---|---|---|---|
Archive | string | Archive | Name of default folder to transfer articles into when you click on the "archive" button. Can be overidden in groups.ini. | ||||
AutoCollapse | boolean | 0 | In article listing, whether to automatically collapse the previous thread when you expand another thread (does not apply when all threads are expanded). | ||||
AutoResume | boolean | 1 | Whether to try to automatically resume a batch operation after being disconnected. If you are using dial-up, this works only if you set your dialer to autodial on network activity. | ||||
AutoResumeDelay | Integer | 20 | {5..300} | Number of seconds to wait before auto-resuming. | |||
BackUpNewsRC | boolean | 1 | Whether to create a backup file (.bak) when saving newsrc. | ||||
CatchUpButton | {0,1,2,3} | 0 | Desginate what kind of catchup to assign to the catchup button (0=Catchup; 1=CatchUp and clear keep; 2=Catchup and kill xpost; 3=Catchup and purge) | ||||
CompactPercent | {0..100} | 30 | Percent of wasted space that deleted messages can take up in a folder before Xnews should automatically compact the folder upon closing. | ||||
DecodeOpt | {1,2} | 2 | when saving decoded file: 1 = overwrite existing file; 2 = save under different name. | ||||
DejaPage | string | http://www.deja.com/ home_ps.shtml | URL to launch when you select Special|Search in Dejanews | ||||
DejaQuery | string | http://www.deja.com/ =dnc/msgid.xp?MID=%m | URL to search Dejanews for an article given Message-ID %m | ||||
ExpiredScoreOpt | {0,1} | 0 | what to do with expired scores. 0=remove automatically; 1=notify user. | ||||
HardKill | boolean | 1 | Whether hard kill should be on by default. (Hard kill means articles with score <= -9999 will not be shown at all). | ||||
LaunchAfterDecode | boolean | 0 | Whether "Launch file" checkbox in save dialog should be checked by default. | ||||
OnLoaded | string | Comma separated list of commands to execute after headers are loaded. If the list includes a ! (exclamation point), the commands will be executed only once (as opposed to after every time you refresh headers). | |||||
OnOpen | string | Comma separated list of commands to execute when you first open an articles window. | |||||
OpenNextGroup | boolean | 0 | Whether to automatically open the next group after you catchup the current group. | ||||
PromptDecodeDir | boolean | 1 | Whether to prompt for a directory when you hit 'decode'. 0 means don't prompt; just use the default decode directory (see Setup|Files). | Queue | string | _Queue | Name of default queue folder to transfer articles into when you select the "QArchive" command. Can be overidden in groups.ini. |
ReplyNotify | 4 | Xnews can flag followups of your posts. This setting lets you have more control over how deep into the thread Xnews should continue to flag followups. The idea is that discussion tends to diverge and you probably aren't interested after a while. 0=disable (don't flag at all); -1=flag all followups; 1=flag immediate followups; 2=flag immediate followups, plus followups to those; etc. Default is 4. | |||||
ScoreFileEditor | string | Full path name to text editor to use when you select Special|Edit score file. | |||||
ScoreStoredHeaders | boolean | 0 | Whether to score headers that are loaded from storage (as opposed to just scoring headers that are newly downloaded). | ||||
TZ | integer | system timezone | Time zone offset from GMT. You should not need to set this. Xnews will only use this value if it cannot read the time zone from Windows for some reason. | ||||
UseSmartDecode | boolean | 1 | Whether to attempt resuming interrupted multi-part decodes, starting from the last successfully decoded part rather than starting the whole file over. |
[Compose] section:
Key | Type | Default | Description |
---|---|---|---|
AlwaysXNoArchive | boolean | 0 | Whether X-no-Archive is set by default |
Autorewrap | boolean | 1 | Whether quoted text should be automatically rewrapped. |
FollowupPrompt | {1..3} | 3 | Prompt to set followup when posting to more than this many groups. |
KeepCopies | boolean | 1 | Whether to keep copies of sent messages. |
WarnBadWrap | boolean | 1 | Whether to warn that the article you are posting contains badly wrapped quoted text. |
WarnExcessiveQuote | {0..100} | 60 | ratio of quoted text to total allowed before you are warned that you have too much quoted text. Example: 60 means that if number of quoted lines exceeds 60% of number of total lines, Xnews will warn you. Set this to 0 if you do NOT want to be warned at all. |
[PopUps] section:
Key | Type | Default | Description |
---|---|---|---|
ArticleList | string | acaMarkAllRead,acaMarkAllUnread,acaSelectAll,- | comma separated list of commands to add to the pop up menu of the article listing. See the keyboard mapping dialog for list of commands. Use a dash (-) to designate a separator line. |
GroupList | string | acgSubs,acgUnSubs,acgPost,-,acgCatchUp,acgMsgCount,acgAllMsgCount,acmSaveNewsRC,- | same as above, for the group listing. |
Viewer | string | acaFollowup,acaMail,acaFollowupMail,acaSaveAs,- | same as above, for the article viewer. |
You can override settings in xnews.ini for an individual group or hierarchy by putting them under a section in groups.ini for said group or hierarchy. Setting in groups.ini override those in servers.ini, which in turn override those in xnews.ini. The following settings may be overridden in groups.ini:
For example, say you want to use the sig file mysig.txt most of the time; when in a comp group, you want to use worksig.txt, unless you are in a comp.lang.pascal.delphi.* group, in which case you want to use delphisig.txt.
In xnews.ini:
[ID] Name=my name ; etc. SigFile=mysig.txtIn groups.ini:
[comp.*delphi] SigFile=delphisig.txt [^comp] SigFile=worksig.txtNote that the program processes groups.ini in sequential order and stops once it finds a match. Also, there's no need to replicate the other settings such as name or email as they simply revert to the values set in xnews.ini (unless of course you want to use a different name or email).
Occasionally, you may want the program to continue on to the next section in groups.ini. To do this, add continue=1 to the current section. Take the example above. Suppose you want to use some set of email, name, etc. for all comp groups. In addition, you want to use a different sig file for delphi groups. This will do the trick:
[^comp] SigFile=worksig.txt Email=whatever Name=whatever ; etc. continue=1 [comp.*delphi] SigFile=delphisig.txt ; inherit email, name, etc. from comp section
Note: the section name is indeed a regex. Because groups.ini is a windows ini file, you can't use [ ] in your regex. In this case, just use a dummy value then add a regex= line. For example, since you cannot write
[delphi[^a]] ...
(match delphi, but not philadelphia)
You have to write
[compdelphi] regex=delphi[^a] ...Back to top
Usage: when reading an article, press 'k' to add the poster to the plonk file. You'll be asked for an expiry period. By default, the expiry is set to 100, meaning after 100 days, the name will be automatically removed. The rationale is that it's usually pointless to have someone permanently in your plonk file. Either the bozo will go away by himself, or be driven off the newsgroup, or most likely, just change his name and/or email. So it's a good idea to specify an expiry period (remember, the more entries in the plonk file, the longer it takes the program to process it). If you really want the name to stay permanently, set expiry period to zero.
You can bring up the plonk file viewer with Ctrl+k. You can then add, remove, or edit entries. To delete, press the Del. To edit a name or email, right click on it.
Regardless, you still need to know how the score file works, so read scoring.txt if you haven't done so. Also, you need to know what the relevant headers are. I suggest you open any usenet message, select View|Show all headers and examine the headers.
Next, you choose whether to assign a score of 9999. -9999, or some other score. Then pick an expiration period
Now come the interesting part. Click on the push down button corresponding to the header you want to score from. Notice how the program has filled in the values from the current article. The text values are all regular expressions, which is why you see all the escape characters, e.g. jsmith@foo\.bar\.com. It also gives you a list of alternatives that may be useful to you (you can enter anything you want to, of course).
The references header deserves a bit of extra attention. You can select this article/top of thread/either, which corresponds to the message-id of the current article/the article at the top of the tread/either one (foo|bar). Or you can write a custom expression. The drop down list has two message-ids. The first is the message-id of the current article, the second of the top of thread. If the current article is the top of thread, there will only be one in the list.
Now select the boolean type (AND or OR). Click Apply to have Xnews add the entry for you, or Copy to clipboard if you want to edit the score file yourself.
Okay, let me give you a concrete example. Say you're reading an interesting thread and you want to "watch" it in the future. Bring up the add to score file dialog, select 9999 or specify some positive score, specify an expiry period (the thread won't last forever, and you probably won't care after a while). Select References / matches (actually, you could probably just as well use matches case). If you're interested in the entire thread, select top of thread or either. If you only care to followups to the current article, select this article.
As I said earlier, the References header occasionally gets broken, so as an additional safeguard, select Subject and boolean OR (if you use boolean AND, the score will no longer applies if someone changes the subject line, which may in fact be what you want).
Xnews uses Philip Hazel's PCRE (Perl Compatible Regular Expression) package, adapted for Delphi by yours truly. What this means is that you have access to a very powerful regex engine, and if you're already familiar with Perl, all the better. PCRE supports most constructs in perl regex.
Here's a good introductory tutorial on perl regex:
http://virtual.park.uga.edu/humcomp/perl/regex2a.html
I strongly suggest you read it
I've added a feature to let you try out Xnews' regex engine and see how it works. Select Special | Test Regex.
For the full discussion on PCRE and differences between PCRE and perl regex, read pcre.html. This doc is aimed at programmers and will probably give you a headache. (It does me.) So here's a crib sheet, which may suffice:
1) Letters, numbers, and non-special characters just match themselves.
Example:
color match anything with the word color in it2) Special characters
\ treat next character literally, i.e., as itself and not a special character. . match any character ^ match begin of string $ match end of string | alternative (..) grouping [..] match one of the characters in the set [^..] does NOT match one of the characters in the set.
(the .. are ellipses, not two literal periods.)
Example
help\. matches help followed by a period ca.s matches "cats" "cars" ^test matches "testing", "tester", but not "the test" me$ matches "see me" but not "meter" or "me and you" cat|mouse matches "cat" "mouse" dog(s|gie) matches "dogs" "doggie" [aeiou] matches a vowel [a-z0-9] matches a letter or digit. Note how the - is used to specify a range. if you want to specify a dash as part of the set, put it at the beginning or end, e.g. [a-f0-9-] matches a-f, 0-9, or dash.
Note: when I say help\. matches help followed by a period, what I really means is that the regex will successfully match with a string that contains help followed by a period. Thus please help. now will also match, although of course the matching part is only help. On the other hand, the regex ^help\.$ will only match the string help. since the ^ and $ must match the start and end of string.
3) Quantifiers (match how many times)
* Match 0 or more times + Match 1 or more times ? Match 1 or 0 time (i.e., optionally match) {n} Match exactly n times {n,} Match at least n times {n,m} Match at least n but not more than m times
Example
ma+ matches "ma" "maaa" "maaaaaaa" ma* matches "m" "maaa" (yada ){2,} matches "yada yada yada " foo(and)?bar matches "fooandbar" or "foobar" (the "and" is optional).
4) Shorthand for character set
\w Match a "word" character, letters, numbers, and "_" \W Match a non-word character, opposite of \w \s Match a white space character (space, tab, cr, lf) \S Match a non-whitespace character, opposite of \s \d Match a digit character \D Match a non-digit character
Example
\(\d\d\d\)\s*\d\d\d[- ]?\d\d\d\d match a U.S. phone number that is, 3 digits enclosed in literal parenthesis then zero or more spaces then 3 digits prefix then either a dash or a space or nothing at all then 4 digits.
5) Zero width assertion
A fancy way of saying a true condition that doesn't actually match or consume a character.
\b Match a word boundary \B Match a non-(word boundary)
Example
\bfoot thematch "footer" "footing" "a foot" but not "afoot" foot\b match "afoot" and "foot." (period doesn't count as part of word) but not "footing" \bfoot\b match the whole word foot foot\B match "footer" but not "foot;" i.e., there's got to be something after foot that is part of a word
6) Back references
If your regex contains one or more subexpression (..) you can refer to the <digit>th subexpression with \<digit>
Example
(\b\w+\b) to \1 match "man to man" "hand to hand" "100 to 10000" the \b\w+\b matches a whole word. The ( ) saves the word in subexpression #1 (it's the first sub expression in the regex). The \1 refers back to it. "man to child" would not match since child does not match man. Note: Xnews allows up to 19 sub expression in a regex.
7) Look ahead/behind
(?=regexp) lookahead assertion. (?!regexp) negative lookahead assertion. (?<=regexp) look behind assertion (?<!regexp) negative look behind assertion
Example
\w+(?=\t) match a word followed by a tab; the tab isn't included in the match foo(?!bar) match any occurrence of "foo" that isn't followed by "bar" (?<!foo)bar match an occurrence of "bar" that is not preceded by foo
8) Case sensitivity
In Xnews, the filter regex is always case insensitive. In the score file, you can make regex case sensitive by specifying Keyword= expression rather than Keyword: expression. In the folder search dialog, you can toggle case sensitivity by checking the "Match case" box.
That said, I'm solely responsible for all the bugs and shortcomings in Xnews, except where they can be blamed on Bill Gates and Co., of course :)
Last Updated: December 31, 1999