Fix incorrect array size that crashes on platforms where sizeof(char*) != sizeof...
[nedit.git] / doc / nedit.doc
blobf4629bc7a72eaf02a6d247153ea4751adab7db4a
1                =========================================
2                Nirvana Editor (NEdit) Help Documentation
3                =========================================
5 NEdit release of Dec 13, 2001                                               December 13, 2001
7   NEdit is a standard GUI (Graphical User Interface) style text editor for 
8   programs and plain-text files. Users of Macintosh and MS Windows based text 
9   editors should find NEdit a familiar and comfortable environment. NEdit 
10   provides all of the standard menu, dialog, editing, and mouse support, as 
11   well as all of the standard shortcuts to which the users of modern GUI based 
12   environments are accustomed. For users of older style Unix editors, welcome 
13   to the world of mouse-based editing! 
15   NEdit is freely distributed under the terms of the Gnu General Public 
16   License. 
18 ----------------
19 INSTALLING NEDIT
20 ----------------
22   NEdit is a single stand-alone executable file which can be installed by 
23   simply copying the appropriate executable "nedit" for your system. Both 
24   sources and executables are available from http://www.nedit.org. The 
25   optional "nc" (NEdit Client) program is also available for users who want to 
26   run nedit in client/server mode. 
28 ---------------
29 GETTING STARTED
30 ---------------
32   Help sections of interest to new users are listed under the "Basic 
33   Operation" heading in the top-level Help menu: 
35     * Selecting Text
36     * Finding and Replacing Text
37     * Cut and Paste
38     * Using the Mouse
39     * Keyboard Shortcuts
40     * Shifting and Filling
42   Programmers should also read the introductory section under the "Features 
43   for Programming" section: 
45       Programming with NEdit
47   If you get into trouble, the Undo command in the Edit menu can reverse any 
48   modifications that you make. NEdit does not change the file you are editing 
49   until you tell it to Save. 
52   EDITING AN EXISTING FILE
54   To open an existing file, choose Open... from the file menu. Select the file 
55   that you want to open in the pop-up dialog that appears and click on OK. You 
56   may open any number of files at the same time. Each file will appear in its 
57   own editor window. Using Open... rather than re-typing the NEdit command and 
58   running additional copies of NEdit, will give you quick access to all of the 
59   files you have open via the Windows menu, and ensure that you don't 
60   accidentally open the same file twice. NEdit has no "main" window. It 
61   remains running as long as at least one editor window is open. 
64   CREATING A NEW FILE
66   If you already have an empty (Untitled) window displayed, just begin typing 
67   in the window. To create a new Untitled window, choose New from the File 
68   menu. To give the file a name and save its contents to the disk, choose Save 
69   or Save As... from the File menu. 
72   BACKUP FILES
74   NEdit maintains periodic backups of the file you are editing so that you can 
75   recover the file in the event of a problem such as a system crash, network 
76   failure, or X server crash. These files are saved under the name `~filename` 
77   (on Unix) or `_filename` (on VMS), where filename is the name of the file 
78   you were editing. If an NEdit process is killed, some of these backup files 
79   may remain in your directory. (To remove one of these files on Unix, you may 
80   have to prefix the `~' (tilde) character with a (backslash) to prevent the 
81   shell from interpreting it as a special character.) 
84   SHORTCUTS
86   As you become more familiar with NEdit, substitute the control and function 
87   keys shown on the right side of the menus for pulling down menus with the 
88   mouse. 
90   Dialogs are also streamlined so you can enter information quickly and 
91   without using the mouse*. To move the keyboard focus around a dialog, use 
92   the tab and arrow keys. One of the buttons in a dialog is usually drawn with 
93   a thick, indented, outline. This button can be activated by pressing Return 
94   or Enter. The Cancel or Dismiss button can be activated by pressing escape. 
95   For example, to replace the string "thing" with "things" type: 
97       <ctrl-r>thing<tab>things<return>
99   To open a file named "whole_earth.c", type: 
101       <ctrl-o>who<return>
103   (how much of the filename you need to type depends on the other files in the 
104   directory). See the section called "Keyboard Shortcuts" for more details. 
106   * Users who have set their keyboard focus mode to "pointer" should set 
107   "Popups Under Pointer" in the Default Settings menu to avoid the additional 
108   step of moving the mouse into the dialog. 
110 ===============
111 BASIC OPERATION
112 ===============
114 --------------
115 SELECTING TEXT
116 --------------
118   NEdit has two general types of selections, primary (highlighted text), and 
119   secondary (underlined text). Selections can cover either a simple range of 
120   text between two points in the file, or they can cover a rectangular area of 
121   the file. Rectangular selections are only useful with non-proportional 
122   (fixed spacing) fonts. 
124   To select text for copying, deleting, or replacing, press the left mouse 
125   button with the pointer at one end of the text you want to select, and drag 
126   it to the other end. The text will become highlighted. To select a whole 
127   word, double click (click twice quickly in succession). Double clicking and 
128   then dragging the mouse will select a number of words. Similarly, you can 
129   select a whole line or a number of lines by triple clicking or triple 
130   clicking and dragging. Quadruple clicking selects the whole file. After 
131   releasing the mouse button, you can still adjust a selection by holding down 
132   the shift key and dragging on either end of the selection. To delete the 
133   selected text, press delete or backspace. To replace it, begin typing. 
135   To select a rectangle or column of text, hold the Ctrl key while dragging 
136   the mouse. Rectangular selections can be used in any context that normal 
137   selections can be used, including cutting and pasting, filling, shifting, 
138   dragging, and searching. Operations on rectangular selections automatically 
139   fill in tabs and spaces to maintain alignment of text within and to the 
140   right of the selection. Note that the interpretation of rectangular 
141   selections by Fill Paragraph is slightly different from that of other 
142   commands, the section titled "Shifting and Filling" has details. 
144   The middle mouse button can be used to make an additional selection (called 
145   the secondary selection). As soon as the button is released, the contents of 
146   this selection will be copied to the insert position of the window where the 
147   mouse was last clicked (the destination window). This position is marked by 
148   a caret shaped cursor when the mouse is outside of the destination window. 
149   If there is a (primary) selection, adjacent to the cursor in the window, the 
150   new text will replace the selected text. Holding the shift key while making 
151   the secondary selection will move the text, deleting it at the site of the 
152   secondary selection, rather than copying it. 
154   Selected text can also be dragged to a new location in the file using the 
155   middle mouse button. Holding the shift key while dragging the text will copy 
156   the selected text, leaving the original text in place. Holding the control 
157   key will drag the text in overlay mode. 
159   Normally, dragging moves text by removing it from the selected position at 
160   the start of the drag, and inserting it at a new position relative to to the 
161   mouse. Dragging a block of text over existing characters, displaces the 
162   characters to the end of the selection. In overlay mode, characters which 
163   are occluded by blocks of text being dragged are simply removed. When 
164   dragging non-rectangular selections, overlay mode also converts the 
165   selection to rectangular form, allowing it to be dragged outside of the 
166   bounds of the existing text. 
168   The section "Using the Mouse" sumarizes the mouse commands for making 
169   primary and secondary selections. Primary selections can also be made via 
170   keyboard commands, see "Keyboard Shortcuts". 
172 --------------------------
173 FINDING AND REPLACING TEXT
174 --------------------------
176   The Search menu contains a number of commands for finding and replacing 
177   text. 
179   The Find... and Replace... commands present dialogs for entering text for 
180   searching and replacing. These dialogs also allow you to choose whether you 
181   want the search to be sensitive to upper and lower case, or whether to use 
182   the standard Unix pattern matching characters (regular expressions). 
183   Searches begin at the current text insertion position. 
185   Find Again and Replace Again repeat the last find or replace command without 
186   prompting for search strings. To selectively replace text, use the two 
187   commands in combination: Find Again, then Replace Again if the highlighted 
188   string should be replaced, or Find Again again to go to the next string. 
190   Find Selection searches for the text contained in the current primary 
191   selection (see Selecting Text). The selected text does not have to be in the 
192   current editor window, it may even be in another program. For example, if 
193   the word dog appears somewhere in a window on your screen, and you want to 
194   find it in the file you are editing, select the word dog by dragging the 
195   mouse across it, switch to your NEdit window and choose Find Selection from 
196   the Search menu. 
198   Find Incremental is yet another variation on searching, where every 
199   character typed triggers a new search. Incremental searching is generally 
200   the quickest way to find something in a file, because it gives you the 
201   immediate feedback of seeing how your search is progressing, so you never 
202   need to type more than the minimally sufficient search string to reach your 
203   target. 
206   SEARCHING BACKWARDS
208   Holding down the shift key while choosing any of the search or replace 
209   commands from the menu (or using the keyboard shortcut), will search in the 
210   reverse direction. Users who have set the search direction using the buttons 
211   in the search dialog, may find it a bit confusing that Find Again and 
212   Replace Again don't continue in the same direction as the original search 
213   (for experienced users, consistency of the direction implied by the shift 
214   key is more important). 
217   SELECTIVE REPLACEMENT
219   To replace only some occurrences of a string within a file, choose 
220   Replace... from the Search menu, enter the string to search for and the 
221   string to substitute, and finish by pressing the Find button. When the first 
222   occurrence is highlighted, use either Replace Again (^T) to replace it, or 
223   Find Again (^G) to move to the next occurrence without replacing it, and 
224   continue in such a manner through all occurrences of interest. 
226   To replace all occurrences of a string within some range of text, select the 
227   range (see Selecting Text), choose Replace... from the Search menu, type the 
228   string to search for and the string to substitute, and press the "R. in 
229   Selection" button in the dialog. Note that selecting text in the Replace... 
230   dialog will unselect the text in the window. 
232 -------------
233 CUT AND PASTE
234 -------------
236   The easiest way to copy and move text around in your file or between 
237   windows, is to use the clipboard, an imaginary area that temporarily stores 
238   text and data. The Cut command removes the selected text (see Selecting 
239   Text) from your file and places it in the clipboard. Once text is in the 
240   clipboard, the Paste command will copy it to the insert position in the 
241   current window. For example, to move some text from one place to another, 
242   select it by dragging the mouse over it, choose Cut to remove it, click the 
243   pointer to move the insert point where you want the text inserted, then 
244   choose Paste to insert it. Copy copies text to the clipboard without 
245   deleting it from your file. You can also use the clipboard to transfer text 
246   to and from other Motif programs and X programs which make proper use of the 
247   clipboard. 
249   There are many other methods for copying and moving text within NEdit 
250   windows and between NEdit and other programs. The most common such method is 
251   clicking the middle mouse button to copy the primary selection (to the 
252   clicked position). Copying the selection by clicking the middle mouse button 
253   in many cases is the only way to transfer data to and from many X programs. 
254   Holding the Shift key while clicking the middle mouse button moves the text, 
255   deleting it from its original position, rather than copying it. Other 
256   methods for transferring text include secondary selections, primary 
257   selection dragging, keyboard-based selection copying, and drag and drop. 
258   These are described in detail in the sections: "Selecting Text", 
259   "Using_the_Mouse_", and "Keyboard Shortcuts". 
261 ---------------
262 USING THE MOUSE
263 ---------------
265   Mouse-based editing is what NEdit is all about, and learning to use the more 
266   advanced features like secondary selections and primary selection dragging 
267   will be well worth your while. 
269   If you don't have time to learn everything, you can get by adequately with 
270   just the left mouse button: Clicking the left button moves the cursor. 
271   Dragging with the left button makes a selection. Holding the shift key while 
272   clicking extends the existing selection, or begins a selection between the 
273   cursor and the mouse. Double or triple clicking selects a whole word or a 
274   whole line. 
276   This section will make more sense if you also read the section called, 
277   "Selecting Text", which explains the terminology of selections, that is, 
278   what is meant by primary, secondary, rectangular, etc. 
281   BUTTON AND MODIFIER KEY SUMMARY
283   General meaning of mouse buttons and modifier keys: 
286     Buttons
288       Button 1 (left)    Cursor position and primary selection
290       Button 2 (middle)  Secondary selections, and dragging and
291                          copying the primary selection
293       Button 3 (right)   Quick-access programmable menu and pan
294                          scrolling
297     Modifier keys
299       Shift   On primary selections, (left mouse button):
300                  Extends selection to the mouse pointer
301               On secondary and copy operations, (middle):
302                  Toggles between move and copy
304       Ctrl    Makes selection rectangular or insertion
305               columnar
307       Alt*    (on release) Exchange primary and secondary
308               selections.
311   LEFT MOUSE BUTTON
313   The left mouse button is used to position the cursor and to make primary 
314   selections. 
316     Click         Moves the cursor
318     Double Click  Selects a whole word
320     Triple Click  Selects a whole line
322     Quad Click    Selects the whole file
324     Shift Click   Adjusts (extends or shrinks) the
325                   selection, or if there is no existing
326                   selection, begins a new selection
327                   between the cursor and the mouse.
329     Ctrl+Shift+   Adjusts (extends or shrinks) the
330     Click         selection rectangularly.
332     Drag          Selects text between where the mouse
333                   was pressed and where it was released.
335     Ctrl+Drag     Selects rectangle between where the
336                   mouse was pressed and where it was
337                   released.
340   RIGHT MOUSE BUTTON
342   The right mouse button posts a programmable menu for frequently used 
343   commands. 
345     Click/Drag    Pops up the background menu (programmed
346                   from Preferences -> Default Settings ->
347                   Customize Menus -> Window Background).
349     Ctrl+Drag     Pan scrolling.  Scrolls the window
350                   both vertically and horizontally, as if
351                   you had grabbed it with your mouse.
354   MIDDLE MOUSE BUTTON
356   The middle mouse button is for making secondary selections, and copying and 
357   dragging the primary selection. 
359     Click         Copies the primary selection to the
360                   clicked position.
362     Shift+Click   Moves the primary selection to the
363                   clicked position, deleting it from its
364                   original position.
366     Drag          1) Outside of the primary selection:
367                       Begins a secondary selection.
368                   2) Inside of the primary selection:
369                       Moves the selection by dragging.
371     Ctrl+Drag     1) Outside of the primary selection:
372                       Begins a rectangular secondary
373                       selection.
374                   2) Inside of the primary selection:
375                       Drags the selection in overlay
376                       mode (see below).
378   When the mouse button is released after creating a secondary selection: 
380     No Modifiers  If there is a primary selection,
381                   replaces it with the secondary
382                   selection.  Otherwise, inserts the
383                   secondary selection at the cursor
384                   position.
386     Shift         Move the secondary selection, deleting
387                   it from its original position.  If
388                   there is a primary selection, the move
389                   will replace the primary selection
390                   with the secondary selection.
391                   Otherwise, moves the secondary
392                   selection to to the cursor position.
394     Alt*          Exchange the primary and secondary
395                   selections.
397   While moving the primary selection by dragging with the middle mouse button: 
399     Shift         Leaves a copy of the original
400                   selection in place rather than
401                   removing it or blanking the area.
403     Ctrl          Changes from insert mode to overlay
404                   mode (see below).
406     Escape        Cancels drag in progress.
408   Overlay Mode: Normally, dragging moves text by removing it from the selected 
409   position at the start of the drag, and inserting it at a new position 
410   relative to to the mouse. When you drag a block of text over existing 
411   characters, the existing characters are displaced to the end of the 
412   selection. In overlay mode, characters which are occluded by blocks of text 
413   being dragged are simply removed. When dragging non-rectangular selections, 
414   overlay mode also converts the selection to rectangular form, allowing it to 
415   be dragged outside of the bounds of the existing text. 
417   Mouse buttons 4 and 5 are usually represented by a mouse wheel nowadays. 
418   They are used to scroll up or down in the text window. 
420   * The Alt key may be labeled Meta or Compose-Character on some keyboards. 
421   Some window managers, including default configurations of mwm, bind 
422   combinations of the Alt key and mouse buttons to window manager operations. 
423   In NEdit, Alt is only used on button release, so regardless of the window 
424   manager bindings for Alt-modified mouse buttons, you can still do the 
425   corresponding NEdit operation by using the Alt key AFTER the initial mouse 
426   press, so that Alt is held while you release the mouse button. If you find 
427   this difficult or annoying, you can re-configure most window managers to 
428   skip this binding, or you can re-configure NEdit to use a different key 
429   combination. 
431 ------------------
432 KEYBOARD SHORTCUTS
433 ------------------
435   Most of the keyboard shortcuts in NEdit are shown on the right hand sides of 
436   the pull-down menus. However, there are more which are not as obvious. These 
437   include; dialog button shortcuts; menu and dialog mnemonics; labeled 
438   keyboard keys, such as the arrows, page-up, page-down, and home; and 
439   optional Shift modifiers on accelerator keys, like [Shift]Ctrl+F. 
442   MENU ACCELERATORS
444   Pressing the key combinations shown on the right of the menu items is a 
445   shortcut for selecting the menu item with the mouse. Some items have the 
446   shift key enclosed in brackets, such as [Shift]Ctrl+F. This indicates that 
447   the shift key is optional. In search commands, including the shift key 
448   reverses the direction of the search. In Shift commands, it makes the 
449   command shift the selected text by a whole tab stop rather than by single 
450   characters. 
453   MENU MNEMONICS
455   Pressing the Alt key in combination with one of the underlined characters in 
456   the menu bar pulls down that menu. Once the menu is pulled down, typing the 
457   underlined characters in a menu item (without the Alt key) activates that 
458   item. With a menu pulled down, you can also use the arrow keys to select 
459   menu items, and the Space or Enter keys to activate them. 
462   KEYBOARD SHORTCUTS WITHIN DIALOGS
464   One button in a dialog is usually marked with a thick indented outline. 
465   Pressing the Return or Enter key activates this button. 
467   All dialogs have either a Cancel or Dismiss button. This button can be 
468   activated by pressing the Escape (or Esc) key. 
470   Pressing the tab key moves the keyboard focus to the next item in a dialog. 
471   Within an associated group of buttons, the arrow keys move the focus among 
472   the buttons. Shift+Tab moves backward through the items. 
474   Most items in dialogs have an underline under one character in their name. 
475   Pressing the Alt key along with this character, activates a button as if you 
476   had pressed it with the mouse, or moves the keyboard focus to the associated 
477   text field or list. 
479   You can select items from a list by using the arrow keys to move the 
480   selection and space to select. 
482   In file selection dialogs, you can type the beginning characters of the file 
483   name or directory in the list to select files 
486   LABELED FUNCTION KEYS
488   The labeled function keys on standard workstation and PC keyboards, like the 
489   arrows, and page-up and page-down, are active in NEdit, though not shown in 
490   the pull-down menus. 
492   Holding down the control key while pressing a named key extends the scope of 
493   the action that it performs. For example, Home normally moves the insert 
494   cursor the beginning of a line. Ctrl+Home moves it to the beginning of the 
495   file. Backspace deletes one character, Ctrl+Backspace deletes one word. 
497   Holding down the shift key while pressing a named key begins or extends a 
498   selection. Combining the shift and control keys combines their actions. For 
499   example, to select a word without using the mouse, position the cursor at 
500   the beginning of the word and press Ctrl+Shift+RightArrow. The Alt key 
501   modifies selection commands to make the selection rectangular. 
503   Under X and Motif, there are several levels of translation between keyboard 
504   keys and the actions they perform in a program. The "Customizing NEdit", and 
505   "X Resources" sections of the Help menu have more information on this 
506   subject. Because of all of this configurability, and since keyboards and 
507   standards for the meaning of some keys vary from machine to machine, the 
508   mappings may be changed from the defaults listed below. 
511   MODIFIER KEYS (IN GENERAL)
513     Ctrl   Extends the scope of the action that the key
514            would otherwise perform.  For example, Home
515            normally moves the insert cursor to the beginning
516            of a line. Ctrl+Home moves it to the beginning of
517            the file.  Backspace deletes one character, Ctrl+
518            Backspace deletes one word.
520     Shift  Extends the selection to the cursor position. If
521            there's no selection, begins one between the old
522            and new cursor positions.
524     Alt    When modifying a selection, makes the selection
525            rectangular.
527   (For the effects of modifier keys on mouse button presses, see the section 
528   titled "Using the Mouse") 
531   ALL KEYBOARDS
533     Escape        Cancels operation in progress: menu
534                   selection, drag, selection, etc.  Also
535                   equivalent to cancel button in dialogs.
537     Backspace     Delete the character before the cursor
539     Ctrl+BS       Delete the word before the cursor
541     Arrows --
543       Left        Move the cursor to the left one character
545       Ctrl+Left   Move the cursor backward one word
546                   (Word delimiters are settable, see
547                   "Customizing NEdit", and "X_Resources_")
549       Right       Move the cursor to the right one character
551       Ctrl+Right  Move the cursor forward one word
553       Up          Move the cursor up one line
555       Ctrl+Up     Move the cursor up one paragraph.
556                   (Paragraphs are delimited by blank lines)
558       Down        Move the cursor down one line.
560       Ctrl+Down   Move the cursor down one paragraph.
562     Ctrl+Return   Return with automatic indent, regardless
563                   of the setting of Auto Indent.
565     Shift+Return  Return without automatic indent,
566                   regardless of the setting of Auto Indent.
568     Ctrl+Tab      Insert an ASCII tab character, without
569                   processing emulated tabs.
571     Alt+Ctrl+<c>  Insert the control-code equivalent of
572                   a key <c>
574     Ctrl+/        Select everything (same as Select
575                   All menu item or ^A)
577     Ctrl+\        Unselect
579     Ctrl+U        Delete to start of line
582   PC STANDARD KEYBOARD
584     Ctrl+Insert   Copy the primary selection to the
585                   clipboard (same as Copy menu item or ^C)
586                   for compatibility with Motif standard key
587                   binding
588     Shift+Ctrl+
589     Insert        Copy the primary selection to the cursor
590                   location.
592     Delete        Delete the character before the cursor.
593                   (Can be configured to delete the character
594                   after the cursor, see "Customizing NEdit",
595                   and "X Resources")
597     Ctrl+Delete   Delete to end of line.
599     Shift+Delete  Cut, remove the currently selected text
600                   and place it in the clipboard. (same as
601                   Cut menu item or ^X) for compatibility
602                   with Motif standard key binding
603     Shift+Ctrl+
604     Delete        Cut the primary selection to the cursor
605                   location.
607     Home          Move the cursor to the beginning of the
608                   line
610     Ctrl+Home     Move the cursor to the beginning of the
611                   file
613     End           Move the cursor to the end of the line
615     Ctrl+End      Move the cursor to the end of the file
617     PageUp        Scroll and move the cursor up by one page.
619     Ctrl+PageUp   Scroll and move the cursor left by one
620                   page.
622     PageDown      Scroll and move the cursor down by one
623                   page.
625     Ctrl+PageDown Scroll and move the cursor right by one
626                   page.
628     F10           Make the menu bar active for keyboard
629                   input (Arrow Keys, Return, Escape,
630                   and the Space Bar)
633   SPECIALTY KEYBOARDS  
635   On machines with different styles of keyboards, generally, text editing 
636   actions are properly matched to the labeled keys, such as Remove, 
637   Next-screen, etc.. If you prefer different key bindings, see the section 
638   titled "Key Binding" under the Customizing heading in the Help menu. 
640 --------------------
641 SHIFTING AND FILLING
642 --------------------
645   SHIFT LEFT, SHIFT RIGHT
647   While shifting blocks of text is most important for programmers (See 
648   Features for Programming), it is also useful for other tasks, such as 
649   creating indented paragraphs. 
651   To shift a block of text one tab stop to the right, select the text, then 
652   choose Shift Right from the Edit menu. Note that the accelerator keys for 
653   these menu items are Ctrl+9 and Ctrl+0, which correspond to the right and 
654   left parenthesis on most keyboards. Remember them as adjusting the text in 
655   the direction pointed to by the parenthesis character. Holding the Shift key 
656   while selecting either Shift Left or Shift Right will shift the text by one 
657   character. 
659   It is also possible to shift blocks of text by selecting the text 
660   rectangularly, and dragging it left or right (and up or down as well). Using 
661   a rectangular selection also causes tabs within the selection to be 
662   recalculated and substituted, such that the non-whitespace characters remain 
663   stationary with respect to the selection. 
666   FILLING  
668   Text filling using the Fill Paragraph command in the Edit menu is one of the 
669   most important concepts in NEdit. And it will be well worth your while to 
670   understand how to use it properly. 
672   In plain text files, unlike word-processor files, there is no way to tell 
673   which lines are continuations of other lines, and which lines are meant to 
674   be separate, because there is no distinction in meaning between newline 
675   characters which separate lines in a paragraph, and ones which separate 
676   paragraphs from other text. This makes it impossible for a text editor like 
677   NEdit to tell parts of the text which belong together as a paragraph from 
678   carefully arranged individual lines. 
680   In continuous wrap mode (Preferences -> Wrap -> Continuous), lines 
681   automatically wrap and unwrap themselves to line up properly at the right 
682   margin. In this mode, you simply omit the newlines within paragraphs and let 
683   NEdit make the line breaks as needed. Unfortunately, continuous wrap mode is 
684   not appropriate in the majority of situations, because files with extremely 
685   long lines are not common under Unix and may not be compatible with all 
686   tools, and because you can't achieve effects like indented sections, 
687   columns, or program comments, and still take advantage of the automatic 
688   wrapping. 
690   Without continuous wrapping, paragraph filling is not entirely automatic. 
691   Auto-Newline wrapping keeps paragraphs lined up as you type, but once 
692   entered, NEdit can no longer distinguish newlines which join wrapped text, 
693   and newlines which must be preserved. Therefore, editing in the middle of a 
694   paragraph will often leave the right margin messy and uneven. 
696   Since NEdit can't act automatically to keep your text lined up, you need to 
697   tell it explicitly where to operate, and that is what Fill Paragraph is for. 
698   It arranges lines to fill the space between two margins, wrapping the lines 
699   neatly at word boundaries. Normally, the left margin for filling is inferred 
700   from the text being filled. The first line of each paragraph is considered 
701   special, and its left indentation is maintained separately from the 
702   remaining lines (for leading indents, bullet points, numbered paragraphs, 
703   etc.). Otherwise, the left margin is determined by the furthest left 
704   non-whitespace character. The right margin is either the Wrap Margin, set in 
705   the preferences menu (by default, the right edge of the window), or can also 
706   be chosen on the fly by using a rectangular selection (see below). 
708   There are three ways to use Fill Paragraph. The simplest is, while you are 
709   typing text, and there is no selection, simply select Fill Paragraph (or 
710   type Ctrl+J), and NEdit will arrange the text in the paragraph adjacent to 
711   the cursor. A paragraph, in this case, means an area of text delimited by 
712   blank lines. 
714   The second way to use Fill Paragraph is with a selection. If you select a 
715   range of text and then chose Fill Paragraph, all of the text in the 
716   selection will be filled. Again, continuous text between blank lines is 
717   interpreted as paragraphs and filled individually, respecting leading 
718   indents and blank lines. 
720   The third, and most versatile, way to use Fill Paragraph is with a 
721   rectangular selection. Fill Paragraph treats rectangular selections 
722   differently from other commands. Instead of simply filling the text inside 
723   the rectangular selection, NEdit interprets the right edge of the selection 
724   as the requested wrap margin. Text to the left of the selection is not 
725   disturbed (the usual interpretation of a rectangular selection), but text to 
726   the right of the selection is included in the operation and is pulled in to 
727   the selected region. This method enables you to fill text to an arbitrary 
728   right margin, without going back and forth to the wrap-margin dialog, as 
729   well as to exclude text to the left of the selection such as comment bars or 
730   other text columns. 
732 -----------
733 FILE FORMAT
734 -----------
736   While plain-text is probably the simplest and most interchangeable file 
737   format in the computer world, there is still variation in what plain-text 
738   means from system to system. Plain-text files can differ in character set, 
739   line termination, and wrapping. 
741   While character set differences are the most obvious and pose the most 
742   challenge to portability, they affect NEdit only indirectly via the same 
743   font and localization mechanisms common to all X applications. If your 
744   system is set up properly, you will probably never see character-set related 
745   problems in NEdit. NEdit can not display Unicode text files, or any 
746   multi-byte character set. 
748   The primary difference between an MS DOS format file and a Unix format file, 
749   is how the lines are terminated. Unix uses a single newline character. MS 
750   DOS uses a carriage-return and a newline. NEdit can read and write both file 
751   formats, but internally, it uses the single character Unix standard. NEdit 
752   auto-detects MS DOS format files based on the line termination at the start 
753   of the file. Files are judged to be DOS format if all of the first five line 
754   terminators, within a maximum range, are DOS-style. To change the format in 
755   which NEdit writes a file from DOS to Unix or visa versa, use the Save As... 
756   command and check or un-check the MS DOS Format button. 
758   Wrapping within text files can vary among individual users, as well as from 
759   system to system. Both Windows and MacOS make frequent use of plain text 
760   files with no implicit right margin. In these files, wrapping is determined 
761   by the tool which displays them. Files of this style also exist on Unix 
762   systems, despite the fact that they are not supported by all Unix utilities. 
763   To display this kind of file properly in NEdit, you have to select the wrap 
764   style called Continuous. Wrapping modes are discussed in the sections: 
765   Customizing -> Preferences, and Basic Operation -> Shifting and Filling. 
767   The last and most minute of format differences is the terminating newline. 
768   NEdit, like vi and approximately half of Unix editors, enforces a final 
769   terminating newline on all of the files that it writes. NEdit does this 
770   because some Unix compilers and utilities require it, and fail in various 
771   ways on files which do not have it. Emacs does not enforce this rule. Users 
772   are divided on which is best. 
774 ========================
775 FEATURES FOR PROGRAMMING
776 ========================
778 ----------------------
779 PROGRAMMING WITH NEDIT
780 ----------------------
782   Though general in appearance, NEdit has many features intended specifically 
783   for programmers. Major programming-related topics are listed in separate 
784   sections under the heading: "Features for Programming": Syntax Highlighting, 
785   Tabs/Emulated Tabs, Finding_Declarations_(ctags)_, and Auto/Smart_Indent_. 
786   Minor topics related to programming are discussed below: 
789   LANGUAGE MODES
791   When NEdit initially reads a file, it attempts to determine whether the file 
792   is in one of the computer languages that it knows about. Knowing what 
793   language a file is written in allows NEdit to assign highlight patterns and 
794   smart indent macros, and to set language specific preferences like word 
795   delimiters, tab emulation, and auto-indent. Language mode can be recognized 
796   from both the file name and from the first 200 characters of content. 
797   Language mode recognition and language-specific preferences are configured 
798   in: Preferences -> Default Settings -> Language Modes.... 
800   You can set the language mode manually for a window, by selecting it from 
801   the menu: Preferences -> Language Modes. 
804   LINE NUMBERS
806   To find a particular line in a source file by line number, choose Goto Line 
807   #... from the Search menu. You can also directly select the line number text 
808   in the compiler message in the terminal emulator window (xterm, decterm, 
809   winterm, etc.) where you ran the compiler, and choose Goto Selected from the 
810   Search menu. 
812   To find out the line number of a particular line in your file, turn on 
813   Statistics Line in the Preferences menu and position the insertion point 
814   anywhere on the line. The statistics line continuously updates the line 
815   number of the line containing the cursor. 
818   MATCHING PARENTHESES
820   To help you inspect nested parentheses, brackets, braces, quotes, and other 
821   characters, NEdit has both an automatic parenthesis matching mode, and a 
822   Goto Matching command. Automatic parenthesis matching is activated when you 
823   type, or move the insertion cursor after a parenthesis, bracket, or brace. 
824   It momentarily highlights either the opposite character ('Delimiter') or the 
825   entire expression ('Range') when the opposite character is visible in the 
826   window. To find a matching character anywhere in the file, select it or 
827   position the cursor after it, and choose Goto Matching from the Search menu. 
828   If the character matches itself, such as a quote or slash, select the first 
829   character of the pair. NEdit will match {, (, [, <, ", ', `, /, and \. 
830   Holding the Shift key while typing the accelerator key (Shift+Ctrl+M, by 
831   default), will select all of the text between the matching characters. 
834   OPENING INCLUDED FILES
836   The Open Selected command in the File menu understands the C preprocessor's 
837   #include syntax, so selecting an #include line and invoking Open Selected 
838   will generally find the file referred to, unless doing so depends on the 
839   settings of compiler switches or other information not available to NEdit. 
842   INTERFACE TO PROGRAMMING TOOLS
844   Integrated software development environments such as SGI's CaseVision and 
845   Centerline Software's Code Center, can be interfaced directly with NEdit via 
846   the client server interface. These tools allow you to click directly on 
847   compiler and runtime error messages and request NEdit to open files, and 
848   select lines of interest. The easiest method is usually to use the tool's 
849   interface for character-based editors like vi, to invoke nc, but 
850   programmatic interfaces can also be derived using the source code for nc. 
852   There are also some simple compile/review, grep, ctree, and ctags browsers 
853   available in the NEdit contrib directory on ftp.nedit.org. 
855 ------------------
856 TABS/EMULATED TABS
857 ------------------
860   CHANGING THE TAB DISTANCE
862   Tabs are important for programming in languages which use indentation to 
863   show nesting, as short-hand for producing white-space for leading indents. 
864   As a programmer, you have to decide how to use indentation, and how or 
865   whether tab characters map to your indentation scheme. 
867   Ideally, tab characters map directly to the amount of indent that you use to 
868   distinguish nesting levels in your code. Unfortunately, the Unix standard 
869   for interpretation of tab characters is eight characters (probably dating 
870   back to mechanical capabilities of the original teletype), which is usually 
871   too coarse for a single indent. 
873   Most text editors, NEdit included, allow you to change the interpretation of 
874   the tab character, and many programmers take advantage of this, and set 
875   their tabs to 3 or 4 characters to match their programming style. In NEdit 
876   you set the hardware tab distance in Preferences -> Tabs... for the current 
877   window, or Preferences -> Default Settings -> Tabs... (general), or 
878   Preferences -> Default Settings -> Language Modes... (language-specific) to 
879   change the defaults for future windows. 
881   Changing the meaning of the tab character makes programming much easier 
882   while you're in the editor, but can cause you headaches outside of the 
883   editor, because there is no way to pass along the tab setting as part of a 
884   plain-text file. All of the other tools which display, print, and otherwise 
885   process your source code have to be made aware of how the tabs are set, and 
886   must be able to handle the change. Non-standard tabs can also confuse other 
887   programmers, or make editing your code difficult for them if their text 
888   editors don't support changes in tab distance. 
891   EMULATED TABS
893   An alternative to changing the interpretation of the tab character is tab 
894   emulation. In the Tabs... dialog(s), turning on Emulated Tabs causes the Tab 
895   key to insert the correct number of spaces and/or tabs to bring the cursor 
896   the next emulated tab stop, as if tabs were set at the emulated tab distance 
897   rather than the hardware tab distance. Backspacing immediately after 
898   entering an emulated tab will delete the fictitious tab as a unit, but as 
899   soon as you move the cursor away from the spot, NEdit will forget that the 
900   collection of spaces and tabs is a tab, and will treat it as separate 
901   characters. To enter a real tab character with "Emulate Tabs" turned on, use 
902   Ctrl+Tab. 
904   It is also possible to tell NEdit not to insert ANY tab characters at all in 
905   the course of processing emulated tabs, and in shifting and rectangular 
906   insertion/deletion operations, for programmers who worry about the 
907   misinterpretation of tab characters on other systems. 
909 -----------------
910 AUTO/SMART INDENT
911 -----------------
913   Programmers who use structured languages usually require some form of 
914   automatic indent, so that they don't have to continually re-type the 
915   sequences of tabs and/or spaces needed to maintain lengthy running indents. 
916   Version 5.0 of NEdit is the first release of NEdit to offer "smart" indent, 
917   at least experimentally, in addition to the traditional automatic indent 
918   which simply lines up the cursor position with the previous line. 
921   SMART INDENT
923   Smart Indent in this release must still be considered somewhat experimental. 
924   Smart indent macros are only available by default for C and C++, and while 
925   these can easily be configured for different default indentation distances, 
926   they may not conform to everyone's exact C programming style. Smart indent 
927   is programmed in terms of macros in the NEdit macro language which can be 
928   entered in: Preferences -> Default Settings -> Indent -> Program Smart 
929   Indent. Hooks are provided for intervening at the point that a newline is 
930   entered, either via the user pressing the Enter key, or through 
931   auto-wrapping; and for arbitrary type-in to act on specific characters 
932   typed. 
934   To type a newline character without invoking smart-indent when operating in 
935   smart-indent mode, hold the Ctrl key while pressing the Return or Enter key. 
938   AUTO-INDENT
940   With Indent set to Auto (the default), NEdit keeps a running indent. When 
941   you press the Return or Enter key, spaces and tabs are inserted to line up 
942   the insert point under the start of the previous line. Ctrl+Return in 
943   auto-indent mode acts like a normal Return, With auto-indent turned off, 
944   Ctrl+Return does indentation. 
947   BLOCK INDENTATION ADJUSTMENT
949   The Shift Left and Shift Right commands as well as rectangular dragging can 
950   be used to adjust the indentation for several lines at once. To shift a 
951   block of text one character to the right, select the text, then choose Shift 
952   Right from the Edit menu. Note that the accelerator keys for these menu 
953   items are Ctrl+9 and Ctrl+0, which correspond to the right and left 
954   parenthesis on most keyboards. Remember them as adjusting the text in the 
955   direction pointed to by the parenthesis character. Holding the Shift key 
956   while selecting either Shift Left or Shift Right will shift the text by one 
957   tab stop (or by one emulated tab stop if tab emulation is turned on). The 
958   help section "Shifting and Filling" under "Basic Operation" has details. 
960 -------------------
961 SYNTAX HIGHLIGHTING
962 -------------------
964   Syntax Highlighting means using colors and fonts to help distinguish 
965   language elements in programming languages and other types of structured 
966   files. Programmers use syntax highlighting to understand code faster and 
967   better, and to spot many kinds of syntax errors more quickly. 
969   To use syntax highlighting in NEdit, select Highlight Syntax in the 
970   Preferences menu. If NEdit recognizes the computer language that you are 
971   using, and highlighting rules (patterns) are available for that language, it 
972   will highlight your text, and maintain the highlighting, automatically, as 
973   you type. 
975   If NEdit doesn't correctly recognize the type of the file you are editing, 
976   you can manually select a language mode from Language Modes in the 
977   Preferences menu. You can also program the method that NEdit uses to 
978   recognize language modes in Preferences -> Default Settings -> Language 
979   Modes.... 
981   If no highlighting patterns are available for the language that you want to 
982   use, you can create new patterns relatively quickly. The Help section 
983   "Highlighting Patterns" under "Customizing", has details. 
985   If you are satisfied with what NEdit is highlighting, but would like it to 
986   use different colors or fonts, you can change these by selecting Preferences 
987   -> Default Settings -> Syntax Highlighting -> Text Drawing Styles. 
988   Highlighting patterns are connected with font and color information through 
989   a common set of styles so that colorings defined for one language will be 
990   similar across others, and patterns within the same language which are meant 
991   to appear identical can be changed in the same place. To understand which 
992   styles are used to highlight the language you are interested in, you may 
993   need to look at "Highlighting Patterns" section, as well. 
995   Syntax highlighting is CPU intensive, and under some circumstances can 
996   affect NEdit's responsiveness. If you have a particularly slow system, or 
997   work with very large files, you may not want to use it all of the time. 
998   Syntax highlighting introduces two kinds of delays. The first is an initial 
999   parsing delay, proportional to the size of the file. This delay is also 
1000   incurred when pasting large sections of text, filtering text through shell 
1001   commands, and other circumstances involving changes to large amounts of 
1002   text. The second kind of delay happens when text which has not previously 
1003   been visible is scrolled in to view. Depending on your system, and the 
1004   highlight patterns you are using, this may or may not be noticeable. A 
1005   typing delay is also possible, but unlikely if you are only using the 
1006   built-in patterns. 
1008 ----------------------------
1009 FINDING DECLARATIONS (CTAGS)
1010 ----------------------------
1012   NEdit can process tags files generated using the Unix ctags command or the 
1013   Exuberant Ctags program. Ctags creates index files correlating names of 
1014   functions and declarations with their locations in C, Fortran, or Pascal 
1015   source code files. (See the ctags manual page for more information). Ctags 
1016   produces a file called "tags" which can be loaded by NEdit. NEdit can manage 
1017   any number of tags files simultaneously. Tag collisions are handled with a 
1018   popup menu to let the user decide which tag to use. In 'Smart' mode NEdit 
1019   will automatically choose the desired tag based on the scope of the file or 
1020   module. Once loaded, the information in the tags file enables NEdit to go 
1021   directly to the declaration of a highlighted function or data structure name 
1022   with a single command. To load a tags file, select "Load Tags File" from the 
1023   File menu and choose a tags file to load, or specify the name of the tags 
1024   file on the NEdit command line: 
1026       nedit -tags tags
1028   NEdit can also be set to load a tags file automatically when it starts up. 
1029   Setting the X resource nedit.tagFile to the name of a tag file tells NEdit 
1030   to look for that file at startup time (see "Customizing NEdit"). The file 
1031   name can be either a complete path name, in which case NEdit will always 
1032   load the same tags file, or a file name without a path or with a relative 
1033   path, in which case NEdit will load it starting from the current directory. 
1034   The second option allows you to have different tags files for different 
1035   projects, each automatically loaded depending on the directory you're in 
1036   when you start NEdit. Setting the name to "tags" is an obvious choice since 
1037   this is the name that ctags uses. 
1039   To unload a tags file, select "Un-load Tags File" from the File menu and 
1040   choose from the list of tags files. NEdit will keep track of tags file 
1041   updates by checking the timestamp on the files, and automatically update the 
1042   tags cache. 
1044   To find the definition of a function or data structure once a tags file is 
1045   loaded, select the name anywhere it appears in your program (see "Selecting 
1046   Text") and choose "Find Definition" from the Search menu. 
1048 ===================
1049 REGULAR EXPRESSIONS
1050 ===================
1052 -------------------------------
1053 BASIC REGULAR EXPRESSION SYNTAX
1054 -------------------------------
1056   Regular expressions (regex's) are useful as a way to match inexact sequences 
1057   of characters. They can be used in the `Find...' and `Replace...' search 
1058   dialogs and are at the core of Color Syntax Highlighting patterns. To 
1059   specify a regular expression in a search dialog, simply click on the 
1060   `Regular Expression' radio button in the dialog. 
1062   A regex is a specification of a pattern to be matched in the searched text. 
1063   This pattern consists of a sequence of tokens, each being able to match a 
1064   single character or a sequence of characters in the text, or assert that a 
1065   specific position within the text has been reached (the latter is called an 
1066   anchor.) Tokens (also called atoms) can be modified by adding one of a 
1067   number of special quantifier tokens immediately after the token. A 
1068   quantifier token specifies how many times the previous token must be matched 
1069   (see below.) 
1071   Tokens can be grouped together using one of a number of grouping constructs, 
1072   the most common being plain parentheses. Tokens that are grouped in this way 
1073   are also collectively considered to be a regex atom, since this new larger 
1074   atom may also be modified by a quantifier. 
1076   A regex can also be organized into a list of alternatives by separating each 
1077   alternative with pipe characters, `|'. This is called alternation. A match 
1078   will be attempted for each alternative listed, in the order specified, until 
1079   a match results or the list of alternatives is exhausted (see Alternation 
1080   section below.) 
1083   THE 'ANY' CHARACTER
1085   If a dot (`.') appears in a regex, it means to match any character exactly 
1086   once. By default, dot will not match a newline character, but this behavior 
1087   can be changed (see help topic Parenthetical Constructs, under the heading, 
1088   Matching Newlines). 
1091   CHARACTER CLASSES
1093   A character class, or range, matches exactly one character of text, but the 
1094   candidates for matching are limited to those specified by the class. Classes 
1095   come in two flavors as described below: 
1097      [...]   Regular class, match only characters listed.
1098      [^...]  Negated class, match only characters NOT listed.
1100   As with the dot token, by default negated character classes do not match 
1101   newline, but can be made to do so. 
1103   The characters that are considered special within a class specification are 
1104   different than the rest of regex syntax as follows. If the first character 
1105   in a class is the `]' character (second character if the first character is 
1106   `^') it is a literal character and part of the class character set. This 
1107   also applies if the first or last character is `-'. Outside of these rules, 
1108   two characters separated by `-' form a character range which includes all 
1109   the characters between the two characters as well. For example, `[^f-j]' is 
1110   the same as `[^fghij]' and means to match any character that is not `f', 
1111   `g', `h', `i', or `j'. 
1114   ANCHORS
1116   Anchors are assertions that you are at a very specific position within the 
1117   search text. NEdit regular expressions support the following anchor tokens: 
1119      ^    Beginning of line
1120      $    End of line
1121      <    Left word boundary
1122      >    Right word boundary
1123      \B   Not a word boundary
1125   Note that the \B token ensures that the left and right characters are both 
1126   delimiter characters, or that both left and right characters are 
1127   non-delimiter characters. Currently word anchors check only one character, 
1128   e.g. the left word anchor `<' only asserts that the left character is a word 
1129   delimiter character. Similarly the right word anchor checks the right 
1130   character. 
1133   QUANTIFIERS
1135   Quantifiers specify how many times the previous regular expression atom may 
1136   be matched in the search text. Some quantifiers can produce a large 
1137   performance penalty, and can in some instances completely lock up NEdit. To 
1138   prevent this, avoid nested quantifiers, especially those of the maximal 
1139   matching type (see below.) 
1141   The following quantifiers are maximal matching, or "greedy", in that they 
1142   match as much text as possible. 
1144      *   Match zero or more
1145      +   Match one  or more
1146      ?   Match zero or one
1148   The following quantifiers are minimal matching, or "lazy", in that they 
1149   match as little text as possible. 
1151      *?   Match zero or more
1152      +?   Match one  or more
1153      ??   Match zero or one
1155   One final quantifier is the counting quantifier, or brace quantifier. It 
1156   takes the following basic form: 
1158      {min,max}  Match from `min' to `max' times the
1159                 previous regular expression atom.
1161   If `min' is omitted, it is assumed to be zero. If `max' is omitted, it is 
1162   assumed to be infinity. Whether specified or assumed, `min' must be less 
1163   than or equal to `max'. Note that both `min' and `max' are limited to 65535. 
1164   If both are omitted, then the construct is the same as `*'. Note that `{,}' 
1165   and `{}' are both valid brace constructs. A single number appearing without 
1166   a comma, e.g. `{3}' is short for the `{min,min}' construct, or to match 
1167   exactly `min' number of times. 
1169   The quantifiers `{1}' and `{1,1}' are accepted by the syntax, but are 
1170   optimized away since they mean to match exactly once, which is redundant 
1171   information. Also, for efficiency, certain combinations of `min' and `max' 
1172   are converted to either `*', `+', or `?' as follows: 
1174      {} {,} {0,}    *
1175      {1,}           +
1176      {,1} {0,1}     ?
1178   Note that {0} and {0,0} are meaningless and will generate an error message 
1179   at regular expression compile time. 
1181   Brace quantifiers can also be "lazy". For example {2,5}? would try to match 
1182   2 times if possible, and will only match 3, 4, or 5 times if that is what is 
1183   necessary to achieve an overall match. 
1186   ALTERNATION
1188   A series of alternative patterns to match can be specified by separating 
1189   them with vertical pipes, `|'. An example of alternation would be 
1190   `a|be|sea'. This will match `a', or `be', or `sea'. Each alternative can be 
1191   an arbitrarily complex regular expression. The alternatives are attempted in 
1192   the order specified. An empty alternative can be specified if desired, e.g. 
1193   `a|b|'. Since an empty alternative can match nothingness (the empty string), 
1194   this guarantees that the expression will match. 
1197   COMMENTS
1199   Comments are of the form `(?#<comment text>)' and can be inserted anywhere 
1200   and have no effect on the execution of the regular expression. They can be 
1201   handy for documenting very complex regular expressions. Note that a comment 
1202   begins with `(?#' and ends at the first occurrence of an ending parenthesis, 
1203   or the end of the regular expression... period. Comments do not recognize 
1204   any escape sequences. 
1206 --------------
1207 METACHARACTERS
1208 --------------
1211   ESCAPING METACHARACTERS
1213   In a regular expression (regex), most ordinary characters match themselves. 
1214   For example, `ab%' would match anywhere `a' followed by `b' followed by `%' 
1215   appeared in the text. Other characters don't match themselves, but are 
1216   metacharacters. For example, backslash is a special metacharacter which 
1217   'escapes' or changes the meaning of the character following it. Thus, to 
1218   match a literal backslash would require a regular expression to have two 
1219   backslashes in sequence. NEdit provides the following escape sequences so 
1220   that metacharacters that are used by the regex syntax can be specified as 
1221   ordinary characters. 
1223      \(  \)  \-  \[  \]  \<  \>  \{  \}
1224      \.  \|  \^  \$  \*  \+  \?  \&  \\
1227   SPECIAL CONTROL CHARACTERS
1229   There are some special characters that are difficult or impossible to type. 
1230   Many of these characters can be constructed as a sort of metacharacter or 
1231   sequence by preceding a literal character with a backslash. NEdit recognizes 
1232   the following special character sequences: 
1234      \a  alert (bell)
1235      \b  backspace
1236      \e  ASCII escape character (***)
1237      \f  form feed (new page)
1238      \n  newline
1239      \r  carriage return
1240      \t  horizontal tab
1241      \v  vertical tab
1243      *** For environments that use the EBCDIC character set,
1244          when compiling NEdit set the EBCDIC_CHARSET compiler
1245          symbol to get the EBCDIC equivalent escape
1246          character.)
1249   OCTAL AND HEX ESCAPE SEQUENCES
1251   Any ASCII (or EBCDIC) character, except null, can be specified by using 
1252   either an octal escape or a hexadecimal escape, each beginning with \0 or \x 
1253   (or \X), respectively. For example, \052 and \X2A both specify the `*' 
1254   character. Escapes for null (\00 or \x0) are not valid and will generate an 
1255   error message. Also, any escape that exceeds \0377 or \xFF will either cause 
1256   an error or have any additional character(s) interpreted literally. For 
1257   example, \0777 will be interpreted as \077 (a `?' character) followed by `7' 
1258   since \0777 is greater than \0377. 
1260   An invalid digit will also end an octal or hexadecimal escape. For example, 
1261   \091 will cause an error since `9' is not within an octal escape's range of 
1262   allowable digits (0-7) and truncation before the `9' yields \0 which is 
1263   invalid. 
1266   SHORTCUT ESCAPE SEQUENCES
1268   NEdit defines some escape sequences that are handy shortcuts for commonly 
1269   used character classes. 
1271      \d  digits            0-9
1272      \l  letters           a-z and A-Z
1273      \s  whitespace        \t, \r, \v, \f, and space
1274      \w  word characters   a-z, A-Z, 0-9, and underscore, `_'
1276   \D, \L, \S, and \W are the same as the lowercase versions except that the 
1277   resulting character class is negated. For example, \d is equivalent to 
1278   `[0-9]', while \D is equivalent to `[^0-9]'. 
1280   These escape sequences can also be used within a character class. For 
1281   example, `[\l_]' is the same as `[a-zA-Z]'. The escape sequences for special 
1282   characters, and octal and hexadecimal escapes are also valid within a class. 
1285   WORD DELIMITER TOKENS
1287   Although not strictly a character class, the following escape sequences 
1288   behave similarly to character classes: 
1290      \y   Word delimiter character
1291      \Y   Not a word delimiter character
1293   The `\y' token matches any single character that is one of the characters 
1294   that NEdit recognizes as a word delimiter character, while the `\Y' token 
1295   matches any character that is NOT a word delimiter character. Word delimiter 
1296   characters are dynamic in nature, meaning that the user can change them 
1297   through preference settings. For this reason, they must be handled 
1298   differently by the regular expression engine. As a consequence of this, `\y' 
1299   and `\Y' can not be used within a character class specification. 
1301 ------------------------
1302 PARENTHETICAL CONSTRUCTS
1303 ------------------------
1306   CAPTURING PARENTHESES
1308   Capturing Parentheses are of the form `(<regex>)' and can be used to group 
1309   arbitrarily complex regular expressions. Parentheses can be nested, but the 
1310   total number of parentheses, nested or otherwise, is limited to 50 pairs. 
1311   The text that is matched by the regular expression between a matched set of 
1312   parentheses is captured and available for text substitutions and 
1313   backreferences (see below.) Capturing parentheses carry a fairly high 
1314   overhead both in terms of memory used and execution speed, especially if 
1315   quantified by `*' or `+'. 
1318   NON-CAPTURING PARENTHESES
1320   Non-Capturing Parentheses are of the form `(?:<regex>)' and facilitate 
1321   grouping only and do not incur the overhead of normal capturing parentheses. 
1322   They should not be counted when determining numbers for capturing 
1323   parentheses which are used with backreferences and substitutions. Because of 
1324   the limit on the number of capturing parentheses allowed in a regex, it is 
1325   advisable to use non-capturing parentheses when possible. 
1328   POSITIVE LOOK-AHEAD
1330   Positive look-ahead constructs are of the form `(?=<regex>)' and implement a 
1331   zero width assertion of the enclosed regular expression. In other words, a 
1332   match of the regular expression contained in the positive look-ahead 
1333   construct is attempted. If it succeeds, control is passed to the next 
1334   regular expression atom, but the text that was consumed by the positive 
1335   look-ahead is first unmatched (backtracked) to the place in the text where 
1336   the positive look-ahead was first encountered. 
1338   One application of positive look-ahead is the manual implementation of a 
1339   first character discrimination optimization. You can include a positive 
1340   look-ahead that contains a character class which lists every character that 
1341   the following (potentially complex) regular expression could possibly start 
1342   with. This will quickly filter out match attempts that can not possibly 
1343   succeed. 
1346   NEGATIVE LOOK-AHEAD
1348   Negative look-ahead takes the form `(?!<regex>)' and is exactly the same as 
1349   positive look-ahead except that the enclosed regular expression must NOT 
1350   match. This can be particularly useful when you have an expression that is 
1351   general, and you want to exclude some special cases. Simply precede the 
1352   general expression with a negative look-ahead that covers the special cases 
1353   that need to be filtered out. 
1356   CASE SENSITIVITY
1358   There are two parenthetical constructs that control case sensitivity: 
1360      (?i<regex>)   Case insensitive; `AbcD' and `aBCd' are
1361                    equivalent.
1363      (?I<regex>)   Case sensitive;   `AbcD' and `aBCd' are
1364                    different.
1366   Regular expressions are case sensitive by default, that is, `(?I<regex>)' is 
1367   assumed. All regular expression token types respond appropriately to case 
1368   insensitivity including character classes and backreferences. There is some 
1369   extra overhead involved when case insensitivity is in effect, but only to 
1370   the extent of converting each character compared to lower case. 
1373   MATCHING NEWLINES
1375   NEdit regular expressions by default handle the matching of newlines in a 
1376   way that should seem natural for most editing tasks. There are situations, 
1377   however, that require finer control over how newlines are matched by some 
1378   regular expression tokens. 
1380   By default, NEdit regular expressions will NOT match a newline character for 
1381   the following regex tokens: dot (`.'); a negated character class (`[^...]'); 
1382   and the following shortcuts for character classes: 
1384      `\d', `\D', `\l', `\L', `\s', `\S', `\w', `\W', `\Y'
1386   The matching of newlines can be controlled for the `.' token, negated 
1387   character classes, and the `\s' and `\S' shortcuts by using one of the 
1388   following parenthetical constructs: 
1390      (?n<regex>)  `.', `[^...]', `\s', `\S' match newlines
1392      (?N<regex>)  `.', `[^...]', `\s', `\S' don't match
1393                                             newlines
1395   `(?N<regex>)' is the default behavior. 
1398   NOTES ON NEW PARENTHETICAL CONSTRUCTS
1400   Except for plain parentheses, none of the parenthetical constructs capture 
1401   text. If that is desired, the construct must be wrapped with capturing 
1402   parentheses, e.g. `((?i<regex))'. 
1404   All parenthetical constructs can be nested as deeply as desired, except for 
1405   capturing parentheses which have a limit of 50 sets of parentheses, 
1406   regardless of nesting level. 
1409   BACK REFERENCES
1411   Backreferences allow you to match text captured by a set of capturing 
1412   parenthesis at some later position in your regular expression. A 
1413   backreference is specified using a single backslash followed by a single 
1414   digit from 1 to 9 (example: \3). Backreferences have similar syntax to 
1415   substitutions (see below), but are different from substitutions in that they 
1416   appear within the regular expression, not the substitution string. The 
1417   number specified with a backreference identifies which set of text capturing 
1418   parentheses the backreference is associated with. The text that was most 
1419   recently captured by these parentheses is used by the backreference to 
1420   attempt a match. As with substitutions, open parentheses are counted from 
1421   left to right beginning with 1. So the backreference `\3' will try to match 
1422   another occurrence of the text most recently matched by the third set of 
1423   capturing parentheses. As an example, the regular expression `(\d)\1' could 
1424   match `22', `33', or `00', but wouldn't match `19' or `01'. 
1426   A backreference must be associated with a parenthetical expression that is 
1427   complete. The expression `(\w(\1))' contains an invalid backreference since 
1428   the first set of parentheses are not complete at the point where the 
1429   backreference appears. 
1432   SUBSTITUTION
1434   Substitution strings are used to replace text matched by a set of capturing 
1435   parentheses. The substitution string is mostly interpreted as ordinary text 
1436   except as follows. 
1438   The escape sequences described above for special characters, and octal and 
1439   hexadecimal escapes are treated the same way by a substitution string. When 
1440   the substitution string contains the `&' character, NEdit will substitute 
1441   the entire string that was matched by the `Find...' operation. Any of the 
1442   first nine sub-expressions of the match string can also be inserted into the 
1443   replacement string. This is done by inserting a `\' followed by a digit from 
1444   1 to 9 that represents the string matched by a parenthesized expression 
1445   within the regular expression. These expressions are numbered left-to-right 
1446   in order of their opening parentheses. 
1448   The capitalization of text inserted by `&' or `\1', `\2', ... `\9' can be 
1449   altered by preceding them with `\U', `\u', `\L', or `\l'. `\u' and `\l' 
1450   change only the first character of the inserted entity, while `\U' and `\L' 
1451   change the entire entity to upper or lower case, respectively. 
1453 ---------------
1454 ADVANCED TOPICS
1455 ---------------
1458   SUBSTITUTIONS
1460   Regular expression substitution can be used to program automatic editing 
1461   operations. For example, the following are search and replace strings to 
1462   find occurrences of the `C' language subroutine `get_x', reverse the first 
1463   and second parameters, add a third parameter of NULL, and change the name to 
1464   `new_get_x': 
1466      Search string:   `get_x *\( *([^ ,]*), *([^\)]*)\)'
1467      Replace string:  `new_get_x(\2, \1, NULL)'
1470   AMBIGUITY
1472   If a regular expression could match two different parts of the text, it will 
1473   match the one which begins earliest. If both begin in the same place but 
1474   match different lengths, or match the same length in different ways, life 
1475   gets messier, as follows. 
1477   In general, the possibilities in a list of alternatives are considered in 
1478   left-to-right order. The possibilities for `*', `+', and `?' are considered 
1479   longest-first, nested constructs are considered from the outermost in, and 
1480   concatenated constructs are considered leftmost-first. The match that will 
1481   be chosen is the one that uses the earliest possibility in the first choice 
1482   that has to be made. If there is more than one choice, the next will be made 
1483   in the same manner (earliest possibility) subject to the decision on the 
1484   first choice. And so forth. 
1486   For example, `(ab|a)b*c' could match `abc' in one of two ways. The first 
1487   choice is between `ab' and `a'; since `ab' is earlier, and does lead to a 
1488   successful overall match, it is chosen. Since the `b' is already spoken for, 
1489   the `b*' must match its last possibility, the empty string, since it must 
1490   respect the earlier choice. 
1492   In the particular case where no `|'s are present and there is only one `*', 
1493   `+', or `?', the net effect is that the longest possible match will be 
1494   chosen. So `ab*', presented with `xabbbby', will match `abbbb'. Note that if 
1495   `ab*' is tried against `xabyabbbz', it will match `ab' just after `x', due 
1496   to the begins-earliest rule. (In effect, the decision on where to start the 
1497   match is the first choice to be made, hence subsequent choices must respect 
1498   it even if this leads them to less-preferred alternatives.) 
1501   REFERENCES
1503   An excellent book on the care and feeding of regular expressions is 
1505           "Mastering Regular Expressions"
1506           Jeffrey E. F. Friedl
1507           (c) 1997, O'Reilly & Associates
1508           ISBN 1-56592-257-3
1510 ---------------------------
1511 EXAMPLE REGULAR EXPRESSIONS
1512 ---------------------------
1514   The following are regular expression examples which will match: 
1516     * An entire line.
1517         ^.*$
1519     * Blank lines.
1520         ^$
1522     * Whitespace on a line.
1523         \s+
1525     * Whitespace across lines.
1526         (?n\s+)
1528     * Whitespace that spans at least two lines. Note minimal matching `*?' quantifier.
1529         (?n\s*?\n\s*)
1531     * IP address (not robust).
1532         (?:\d{1,3}(?:\.\d{1,3}){3})
1534     * Two character US Postal state abbreviations (includes territories).
1535         [ACDF-IK-PR-W][A-Z]
1537     * Web addresses.
1538         (?:http://)?www\.\S+
1540     * Case insensitive double words across line breaks.
1541         (?i(?n<(\S+)\s+\1>))
1543     * Upper case words with possible punctuation.
1544         <[A-Z][^a-z\s]*>
1546 ======================
1547 MACRO/SHELL EXTENSIONS
1548 ======================
1550 --------------------------
1551 SHELL COMMANDS AND FILTERS
1552 --------------------------
1554   The Shell menu (Unix versions only) allows you to execute Unix shell 
1555   commands from within NEdit. You can add items to the menu to extend NEdit's 
1556   command set or to incorporate custom automatic editing features using shell 
1557   commands or editing languages like awk and sed. To add items to the menu, 
1558   select Preferences -> Default Settings Customize Menus -> Shell Menu. NEdit 
1559   comes pre-configured with a few useful Unix commands like spell and sort, 
1560   but we encourage you to add your own custom extensions. 
1562   Filter Selection... prompts you for a Unix command to use to process the 
1563   currently selected text. The output from this command replaces the contents 
1564   of the selection. 
1566   Execute Command... prompts you for a Unix command and replaces the current 
1567   selection with the output of the command. If there is no selection, it 
1568   deposits the output at the current insertion point. In the Shell Command 
1569   field, the % character expands to the name (including directory path), and 
1570   the # character expands to the current line number of the file in the 
1571   window. To include a % or # character in the command, use %% or ##, 
1572   respectively. 
1574   Execute Command Line uses the position of the cursor in the window to 
1575   indicate a line to execute as a shell command line. The cursor may be 
1576   positioned anywhere on the line. This command allows you to use an NEdit 
1577   window as an editable command window for saving output and saving commands 
1578   for re-execution. Note that the same character expansions described above in 
1579   Execute Command also occur with this command. 
1581   The X resource called nedit.shell (See "Customizing NEdit") determines which 
1582   Unix shell is used to execute commands. The default value for this resource 
1583   is /bin/csh. 
1585 ------------
1586 LEARN/REPLAY
1587 ------------
1589   Selecting Learn Keystrokes from the Macro menu puts NEdit in learn mode. In 
1590   learn mode, keystrokes and menu commands are recorded, to be played back 
1591   later, using the Replay Keystrokes command, or pasted into a macro in the 
1592   Macro Commands dialog of the Default Settings menu in Preferences. 
1594   Note that only keyboard and menu commands are recorded, not mouse clicks or 
1595   mouse movements since these have no absolute point of reference, such as 
1596   cursor or selection position. When you do a mouse-based operation in learn 
1597   mode, NEdit will beep (repeatedly) to remind you that the operation was not 
1598   recorded. 
1600   Learn mode is also the quickest and easiest method for writing macros. The 
1601   dialog for creating macro commands contains a button labeled "Paste Learn / 
1602   Replay Macro", which will deposit the last sequence learned into the body of 
1603   the macro. 
1606   REPEATING ACTIONS AND LEARN/REPLAY SEQUENCES
1608   You can repeat the last (keyboard-based) command, or learn/replay sequence 
1609   with the Repeat... command in the Macro menu. To repeat an action, first do 
1610   the action (that is, insert a character, do a search, move the cursor), then 
1611   select Repeat..., decide how or how many times you want it repeated, and 
1612   click OK. For example, to move down 30 lines through a file, you could type: 
1613   <Down Arrow> Ctrl+, 29 <Return>. To repeat a learn/replay sequence, first 
1614   learn it, then select Repeat..., click on Learn/Replay and how you want it 
1615   repeated, then click OK. 
1617   If the commands you are repeating advance the cursor through the file, you 
1618   can also repeat them within a range of characters, or from the current 
1619   cursor position to the end of the file. To iterate over a range of 
1620   characters, use the primary selection (drag the left mouse button over the 
1621   text) to mark the range you want to operate on, and select "In Selection" in 
1622   the Repeat dialog. 
1624   When using In "Selection" or "To End" with a learned sequence, try to do 
1625   cursor movement as the last step in the sequence, since testing of the 
1626   cursor position is only done at the end of the sequence execution. If you do 
1627   cursor movement first, for example searching for a particular word then 
1628   doing a modification, the position of the cursor won't be checked until the 
1629   sequence has potentially gone far beyond the end of your desired range. 
1631   It's easy for a repeated command to get out of hand, and you can easily 
1632   generate an infinite loop by using range iteration on a command which 
1633   doesn't progress. To cancel a repeating command in progress, type Ctrl+. 
1634   (period), or select Cancel Macro from the Macro menu. 
1636 --------------
1637 MACRO LANGUAGE
1638 --------------
1640   Macros can be called from Macro menu commands, window background menu 
1641   commands, within the smart-indent framework, and from the .neditmacro file. 
1642   Macro menu and window background menu commands are defined under Preferences 
1643   -> Default Settings -> Customize Menus. Help on creating items in these 
1644   menus can be found in the section, Help -> Customizing -> Preferences. The 
1645   .neditmacro file is a file of macro commands and definitions which you can 
1646   create in your home directory, and which NEdit will automatically load when 
1647   it is first started. 
1649   NEdit's macro language is a simple interpreter with integer arithmetic, 
1650   dynamic strings, and C-style looping constructs (very similar to the 
1651   procedural portion of the Unix awk program). From the macro language, you 
1652   can call the same action routines which are bound to keyboard keys and menu 
1653   items, as well additional subroutines for accessing and manipulating editor 
1654   data, which are specific to the macro language (these are listed in the 
1655   sections titled "Macro Subroutines", and "Action_Routines_"). 
1658   SYNTAX
1660   An NEdit macro language program consists of a list of statements, each 
1661   terminated by a newline. Groups of statements which are executed together 
1662   conditionally, such as the body of a loop, are surrounded by curly braces 
1663   "{}". 
1665   Blank lines and comments are also allowed. Comments begin with a "#" and end 
1666   with a newline, and can appear either on a line by themselves, or at the end 
1667   of a statement. 
1669   Statements which are too long to fit on a single line may be split across 
1670   several lines, by placing a backslash "\" character at the end of each line 
1671   to be continued. 
1674   DATA TYPES
1676   The NEdit macro language recognizes only three data types, dynamic character 
1677   strings, integer values and associative arrays. In general strings and 
1678   integers can be used interchangeably. If a string represents an integer 
1679   value, it can be used as an integer. Integers can be compared and 
1680   concatenated with strings. Arrays may contain integers, strings, or arrays. 
1681   Arrays are stored key/value pairs. Keys are always stored as strings. 
1684   Integer Constants
1686   Integers are non-fractional numbers in the range of -2147483647 to 
1687   2147483647. Integer constants must be in decimal. For example: 
1689     a = -1
1690     b = 1000
1693   Character String Constants
1695   Character string constants are enclosed in double quotes. For example: 
1697      a = "a string"
1698      dialog("Hi there!", "Dismiss")
1700   Strings may also include C-language style escape sequences: 
1702      \\ Backslash     \t Tab              \f Form feed
1703      \" Double quote  \b Backspace        \a Alert
1704      \n Newline       \r Carriage return  \v Vertical tab
1706   For example, to send output to the terminal from which NEdit was started, a 
1707   newline character is necessary because, like printf, t_print requires 
1708   explicit newlines, and also buffers its output on a per-line basis: 
1710      t_print("a = " a "\n")
1713   VARIABLES
1715   Variable names must begin either with a letter (local variables), or a $ 
1716   (global variables). Beyond the first character, variables may also contain 
1717   numbers and underscores `_'. Variables are called in to existence just by 
1718   setting them (no explicit declarations are necessary). 
1720   Local variables are limited in scope to the subroutine (or menu item 
1721   definition) in which they appear. Global variables are accessible from all 
1722   routines, and their values persist beyond the call which created them, until 
1723   reset. 
1726   Built-in Variables
1728   NEdit has a number of permanently defined variables, which are used to 
1729   access global editor information and information about the the window in 
1730   which the macro is executing. These are listed along with the built in 
1731   functions in the section titled "Macro Subroutines". 
1734   FUNCTIONS AND SUBROUTINES
1736   The syntax of a function or subroutine call is: 
1738      function_name(arg1, arg2, ...)
1740   where arg1, arg2, etc. represent up to 9 argument values which are passed to 
1741   the routine being called. A function or subroutine call can be on a line by 
1742   itself, as above, or if it returns a value, can be invoked within a 
1743   character or numeric expression: 
1745      a = fn1(b, c) + fn2(d)
1746      dialog("fn3 says: " fn3())
1748   Arguments are passed by value. This means that you can not return values via 
1749   the argument list, only through the function value or indirectly through 
1750   agreed-upon global variables. 
1753   Built-in Functions
1755   NEdit has a wide range of built in functions which can be called from the 
1756   macro language. These routines are divided into two classes, macro-language 
1757   functions, and editor action routines. Editor action routines are more 
1758   flexible, in that they may be called either from the macro language, or 
1759   bound directly to keys via translation tables. They are also limited, 
1760   however, in that they can not return values. Macro language routines can 
1761   return values, but can not be bound to keys in translation tables. 
1763   Nearly all of the built-in subroutines operate on an implied window, which 
1764   is initially the window from which the macro was started. To manipulate the 
1765   contents of other windows, use the focus_window subroutine to change the 
1766   focus to the ones you wish to modify. focus_window can also be used to 
1767   iterate over all of the currently open windows, using the special keyword 
1768   names, "last" and "next". 
1770   For backwards compatibility, hyphenated action routine names are allowed, 
1771   and most of the existing action routines names which contain underscores 
1772   have an equivalent version containing hyphens ('-') instead of underscores. 
1773   Use of these names is discouraged. The macro parser resolves the ambiguity 
1774   between '-' as the subtraction/negation operator, and - as part of an action 
1775   routine name by assuming subtraction unless the symbol specifically matches 
1776   an action routine name. 
1779   User Defined Functions
1781   Users can define their own macro subroutines, using the define keyword: 
1783      define subroutine_name {
1784         < body of subroutine >
1785      }
1787   Macro definitions can not appear within other definitions, or within macro 
1788   menu item definitions (usually they are found in the .neditmacro file). 
1790   The arguments with which a user-defined subroutine or function was invoked, 
1791   are presented as $1, $2, ... , $9. The number of arguments can be read from 
1792   $n_args. 
1794   To return a value from a subroutine, and/or to exit from the subroutine 
1795   before the end of the subroutine body, use the return statement: 
1797      return <value to return>
1800   OPERATORS AND EXPRESSIONS
1802   Operators have the same meaning and precedence that they do in C, except for 
1803   ^, which raises a number to a power (y^x means y to the x power), rather 
1804   than bitwise exclusive OR. The table below lists operators in decreasing 
1805   order of precedence. 
1807      Operators                Associativity
1808      ()
1809      ^                        right to left
1810      - ! ++ --                (unary)
1811      * / %                    left to right
1812      + -                      left to right
1813      > >= < <= == !=          left to right
1814      &                        left to right
1815      |                        left to right
1816      &&                       left to right
1817      ||                       left to right
1818      (concatenation)          left to right
1819      = += -= *= /= %=, &= |=  right to left
1821   The order in which operands are evaluated in an expression is undefined, 
1822   except for && and ||, which like C, evaluate operands left to right, but 
1823   stop when further evaluation would no longer change the result. 
1826   Numerical Operators
1828   The numeric operators supported by the NEdit macro language are listed 
1829   below: 
1831      + addition
1832      - subtraction or negation
1833      * multiplication
1834      / division
1835      % modulo
1836      ^ power
1837      & bitwise and
1838      | bitwise or
1840   Increment (++) and decrement (--) operators can also be appended or 
1841   prepended to variables within an expression. Prepended increment/decrement 
1842   operators act before the variable is evaluated. Appended increment/decrement 
1843   operators act after the variable is evaluated. 
1846   Logical and Comparison Operators
1848   Logical operations produce a result of 0 (for false) or 1 (for true). In a 
1849   logical operation, any non-zero value is recognized to mean true. The 
1850   logical and comparison operators allowed in the NEdit macro language are 
1851   listed below: 
1853      && logical and
1854      || logical or
1855      !  not
1856      >  greater
1857      <  less
1858      >= greater or equal
1859      <= less or equal
1860      == equal (integers and/or strings)
1861      != not equal (integers and/or strings)
1864   Character String Operators
1866   The "operator" for concatenating two strings is the absence of an operator. 
1867   Adjoining character strings with no operator in between means concatenation: 
1869      d = a b "string" c
1870      t_print("the value of a is: " a)
1872   Comparison between character strings is done with the == and != operators, 
1873   (as with integers). There are a number of useful built-in routines for 
1874   working with character strings, which are listed in the section called 
1875   "Macro Subroutines". 
1878   Arrays and Array Operators
1880   Arrays may contain either strings, integers, or other arrays. Arrays are 
1881   associative, which means that they relate two pieces of information, the key 
1882   and the value. The key is always a string; if you use integers they are 
1883   converted to strings. 
1885   To determine if a given key is in an array, use the in keyword. 
1887       if ("6" in x)
1888           <body>
1890   If the left side of the in keyword is an array, the result is true if every 
1891   key in the left array is in the right array. Array values are not compared. 
1893   To iterate through all the keys of an array use the for looping construct. 
1894   Keys are not guaranteed in any particular order: 
1896       for (aKey in x)
1897           <body>
1899   Elements can be removed from an array using the delete command: 
1901       delete x[3] # deletes element with key 3
1902       delete x[]  # deletes all elements
1904   The number of elements in an array can be determined by referencing the 
1905   array with no indices: 
1907       dialog("array x has " x[] " elements", "OK")
1909   Arrays can be combined with some operators. All the following operators only 
1910   compare the keys of the arrays. 
1912       result = x + y   (Merge arrays)
1914   The 'result' is a new array containing keys from both x and y. If duplicates 
1915   are present values from y are used. 
1917       result = x - y   (Remove keys)
1919   The 'result' is a new array containing all keys from x that are not in y. 
1921       result = x & y   (Common keys)
1923   The 'result' is a new array containing all keys which are in both x and y. 
1924   The values from y are used. 
1926       result = x | y   (Unique keys)
1928   The 'result' is a new array containing keys which exist in either x or y, 
1929   but not both. 
1931   When duplicate keys are encountered using the + and & operators, the values 
1932   from the array on the right side of the operators are used for the result. 
1933   All of the above operators are array only, meaning both the left and right 
1934   sides of the operator must be arrays. The results are also arrays. 
1936   Array keys can also contain multiple dimensions: 
1938       x[1, 1, 1] = "string"
1940   These are used in the expected way, e.g.: 
1942       for (i = 1; i < 3; i++)
1943       {
1944           for (j = 1; j < 3; j++)
1945           {
1946               x[i, j] = k++
1947           }
1948       }
1950   gives the following array: 
1952       x[1, 1] = 0
1953       x[1, 2] = 1
1954       x[2, 1] = 2
1955       x[2, 2] = 3
1957   Internally all indices are part of one string, separated by the string 
1958   $sub_sep (ASCII 0x18). The first key in the above example is in fact 
1960       ["1" $sub_sep "1"]
1962   If you need to extract one of the keys, you can use split(), using $sub_sep 
1963   as the separator. 
1965   You can also check for the existence of multi-dimensional array by looking 
1966   for $sub_sep in the key. 
1968   Last, you need $sub_sep if you want to use the 'in' keyword. 
1970       if ((1,2) in myArray)
1971       {..}
1973   doesn't work, but 
1975       if (("1" $sub_sep "2") in myArray)
1976       {..}
1978   does work. 
1981   LOOPING AND CONDITIONALS
1983   NEdit supports looping constructs: for and while, and conditional 
1984   statements: if and else, with essentially the same syntax as C: 
1986      for (<init>, ...; <condition>; <increment>, ...) <body>
1988      while (<condition>) <body>
1990      if (<condition>) <body>
1992      if (<condition>) <body> else <body>
1994   <body>, as in C, can be a single statement, or a list of statements enclosed 
1995   in curly braces ({}). <condition> is an expression which must evaluate to 
1996   true for the statements in <body> to be executed. for loops may also contain 
1997   initialization statements, <init>, executed once at the beginning of the 
1998   loop, and increment/decrement statements (or any arbitrary statement), which 
1999   are executed at the end of the loop, before the condition is evaluated 
2000   again. 
2002   Examples: 
2004     for (i=0; i<100; i++)
2005        j = i * 2
2007     for (i=0, j=20; i<20; i++, j--) {
2008        k = i * j
2009        t_print(i, j, k)
2010     }
2012     while (k > 0)
2013     {
2014        k = k - 1
2015        t_print(k)
2016     }
2018     for (;;) {
2019        if (i-- < 1)
2020            break
2021     }
2023   Loops may contain break and continue statements. A break statement causes an 
2024   exit from the innermost loop, a continue statement transfers control to the 
2025   end of the loop. 
2027 -----------------
2028 MACRO SUBROUTINES
2029 -----------------
2032   BUILT IN VARIABLES
2034   These variables are read-only and can not be changed. 
2036 $active_pane
2037   Index of the current pane. 
2039 $auto_indent
2040   Contains the current preference for auto indent. Can be "off", "on" or 
2041   "auto". 
2043 $cursor
2044   Position of the cursor in the current window. 
2046 $column
2047   Column number of the cursor position in the current window. 
2049 $display_width
2050   Width of the current pane in pixels. 
2052 $em_tab_dist
2053   If tab emulation is turned on in the Tabs... dialog of the Preferences menu, 
2054   value is the distance between emulated tab stops. If tab emulation is turned 
2055   off, value is -1. 
2057 $empty_array
2058   An array with no elements. This can be used to initialize an array to an 
2059   empty state. 
2061 $file_format
2062   Current newline format that the file will be saved with. Can be "unix", 
2063   "dos" or "macintosh". 
2065 $file_name
2066   Name of the file being edited in the current window, stripped of directory 
2067   component. 
2069 $file_path
2070   Directory component of file being edited in the current window. 
2072 $font_name
2073   Contains the current plain text font name. 
2075 $font_name_bold
2076   Contains the current bold text font name. 
2078 $font_name_bold_italic
2079   Contains the current bold-italic text font name. 
2081 $font_name_italic
2082   Contains the current italic text font name. 
2084 $highlight_syntax
2085   Whether syntax highlighting is turned on. 
2087 $incremental_backup
2088   Contains 1 if incremental auto saving is on, otherwise 0. 
2090 $incremental_search_line
2091   Has a value of 1 if the preference is selected to always show the 
2092   incremental search line, otherwise 0. 
2094 $language_mode
2095   Name of language mode set in the current window. 
2097 $line
2098   Line number of the cursor position in the current window. 
2100 $locked
2101   True if the file has been locked by the user. 
2103 $make_backup_copy
2104   Has a value of 1 if original file is kept in a backup file on save, 
2105   otherwise 0. 
2107 $max_font_width
2108   The maximum font width of all the active styles. Syntax highlighting styles 
2109   are only considered if syntax highlighting is turned on. 
2111 $min_font_width
2112   The minimum font width of all the active styles. Syntax highlighting styles 
2113   are only considered if syntax highlighting is turned on. 
2115 $modified
2116   True if the file in the current window has been modified and the 
2117   modifications have not yet been saved. 
2119 $n_display_lines
2120   The number of lines visible in the currently active pane. 
2122 $n_panes
2123   The number of panes in the current window. 
2125 $overtype_mode
2126   True if in Overtype mode. 
2128 $read_only
2129   True if the file is read only. 
2131 $selection_start, $selection_end   
2132   Beginning and ending positions of the primary selection in the current 
2133   window, or -1 if there is no text selected in the current window. 
2135 $selection_left, $selection_right  
2136   Left and right character offsets of the rectangular (primary) selection in 
2137   the current window, or -1 if there is no selection or it is not rectangular. 
2139 $server_name
2140   Name of the current NEdit server. 
2142 $show_line_numbers
2143   Whether line numbers are shown next to the text. 
2145 $show_matching
2146   Contains the current preference for showing matching pairs, such as "[]" and 
2147   "{}" pairs. Can be "off", "delimiter", or "range". 
2149 $statistics_line
2150   Has a value of 1 if the statistics line is shown, otherwise 0. 
2152 $sub_sep
2153   Contains the value of the array sub-script separation string. 
2155 $tab_dist
2156   The distance between tab stops for a hardware tab character, as set in the 
2157   Tabs... dialog of the Preferences menu. 
2159 $text_length
2160   The length of the text in the current window. 
2162 $top_line
2163   The line number of the top line of the currently active pane. 
2165 $use_tabs
2166   Whether the user is allowing the NEdit to insert tab characters to maintain 
2167   spacing in tab emulation and rectangular dragging operations. (The setting 
2168   of the "Use tab characters in padding and emulated tabs" button in the 
2169   Tabs... dialog of the Preferences menu.) 
2171 $wrap_margin
2172   The right margin in the current window for text wrapping and filling. 
2174 $wrap_text
2175   The current wrap text mode. Values are "none", "auto" or "continuous". 
2178   BUILT-IN SUBROUTINES
2180 append_file( string, filename )
2181   Appends a string to a named file. Returns 1 on successful write, or 0 if 
2182   unsuccessful. 
2184 beep()
2185   Ring the bell. 
2187 clipboard_to_string()  
2188   Returns the contents of the clipboard as a macro string. Returns empty 
2189   string on error. 
2191 dialog( message, btn_1_label, btn_2_label, ... )  
2192   Pop up a dialog for querying and presenting information to the user. First 
2193   argument is a string to show in the message area of the dialog. Up to eight 
2194   additional optional arguments represent labels for buttons to appear along 
2195   the bottom of the dialog. Returns the number of the button pressed (the 
2196   first button is number 1), or 0 if the user closed the dialog via the window 
2197   close box. 
2199 focus_window( window_name )  
2200   Sets the window on which subsequent macro commands operate. window_name can 
2201   be either a fully qualified file name, or one of "last" for the last window 
2202   created, or "next" for the next window in the chain from the currently 
2203   focused window (the first window being the one returned from calling 
2204   focus_window("last"). Returns the name of the newly-focused window, or an 
2205   empty string if the requested window was not found. 
2207 get_character( position )  
2208   Returns the single character at the position indicated by the first argument 
2209   to the routine from the current window. 
2211 get_range( start, end )  
2212   Returns the text between a starting and ending position from the current 
2213   window. 
2215 get_selection()  
2216   Returns a string containing the text currently selected by the primary 
2217   selection either from the current window (no keyword), or from anywhere on 
2218   the screen (keyword "any"). 
2220 getenv( name )
2221   Gets the value of an environment variable. 
2223 length( string )
2224   Returns the length of a string 
2226 list_dialog( message, text, btn_1_label, btn_2_label, ... )  
2227   Pop up a dialog for prompting the user to choose a line from the given text 
2228   string. The first argument is a message string to be used as a title for the 
2229   fixed text describing the list. The second string provides the list data: 
2230   this is a text string in which list entries are separated by newline 
2231   characters. Up to seven additional optional arguments represent labels for 
2232   buttons to appear along the bottom of the dialog. Returns the line of text 
2233   selected by the user as the function value (without any newline separator) 
2234   or the empty string if none was selected, and number of the button pressed 
2235   (the first button is number 1), in $list_dialog_button. If the user closes 
2236   the dialog via the window close box, the function returns the empty string, 
2237   and $list_dialog_button returns 0. 
2239 max( n1, n2, ... )
2240   Returns the maximum value of all of its arguments 
2242 min( n1, n2, ... )
2243   Returns the minimum value of all of its arguments 
2245 read_file( filename )  
2246   Reads the contents of a text file into a string. On success, returns 1 in 
2247   $read_status, and the contents of the file as a string in the subroutine 
2248   return value. On failure, returns the empty string "" and an 0 $read_status. 
2250 replace_in_string( string, search_for, replace_with [, type] )  
2251   Replaces all occurrences of a search string in a string with a replacement 
2252   string. Arguments are 1: string to search in, 2: string to search for, 3: 
2253   replacement string. Argument 4 is an optional search type, one of "literal", 
2254   "case", "word", "caseWord", "regex", or "regexNoCase". The default search 
2255   type is "literal". Returns a new string with all of the replacements done, 
2256   or an empty string ("") if no occurrences were found. 
2258 replace_range( start, end, string )  
2259   Replaces all of the text in the current window between two positions. 
2261 replace_selection( string )  
2262   Replaces the primary-selection selected text in the current window. 
2264 replace_substring( string, start, end, replace_with )  
2265   Replacing a substring between two positions in a string within another 
2266   string. 
2268 search( search_for, start [, search_type, wrap, direction] )  
2269   Searches silently in a window without dialogs, beeps, or changes to the 
2270   selection. Arguments are: 1: string to search for, 2: starting position. 
2271   Optional arguments may include the strings: "wrap" to make the search wrap 
2272   around the beginning or end of the string, "backward" or "forward" to change 
2273   the search direction ("forward" is the default), "literal", "case", "word", 
2274   "caseWord", "regex", or "regexNoCase" to change the search type (default is 
2275   "literal"). Returns the starting position of the match, or -1 if nothing 
2276   matched. Also returns the ending position of the match in $search_end. 
2278 search_string( string, search_for, start [, search_type, direction] ) 
2280   Built-in macro subroutine for searching a string. Arguments are 1: string to 
2281   search in, 2: string to search for, 3: starting position. Optional arguments 
2282   may include the strings: "wrap" to make the search wrap around the beginning 
2283   or end of the string, "backward" or "forward" to change the search direction 
2284   ("forward" is the default), "literal", "case", "word", "caseWord", "regex", 
2285   or "regexNoCase" to change the search type (default is "literal"). Returns 
2286   the starting position of the match, or -1 if nothing matched. Also returns 
2287   the ending position of the match in $search_end. 
2289 select( start, end )  
2290   Selects (with the primary selection) text in the current buffer between a 
2291   starting and ending position. 
2293 select_rectangle( start, end, left, right )  
2294   Selects a rectangular area of text between a starting and ending position, 
2295   and confined horizontally to characters displayed between positions "left", 
2296   and "right". 
2298 set_cursor_pos( position )
2299   Set the cursor position for the current window. 
2301 shell_command( command, input_string )  
2302   Executes a shell command, feeding it input from input_string. On completion, 
2303   output from the command is returned as the function value, and the command's 
2304   exit status is returned in the global variable $shell_cmd_status. 
2306 split(string, separation_string [, search_type])
2307   Splits a string using the separator specified. Optionally the search_type 
2308   argument can specify how the separation_string is interpreted. The default 
2309   is "literal". The returned value is an array with keys beginning at 0. 
2311 string_dialog( message, btn_1_label, btn_2_label, ... )  
2312   Pops up a dialog prompting the user to enter information. The first argument 
2313   is a string to show in the message area of the dialog. Up to nine additional 
2314   optional arguments represent labels for buttons to appear along the bottom 
2315   of the dialog. Returns the string entered by the user as the function value, 
2316   and number of the button pressed (the first button is number 1), in 
2317   $string_dialog_button. If the user closes the dialog via the window close 
2318   box, the function returns the empty string, and $string_dialog_button 
2319   returns 0. 
2321 string_compare(string1, string2 [, consider-case])
2322   Compare two strings and return 0 if they are equal, -1 if string1 is less 
2323   than string2 or 1 if string1 is greater than string2. The values for the 
2324   optional consider-case argument is either "case" or "nocase". The default is 
2325   to do a case sensitive comparison. 
2327 string_to_clipboard( string )  
2328   Copy the contents of a macro string to the clipboard. 
2330 substring( string, start, end )  
2331   Returns the portion of a string between a starting and ending position. 
2333 t_print( string1, string2, ... )  
2334   Writes strings to the terminal (stdout) from which NEdit was started. 
2336 tolower( string )
2337   Return an all lower-case version of string. 
2339 toupper( string )
2340   Return an all upper-case version of string. 
2342 write_file( string, filename )  
2343   Writes a string (parameter 1) to a file named in parameter 2. Returns 1 on 
2344   successful write, or 0 if unsuccessful. 
2346 ---------------
2347 ACTION ROUTINES
2348 ---------------
2350   All of the editing capabilities of NEdit are represented as a special type 
2351   of subroutine, called an action routine, which can be invoked from both 
2352   macros and translation table entries (see "Key Binding" in the Customizing 
2353   section of the Help menu). 
2356   ACTIONS REPRESENTING MENU COMMANDS
2358     File Menu                 Search Menu
2359     -----------------------   -------------------------
2360     new()                     find()
2361     open()                    find_dialog()
2362     open_dialog()             find_again()
2363     open_selected()           find_selection()
2364     close()                   replace()
2365     save()                    replace_dialog()
2366     save_as()                 replace_all()
2367     save_as_dialog()          replace_in_selection()
2368     revert_to_saved()         replace_again()
2369     include_file()            goto_line_number()
2370     include_file_dialog()     goto_line_number_dialog()
2371     load_macro_file()         goto_selected()
2372     load_macro_file_dialog()  mark()
2373     load_tags_file()          mark_dialog()
2374     load_tags_file_dialog()   goto_mark()
2375     unload_tags_file()        goto_mark_dialog()
2376     print()                   goto_matching()
2377     print_selection()         select_to_matching()
2378     exit()                    find_definition()
2380     Edit Menu                 Shell Menu
2381     -----------------------   -------------------------
2382     undo()                    filter_selection_dialog()
2383     redo()                    filter_selection()
2384     delete()                  execute_command()
2385     select_all()              execute_command_dialog()
2386     shift_left()              execute_command_line()
2387     shift_left_by_tab()       shell_menu_command()
2388     shift_right()
2389     shift_right_by_tab()      Macro Menu
2390     uppercase()               -------------------------
2391     lowercase()               macro_menu_command()
2392     fill_paragraph()          repeat_macro()
2393     control_code_dialog()     repeat_dialog()
2395                               Windows Menu
2396                               -------------------------
2397                               split_window()
2398                               close_pane()
2400   An action representing a menu command is named the same as its corresponding 
2401   menu item except that all punctuation is removed, all letters are changed to 
2402   lower case, and spaces are replaced with underscores. To present a dialog to 
2403   ask the user for input, use the actions with the `_dialog` suffix. Actions 
2404   without the `_dialog` suffix take the information from the routine's 
2405   arguments (see below). 
2408   MENU ACTION ROUTINE ARGUMENTS
2410   Arguments are text strings enclosed in quotes. Below are the menu action 
2411   routines which take arguments. Optional arguments are enclosed in []. 
2413     close( ["prompt" | "save" | "nosave"] )
2415     execute_command( shell-command )
2417     filter_selection( shell-command )
2419     find( search-string [, search-direction] [, search-type] 
2420        [, search-wrap] )
2422     find_again( [search-direction] [, search-wrap] )
2424     find_definition( [tag-name] )
2426     find_dialog( [search-direction] [, search-type] 
2427        [, keep-dialog] )
2429     find_selection( [search-direction] [, search-wrap] 
2430        [, non-regex-search-type] )
2432     goto_line_number( [line-number] )
2434     goto_mark( mark-letter )
2436     include_file( filename )
2438     load_tags_file( filename )
2440     macro_menu_command( macro-menu-item-name )
2442     mark( mark-letter )
2444     open( filename )
2446     replace( search-string, replace-string, 
2447        [, search-direction] [, search-type] [, search-wrap] )
2449     replace_again( [search-direction] [, search-wrap] )
2451     replace_dialog( [search-direction] [, search-type]
2452        [, keep-dialog] )
2454     replace_in_selection( search-string, 
2455        replace-string [, search-type] )
2457     save_as( filename )
2459     shell_menu_command( shell-menu-item-name )
2461     unload_tags_file( filename )
2463     ----------- Some notes on argument types above -----------
2465     filename       Path names are relative to the directory from
2466                    which NEdit was started. Shell interpreted 
2467                    wildcards and `~' are not expanded.
2469     keep-dialog    Either "keep" or "nokeep".
2471     mark-letter    The mark command limits users to single 
2472                    letters. Inside of macros, numeric marks are
2473                    allowed, which won't interfere with marks set
2474                    by the user.
2476     macro-menu-item-name
2477                    Name of the command exactly as specified in 
2478                    the Macro Menu dialogs.
2480     non-regex-search-type 
2481                    Either "literal", "case", "word", or 
2482                    "caseWord".
2484     search-direction
2485                    Either "forward" or "backward".
2487     search-type    Either "literal", "case", "word", 
2488                    "caseWord", "regex", or "regexNoCase".
2490     search-wrap    Either "wrap" or "nowrap".
2492     shell-menu-item-name
2493                    Name of the command exactly as specified in 
2494                    the Shell Menu dialogs.
2497   WINDOW PREFERENCES ACTIONS
2499 set_auto_indent( "off" | "on" | "smart" )
2500   Set auto indent mode for the current window. 
2502 set_em_tab_dist( em-tab-distance )
2503   Set the emulated tab size. An em-tab-distance value of 0 or -1 translates to 
2504   no emulated tabs. Em-tab-distance must be smaller than 1000. 
2506 set_fonts( font-name, italic-font-name, bold-font-name, bold-italic-font-name )
2507   Set all the fonts used for the current window. 
2509 set_highlight_syntax( [0 | 1] )
2510   Set syntax highlighting mode for the current window. A value of 0 turns it 
2511   off and a value of 1 turns it on. If no parameters are supplied the option 
2512   is toggled. 
2514 set_incremental_backup( [0 | 1] )
2515   Set incremental backup mode for the current window. A value of 0 turns it 
2516   off and a value of 1 turns it on. If no parameters are supplied the option 
2517   is toggled. 
2519 set_incremental_search_line( [0 | 1] )
2520   Show or hide the incremental search line for the current window. A value of 
2521   0 turns it off and a value of 1 turns it on. If no parameters are supplied 
2522   the option is toggled. 
2524 set_language_mode( language-mode )
2525   Set the language mode for the current window. If the language mode is "" or 
2526   unrecognized, it will be set to Plain. 
2528 set_locked( [0 | 1] )
2529   This only affects the locked status of a file, not it's read-only status. 
2530   Permissions are NOT changed. A value of 0 turns it off and a value of 1 
2531   turns it on. If no parameters are supplied the option is toggled. 
2533 set_make_backup_copy( [0 | 1] )
2534   Set whether backup copies are made during saves for the current window. A 
2535   value of 0 turns it off and a value of 1 turns it on. If no parameters are 
2536   supplied the option is toggled. 
2538 set_overtype_mode( [0 | 1] )
2539   Set overtype mode for the current window. A value of 0 turns it off and a 
2540   value of 1 turns it on. If no parameters are supplied the option is toggled. 
2542 set_show_line_numbers( [0 | 1] )
2543   Show or hide line numbers for the current window. A value of 0 turns it off 
2544   and a value of 1 turns it on. If no parameters are supplied the option is 
2545   toggled. 
2547 set_show_matching( "off" | "delimiter" | "range" )
2548   Set show matching (...) mode for the current window. 
2550 set_statistics_line( [0 | 1] )
2551   Show or hide the statistics line for the current window. A value of 0 turns 
2552   it off and a value of 1 turns it on. If no parameters are supplied the 
2553   option is toggled. 
2555 set_tab_dist( tab-distance )
2556   Set the size of hardware tab spacing. Tab-distance must must be a value 
2557   greater than 0 and no greater than 20. 
2559 set_use_tabs( [0 | 1] )
2560   Set whether tabs are used for the current window. A value of 0 turns it off 
2561   and a value of 1 turns it on. If no parameters are supplied the option is 
2562   toggled. 
2564 set_wrap_margin( wrap-width )
2565   Set the wrap width for text wrapping of the current window. A value of 0 
2566   means to wrap at window width. 
2568 set_wrap_text( "none" | "auto" | "continuous" )
2569   Set wrap text mode for the current window. 
2572   KEYBOARD-ONLY ACTIONS
2574   In addition to the arguments listed in the call descriptions below, any 
2575   routine involving cursor movement can take the argument "extend", meaning, 
2576   adjust the primary selection to the new cursor position. Routines which take 
2577   the "extend" argument as well as mouse dragging operations for both primary 
2578   and secondary selections can take the optional keyword "rect", meaning, make 
2579   the selection rectangular. Any routine that accepts the "scrollbar" argument 
2580   will move the display but not the cursor or selection. Routines that accept 
2581   the "nobell" argument will fail silently without beeping, when that argument 
2582   is supplied. 
2584 backward_character( ["nobell"] )
2585   Moves the cursor one character to the left. 
2587 backward_paragraph(["nobell"] )
2588   Moves the cursor to the beginning of the paragraph, or if the cursor is 
2589   already at the beginning of a paragraph, moves the cursor to the beginning 
2590   of the previous paragraph. Paragraphs are defined as regions of text 
2591   delimited by one or more blank lines. 
2593 backward_word( ["nobell"] )
2594   Moves the cursor to the beginning of a word, or, if the cursor is already at 
2595   the beginning of a word, moves the cursor to the beginning of the previous 
2596   word. Word delimiters are user-settable, and defined by the X resource 
2597   wordDelimiters. 
2599 beginning_of_file( ["scrollbar"] )
2600   Moves the cursor to the beginning of the file. 
2602 beginning_of_line()
2603   Moves the cursor to the beginning of the line. 
2605 beginning_of_selection()
2606   Moves the cursor to the beginning of the selection without disturbing the 
2607   selection. 
2609 copy_clipboard()
2610   Copies the current selection to the clipboard. 
2612 copy_primary()
2613   Copies the primary selection to the cursor. 
2615 copy_to()
2616   If a secondary selection exists, copies the secondary selection to the 
2617   cursor. If no secondary selection exists, copies the primary selection to 
2618   the pointer location. 
2620 copy_to_or_end_drag()
2621   Completes either a secondary selection operation, or a primary drag. If the 
2622   user is dragging the mouse to adjust a secondary selection, the selection is 
2623   copied and either inserted at the cursor location, or, if pending-delete is 
2624   on and a primary selection exists in the window, replaces the primary 
2625   selection. If the user is dragging a block of text (primary selection), 
2626   completes the drag operation and leaves the text at it's current location. 
2628 cut_clipboard()
2629   Deletes the text in the primary selection and places it in the clipboard. 
2631 cut_primary()
2632   Copies the primary selection to the cursor and deletes it at its original 
2633   location. 
2635 delete_selection()
2636   Deletes the contents of the primary selection. 
2638 delete_next_character( ["nobell"] )
2639   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2640   character following the cursor. 
2642 delete_previous_character( ["nobell"] )
2643   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2644   character before the cursor. 
2646 delete_next_word( ["nobell"] )
2647   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2648   word following the cursor. 
2650 delete_previous_word( ["nobell"] )
2651   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2652   word before the cursor. 
2654 delete_to_start_of_line( ["nobell"] )
2655   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2656   characters between the cursor and the start of the line. 
2658 delete_to_end_of_line( ["nobell"] )
2659   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2660   characters between the cursor and the end of the line. 
2662 deselect_all()
2663   De-selects the primary selection. 
2665 end_of_file( ["scrollbar"] )
2666   Moves the cursor to the end of the file. 
2668 end_of_line()
2669   Moves the cursor to the end of the line. 
2671 end_of_selection()
2672   Moves the cursor to the end of the selection without disturbing the 
2673   selection. 
2675 exchange( ["nobell"] )
2676   Exchange the primary and secondary selections. 
2678 extend_adjust()
2679   Attached mouse-movement events to begin a selection between the cursor and 
2680   the mouse, or extend the primary selection to the mouse position. 
2682 extend_end()
2683   Completes a primary drag-selection operation. 
2685 extend_start()
2686   Begins a selection between the cursor and the mouse. A drag-selection 
2687   operation can be started with either extend_start or grab_focus. 
2689 focus_pane( [relative-pane] | [positive-index] | [negative-index] )
2690   Move the focus to the requested pane. Arguments can be specified in the form 
2691   of a relative-pane ("first", "last", "next", "previous"), a positive-index 
2692   (numbers greater than 0, 1 is the same as "first") or a negative-index 
2693   (numbers less than 0, -1 is the same as "last"). 
2695 forward_character()
2696   Moves the cursor one character to the right. 
2698 forward_paragraph( ["nobell"] )
2699   Moves the cursor to the beginning of the next paragraph. Paragraphs are 
2700   defined as regions of text delimited by one or more blank lines. 
2702 forward_word( ["tail"] ["nobell"] )
2703   Moves the cursor to the beginning of the next word. Word delimiters are 
2704   user-settable, and defined by the X resource wordDelimiters. If the "tail" 
2705   argument is supplied the cursor will be moved to the end of the current word 
2706   or the end of the next word, if the cursor is between words. 
2708 grab_focus()
2709   Moves the cursor to the mouse pointer location, and prepares for a possible 
2710   drag-selection operation (bound to extend_adjust), or multi-click operation 
2711   (a further grab_focus action). If a second invocation of grab focus follows 
2712   immediately, it selects a whole word, or a third, a whole line. 
2714 insert_string( "string" )
2715   If pending delete is on and the cursor is inside the selection, replaces the 
2716   selection with "string". Otherwise, inserts "string" at the cursor location. 
2718 key_select( "direction" [,"nobell"] )
2719   Moves the cursor one character in "direction" ("left", "right", "up", or 
2720   "down") and extends the selection. Same as 
2721   forward/backward-character("extend"), or process-up/down("extend"), for 
2722   compatibility with previous versions. 
2724 move-destination()
2725   Moves the cursor to the pointer location without disturbing the selection. 
2726   (This is an unusual way of working. We left it in for compatibility with 
2727   previous versions, but if you actually use this capability, please send us 
2728   some mail, otherwise it is likely to disappear in the future. 
2730 move_to()
2731   If a secondary selection exists, deletes the contents of the secondary 
2732   selection and inserts it at the cursor, or if pending-delete is on and there 
2733   is a primary selection, replaces the primary selection. If no secondary 
2734   selection exists, moves the primary selection to the pointer location, 
2735   deleting it from its original position. 
2737 move_to_or_end_drag()
2738   Completes either a secondary selection operation, or a primary drag. If the 
2739   user is dragging the mouse to adjust a secondary selection, the selection is 
2740   deleted and either inserted at the cursor location, or, if pending-delete is 
2741   on and a primary selection exists in the window, replaces the primary 
2742   selection. If the user is dragging a block of text (primary selection), 
2743   completes the drag operation and deletes the text from it's current 
2744   location. 
2746 newline()
2747   Inserts a newline character. If Auto Indent is on, lines up the indentation 
2748   of the cursor with the current line. 
2750 newline_and_indent()
2751   Inserts a newline character and lines up the indentation of the cursor with 
2752   the current line, regardless of the setting of Auto Indent. 
2754 newline_no_indent()
2755   Inserts a newline character, without automatic indentation, regardless of 
2756   the setting of Auto Indent. 
2758 next_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2759   Moves the cursor and scroll forward one page. The parameter "stutter" moves 
2760   the cursor to the bottom of the display, unless it is already there, 
2761   otherwise it will page down. The parameter "column" will maintain the 
2762   preferred column while moving the cursor. 
2764 page_left( ["scrollbar"] ["nobell"] )
2765   Move the cursor and scroll left one page. 
2767 page_right( ["scrollbar"] ["nobell"] )
2768   Move the cursor and scroll right one page. 
2770 paste_clipboard()
2771   Insert the contents of the clipboard at the cursor, or if pending delete is 
2772   on, replace the primary selection with the contents of the clipboard. 
2774 previous_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2775   Moves the cursor and scroll backward one page. The parameter "stutter" moves 
2776   the cursor to the top of the display, unless it is already there, otherwise 
2777   it will page up. The parameter "column" will maintain the preferred column 
2778   while moving the cursor. 
2780 process_bdrag()
2781   Same as secondary_or_drag_start for compatibility with previous versions. 
2783 process_cancel()
2784   Cancels the current extend_adjust, secondary_adjust, or 
2785   secondary_or_drag_adjust in progress. 
2787 process_down( ["nobell"] )
2788   Moves the cursor down one line. 
2790 process_return()
2791   Same as newline for compatibility with previous versions. 
2793 process_shift_down( ["nobell"] )
2794   Same as process_down("extend") for compatibility with previous versions. 
2796 process_shift_up( ["nobell"] )
2797   Same as process_up("extend") for compatibility with previous versions. 
2799 process_tab()
2800   If tab emulation is turned on, inserts an emulated tab, otherwise inserts a 
2801   tab character. 
2803 process_up( ["nobell"] )
2804   Moves the cursor up one line. 
2806 raise_window([relative-window] | [positive-index] | [negative-index])
2807   Raise the current focused window to the front if no argument is supplied. 
2808   Arguments can be specified in the form of a relative-window ("first", 
2809   "last", "next", "previous"), a positive-index (numbers greater than 0, 1 is 
2810   the same as "last") or a negative-index (numbers less than 0, -1 is the same 
2811   as "first"). 
2813 scroll_down(nLines)
2814   Scroll the display down (towards the end of the file) by nLines. 
2816 scroll_left( nPixels )
2817   Scroll the display left by nPixels. 
2819 scroll_right( nPixels )
2820   Scroll the display right by nPixels. 
2822 scroll_up( nLines )
2823   Scroll the display up (towards the beginning of the file) by nLines. 
2825 scroll_to_line( lineNum )
2826   Scroll to position line number lineNum at the top of the pane. The first 
2827   line of a file is line 1. 
2829 secondary_adjust()
2830   Attached mouse-movement events to extend the secondary selection to the 
2831   mouse position. 
2833 secondary_or_drag_adjust()
2834   Attached mouse-movement events to extend the secondary selection, or 
2835   reposition the primary text being dragged. Takes two optional arguments, 
2836   "copy", and "overlay". "copy" leaves a copy of the dragged text at the site 
2837   at which the drag began. "overlay" does the drag in overlay mode, meaning 
2838   the dragged text is laid on top of the existing text, obscuring and 
2839   ultimately deleting it when the drag is complete. 
2841 secondary_or_drag_start()
2842   To be attached to a mouse down event. Begins drag selecting a secondary 
2843   selection, or dragging the contents of the primary selection, depending on 
2844   whether the mouse is pressed inside of an existing primary selection. 
2846 secondary_start()
2847   To be attached to a mouse down event. Begin drag selecting a secondary 
2848   selection. 
2850 select_all()
2851   Select the entire file. 
2853 self_insert()
2854   To be attached to a key-press event, inserts the character equivalent of the 
2855   key pressed. 
2858 ===========
2859 CUSTOMIZING
2860 ===========
2862 -----------------
2863 CUSTOMIZING NEDIT
2864 -----------------
2866   NEdit can be customized many different ways. The most important 
2867   user-settable options are presented in the Preferences menu, including all 
2868   options that users might need to change during an editing session. Options 
2869   set in the Default Settings sub-menu of the Preferences menu can be 
2870   preserved between sessions by selecting Save Defaults, which writes a file 
2871   called .nedit in the user's home directory. See the section titled 
2872   "Preferences" for more details. 
2874   User defined commands can be added to NEdit's Shell, Macro, and window 
2875   background menus. Dialogs for creating items in these menus can be found 
2876   under Customize Menus in the Default Settings sub menu of the Preferences 
2877   menu. 
2879   For users who depend on NEdit every day and want to tune every excruciating 
2880   detail, there are also X resources for tuning a vast number of such details, 
2881   down to the color of each individual button. See the section "X Resources" 
2882   for more information, as well as a list of selected resources. 
2884   The most common reason customizing your X resources for NEdit, however, is 
2885   key binding. While limited key binding can be done through Preferences 
2886   settings (Preferences -> Default Settings -> Customize Menus), you can 
2887   really only add keys this way, and each key must have a corresponding menu 
2888   item. Any significant changes to key binding should be made via the 
2889   Translations resource and menu accelerator resources. The sections titled 
2890   "Key Binding" and "X Resources" have more information. 
2892 -----------
2893 PREFERENCES
2894 -----------
2896   The Preferences menu allows you to set options for both the current editing 
2897   window, and default values for newly created windows and future NEdit 
2898   sessions. Options in the Preferences menu itself (not in the Default 
2899   Settings sub-menu) take effect immediately and refer to the current window 
2900   only. Options in the Default Settings sub-menu have no effect on the current 
2901   window, but instead provide initial settings for future windows created 
2902   using the New or Open commands. Preferences set in the Default Settings 
2903   sub-menu can also be saved in a file that is automatically read by NEdit at 
2904   startup time, by selecting Save Defaults. 
2907   PREFERENCES MENU
2909 Default Settings
2910   Menu of initial settings for future windows. Generally the same as the 
2911   options in the main part of the menu, but apply as defaults for future 
2912   windows created during this NEdit session. These settings can be saved using 
2913   the Save Defaults command below, to be loaded automatically each time NEdit 
2914   is started. 
2916 Save Defaults
2917   Save the default options as set under Default Settings for future NEdit 
2918   sessions. 
2920 Statistics Line
2921   Show the full file name, line number, and length of the file being edited. 
2923 Incremental Search Line
2924   Keep the incremental search bar (Search -> Find Incremental) permanently 
2925   displayed at the top of the window. 
2927 Show Line Numbers
2928   Display line numbers to the right of the text. 
2930 Language Mode
2931   Tells NEdit what language (if any) to assume, for selecting 
2932   language-specific features such as highlight patterns and smart indent 
2933   macros, and setting language specific preferences like word delimiters, tab 
2934   emulation, and auto-indent. See Features for Programming -> Programming with 
2935   NEdit for more information. 
2937 Auto Indent
2938   Setting Auto Indent "on" maintains a running indent (pressing the Return key 
2939   will line up the cursor with the indent level of the previous line). If 
2940   smart indent macros are available for the current language mode, smart 
2941   indent can be selected and NEdit will attempt to guess proper language 
2942   indentation for each new line. See Help -> Features for Programming -> 
2943   Automatic Indent for more information. 
2945 Wrap
2946   Choose between two styles of automatic wrapping or none. Auto Newline wrap, 
2947   wraps text at word boundaries when the cursor reaches the right margin, by 
2948   replacing the space or tab at the last word boundary with a newline 
2949   character. Continuous Wrap wraps long lines which extend past the right 
2950   margin. Continuous Wrap mode is typically used to produce files where 
2951   newlines are omitted within paragraphs, to make text filling automatic (a 
2952   kind of poor-man's word processor). Text of this style is common on Macs and 
2953   PCs but is not necessarily supported very well under Unix (except in 
2954   programs which deal with e-mail, for which it is often the format of 
2955   choice). 
2957 Wrap Margin
2958   Set margin for Auto Newline Wrap, Continuous Wrap, and Fill Paragraph. Lines 
2959   may, be wrapped at the right margin of the window, or the margin can be set 
2960   at a specific column. 
2962 Tabs
2963   Set the tab distance (number of characters between tab stops) for tab 
2964   characters, and control tab emulation and use of tab characters in padding 
2965   and emulated tabs. 
2967 Text Font...
2968   Change the font(s) used to display text (fonts for menus and dialogs must be 
2969   set using X resources for the text area of the window). See below for more 
2970   information. 
2972 Highlight Syntax
2973   If NEdit recognizes the language being edited, and highlighting patterns are 
2974   available for that language, use fonts and colors to enhance viewing of the 
2975   file. (See Help -> Features for Programming -> Syntax Highlighting for more 
2976   information. 
2978 Make Backup Copy
2979   On Save, write a backup copy of the file as it existed before the Save 
2980   command with the extension .bck (Unix only). 
2982 Incremental Backup
2983   Periodically make a backup copy of the file being edited under the name 
2984   `~filename` on Unix or `_filename` on VMS (see Crash Recovery). 
2986 Show Matching (..)
2987   Momentarily highlight matching parenthesis, brackets, and braces, or the 
2988   range between them, when one of these characters is typed, or when the 
2989   insertion cursor is positioned after it. Delimiter only highlights the 
2990   matching delimiter, while Range highlights the whole range of text between 
2991   the matching delimiters. 
2993 Overtype
2994   In overtype mode, new characters entered replace the characters in front of 
2995   the insertion cursor, rather than being inserted before them. 
2997 Read Only
2998   Lock the file against accidental modification. This temporarily prevents the 
2999   file from being modified in this NEdit session. Note that this is different 
3000   from setting the file protection. 
3003   PREFERENCES -> DEFAULT SETTINGS MENU
3005   Options in the Preferences -> Default Settings menu have the same meaning as 
3006   those in the top-level Preferences menu, except that they apply to future 
3007   NEdit windows and future NEdit sessions if saved with the Save Defaults 
3008   command. Additional options which appear in this menu are: 
3010 Language Modes
3011   Define language recognition information (for determining language mode from 
3012   file name or content) and set language specific preferences. 
3014 Tag Collisions
3015   How to react to multiple tags for the same name. Tags are described in the 
3016   section: Features for Programmers -> Finding Declarations (ctags). In Show 
3017   All mode, all matching tags are displayed in a dialog. In Smart mode, if one 
3018   of the matching tags is in the current window, that tag is chosen, without 
3019   displaying the dialog. 
3021 Customize Menus
3022   Add/remove items from the Shell, Macro, and window background menus (see 
3023   below). 
3025 Customize Window Title
3026   Opens a dialog where the information to be displayed in the windows's title 
3027   field can be defined and tested. The dialog contains a Help button, 
3028   providing further information about the options available. 
3030 Searching
3031   Options for controlling the behavior of Find and Replace commands: 
3033   Verbose - Presents search results in dialog form, asks before wrapping a 
3034   search back around the beginning (or end) of the file (unless Beep On Search 
3035   Wrap is turned on). 
3037   Wrap Around - Search and Replace operations wrap around the beginning (or 
3038   end) of the file. 
3040   Beep On Search Wrap - Beep when Search and Replace operations wrap around 
3041   the beginning (or end) of the file (only if Wrap Around is turned on). 
3043   Keep Dialogs Up - Don't pop down Replace and Find boxes after searching. 
3045   Default Search Style - Initial setting for search type in Find and Replace 
3046   dialogs. 
3048   Default Replace Scope - [THIS OPTION IS ONLY PRESENT WHEN NEDIT WAS COMPILED 
3049   WITH THE 
3050    -DREPLACE_SCOPE FLAG TO SELECT AN ALTERNATIVE REPLACE DIALOG LAYOUT.]
3052   Initial setting for the scope in the Replace/Find dialog, when a selection 
3053   exists. It can be either "In Window", "In Selection", or "Smart". "Smart" 
3054   results in "In Window" if the size of the selection is smaller than 1 line, 
3055   and to "In Selection" otherwise. 
3057 Syntax Highlighting
3058   Program and configure enhanced text display for new or supported languages 
3059   (See Features for Programming -> Syntax Highlighting). 
3061 Sort Open Prev. Menu
3062   Option to order the File -> Open Previous menu alphabetically, versus in 
3063   order of last access. 
3065 Popups Under Pointer
3066   Display pop-up dialogs centered on the current mouse position, as opposed to 
3067   centered on the parent window. This generally speeds interaction, and is 
3068   essential for users who users who set their window managers so keyboard 
3069   focus follows the mouse. 
3071 Modification Warnings
3072   Pop up a warning dialog when files get changed external to NEdit. 
3074 Exit Warnings
3075   Ask before exiting when two or more files are open in an NEdit session. 
3077 Initial Window Size
3078   Default size for new windows. 
3081   CHANGING FONT(S)
3083   The font used to display text in NEdit is set under Preferences -> Text Font 
3084   (for the current window), or Preferences -> Default Settings Text Font (for 
3085   future windows). These dialogs also allow you to set fonts for syntax 
3086   highlighting. If you don't intend to use syntax highlighting, you can ignore 
3087   most of the dialog, and just set the field labeled Primary Font. 
3089   Unless you are absolutely certain about the types of files that you will be 
3090   editing with NEdit, you should choose a fixed-spacing font. Many, if not 
3091   most, plain-text files are written expecting to be viewed with fixed 
3092   character spacing, and will look wrong with proportional spacing. NEdit's 
3093   filling, wrapping, and rectangular operations will also work strangely if 
3094   you choose a proportional font. 
3096   Note that in the font browser (the dialog brought up by the Browse... 
3097   button), the subset of fonts which are shown is narrowed depending on the 
3098   characteristics already selected. It is therefore important to know that you 
3099   can unselect characteristics from the lists by clicking on the selected 
3100   items a second time. 
3102   Fonts for syntax highlighting should ideally match the primary font in both 
3103   height and spacing. A mismatch in spacing will result in similar distortions 
3104   as choosing a proportional font: column alignment will sometimes look wrong, 
3105   and rectangular operations, wrapping, and filling will behave strangely. A 
3106   mismatch in height will cause windows to re-size themselves slightly when 
3107   syntax highlighting is turned on or off, and increase the inter- line 
3108   spacing of the text. Unfortunately, on some systems it is hard to find sets 
3109   of fonts which match exactly in height. 
3112   CUSTOMIZING MENUS
3114   You can add or change items in the Shell, Macro, and window background menus 
3115   under Preferences -> Default Settings -> Customize Menus. When you choose 
3116   one of these, you will see a dialog with a list of the current 
3117   user-configurable items from the menu on the left. To change an existing 
3118   item, select it from the list, and its properties will appear in the 
3119   remaining fields of the dialog, where you may change them. Selecting the 
3120   item "New" from the list allows you to enter new items in the menu. 
3122   Hopefully most of the characteristics are self explanatory, but here are a 
3123   few things to note: 
3125   Accelerator keys are keyboard shortcuts which appear on the right hand side 
3126   of the menus, and allow you avoid pulling down the menu and activate the 
3127   command with a single keystroke. Enter accelerators by typing the keys 
3128   exactly as you would to activate the command. 
3130   Mnemonics are a single letter which should be part of the menu item name, 
3131   which allow users to traverse and activate menu items by typing keys when 
3132   the menu is pulled down. 
3134   In the Shell Command field of the Shell Commands dialog, the % character 
3135   expands to the name (including directory path) of the file in the window. To 
3136   include a % character in the command, use %%. 
3138   The Menu Entry field can contain special characters for constructing 
3139   hierarchical sub-menus, and for making items which appear only in certain 
3140   language modes. The right angle bracket character ">" creates a sub-menu. 
3141   The name of the item itself should be the last element of the path formed 
3142   from successive sub-menu names joined with ">". Menu panes are called in to 
3143   existence simply by naming them as part of a Menu Entry name. To put several 
3144   items in the same sub-menu, repeat the same hierarchical sequence for each. 
3145   For example, in the Macro Commands dialog, two items with menu entries: 
3146   a>b>c and a>b>d would create a single sub menu under the macro menu called 
3147   "a", which would contain a single sub-menu, b, holding the actual items, c 
3148   and d: 
3150       +---++---++---+
3151       |a >||b >||c  |
3152       +---++---+|d  |
3153                 +---+
3155   To qualify a menu entry with a language mode, simply add an at-sign "@" at 
3156   the end of the menu command, followed (no space) by a language mode name. To 
3157   make a menu item which appears in several language modes, append additional 
3158   @s and language mode names. For example, an item with the menu entry: 
3160     Make C Prototypes@C@C++
3162   would appear only in C and C++ language modes, and: 
3164     Make Class Template@C++
3166   would appear only in C++ mode. 
3168   Menu items with no qualification appear in all language modes. 
3170   If a menu item is followed by the single language qualification "@*", that 
3171   item will appear only if there are no applicable language-specific items of 
3172   the same name in the same submenu. For example, if you have the following 
3173   three entries in the same menu: 
3175     Make Prototypes@C@C++
3176     Make Prototypes@Java
3177     Make Prototypes@*
3179   The first will be available when the language mode is C or C++, the second 
3180   when the language mode is Java, and for all other language modes (including 
3181   the "Plain" non-language mode). If the entry: 
3183     Make Prototypes
3185   also exists, this will always appear, meaning that the menu will always have 
3186   two "Make Prototypes" entries, whatever the language mode. 
3189   SHARING CUSTOMIZATIONS WITH OTHER NEDIT USERS
3191   If you have written macro or shell menu commands, highlight patterns, or 
3192   smart-indent macros that you want to share with other NEdit users, you can 
3193   make a file which they can load into their NEdit environment. 
3195   To load such a file, start NEdit with the command: 
3197      nedit -import <file>
3199   In the new NEdit session, verify that the imported patterns or macros do 
3200   what you want, then select Preferences -> Save Defaults. Saving incorporates 
3201   the changes into your own .nedit file, so the next time you run NEdit, you 
3202   will not have to import the distribution file. 
3204   Loading a customization file is automated, but creating one is not. To 
3205   produce a file to be imported by other users, you must make a copy of your 
3206   own .nedit file, and edit it, by hand, to remove everything but the few 
3207   items of interest to the recipient. Leave only the individual resource(s), 
3208   and within those resources, only the particular macro, pattern, style, etc, 
3209   that you wish to exchange. For example, to share a highlighting pattern set, 
3210   you would include the patterns, any new styles you added, and language mode 
3211   information only if the patterns are intended to support a new language 
3212   rather than updating an existing one. For example: 
3214      nedit.highlightPatterns:\
3215           My Language:1:0{\n\
3216                   Comment:"#":"$"::Comment::\n\
3217                   Loop Header:"^[ \\t]*loop:":::Loop::\n\
3218           }
3219      nedit.languageModes: My Language:.my::::::
3220      nedit.styles: Loop:blue:Bold
3222   Resources are in the format of X resource files, but the format of text 
3223   within multiple-item resources like highlight patterns, language modes, 
3224   macros, styles, etc., are private to NEdit. Each resource is a string which 
3225   ends at the first newline character not escaped with \, so you must be 
3226   careful about how you treat ends of lines. While you can generally just cut 
3227   and paste indented sections, if something which was originally in the middle 
3228   of a resource string is now at the end, you must remove the \ line 
3229   continuation character(s) so it will not join the next line into the 
3230   resource. Conversely, if something which was originally at the end of a 
3231   resource is now in the middle, you'll have to add continuation character(s) 
3232   to make sure that the resource string is properly continued from beginning 
3233   to end, and possibly newline character(s) (\n) to make sure that it is 
3234   properly separated from the next item. 
3236 -----------
3237 X RESOURCES
3238 -----------
3240   NEdit has additional options to those provided in the Preferences menu which 
3241   are set using X resources. Like most other X programs, NEdit can be 
3242   customized to vastly unnecessary proportions, from initial window positions 
3243   down to the font and shadow colors of each individual button (A complete 
3244   discussion of how to do this is left to books on the X Windows System). Key 
3245   binding (see "Key Binding" is one of the most useful of these resource 
3246   settable options. 
3248   X resources are usually specified in a file called .Xdefaults or .Xresources 
3249   in your home directory (on VMS this is sys$login:decw$xdefaults.dat). On 
3250   some systems, this file is read and its information attached to the X server 
3251   (your screen) when you start X. On other systems, the .Xdefaults file is 
3252   read each time you run an X program. When X resource values are attached to 
3253   the X server, changes to the resource file are not available to application 
3254   programs until you either run the xrdb program with the appropriate file as 
3255   input, or re-start the X server. 
3258   THE .NEDIT FILE
3260   The .nedit (saved preferences) file is in the same format as an X resource 
3261   file, and its contents can be moved into your X resource file. One reason 
3262   for doing so would be to attach server specific preferences, such as a 
3263   default font to a particular X server. Another reason for moving preferences 
3264   into the X resource file would be to keep preferences menu options and 
3265   resource settable options together in one place. Though the files are the 
3266   same format, additional resources should not be added to the .nedit file, 
3267   they will not be read, and NEdit modifies this file by overwriting it 
3268   completely. Note also that the contents of the .nedit file take precedence 
3269   over the values of X resources. Using Save Defaults after moving the 
3270   contents of your .nedit file to your .Xdefaults file will re-create the 
3271   .nedit file, interfering with the options that you have moved. 
3274   SELECTED X RESOURCE NAMES
3276   The following are selected NEdit resource names and default values for NEdit 
3277   options not settable via the Preferences menu (for preference resource 
3278   names, see your .nedit file): 
3280 nedit.tagFile: (not defined) 
3282   The name of a file of the type produced by Exuberant Ctags or the Unix ctags 
3283   command, which NEdit will load at startup time (see ctag support ). The tag 
3284   file provides a database from which NEdit can automatically open files 
3285   containing the definition of a particular subroutine or data type. 
3287 nedit.shell: /bin/csh 
3289   (Unix systems only) The Unix shell (command interpreter) to use for 
3290   executing commands from the Shell menu 
3292 nedit.wordDelimiters: .,/\\`'!@#%^&*()-=+{}[]":;<>?
3294   The characters, in addition to blanks and tabs, which mark the boundaries 
3295   between words for the move-by-word (Ctrl+Arrow) and select-word (double 
3296   click) commands. Note that this default value may be overridden by the 
3297   setting in Preferences -> Default Settings -> Language Modes.... 
3299 nedit.remapDeleteKey: False
3301   Setting this resource to True forcibly maps the delete key to backspace. 
3302   This can be helpful on systems where the bindings have become tangled, and 
3303   in environments which mix systems with PC style keyboards and systems with 
3304   DEC and Macintosh keyboards. Theoretically, these bindings should be made 
3305   using the standard X/Motif mechanisms, outside of NEdit. In practice, some 
3306   environments where users access several different systems remotely, can be 
3307   very hard to configure. If you've given up and are using a backspace key 
3308   halfway off the keyboard because you can't figure out the bindings, set this 
3309   to True. 
3311 nedit.stdOpenDialog: False
3313   Setting this resource to True restores the standard Motif style of Open 
3314   dialog. NEdit file open dialogs are missing a text field at the bottom of 
3315   the dialog, where the file name can be entered as a string. The field is 
3316   removed in NEdit to encourage users to type file names in the list, a 
3317   non-standard, but much faster method for finding files. 
3319 nedit.bgMenuButton: ~Shift~Ctrl~Meta~Alt<Btn3Down>
3321   Specification for mouse button / key combination to post the background menu 
3322   (in the form of an X translation table event specification). The event 
3323   specification should be as specific as possible, since it will override less 
3324   specific translation table entries. 
3326 nedit.maxPrevOpenFiles: 30
3328   Number of files listed in the Open Previous sub-menu of the File menu. 
3329   Setting this to zero disables the Open Previous menu item and maintenance of 
3330   the .neditdb file. 
3332 nedit.printCommand: (system specific)
3334   Command used by the print dialog to print a file, such as, lp, lpr, etc.. 
3335   The command must be capable of accepting input via stdin (standard input). 
3337 nedit.printCopiesOption: (system specific)
3339   Option name used to specify multiple copies to the print command. If the 
3340   option should be separated from its argument by a space, leave a trailing 
3341   space. If blank, no "Number of Copies" item will appear in the print dialog. 
3343 nedit.printQueueOption: (system specific)
3345   Option name used to specify a print queue to the print command. If the 
3346   option should be separated from its argument by a space, leave a trailing 
3347   space. If blank, no "Queue" item will appear in the print dialog. 
3349 nedit.printNameOption: (system specific)
3351   Option name used to specify a job name to the print command. If the option 
3352   should be separated from its argument by a space, leave a trailing space. If 
3353   blank, no job or file name will be attached to the print job or banner page. 
3355 nedit.printHostOption: (system specific)
3357   Option name used to specify a host name to the print command. If the option 
3358   should be separated from its argument by a space, leave a trailing space. If 
3359   blank, no "Host" item will appear in the print dialog. 
3361 nedit.printDefaultQueue: (system specific)
3363   The name of the default print queue. Used only to display in the print 
3364   dialog, and has no effect on printing. 
3366 nedit.visualID: Best
3368   If your screen supports multiple visuals (color mapping models), this 
3369   resource allows you to manually choose among them. The default value of 
3370   "Best" chooses the deepest (most colors) visual available. Since NEdit does 
3371   not depend on the specific characteristics of any given color model, Best 
3372   probably IS the best choice for everyone, and the only reason for setting 
3373   this resource would be to patch around some kind of X server problem. The 
3374   resource may also be set to "Default", which chooses the screen's default 
3375   visual (often a color-mapped, PseudoColor, visual for compatibility with 
3376   older X applications). It may also be set to a numeric visual-id value (use 
3377   xdpyinfo to see the list of visuals supported by your display), or a visual 
3378   class name: PseudoColor, DirectColor, TrueColor, etc.. 
3380 nedit.installColormap: False
3382   Force the installation of a private colormap. If you have a humble 8-bit 
3383   color display, and netscape is hogging all of the color cells, you may want 
3384   to try turning this on. On most systems, this will result in colors flashing 
3385   wildly when you switch between NEdit and other applications. But a few 
3386   systems (SGI) have hardware support for multiple simultaneous colormaps, and 
3387   applications with installed colormaps are well behaved. 
3389 nedit.findReplaceUsesSelection: False
3391   Controls if the Find and Replace dialogs are automatically loaded with the 
3392   contents of the primary selection. 
3394 nedit.stickyCaseSenseButton: True
3396   Controls if the "Case Sensitive" buttons in the Find and Replace dialogs and 
3397   the incremental search bar maintain a separate state for literal and regular 
3398   expression searches. Moreover, when set to True, by default literal searches 
3399   are case insensitive and regular expression searches are case sensitive. 
3400   When set to False, the "Case Sensitive" buttons are independent of the 
3401   "Regular Expression" toggle. 
3403 nedit.printDefaultHost: (system specific)
3405   The node name of the default print host. Used only to display in the print 
3406   dialog, and has no effect on printing. 
3408 nedit.multiClickTime: (system specific)
3410   Maximum time in milliseconds allowed between mouse clicks within double and 
3411   triple click actions. 
3413 nedit.scrollBarPlacement: BOTTOM_LEFT
3415   How scroll bars are placed in NEdit windows, as well as various lists and 
3416   text fields in the program. Other choices are: BOTTOM_RIGHT, TOP_LEFT, or 
3417   TOP_RIGHT. 
3419 nedit.text.autoWrapPastedText: False
3421   When Auto Newline Wrap is turned on, apply automatic wrapping (which 
3422   normally only applies to typed text) to pasted text as well. 
3424 nedit.text.heavyCursor: False
3426   For monitors with poor resolution or users who have difficulty seeing the 
3427   cursor, makes the cursor in the text editing area of the window heavier and 
3428   darker. 
3430 nedit.text.foreground: black
3432   Foreground color of the text editing area of the NEdit window. 
3434 nedit.text.background: white
3436   Background color of the text editing area of the NEdit window. 
3438 nedit.text.selectForeground: black
3440   Foreground (text) color for selections in the text editing area of the NEdit 
3441   window. 
3443 nedit.text.selectBackground: gray80
3445   Color for selections in the text editing area of the NEdit window. 
3447 nedit.text.highlightForeground: white
3449   Foreground (text) color for highlights (parenthesis flashing) in the text 
3450   editing area of the NEdit window. 
3452 nedit.text.highlightBackground: red
3454   Color for highlights (parenthesis flashing) in the text editing area of the 
3455   NEdit window. 
3457 nedit.text.cursorForeground: black
3459   Color for text cursor in the text editing area of the NEdit window. 
3461 nedit.text.lineNumForeground: gray47
3463   Color for displaying line numbers in the NEdit window. 
3465 nedit.text.blinkRate: 600
3467   Blink rate of the text insertion cursor in milliseconds. Set to zero to stop 
3468   blinking. 
3470 nedit.text.Translations:
3472   Modifies key bindings (see below). 
3474 nedit.foreground: black
3476   Default foreground color for menus, dialogs, scroll bars, etc.. 
3478 nedit.background: gray70
3480   Default background color for menus, dialogs, scroll bars, etc.. 
3482 nedit.fontList: helvetica-bold-14
3484   Default font for menus, dialogs, scroll bars, etc.. 
3486 nedit.helpFont: adobe times 14
3488   Font used for displaying online help. 
3490 nedit.boldHelpFont: adobe times 14 bold
3492   Bold font for online help. 
3494 nedit.italicHelpFont: adobe times 14 italic
3496   Italic font for online help. 
3498 nedit.fixedHelpFont: adobe courier 12
3500   Fixed font for online help. 
3502 nedit.boldFixedHelpFont: adobe courier 12 bold
3504   Fixed bold for online help. 
3506 nedit.italicFixedHelpFont: adobe courier 12 italic
3508   Fixed italic font for online help. 
3510 nedit.h3HelpFont: adobe times 14 bold
3512   Font for level-1 titles in help text (the name h3 comes from how the help 
3513   system maps titles between the html, text, and online help versions of the 
3514   help text, level one and level two headings map to menu titles). 
3516 nedit.h4HelpFont: adobe times 14 italic
3518   Font for level-2 titles in help text. 
3520 nedit.h5HelpFont: adobe courier 12 bold
3522   Font for level-3 titles in help text. 
3524 nedit.helpLinkFont: adobe adobe times 14
3526   Font for hyperlinks in the help text 
3528 nedit.helpLinkColor: blue2
3530   Color for hyperlinks in the help text 
3532 nc.autoStart: False 
3534   Whether the nc program should automatically start an NEdit server (without 
3535   prompting the user) if an appropriate server is not found. 
3537 nc.serverCommand: nedit -server
3539   Command used by the nc program to start an NEdit server. 
3541    and other characteristics):
3542   The following are Selected widget names (to which you may append 
3543   .background, .foreground, .fontList, etc., to change colors, fonts 
3545 nedit.statsForm
3547   Statistics line and incremental search bar. Use this to set statistics line 
3548   background color. To set attributes affecting both the statistics line and 
3549   the incremental search bar, use '*' rather than '.' to separate the resource 
3550   name. For example, to set the foreground color: nedit.statsForm.foreground. 
3552 nedit.menuBar
3554   Top-of-window menu-bar. 
3556 nedit.textHorScrollBar
3558   Horizontal scroll bar. 
3560 nedit.textVertScrollBar
3562   Vertical scroll bar. 
3564 -----------
3565 KEY BINDING
3566 -----------
3568   There are several ways to change key bindings in NEdit. The easiest way to 
3569   add a new key binding in NEdit is to define a macro in Preferences -> 
3570   Default Settings -> Customize Menus -> Macro Menu. However, if you want to 
3571   change existing bindings or add a significant number of new key bindings you 
3572   will need to do so via X resources. 
3574   Before reading this section, you must understand how to set X resources (see 
3575   the help section "X Resources"). Since setting X resources is tricky, it is 
3576   also helpful when working on key-binding, to set some easier-to-verify 
3577   resource at the same time, as a simple check that the NEdit program is 
3578   actually seeing your changes. The appres program is also very helpful in 
3579   checking that the resource settings that you make, actually reach the 
3580   program for which they are intended in the correct form. 
3583   KEY BINDING IN GENERAL
3585   Keyboard commands are associated with editor action routines through two 
3586   separate mechanisms in NEdit. Commands which appear in pull-down menus have 
3587   individual resources designating a keyboard equivalent to the menu command, 
3588   called an accelerator key. Commands which do not have an associated menu 
3589   item are bound to keys via the X toolkit translation mechanism. The methods 
3590   for changing these two kinds of bindings are quite different. 
3593   KEY BINDING VIA TRANSLATIONS
3595   The most general way to bind actions to keys in NEdit is to use the 
3596   translation table associated with the text widget. To add a binding to Alt+Y 
3597   to insert the string "Hi!", for example, add lines similar to the following 
3598   to your X resource file: 
3600     NEdit*text.Translations: #override \n\
3601       Alt<Key>y: insert_string("Hi!") \n
3603   The Help topic "Action Routines" lists the actions available to be bound. 
3605   Translation tables map key and mouse presses, window operations, and other 
3606   kinds of events, to actions. The syntax for translation tables is simplified 
3607   here, so you may need to refer to a book on the X window system for more 
3608   detailed information. 
3610   Note that accelerator resources (discussed below) override translations, and 
3611   that most Ctrl+letter and Alt+letter combinations are already bound to an 
3612   accelerator key. To use one of these combinations from a translation table, 
3613   therefore, you must first un-bind the original menu accelerator. 
3615   A resource for changing a translation table consists of a keyword; 
3616   #override, #augment, or #replace; followed by lines (separated by newline 
3617   characters) pairing events with actions. Events begin with modifiers, like 
3618   Ctrl, Shift, or Alt, followed by the event type in <>. BtnDown, Btn1Down, 
3619   Btn2Down, Btn1Up, Key, KeyUp are valid event types. For key presses, the 
3620   event type is followed by the name of the key. You can specify a combination 
3621   of events, such as a sequence of key presses, by separating them with 
3622   commas. The other half of the event/action pair is a set of actions. These 
3623   are separated from the event specification by a colon and from each other by 
3624   spaces. Actions are names followed by parentheses, optionally containing one 
3625   or more parameters separated by comas. 
3628   CHANGING MENU ACCELERATOR KEYS
3630   The menu shortcut keys shown at the right of NEdit menu items can also be 
3631   changed via X resources. Each menu item has two resources associated with 
3632   it, accelerator, the event to trigger the menu item; and acceleratorText, 
3633   the string shown in the menu. The form of the accelerator resource is the 
3634   same as events for translation table entries discussed above, though 
3635   multiple keys and other subtleties are not allowed. The resource name for a 
3636   menu is the title in lower case, followed by "Menu", the resource name of 
3637   menu item is the name in lower case, run together, with words separated by 
3638   caps, and all punctuation removed. For example, to change Cut to Ctrl+X, you 
3639   would add the following to your .Xdefaults file: 
3641       nedit*editMenu.cut.accelerator: Ctrl<Key>x
3642       nedit*editMenu.cut.acceleratorText: Ctrl+X
3644   Accelerator keys with optional shift key modifiers, like Find..., have an 
3645   additional accelerator resource with Shift appended to the name. For 
3646   example: 
3648       nedit*searchMenu.find.acceleratorText: [Shift]Alt+F
3649       nedit*searchMenu.find.accelerator: Alt<Key>f
3650       nedit*searchMenu.findShift.accelerator: Shift Alt<Key>f
3652 ---------------------
3653 HIGHLIGHTING PATTERNS
3654 ---------------------
3657   WRITING SYNTAX HIGHLIGHTING PATTERNS
3659   Patterns are the mechanism by which language syntax highlighting is 
3660   implemented in NEdit (see Syntax Highlighting under the heading of Features 
3661   for Programming). To create syntax highlighting patterns for a new language, 
3662   or to modify existing patterns, select "Recognition Patterns" from "Syntax 
3663   Highlighting" sub-section of the "Default Settings" sub-menu of the 
3664   "Preferences" menu. 
3666   First, a word of caution. As with regular expression matching in general, it 
3667   is quite possible to write patterns which are so inefficient that they 
3668   essentially lock up the editor as they recursively re-examine the entire 
3669   contents of the file thousands of times. With the multiplicity of patterns, 
3670   the possibility of a lock-up is significantly increased in syntax 
3671   highlighting. When working on highlighting patterns, be sure to save your 
3672   work frequently. 
3674   NEdit's syntax highlighting is unusual in that it works in real-time (as you 
3675   type), and yet is completely programmable using standard regular expression 
3676   notation. Other syntax highlighting editors usually fall either into the 
3677   category of fully programmable but unable to keep up in real-time, or 
3678   real-time but limited programmability. The additional burden that NEdit 
3679   places on pattern writers in order to achieve this speed/flexibility mix, is 
3680   to force them to state self-imposed limitations on the amount of context 
3681   that patterns may examine when re-parsing after a change. While the "Pattern 
3682   Context Requirements" heading is near the end of this section, it is not 
3683   optional, and must be understood before making any any serious effort at 
3684   pattern writing. 
3686   In its simplest form, a highlight pattern consists of a regular expression 
3687   to match, along with a style representing the font an color for displaying 
3688   any text which matches that expression. To bold the word, "highlight", 
3689   wherever it appears the text, the regular expression simply would be the 
3690   word "highlight". The style (selected from the menu under the heading of 
3691   "Highlight Style") determines how the text will be drawn. To bold the text, 
3692   either select an existing style, such as "Keyword", which bolds text, or 
3693   create a new style and select it under Highlight Style. 
3695   The full range of regular expression capabilities can be applied in such a 
3696   pattern, with the single caveat that the expression must conclusively match 
3697   or not match, within the pre-defined context distance (as discussed below 
3698   under Pattern Context Requirements). 
3700   To match longer ranges of text, particularly any constructs which exceed the 
3701   requested context, you must use a pattern which highlights text between a 
3702   starting and ending regular expression match. To do so, select "Highlight 
3703   text between starting and ending REs" under "Matching", and enter both a 
3704   starting and ending regular expression. For example, to highlight everything 
3705   between double quotes, you would enter a double quote character in both the 
3706   starting and ending regular expression fields. Patterns with both a 
3707   beginning and ending expression span all characters between the two 
3708   expressions, including newlines. 
3710   Again, the limitation for automatic parsing to operate properly is that both 
3711   expressions must match within the context distance stated for the pattern 
3712   set. 
3714   With the ability to span large distances, comes the responsibility to 
3715   recover when things go wrong. Remember that syntax highlighting is called 
3716   upon to parse incorrect or incomplete syntax as often as correct syntax. To 
3717   stop a pattern short of matching its end expression, you can specify an 
3718   error expression, which stops the pattern from gobbling up more than it 
3719   should. For example, if the text between double quotes shouldn't contain 
3720   newlines, the error expression might be "$". As with both starting and 
3721   ending expressions, error expressions must also match within the requested 
3722   context distance. 
3725   Coloring Sub-Expressions
3727   It is also possible to color areas of text within a regular expression 
3728   match. A pattern of this type associates a style with sub-expressions 
3729   references of the parent pattern (as used in regular expression substitution 
3730   patterns, see the NEdit Help menu item on Regular Expressions). 
3731   Sub-expressions of both the starting and ending patterns may be colored. For 
3732   example, if the parent pattern has a starting expression "\<", and end 
3733   expression "\>", (for highlighting all of the text contained within angle 
3734   brackets), a sub-pattern using "&" in both the starting and ending 
3735   expression fields could color the brackets differently from the intervening 
3736   text. A quick shortcut to typing in pattern names in the Parent Pattern 
3737   field is to use the middle mouse button to drag them from the Patterns list. 
3740   Hierarchical Patterns
3742   A hierarchical sub-pattern, is identical to a top level pattern, but is 
3743   invoked only between the beginning and ending expression matches of its 
3744   parent pattern. Like the sub-expression coloring patterns discussed above, 
3745   it is associated with a parent pattern using the Parent Pattern field in the 
3746   pattern specification. Pattern names can be dragged from the pattern list 
3747   with the middle mouse button to the Parent Pattern field. 
3749   After the start expression of the parent pattern matches, the syntax 
3750   highlighting parser searches for either the parent's end pattern or a 
3751   matching sub-pattern. When a sub-pattern matches, control is not returned to 
3752   the parent pattern until the entire sub-pattern has been parsed, regardless 
3753   of whether the parent's end pattern appears in the text matched by the 
3754   sub-pattern. 
3756   The most common use for this capability is for coloring sub-structure of 
3757   language constructs (smaller patterns embedded in larger patterns). 
3758   Hierarchical patterns can also simplify parsing by having sub-patterns 
3759   "hide" special syntax from parent patterns, such as special escape sequences 
3760   or internal comments. 
3762   There is no depth limit in nesting hierarchical sub-patterns, but beyond the 
3763   third level of nesting, automatic re-parsing will sometimes have to re-parse 
3764   more than the requested context distance to guarantee a correct parse (which 
3765   can slow down the maximum rate at which the user can type if large sections 
3766   of text are matched only by deeply nested patterns). 
3768   While this is obviously not a complete hierarchical language parser it is 
3769   still useful in many text coloring situations. As a pattern writer, your 
3770   goal is not to completely cover the language syntax, but to generate 
3771   colorings that are useful to the programmer. Simpler patterns are usually 
3772   more efficient and also more robust when applied to incorrect code. 
3775   Deferred (Pass-2) Parsing
3777   NEdit does pattern matching for syntax highlighting in two passes. The first 
3778   pass is applied to the entire file when syntax highlighting is first turned 
3779   on, and to new ranges of text when they are initially read or pasted in. The 
3780   second pass is applied only as needed when text is exposed (scrolled in to 
3781   view). 
3783   If you have a particularly complex set of patterns, and parsing is beginning 
3784   to add a noticeable delay to opening files or operations which change large 
3785   regions of text, you can defer some of that parsing from startup time, to 
3786   when it is actually needed for viewing the text. Deferred parsing can only 
3787   be used with single expression patterns, or begin/end patterns which match 
3788   entirely within the requested context distance. To defer the parsing of a 
3789   pattern to when the text is exposed, click on the Pass-2 pattern type button 
3790   in the highlight patterns dialog. 
3792   Sometimes a pattern can't be deferred, not because of context requirements, 
3793   but because it must run concurrently with pass-1 (non-deferred) patterns. If 
3794   they didn't run concurrently, a pass-1 pattern might incorrectly match some 
3795   of the characters which would normally be hidden inside of a sequence 
3796   matched by the deferred pattern. For example, C has character constants 
3797   enclosed in single quotes. These typically do not cross line boundaries, 
3798   meaning they can be parsed entirely within the context distance of the C 
3799   pattern set and should be good candidates for deferred parsing. However, 
3800   they can't be deferred because they can contain sequences of characters 
3801   which can trigger pass-one patterns. Specifically, the sequence, '\"', 
3802   contains a double quote character, which would be matched by the string 
3803   pattern and interpreted as introducing a string. 
3806   Pattern Context Requirements
3808   The context requirements of a pattern set state how much additional text 
3809   around any change must be examined to guarantee that the patterns will match 
3810   what they are intended to match. Context requirements are a promise by NEdit 
3811   to the pattern writer, that the regular expressions in his/her patterns will 
3812   be matched against at least <line context> lines and <character context> 
3813   characters, around any modified text. Combining line and character 
3814   requirements guarantee that both will be met. 
3816   Automatic re-parsing happens on EVERY KEYSTROKE, so the amount of context 
3817   which must be examined is very critical to typing efficiency. The more 
3818   complicated your patterns, the more critical the context becomes. To cover 
3819   all of the keywords in a typical language, without affecting the maximum 
3820   rate at which users can enter text, you may be limited to just a few lines 
3821   and/or a few hundred characters of context. 
3823   The default context distance is 1 line, with no minimum character 
3824   requirement. There are several benefits to sticking with this default. One 
3825   is simply that it is easy to understand and to comply with. Regular 
3826   expression notation is designed around single line matching. To span lines 
3827   in a regular expression, you must explicitly mention the newline character 
3828   "\n", and matches which are restricted to a single line are virtually immune 
3829   to lock-ups. Also, if you can code your patterns to work within a single 
3830   line of context, without an additional character-range context requirement, 
3831   the parser can take advantage the fact that patterns don't cross line 
3832   boundaries, and nearly double its efficiency over a one-line and 1-character 
3833   context requirement. (In a single line context, you are allowed to match 
3834   newlines, but only as the first and/or last character.) 
3836 -------------------
3837 SMART INDENT MACROS
3838 -------------------
3840   Smart indent macros can be written for any language, but are usually more 
3841   difficult to write than highlighting patterns. A good place to start, of 
3842   course, is to look at the existing macros for C and C++. 
3844   Smart indent macros for a language mode consist of standard NEdit macro 
3845   language code attached to any or all of the following three activation 
3846   conditions: 1) When smart indent is first turned on for a text window 
3847   containing code of the language, 2) When a newline is typed and smart indent 
3848   is expected, 3) after any character is typed. To attach macro code to any of 
3849   these code "hooks", enter it in the appropriate section in the Preferences 
3850   -> Default Settings -> Auto Indent -> Program Smart Indent dialog. 
3852   Typically most of the code should go in the initialization section, because 
3853   that is the appropriate place for subroutine definitions, and smart indent 
3854   macros are complicated enough that you are not likely to want to write them 
3855   as one monolithic run of code. You may also put code in the Common/Shared 
3856   Initialization section (accessible through the button in the upper left 
3857   corner of the dialog). Unfortunately, since the C/C++ macros also reside in 
3858   the common/shared section, when you add code there, you run some risk of 
3859   missing out on future upgrades to these macros, because your changes will 
3860   override the built-in defaults. 
3862   The newline macro is invoked after the user types a newline, but before the 
3863   newline is entered in the buffer. It takes a single argument ($1) which is 
3864   the position at which the newline will be inserted. It must return the 
3865   number of characters of indentation the line should have, or -1. A return 
3866   value of -1 means to do a standard auto-indent. You must supply a newline 
3867   macro, but the code: "return -1" (auto-indent), or "return 0" (no indent) is 
3868   sufficient. 
3870   The type-in macro takes two arguments. $1 is the insert position, and $2 is 
3871   the character just inserted, and does not return a value. You can do just 
3872   about anything here, but keep in mind that this macro is executed for every 
3873   keystroke typed, so if you try to get too fancy, you may degrade 
3874   performance. 
3876 ------------------
3877 NEDIT COMMAND LINE
3878 ------------------
3880    nedit [-read] [-create] [-line n | +n] [-server]
3881       [-do command] [-tags file] [-tabs n] [-wrap]
3882       [-nowrap] [-autowrap] [-autoindent] [-noautoindent]
3883       [-autosave] [-noautosave] [-rows n] [-columns n]
3884       [-font font] [-lm languagemode] [-geometry geometry]
3885       [-iconic] [-noiconic] [-display [host]:server[.screen]
3886       [-xrm resourcestring] [-svrname name] [-import file]
3887       [-background color] [-foreground color] [-V|-version]
3888       [--] [file...]
3890 -read
3891   Open the file Read Only regardless of the actual file protection. 
3893 -create
3894   Don't warn about file creation when a file doesn't exist. 
3896 -line n (or +n)
3897   Go to line number n 
3899 -server
3900   Designate this session as an NEdit server, for processing commands from the 
3901   nc program. nc can be used to interface NEdit to code development 
3902   environments, mailers, etc., or just as a quick way to open files from the 
3903   shell command line without starting a new NEdit session. 
3905 -do command
3906   Execute an NEdit macro or action. On each file following the -do argument on 
3907   the command line. -do is particularly useful from the nc program, where nc 
3908   -do can remotely execute commands in an NEdit -server session. 
3910 -tags file
3911   Load a file of directions for finding definitions of program subroutines and 
3912   data objects. The file must be of the format gen- erated by Exuberant Ctags, 
3913   or the standard Unix ctags command. 
3915 -tabs n
3916   Set tab stops every n characters. 
3918 -wrap, -nowrap
3919   Wrap long lines at the right edge of the window rather than continuing them 
3920   past it. (Continuous Wrap mode) 
3922 -autowrap, -noautowrap
3923   Wrap long lines when the cursor reaches the right edge of the window by 
3924   inserting newlines at word boundaries. (Auto Newline Wrap mode) 
3926 -autoindent, -noautoindent
3927   Maintain a running indent. 
3929 -autosave, -noautosave
3930   Maintain a backup copy of the file being edited under the name '~filename'. 
3932 -rows n
3933   Default height in characters for an editing window. 
3935 -columns n
3936   Default width in characters for an editing window. 
3938 -font font (or -fn font)
3939   Font for text being edited (Font for menus and dialogs can be set with -xrm 
3940   "*fontList:font"). 
3942 -lm languagemode
3943   Initial language mode used for editing succeeding files. 
3945 -geometry geometry (or -g geometry)
3946   The initial size and/or location of editor windows. The argument geometry 
3947   has the form: 
3949    [<width>x<height>][+|-][<xoffset>[+|-]<yoffset>]
3951   where <width> and <height> are the desired width and height of the window, 
3952   and <xoffset> and <yoffset> are the distance from the edge of the screen to 
3953   the window, + for top or left, - for bottom or right. -geometry can be 
3954   specified for individual files on the command line. 
3956 -iconic, -noiconic
3957   Initial window state for succeeding files. 
3959 -display [host]:server[.screen]
3960   The name of the X server to use. host specifies the machine, server 
3961   specifies the display server number, and screen specifies the screen number. 
3962   host or screen can be omitted and default to the local machine, and screen 
3963   0. 
3965 -background color (or -bg color)
3966   Background color. (background color for text can be set separately with -xrm 
3967   "nedit*text.background: color"). 
3969 -foreground color (or -fg color)
3970   Foreground color. (foreground color for text can be set separately with -xrm 
3971   "nedit*text.foreground: color"). 
3973 -xrm resourcestring 
3974   Set the value of an X resource to override a default value (see "Customizing 
3975   NEdit"). 
3977 -svrname name
3978   When starting NEdit in server mode, name the server, such that it responds 
3979   to requests only when nc is given a corresponding -svrname argument. By 
3980   naming servers, you can run several simultaneously, and direct files and 
3981   commands specifically to any one. 
3983 -import file
3984   Loads an additional preferences file on top of the existing defaults saved 
3985   in your .nedit file. To incorporate macros, language modes, and highlight 
3986   patterns and styles written by other users, run NEdit with -import <file>, 
3987   then re-save your .nedit file with Preferences -> Save Defaults. 
3989 -version
3990   Prints out the NEdit version information. The -V option is synonymous. 
3993   Treats all subsequent arguments as file names, even if they start with a 
3994   dash. This is so NEdit can access files that begin with the dash character. 
3997 ------------------
3998 CLIENT/SERVER MODE
3999 ------------------
4001   NEdit can be operated on its own, or as a two-part client/server 
4002   application. Client/server mode is useful for integrating NEdit with 
4003   software development environments, mailers, and other programs; or just as a 
4004   quick way to open files from the shell command line without starting a new 
4005   NEdit session. 
4007   To run NEdit in server mode, type: 
4009       nedit -server
4011   NEdit can also be started in server mode via the Nedit Client (nc) program 
4012   when no servers are available. 
4014   The nc program, which is distributed along with NEdit, sends commands to an 
4015   nedit server to open files, select lines, or execute editor actions. It 
4016   accepts a limited set of the nedit command line options: -read, -create, 
4017   -line (or +n), -do, and a list of file names. Listing a file on the nc 
4018   command line means, open it if it is not already open and bring the window 
4019   to the front. -read and -create affect only newly opened files, but -line 
4020   and -do can also be used on files which are already open (See "NEdit Command 
4021   Line" for more information). 
4023   In typical Unix style, arguments affect the files which follow them on the 
4024   command line, for example: 
4026       incorrect:   nc file.c -line 25
4027       correct:     nc -line 25 file.c
4029   -read, -create, and -line affect all of the files which follow them on the 
4030   command line. The -do macro is executed only once, on the next file on the 
4031   line. -do without a file following it on the command line, executes the 
4032   macro on the first available window (presumably when you give a -do command 
4033   without a corresponding file or window, you intend it to do something 
4034   independent of the window in which it happens to execute). 
4036   nc also accepts one command line option of its own, -noask (or -ask), which 
4037   instructs it whether to automatically start a server if one is not 
4038   available. This is also settable via the X resource, nc.autoStart (See "X 
4039   Resources" section). 
4041   Sometimes it is useful to have more than one NEdit server running, for 
4042   example to keep mail and programming work separate. The option, -svrname, to 
4043   both nedit and nc, allows you to start, and communicate with, separate named 
4044   servers. A named server responds only to requests with the corresponding 
4045   -svrname argument. If you use ClearCase and are within a ClearCase view, the 
4046   server name will default to the name of the view (based on the value of the 
4047   CLEARCASE_ROOT environment variable). 
4049   Communication between nc and nedit is through the X display. So as long as X 
4050   windows is set up and working properly, nc will work properly as well. nc 
4051   uses the DISPLAY environment variable, the machine name and your user name 
4052   to find the appropriate server, meaning, if you have several machines 
4053   sharing a common file system, nc will not be able to find a server that is 
4054   running on a machine with a different host name, even though it may be 
4055   perfectly appropriate for editing a given file. 
4057   The command which nc uses to start an nedit server is settable via the X 
4058   resource nc.serverCommand, by default, "nedit -server". 
4060 --------------
4061 CRASH RECOVERY
4062 --------------
4064   If a system crash, network failure, X server crash, or program error should 
4065   happen while you are editing a file, you can still recover most of your 
4066   work. NEdit maintains a backup file which it updates periodically (every 8 
4067   editing operations or 80 characters typed). This file has the same name as 
4068   the file that you are editing, but with the character `~' (tilde) on Unix or 
4069   `_' (underscore) on VMS prefixed to the name. To recover a file after a 
4070   crash, simply rename the file to remove the tilde or underscore character, 
4071   replacing the older version of the file. (Because several of the Unix shells 
4072   consider the tilde to be a special character, you may have to prefix the 
4073   character with a `\' (backslash) when you move or delete an NEdit backup 
4074   file.) 
4076   Example, to recover the file called "help.c" on Unix type the command: 
4078       mv \~help.c help.c
4080   A minor caveat, is that if the file you were editing was in MS DOS format, 
4081   the backup file will be in Unix format, and you will need to open the backup 
4082   file in NEdit and change the file format back to MS DOS via the Save As... 
4083   dialog (or use the Unix unix2dos command outside of NEdit). 
4085 -------
4086 VERSION
4087 -------
4089 NEdit release of Dec 13, 2001
4090 Dec 13, 2001
4092   NEdit was written by Mark Edel, Joy Kyriakopulos, Christopher Conrad, Jim 
4093   Clark, Arnulfo Zepeda-Navratil, Suresh Ravoor, Tony Balinski, Max Vohlken, 
4094   Yunliang Yu, Donna Reid, Arne Førlie, Eddy De Greef, Steve LoBasso, 
4095   Alexander Mai, Scott Tringali, Thorsten Haude, and Steve Haehn. 
4097   The regular expression matching routines used in NEdit are adapted (with 
4098   permission) from original code written by Henry Spencer at the University of 
4099   Toronto. 
4101   Syntax highlighting patterns and smart indent macros were contributed by: 
4102   Simon T. MacDonald, Maurice Leysens, Matt Majka, Alfred Smeenk, Alain 
4103   Fargues, Christopher Conrad, Scott Markinson, Konrad Bernloehr, Ivan Herman, 
4104   Patrice Venant, Christian Denat, Philippe Couton, Max Vohlken, Markus 
4105   Schwarzenberg, Himanshu Gohel, Steven C. Kapp, Michael Turomsha, John 
4106   Fieber, Chris Ross, Nathaniel Gray, Joachim Lous, Mike Duigou, Seak 
4107   Teng-Fong, Joor Loohuis, Mark Jones, and Niek van den Berg. 
4109   NEdit sources, executables, additional documentation, and contributed 
4110   software are available from the NEdit web site at http://www.nedit.org. 
4112   This program is free software; you can redistribute it and/or modify it 
4113   under the terms of the GNU General Public License as published by the Free 
4114   Software Foundation; either version 2 of the License, or (at your option) 
4115   any later version. 
4117   This program is distributed in the hope that it will be useful, but WITHOUT 
4118   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
4119   FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License in the 
4120   Help section "Distribution Policy" for more details. 
4122 -------------------
4123 DISTRIBUTION POLICY
4124 -------------------
4126   GNU GENERAL PUBLIC LICENSE 
4128   Version 2, June 1991 
4130   Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, 
4131   Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute 
4132   verbatim copies of this license document, but changing it is not allowed. 
4134   Preamble 
4136   The licenses for most software are designed to take away your freedom to 
4137   share and change it. By contrast, the GNU General Public License is intended 
4138   to guarantee your freedom to share and change free software--to make sure 
4139   the software is free for all its users. This General Public License applies 
4140   to most of the Free Software Foundation's software and to any other program 
4141   whose authors commit to using it. (Some other Free Software Foundation 
4142   software is covered by the GNU Library General Public License instead.) You 
4143   can apply it to your programs, too. 
4145   When we speak of free software, we are referring to freedom, not price. Our 
4146   General Public Licenses are designed to make sure that you have the freedom 
4147   to distribute copies of free software (and charge for this service if you 
4148   wish), that you receive source code or can get it if you want it, that you 
4149   can change the software or use pieces of it in new free programs; and that 
4150   you know you can do these things. 
4152   To protect your rights, we need to make restrictions that forbid anyone to 
4153   deny you these rights or to ask you to surrender the rights. These 
4154   restrictions translate to certain responsibilities for you if you distribute 
4155   copies of the software, or if you modify it. 
4157   For example, if you distribute copies of such a program, whether gratis or 
4158   for a fee, you must give the recipients all the rights that you have. You 
4159   must make sure that they, too, receive or can get the source code. And you 
4160   must show them these terms so they know their rights. 
4162   We protect your rights with two steps: (1) copyright the software, and (2) 
4163   offer you this license which gives you legal permission to copy, distribute 
4164   and/or modify the software. 
4166   Also, for each author's protection and ours, we want to make certain that 
4167   everyone understands that there is no warranty for this free software. If 
4168   the software is modified by someone else and passed on, we want its 
4169   recipients to know that what they have is not the original, so that any 
4170   problems introduced by others will not reflect on the original authors' 
4171   reputations. 
4173   Finally, any free program is threatened constantly by software patents. We 
4174   wish to avoid the danger that redistributors of a free program will 
4175   individually obtain patent licenses, in effect making the program 
4176   proprietary. To prevent this, we have made it clear that any patent must be 
4177   licensed for everyone's free use or not licensed at all. 
4179   The precise terms and conditions for copying, distribution and modification 
4180   follow. 
4182   GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION 
4183   AND MODIFICATION 
4185   0. This License applies to any program or other work which contains a notice 
4186   placed by the copyright holder saying it may be distributed under the terms 
4187   of this General Public License. The "Program", below, refers to any such 
4188   program or work, and a "work based on the Program" means either the Program 
4189   or any derivative work under copyright law: that is to say, a work 
4190   containing the Program or a portion of it, either verbatim or with 
4191   modifications and/or translated into another language. (Hereinafter, 
4192   translation is included without limitation in the term "modification".) Each 
4193   licensee is addressed as "you". 
4195   Activities other than copying, distribution and modification are not covered 
4196   by this License; they are outside its scope. The act of running the Program 
4197   is not restricted, and the output from the Program is covered only if its 
4198   contents constitute a work based on the Program (independent of having been 
4199   made by running the Program). Whether that is true depends on what the 
4200   Program does. 
4202   1. You may copy and distribute verbatim copies of the Program's source code 
4203   as you receive it, in any medium, provided that you conspicuously and 
4204   appropriately publish on each copy an appropriate copyright notice and 
4205   disclaimer of warranty; keep intact all the notices that refer to this 
4206   License and to the absence of any warranty; and give any other recipients of 
4207   the Program a copy of this License along with the Program. 
4209   You may charge a fee for the physical act of transferring a copy, and you 
4210   may at your option offer warranty protection in exchange for a fee. 
4212   2. You may modify your copy or copies of the Program or any portion of it, 
4213   thus forming a work based on the Program, and copy and distribute such 
4214   modifications or work under the terms of Section 1 above, provided that you 
4215   also meet all of these conditions: 
4217   a) You must cause the modified files to carry prominent notices stating that 
4218   you changed the files and the date of any change. 
4220   b) You must cause any work that you distribute or publish, that in whole or 
4221   in part contains or is derived from the Program or any part thereof, to be 
4222   licensed as a whole at no charge to all third parties under the terms of 
4223   this License. 
4225   c) If the modified program normally reads commands interactively when run, 
4226   you must cause it, when started running for such interactive use in the most 
4227   ordinary way, to print or display an announcement including an appropriate 
4228   copyright notice and a notice that there is no warranty (or else, saying 
4229   that you provide a warranty) and that users may redistribute the program 
4230   under these conditions, and telling the user how to view a copy of this 
4231   License. (Exception: if the Program itself is interactive but does not 
4232   normally print such an announcement, your work based on the Program is not 
4233   required to print an announcement.) 
4235   These requirements apply to the modified work as a whole. If identifiable 
4236   sections of that work are not derived from the Program, and can be 
4237   reasonably considered independent and separate works in themselves, then 
4238   this License, and its terms, do not apply to those sections when you 
4239   distribute them as separate works. But when you distribute the same sections 
4240   as part of a whole which is a work based on the Program, the distribution of 
4241   the whole must be on the terms of this License, whose permissions for other 
4242   licensees extend to the entire whole, and thus to each and every part 
4243   regardless of who wrote it. 
4245   Thus, it is not the intent of this section to claim rights or contest your 
4246   rights to work written entirely by you; rather, the intent is to exercise 
4247   the right to control the distribution of derivative or collective works 
4248   based on the Program. 
4250   In addition, mere aggregation of another work not based on the Program with 
4251   the Program (or with a work based on the Program) on a volume of a storage 
4252   or distribution medium does not bring the other work under the scope of this 
4253   License. 
4255   3. You may copy and distribute the Program (or a work based on it, under 
4256   Section 2) in object code or executable form under the terms of Sections 1 
4257   and 2 above provided that you also do one of the following: 
4259   a) Accompany it with the complete corresponding machine-readable source 
4260   code, which must be distributed under the terms of Sections 1 and 2 above on 
4261   a medium customarily used for software interchange; or, 
4263   b) Accompany it with a written offer, valid for at least three years, to 
4264   give any third party, for a charge no more than your cost of physically 
4265   performing source distribution, a complete machine-readable copy of the 
4266   corresponding source code, to be distributed under the terms of Sections 1 
4267   and 2 above on a medium customarily used for software interchange; or, 
4269   c) Accompany it with the information you received as to the offer to 
4270   distribute corresponding source code. (This alternative is allowed only for 
4271   noncommercial distribution and only if you received the program in object 
4272   code or executable form with such an offer, in accord with Subsection b 
4273   above.) 
4275   The source code for a work means the preferred form of the work for making 
4276   modifications to it. For an executable work, complete source code means all 
4277   the source code for all modules it contains, plus any associated interface 
4278   definition files, plus the scripts used to control compilation and 
4279   installation of the executable. However, as a special exception, the source 
4280   code distributed need not include anything that is normally distributed (in 
4281   either source or binary form) with the major components (compiler, kernel, 
4282   and so on) of the operating system on which the executable runs, unless that 
4283   component itself accompanies the executable. 
4285   If distribution of executable or object code is made by offering access to 
4286   copy from a designated place, then offering equivalent access to copy the 
4287   source code from the same place counts as distribution of the source code, 
4288   even though third parties are not compelled to copy the source along with 
4289   the object code. 
4291   4. You may not copy, modify, sublicense, or distribute the Program except as 
4292   expressly provided under this License. Any attempt otherwise to copy, 
4293   modify, sublicense or distribute the Program is void, and will automatically 
4294   terminate your rights under this License. However, parties who have received 
4295   copies, or rights, from you under this License will not have their licenses 
4296   terminated so long as such parties remain in full compliance. 
4298   5. You are not required to accept this License, since you have not signed 
4299   it. However, nothing else grants you permission to modify or distribute the 
4300   Program or its derivative works. These actions are prohibited by law if you 
4301   do not accept this License. Therefore, by modifying or distributing the 
4302   Program (or any work based on the Program), you indicate your acceptance of 
4303   this License to do so, and all its terms and conditions for copying, 
4304   distributing or modifying the Program or works based on it. 
4306   6. Each time you redistribute the Program (or any work based on the 
4307   Program), the recipient automatically receives a license from the original 
4308   licensor to copy, distribute or modify the Program subject to these terms 
4309   and conditions. You may not impose any further restrictions on the 
4310   recipients' exercise of the rights granted herein. You are not responsible 
4311   for enforcing compliance by third parties to this License. 
4313   7. If, as a consequence of a court judgment or allegation of patent 
4314   infringement or for any other reason (not limited to patent issues), 
4315   conditions are imposed on you (whether by court order, agreement or 
4316   otherwise) that contradict the conditions of this License, they do not 
4317   excuse you from the conditions of this License. If you cannot distribute so 
4318   as to satisfy simultaneously your obligations under this License and any 
4319   other pertinent obligations, then as a consequence you may not distribute 
4320   the Program at all. For example, if a patent license would not permit 
4321   royalty-free redistribution of the Program by all those who receive copies 
4322   directly or indirectly through you, then the only way you could satisfy both 
4323   it and this License would be to refrain entirely from distribution of the 
4324   Program. 
4326   If any portion of this section is held invalid or unenforceable under any 
4327   particular circumstance, the balance of the section is intended to apply and 
4328   the section as a whole is intended to apply in other circumstances. 
4330   It is not the purpose of this section to induce you to infringe any patents 
4331   or other property right claims or to contest validity of any such claims; 
4332   this section has the sole purpose of protecting the integrity of the free 
4333   software distribution system, which is implemented by public license 
4334   practices. Many people have made generous contributions to the wide range of 
4335   software distributed through that system in reliance on consistent 
4336   application of that system; it is up to the author/donor to decide if he or 
4337   she is willing to distribute software through any other system and a 
4338   licensee cannot impose that choice. 
4340   This section is intended to make thoroughly clear what is believed to be a 
4341   consequence of the rest of this License. 
4343   8. If the distribution and/or use of the Program is restricted in certain 
4344   countries either by patents or by copyrighted interfaces, the original 
4345   copyright holder who places the Program under this License may add an 
4346   explicit geographical distribution limitation excluding those countries, so 
4347   that distribution is permitted only in or among countries not thus excluded. 
4348   In such case, this License incorporates the limitation as if written in the 
4349   body of this License. 
4351   9. The Free Software Foundation may publish revised and/or new versions of 
4352   the General Public License from time to time. Such new versions will be 
4353   similar in spirit to the present version, but may differ in detail to 
4354   address new problems or concerns. 
4356   Each version is given a distinguishing version number. If the Program 
4357   specifies a version number of this License which applies to it and "any 
4358   later version", you have the option of following the terms and conditions 
4359   either of that version or of any later version published by the Free 
4360   Software Foundation. If the Program does not specify a version number of 
4361   this License, you may choose any version ever published by the Free Software 
4362   Foundation. 
4364   10. If you wish to incorporate parts of the Program into other free programs 
4365   whose distribution conditions are different, write to the author to ask for 
4366   permission. For software which is copyrighted by the Free Software 
4367   Foundation, write to the Free Software Foundation; we sometimes make 
4368   exceptions for this. Our decision will be guided by the two goals of 
4369   preserving the free status of all derivatives of our free software and of 
4370   promoting the sharing and reuse of software generally. 
4372   NO WARRANTY 
4374   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 
4375   THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 
4376   OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
4377   PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
4378   OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
4379   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO 
4380   THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM 
4381   PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR 
4382   CORRECTION. 
4384   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
4385   WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
4386   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
4387   INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 
4388   OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO 
4389   LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR 
4390   THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 
4391   PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 
4392   POSSIBILITY OF SUCH DAMAGES. 
4394   END OF TERMS AND CONDITIONS 
4396 -------------
4397 MAILING LISTS
4398 -------------
4400   There are two separate mailing lists for nedit users, and one for 
4401   developers. Users may post to the developer mailing list to report defects 
4402   and communicate with the nedit developers. Remember that nedit is entirely a 
4403   volunteer effort, so please ask questions first to the discussion list, and 
4404   do your share to answer other users questions as well. 
4406     discuss@nedit.org
4408   General discussion, questions and answers among NEdit users and developers. 
4410     announce@nedit.org
4412   A low-volume mailing list for announcing new versions. 
4414     develop@nedit.org
4416   Communication among and with NEdit developers. Developers should also 
4417   subscribe to the discuss list. 
4419   To subscribe, send mail to <majordomo@nedit.org> with one or more of the 
4420   following in the body of the message: 
4422     subscribe announce
4423     subscribe discuss
4424     subscribe develop
4426 ----------------
4427 PROBLEMS/DEFECTS
4428 ----------------
4431   SOLUTIONS TO COMMON PROBLEMS
4433   For a much more comprehensive list of common problems and solutions, see the 
4434   NEdit FAQ. The latest version of the FAQ can always be found on the NEdit 
4435   web site at: 
4437       http://www.nedit.org.
4439   P: No files are shown in the "Files" list in the Open... dialog. 
4441   S: When you use the "Filter" field, include the file specification or a 
4442   complete directory specification, including the trailing "/" on Unix. (See 
4443   Help in the Open... dialog). 
4445   P: Find Again and Replace Again don't continue in the same direction as the 
4446   original Find or Replace. 
4448   S: Find Again and Replace Again don't use the direction of the original 
4449   search. The Shift key controls the direction: Ctrl+G means forward, 
4450   Shift+Ctrl+G means backward. 
4452   P: Preferences specified in the Preferences menu don't seem to get saved 
4453   when I select Save Defaults. 
4455   S: NEdit has two kinds of preferences: 1) per-window preferences, in the 
4456   Preferences menu, and 2) default settings for preferences in newly created 
4457   windows, in the Default Settings sub-menu of the Preferences menu. 
4458   Per-window preferences are not saved by Save Defaults, only Default 
4459   Settings. 
4461   P: Columns and indentation don't line up. 
4463   S: NEdit is using a proportional width font. Set the font to a fixed style 
4464   (see Preferences menu). 
4466   P: NEdit performs poorly on very large files. 
4468   S: Turn off Incremental Backup. With Incremental Backup on, NEdit 
4469   periodically writes a full copy of the file to disk. 
4471   P: Commands added to the Shell Commands menu (Unix only) don't output 
4472   anything until they are finished executing. 
4474   S: If the command output is directed to a dialog, or the input is from a 
4475   selection, output is collected together and held until the command 
4476   completes. De-select both of the options and the output will be shown 
4477   incrementally as the command executes. 
4479   P: Dialogs don't automatically get keyboard focus when they pop up. 
4481   S: Most X Window managers allow you to choose between two categories of 
4482   keyboard focus models: pointer focus, and explicit focus. Pointer focus 
4483   means that as you move the mouse around the screen, the window under the 
4484   mouse automatically gets the keyboard focus. NEdit users who use this focus 
4485   model should set "Popups Under Pointer" in the Default Settings sub menu of 
4486   the preferences menu in NEdit. Users with the explicit focus model, in some 
4487   cases, may have problems with certain dialogs, such as Find and Replace. In 
4488   MWM this is caused by the mwm resource startupKeyFocus being set to False 
4489   (generally a bad choice for explicit focus users). NCDwm users should use 
4490   the focus model "click" instead of "explicit", again, unless you have set it 
4491   that way to correct specific problems, this is the appropriate setting for 
4492   most explicit focus users. 
4494   P: The Backspace key doesn't work, or deletes forward rather than backward. 
4496   S: While this is an X/Motif binding problem, and should be solved outside of 
4497   NEdit in the Motif virtual binding layer (or possibly xmodmap or 
4498   translations), NEdit provides an out. If you set the resource: 
4499   nedit.remapDeleteKey to True, NEdit will forcibly map the delete key to 
4500   backspace. The default setting of this resource recently changed, so users 
4501   who have been depending on this remapping will now have to set it explicitly 
4502   (or fix their bindings). 
4504   P: NEdit crashes when I try to paste text in to a text field in a dialog 
4505   (like Find or Replace) on my SunOS system. 
4507   S: On many SunOS systems, you have to set up an nls directory before various 
4508   inter-client communication features of Motif will function properly. There 
4509   are instructions in README.sun in /pub/v5_0_2/individual/README.sun on 
4510   ftp.nedit.org, as well as a tar file containing a complete nls directory: 
4511   ftp://ftp.nedit.org/pub/v5_0_2/nls.tar. README.sun contains directions for 
4512   setting up an nls directory, which is required by Motif for handling copy 
4513   and paste to Motif text fields. 
4516   KNOWN DEFECTS
4518   Below is the list of known defects which affect NEdit. The defects your copy 
4519   of NEdit will exhibit depend on which system you are running and with which 
4520   Motif libraries it was built. Note that there are now Motif 1.2 and/or 2.0 
4521   libraries available on ALL supported platforms, and as you can see below 
4522   there are far fewer defects in Motif 1.2, so it is in your best interest to 
4523   upgrade your system. 
4526   All Versions
4528 DEFECT
4529   Operations between rectangular selections on overlapping lines do nothing. 
4531 Work Around
4532   None. These operations are very complicated and rarely used. 
4534 DEFECT
4535   Cut and Paste menu items fail, or possibly crash, for very large 
4536   (multi-megabyte) selections. 
4538 Work Around
4539   Use selection copy (middle mouse button click) for transferring larger 
4540   quantities of data. Cut and Paste save the copied text in server memory, 
4541   which is usually limited. 
4544   REPORTING DEFECTS
4546   The NEdit developers subscribe to both discuss@nedit.org and 
4547   develop@nedit.org, either of which may be used for reporting defects. If 
4548   you're not sure, or you think the report might be of interest to the general 
4549   NEdit user community, send the report to discuss@nedit.org. If it's 
4550   something obvious and boring, like we misspelled "anemometer" in the on-line 
4551   help, send it to develop@nedit.org. If you don't want to subscribe to the 
4552   Mailing Lists, please add a note to your mail about cc'ing you on responses.