Acquire default colors and fonts from the environment if using the default
[nedit.git] / doc / nedit.doc
blob50cef6516a546127f040a2c640ff8144a158dfe9
1                =========================================
2                Nirvana Editor (NEdit) Help Documentation
3                =========================================
5 NEdit release of Aug 31, 2002                                               August 31, 2002
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.
621     PageDown      Scroll and move the cursor down by one
622                   page.
624     Ctrl+PageDown Scroll and move the cursor right by one
625                   page.
627     F10           Make the menu bar active for keyboard
628                   input (Arrow Keys, Return, Escape,
629                   and the Space Bar)
632   SPECIALTY KEYBOARDS  
634   On machines with different styles of keyboards, generally, text editing 
635   actions are properly matched to the labeled keys, such as Remove, 
636   Next-screen, etc.. If you prefer different key bindings, see the section 
637   titled "Key Binding" under the Customizing heading in the Help menu. 
639 --------------------
640 SHIFTING AND FILLING
641 --------------------
644   SHIFT LEFT, SHIFT RIGHT
646   While shifting blocks of text is most important for programmers (See 
647   Features for Programming), it is also useful for other tasks, such as 
648   creating indented paragraphs. 
650   To shift a block of text one tab stop to the right, select the text, then 
651   choose Shift Right from the Edit menu. Note that the accelerator keys for 
652   these menu items are Ctrl+9 and Ctrl+0, which correspond to the right and 
653   left parenthesis on most keyboards. Remember them as adjusting the text in 
654   the direction pointed to by the parenthesis character. Holding the Shift key 
655   while selecting either Shift Left or Shift Right will shift the text by one 
656   character. 
658   It is also possible to shift blocks of text by selecting the text 
659   rectangularly, and dragging it left or right (and up or down as well). Using 
660   a rectangular selection also causes tabs within the selection to be 
661   recalculated and substituted, such that the non-whitespace characters remain 
662   stationary with respect to the selection. 
665   FILLING  
667   Text filling using the Fill Paragraph command in the Edit menu is one of the 
668   most important concepts in NEdit. And it will be well worth your while to 
669   understand how to use it properly. 
671   In plain text files, unlike word-processor files, there is no way to tell 
672   which lines are continuations of other lines, and which lines are meant to 
673   be separate, because there is no distinction in meaning between newline 
674   characters which separate lines in a paragraph, and ones which separate 
675   paragraphs from other text. This makes it impossible for a text editor like 
676   NEdit to tell parts of the text which belong together as a paragraph from 
677   carefully arranged individual lines. 
679   In continuous wrap mode (Preferences -> Wrap -> Continuous), lines 
680   automatically wrap and unwrap themselves to line up properly at the right 
681   margin. In this mode, you simply omit the newlines within paragraphs and let 
682   NEdit make the line breaks as needed. Unfortunately, continuous wrap mode is 
683   not appropriate in the majority of situations, because files with extremely 
684   long lines are not common under Unix and may not be compatible with all 
685   tools, and because you can't achieve effects like indented sections, 
686   columns, or program comments, and still take advantage of the automatic 
687   wrapping. 
689   Without continuous wrapping, paragraph filling is not entirely automatic. 
690   Auto-Newline wrapping keeps paragraphs lined up as you type, but once 
691   entered, NEdit can no longer distinguish newlines which join wrapped text, 
692   and newlines which must be preserved. Therefore, editing in the middle of a 
693   paragraph will often leave the right margin messy and uneven. 
695   Since NEdit can't act automatically to keep your text lined up, you need to 
696   tell it explicitly where to operate, and that is what Fill Paragraph is for. 
697   It arranges lines to fill the space between two margins, wrapping the lines 
698   neatly at word boundaries. Normally, the left margin for filling is inferred 
699   from the text being filled. The first line of each paragraph is considered 
700   special, and its left indentation is maintained separately from the 
701   remaining lines (for leading indents, bullet points, numbered paragraphs, 
702   etc.). Otherwise, the left margin is determined by the furthest left 
703   non-whitespace character. The right margin is either the Wrap Margin, set in 
704   the preferences menu (by default, the right edge of the window), or can also 
705   be chosen on the fly by using a rectangular selection (see below). 
707   There are three ways to use Fill Paragraph. The simplest is, while you are 
708   typing text, and there is no selection, simply select Fill Paragraph (or 
709   type Ctrl+J), and NEdit will arrange the text in the paragraph adjacent to 
710   the cursor. A paragraph, in this case, means an area of text delimited by 
711   blank lines. 
713   The second way to use Fill Paragraph is with a selection. If you select a 
714   range of text and then chose Fill Paragraph, all of the text in the 
715   selection will be filled. Again, continuous text between blank lines is 
716   interpreted as paragraphs and filled individually, respecting leading 
717   indents and blank lines. 
719   The third, and most versatile, way to use Fill Paragraph is with a 
720   rectangular selection. Fill Paragraph treats rectangular selections 
721   differently from other commands. Instead of simply filling the text inside 
722   the rectangular selection, NEdit interprets the right edge of the selection 
723   as the requested wrap margin. Text to the left of the selection is not 
724   disturbed (the usual interpretation of a rectangular selection), but text to 
725   the right of the selection is included in the operation and is pulled in to 
726   the selected region. This method enables you to fill text to an arbitrary 
727   right margin, without going back and forth to the wrap-margin dialog, as 
728   well as to exclude text to the left of the selection such as comment bars or 
729   other text columns. 
731 -----------
732 FILE FORMAT
733 -----------
735   While plain-text is probably the simplest and most interchangeable file 
736   format in the computer world, there is still variation in what plain-text 
737   means from system to system. Plain-text files can differ in character set, 
738   line termination, and wrapping. 
740   While character set differences are the most obvious and pose the most 
741   challenge to portability, they affect NEdit only indirectly via the same 
742   font and localization mechanisms common to all X applications. If your 
743   system is set up properly, you will probably never see character-set related 
744   problems in NEdit. NEdit can not display Unicode text files, or any 
745   multi-byte character set. 
747   The primary difference between an MS DOS format file and a Unix format file, 
748   is how the lines are terminated. Unix uses a single newline character. MS 
749   DOS uses a carriage-return and a newline. NEdit can read and write both file 
750   formats, but internally, it uses the single character Unix standard. NEdit 
751   auto-detects MS DOS format files based on the line termination at the start 
752   of the file. Files are judged to be DOS format if all of the first five line 
753   terminators, within a maximum range, are DOS-style. To change the format in 
754   which NEdit writes a file from DOS to Unix or visa versa, use the Save As... 
755   command and check or un-check the MS DOS Format button. 
757   Wrapping within text files can vary among individual users, as well as from 
758   system to system. Both Windows and MacOS make frequent use of plain text 
759   files with no implicit right margin. In these files, wrapping is determined 
760   by the tool which displays them. Files of this style also exist on Unix 
761   systems, despite the fact that they are not supported by all Unix utilities. 
762   To display this kind of file properly in NEdit, you have to select the wrap 
763   style called Continuous. Wrapping modes are discussed in the sections: 
764   Customizing -> Preferences, and Basic Operation -> Shifting and Filling. 
766   The last and most minute of format differences is the terminating newline. 
767   Some Unix compilers and utilities require a final terminating newline on all 
768   files they read and fail in various ways on files which do not have it. Vi 
769   and approximately half of Unix editors enforce the terminating newline on 
770   all files that they write; Emacs does not enforce this rule. Users are 
771   divided on which is best. NEdit makes the final terminating newline optional 
772   (Preferences -> Default Settings -> Append Line Feed on Save). 
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)_, Calltips_, and Auto/Smart 
786   Indent. 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. 
833   When syntax highlighting is enabled, the matching routines can optionally 
834   make use of the syntax information for improved accuracy. In that case, a 
835   brace inside a highlighted string will not match a brace inside a comment, 
836   for instance. 
839   OPENING INCLUDED FILES
841   The Open Selected command in the File menu understands the C preprocessor's 
842   #include syntax, so selecting an #include line and invoking Open Selected 
843   will generally find the file referred to, unless doing so depends on the 
844   settings of compiler switches or other information not available to NEdit. 
847   INTERFACE TO PROGRAMMING TOOLS
849   Integrated software development environments such as SGI's CaseVision and 
850   Centerline Software's Code Center, can be interfaced directly with NEdit via 
851   the client server interface. These tools allow you to click directly on 
852   compiler and runtime error messages and request NEdit to open files, and 
853   select lines of interest. The easiest method is usually to use the tool's 
854   interface for character-based editors like vi, to invoke nc, but 
855   programmatic interfaces can also be derived using the source code for nc. 
857   There are also some simple compile/review, grep, ctree, and ctags browsers 
858   available in the NEdit contrib directory on ftp.nedit.org. 
860 ------------------
861 TABS/EMULATED TABS
862 ------------------
865   CHANGING THE TAB DISTANCE
867   Tabs are important for programming in languages which use indentation to 
868   show nesting, as short-hand for producing white-space for leading indents. 
869   As a programmer, you have to decide how to use indentation, and how or 
870   whether tab characters map to your indentation scheme. 
872   Ideally, tab characters map directly to the amount of indent that you use to 
873   distinguish nesting levels in your code. Unfortunately, the Unix standard 
874   for interpretation of tab characters is eight characters (probably dating 
875   back to mechanical capabilities of the original teletype), which is usually 
876   too coarse for a single indent. 
878   Most text editors, NEdit included, allow you to change the interpretation of 
879   the tab character, and many programmers take advantage of this, and set 
880   their tabs to 3 or 4 characters to match their programming style. In NEdit 
881   you set the hardware tab distance in Preferences -> Tabs... for the current 
882   window, or Preferences -> Default Settings -> Tabs... (general), or 
883   Preferences -> Default Settings -> Language Modes... (language-specific) to 
884   change the defaults for future windows. 
886   Changing the meaning of the tab character makes programming much easier 
887   while you're in the editor, but can cause you headaches outside of the 
888   editor, because there is no way to pass along the tab setting as part of a 
889   plain-text file. All of the other tools which display, print, and otherwise 
890   process your source code have to be made aware of how the tabs are set, and 
891   must be able to handle the change. Non-standard tabs can also confuse other 
892   programmers, or make editing your code difficult for them if their text 
893   editors don't support changes in tab distance. 
896   EMULATED TABS
898   An alternative to changing the interpretation of the tab character is tab 
899   emulation. In the Tabs... dialog(s), turning on Emulated Tabs causes the Tab 
900   key to insert the correct number of spaces and/or tabs to bring the cursor 
901   the next emulated tab stop, as if tabs were set at the emulated tab distance 
902   rather than the hardware tab distance. Backspacing immediately after 
903   entering an emulated tab will delete the fictitious tab as a unit, but as 
904   soon as you move the cursor away from the spot, NEdit will forget that the 
905   collection of spaces and tabs is a tab, and will treat it as separate 
906   characters. To enter a real tab character with "Emulate Tabs" turned on, use 
907   Ctrl+Tab. 
909   It is also possible to tell NEdit not to insert ANY tab characters at all in 
910   the course of processing emulated tabs, and in shifting and rectangular 
911   insertion/deletion operations, for programmers who worry about the 
912   misinterpretation of tab characters on other systems. 
914 -----------------
915 AUTO/SMART INDENT
916 -----------------
918   Programmers who use structured languages usually require some form of 
919   automatic indent, so that they don't have to continually re-type the 
920   sequences of tabs and/or spaces needed to maintain lengthy running indents. 
921   Version 5.0 of NEdit is the first release of NEdit to offer "smart" indent, 
922   at least experimentally, in addition to the traditional automatic indent 
923   which simply lines up the cursor position with the previous line. 
926   SMART INDENT
928   Smart Indent in this release must still be considered somewhat experimental. 
929   Smart indent macros are only available by default for C and C++, and while 
930   these can easily be configured for different default indentation distances, 
931   they may not conform to everyone's exact C programming style. Smart indent 
932   is programmed in terms of macros in the NEdit macro language which can be 
933   entered in: Preferences -> Default Settings -> Indent -> Program Smart 
934   Indent. Hooks are provided for intervening at the point that a newline is 
935   entered, either via the user pressing the Enter key, or through 
936   auto-wrapping; and for arbitrary type-in to act on specific characters 
937   typed. 
939   To type a newline character without invoking smart-indent when operating in 
940   smart-indent mode, hold the Ctrl key while pressing the Return or Enter key. 
943   AUTO-INDENT
945   With Indent set to Auto (the default), NEdit keeps a running indent. When 
946   you press the Return or Enter key, spaces and tabs are inserted to line up 
947   the insert point under the start of the previous line. Ctrl+Return in 
948   auto-indent mode acts like a normal Return, With auto-indent turned off, 
949   Ctrl+Return does indentation. 
952   BLOCK INDENTATION ADJUSTMENT
954   The Shift Left and Shift Right commands as well as rectangular dragging can 
955   be used to adjust the indentation for several lines at once. To shift a 
956   block of text one character to the right, select the text, then choose Shift 
957   Right from the Edit menu. Note that the accelerator keys for these menu 
958   items are Ctrl+9 and Ctrl+0, which correspond to the right and left 
959   parenthesis on most keyboards. Remember them as adjusting the text in the 
960   direction pointed to by the parenthesis character. Holding the Shift key 
961   while selecting either Shift Left or Shift Right will shift the text by one 
962   tab stop (or by one emulated tab stop if tab emulation is turned on). The 
963   help section "Shifting and Filling" under "Basic Operation" has details. 
965 -------------------
966 SYNTAX HIGHLIGHTING
967 -------------------
969   Syntax Highlighting means using colors and fonts to help distinguish 
970   language elements in programming languages and other types of structured 
971   files. Programmers use syntax highlighting to understand code faster and 
972   better, and to spot many kinds of syntax errors more quickly. 
974   To use syntax highlighting in NEdit, select Highlight Syntax in the 
975   Preferences menu. If NEdit recognizes the computer language that you are 
976   using, and highlighting rules (patterns) are available for that language, it 
977   will highlight your text, and maintain the highlighting, automatically, as 
978   you type. 
980   If NEdit doesn't correctly recognize the type of the file you are editing, 
981   you can manually select a language mode from Language Modes in the 
982   Preferences menu. You can also program the method that NEdit uses to 
983   recognize language modes in Preferences -> Default Settings -> Language 
984   Modes.... 
986   If no highlighting patterns are available for the language that you want to 
987   use, you can create new patterns relatively quickly. The Help section 
988   "Highlighting Patterns" under "Customizing", has details. 
990   If you are satisfied with what NEdit is highlighting, but would like it to 
991   use different colors or fonts, you can change these by selecting Preferences 
992   -> Default Settings -> Syntax Highlighting -> Text Drawing Styles. 
993   Highlighting patterns are connected with font and color information through 
994   a common set of styles so that colorings defined for one language will be 
995   similar across others, and patterns within the same language which are meant 
996   to appear identical can be changed in the same place. To understand which 
997   styles are used to highlight the language you are interested in, you may 
998   need to look at "Highlighting Patterns" section, as well. 
1000   Syntax highlighting is CPU intensive, and under some circumstances can 
1001   affect NEdit's responsiveness. If you have a particularly slow system, or 
1002   work with very large files, you may not want to use it all of the time. 
1003   Syntax highlighting introduces two kinds of delays. The first is an initial 
1004   parsing delay, proportional to the size of the file. This delay is also 
1005   incurred when pasting large sections of text, filtering text through shell 
1006   commands, and other circumstances involving changes to large amounts of 
1007   text. The second kind of delay happens when text which has not previously 
1008   been visible is scrolled in to view. Depending on your system, and the 
1009   highlight patterns you are using, this may or may not be noticeable. A 
1010   typing delay is also possible, but unlikely if you are only using the 
1011   built-in patterns. 
1013 ----------------------------
1014 FINDING DECLARATIONS (CTAGS)
1015 ----------------------------
1017   NEdit can process tags files generated using the Unix ctags command or the 
1018   Exuberant Ctags program. Ctags creates index files correlating names of 
1019   functions and declarations with their locations in C, Fortran, or Pascal 
1020   source code files. (See the ctags manual page for more information). Ctags 
1021   produces a file called "tags" which can be loaded by NEdit. NEdit can manage 
1022   any number of tags files simultaneously. Tag collisions are handled with a 
1023   popup menu to let the user decide which tag to use. In 'Smart' mode NEdit 
1024   will automatically choose the desired tag based on the scope of the file or 
1025   module. Once loaded, the information in the tags file enables NEdit to go 
1026   directly to the declaration of a highlighted function or data structure name 
1027   with a single command. To load a tags file, select "Load Tags File" from the 
1028   File menu and choose a tags file to load, or specify the name of the tags 
1029   file on the NEdit command line: 
1031       nedit -tags tags
1033   NEdit can also be set to load a tags file automatically when it starts up. 
1034   Setting the X resource nedit.tagFile to the name of a tag file tells NEdit 
1035   to look for that file at startup time (see "Customizing NEdit"). The file 
1036   name can be either a complete path name, in which case NEdit will always 
1037   load the same tags file, or a file name without a path or with a relative 
1038   path, in which case NEdit will load it starting from the current directory. 
1039   The second option allows you to have different tags files for different 
1040   projects, each automatically loaded depending on the directory you're in 
1041   when you start NEdit. Setting the name to "tags" is an obvious choice since 
1042   this is the name that ctags uses. NEdit normally evaluates relative path tag 
1043   file specifications every time a file is opened. All accessible tag files 
1044   are loaded at this time. To disable the automatic loading of tag files 
1045   specified as relative paths, set the X resource 
1046   nedit.alwaysCheckRelativeTagsSpecs to False. 
1048   To unload a tags file, select "Un-load Tags File" from the File menu and 
1049   choose from the list of tags files. NEdit will keep track of tags file 
1050   updates by checking the timestamp on the files, and automatically update the 
1051   tags cache. 
1053   To find the definition of a function or data structure once a tags file is 
1054   loaded, select the name anywhere it appears in your program (see "Selecting 
1055   Text") and choose "Find Definition" from the Search menu. 
1057 --------
1058 CALLTIPS
1059 --------
1061   Calltips are little yellow boxes that pop up to remind you what the 
1062   arguments and return type of a function are. More generally, they're a UI 
1063   mechanism to present a small amount of crucial information in a prominent 
1064   location. To display a calltip, select some text and choose "Show Calltip" 
1065   from the Search menu. 
1067   Calltips get their information from one of two places -- either a tags file 
1068   (see "Finding Declarations (ctags)") or a calltips file. First, any loaded 
1069   calltips files are searched for a definition, and if nothing is found then 
1070   the tags database is searched. If a tag is found that matches the hilighted 
1071   text then a calltip is displayed with the first few lines of the definition 
1072   -- usually enough to show you what the arguments of a function are. 
1074   You can load a calltips file by using choosing "Load Calltips File" from the 
1075   File menu. You can unload a calltips file by selecting it from the "Unload 
1076   Calltips File" submenu of the File menu. You can also choose one or more 
1077   default calltips files to be loaded for each language mode using the 
1078   "Default calltips file(s)" field of the Language Modes dialog. 
1080   The calltips file format is very simple. calltips files are organized in 
1081   blocks separated by blank lines. The first line of the block is the key, 
1082   which is the word that is matched when a calltip is requested. The rest of 
1083   the block is displayed as the calltip. 
1085   Almost any text at all can appear in a calltip key or a calltip. There are 
1086   no special characters that need to be escaped. The only issues to note are 
1087   that trailing whitespace is ignored, and you cannot have a blank line inside 
1088   a calltip. (Use a single period instead -- it'll be nearly invisible.) You 
1089   should also avoid calltip keys that begin and end with '*' characters, since 
1090   those are used to mark special blocks. 
1092   There are five special block types--comment, include, language, alias, and 
1093   version--which are distinguished by their first lines, "* comment *", "* 
1094   include *", "* language *", "* alias *", and "* version *" respectively 
1095   (without quotes). 
1097   Comment blocks are ignored when reading calltips files. 
1099   Include blocks specify additional calltips files to load, one per line. The 
1100   ~ character can be used for your $HOME directory, but other shell shortcuts 
1101   like * and ? can't be used. Include blocks allow you to make a calltips file 
1102   for your project that includes, say, the calltips files for C, Motif, and 
1103   Xt. 
1105   Language blocks specify which language mode the calltips should be used 
1106   with. When a calltip is requested it won't match tips from languages other 
1107   than the current language mode. Language blocks only affect the tips listed 
1108   after the block. 
1110   Alias blocks allow a calltip to have multiple keys. The first line of the 
1111   block is the key for the calltip to be displayed, and the rest of the lines 
1112   are additional keys, one per line, that should also show the calltip. 
1114   Version blocks are ignored for the time being. 
1116   You can use calltips in your own macros using the calltip() and 
1117   kill_calltip() macro subroutines and the $calltip_ID macro variable. See the 
1118   Macro Subroutines section for details. 
1120 ===================
1121 REGULAR EXPRESSIONS
1122 ===================
1124 -------------------------------
1125 BASIC REGULAR EXPRESSION SYNTAX
1126 -------------------------------
1128   Regular expressions (regex's) are useful as a way to match inexact sequences 
1129   of characters. They can be used in the `Find...' and `Replace...' search 
1130   dialogs and are at the core of Color Syntax Highlighting patterns. To 
1131   specify a regular expression in a search dialog, simply click on the 
1132   `Regular Expression' radio button in the dialog. 
1134   A regex is a specification of a pattern to be matched in the searched text. 
1135   This pattern consists of a sequence of tokens, each being able to match a 
1136   single character or a sequence of characters in the text, or assert that a 
1137   specific position within the text has been reached (the latter is called an 
1138   anchor.) Tokens (also called atoms) can be modified by adding one of a 
1139   number of special quantifier tokens immediately after the token. A 
1140   quantifier token specifies how many times the previous token must be matched 
1141   (see below.) 
1143   Tokens can be grouped together using one of a number of grouping constructs, 
1144   the most common being plain parentheses. Tokens that are grouped in this way 
1145   are also collectively considered to be a regex atom, since this new larger 
1146   atom may also be modified by a quantifier. 
1148   A regex can also be organized into a list of alternatives by separating each 
1149   alternative with pipe characters, `|'. This is called alternation. A match 
1150   will be attempted for each alternative listed, in the order specified, until 
1151   a match results or the list of alternatives is exhausted (see Alternation 
1152   section below.) 
1155   THE 'ANY' CHARACTER
1157   If a dot (`.') appears in a regex, it means to match any character exactly 
1158   once. By default, dot will not match a newline character, but this behavior 
1159   can be changed (see help topic Parenthetical Constructs, under the heading, 
1160   Matching Newlines). 
1163   CHARACTER CLASSES
1165   A character class, or range, matches exactly one character of text, but the 
1166   candidates for matching are limited to those specified by the class. Classes 
1167   come in two flavors as described below: 
1169      [...]   Regular class, match only characters listed.
1170      [^...]  Negated class, match only characters NOT listed.
1172   As with the dot token, by default negated character classes do not match 
1173   newline, but can be made to do so. 
1175   The characters that are considered special within a class specification are 
1176   different than the rest of regex syntax as follows. If the first character 
1177   in a class is the `]' character (second character if the first character is 
1178   `^') it is a literal character and part of the class character set. This 
1179   also applies if the first or last character is `-'. Outside of these rules, 
1180   two characters separated by `-' form a character range which includes all 
1181   the characters between the two characters as well. For example, `[^f-j]' is 
1182   the same as `[^fghij]' and means to match any character that is not `f', 
1183   `g', `h', `i', or `j'. 
1186   ANCHORS
1188   Anchors are assertions that you are at a very specific position within the 
1189   search text. NEdit regular expressions support the following anchor tokens: 
1191      ^    Beginning of line
1192      $    End of line
1193      <    Left word boundary
1194      >    Right word boundary
1195      \B   Not a word boundary
1197   Note that the \B token ensures that the left and right characters are both 
1198   delimiter characters, or that both left and right characters are 
1199   non-delimiter characters. Currently word anchors check only one character, 
1200   e.g. the left word anchor `<' only asserts that the left character is a word 
1201   delimiter character. Similarly the right word anchor checks the right 
1202   character. 
1205   QUANTIFIERS
1207   Quantifiers specify how many times the previous regular expression atom may 
1208   be matched in the search text. Some quantifiers can produce a large 
1209   performance penalty, and can in some instances completely lock up NEdit. To 
1210   prevent this, avoid nested quantifiers, especially those of the maximal 
1211   matching type (see below.) 
1213   The following quantifiers are maximal matching, or "greedy", in that they 
1214   match as much text as possible. 
1216      *   Match zero or more
1217      +   Match one  or more
1218      ?   Match zero or one
1220   The following quantifiers are minimal matching, or "lazy", in that they 
1221   match as little text as possible. 
1223      *?   Match zero or more
1224      +?   Match one  or more
1225      ??   Match zero or one
1227   One final quantifier is the counting quantifier, or brace quantifier. It 
1228   takes the following basic form: 
1230      {min,max}  Match from `min' to `max' times the
1231                 previous regular expression atom.
1233   If `min' is omitted, it is assumed to be zero. If `max' is omitted, it is 
1234   assumed to be infinity. Whether specified or assumed, `min' must be less 
1235   than or equal to `max'. Note that both `min' and `max' are limited to 65535. 
1236   If both are omitted, then the construct is the same as `*'. Note that `{,}' 
1237   and `{}' are both valid brace constructs. A single number appearing without 
1238   a comma, e.g. `{3}' is short for the `{min,min}' construct, or to match 
1239   exactly `min' number of times. 
1241   The quantifiers `{1}' and `{1,1}' are accepted by the syntax, but are 
1242   optimized away since they mean to match exactly once, which is redundant 
1243   information. Also, for efficiency, certain combinations of `min' and `max' 
1244   are converted to either `*', `+', or `?' as follows: 
1246      {} {,} {0,}    *
1247      {1,}           +
1248      {,1} {0,1}     ?
1250   Note that {0} and {0,0} are meaningless and will generate an error message 
1251   at regular expression compile time. 
1253   Brace quantifiers can also be "lazy". For example {2,5}? would try to match 
1254   2 times if possible, and will only match 3, 4, or 5 times if that is what is 
1255   necessary to achieve an overall match. 
1258   ALTERNATION
1260   A series of alternative patterns to match can be specified by separating 
1261   them with vertical pipes, `|'. An example of alternation would be 
1262   `a|be|sea'. This will match `a', or `be', or `sea'. Each alternative can be 
1263   an arbitrarily complex regular expression. The alternatives are attempted in 
1264   the order specified. An empty alternative can be specified if desired, e.g. 
1265   `a|b|'. Since an empty alternative can match nothingness (the empty string), 
1266   this guarantees that the expression will match. 
1269   COMMENTS
1271   Comments are of the form `(?#<comment text>)' and can be inserted anywhere 
1272   and have no effect on the execution of the regular expression. They can be 
1273   handy for documenting very complex regular expressions. Note that a comment 
1274   begins with `(?#' and ends at the first occurrence of an ending parenthesis, 
1275   or the end of the regular expression... period. Comments do not recognize 
1276   any escape sequences. 
1278 --------------
1279 METACHARACTERS
1280 --------------
1283   ESCAPING METACHARACTERS
1285   In a regular expression (regex), most ordinary characters match themselves. 
1286   For example, `ab%' would match anywhere `a' followed by `b' followed by `%' 
1287   appeared in the text. Other characters don't match themselves, but are 
1288   metacharacters. For example, backslash is a special metacharacter which 
1289   'escapes' or changes the meaning of the character following it. Thus, to 
1290   match a literal backslash would require a regular expression to have two 
1291   backslashes in sequence. NEdit provides the following escape sequences so 
1292   that metacharacters that are used by the regex syntax can be specified as 
1293   ordinary characters. 
1295      \(  \)  \-  \[  \]  \<  \>  \{  \}
1296      \.  \|  \^  \$  \*  \+  \?  \&  \\
1299   SPECIAL CONTROL CHARACTERS
1301   There are some special characters that are difficult or impossible to type. 
1302   Many of these characters can be constructed as a sort of metacharacter or 
1303   sequence by preceding a literal character with a backslash. NEdit recognizes 
1304   the following special character sequences: 
1306      \a  alert (bell)
1307      \b  backspace
1308      \e  ASCII escape character (***)
1309      \f  form feed (new page)
1310      \n  newline
1311      \r  carriage return
1312      \t  horizontal tab
1313      \v  vertical tab
1315      *** For environments that use the EBCDIC character set,
1316          when compiling NEdit set the EBCDIC_CHARSET compiler
1317          symbol to get the EBCDIC equivalent escape
1318          character.)
1321   OCTAL AND HEX ESCAPE SEQUENCES
1323   Any ASCII (or EBCDIC) character, except null, can be specified by using 
1324   either an octal escape or a hexadecimal escape, each beginning with \0 or \x 
1325   (or \X), respectively. For example, \052 and \X2A both specify the `*' 
1326   character. Escapes for null (\00 or \x0) are not valid and will generate an 
1327   error message. Also, any escape that exceeds \0377 or \xFF will either cause 
1328   an error or have any additional character(s) interpreted literally. For 
1329   example, \0777 will be interpreted as \077 (a `?' character) followed by `7' 
1330   since \0777 is greater than \0377. 
1332   An invalid digit will also end an octal or hexadecimal escape. For example, 
1333   \091 will cause an error since `9' is not within an octal escape's range of 
1334   allowable digits (0-7) and truncation before the `9' yields \0 which is 
1335   invalid. 
1338   SHORTCUT ESCAPE SEQUENCES
1340   NEdit defines some escape sequences that are handy shortcuts for commonly 
1341   used character classes. 
1343    \d  digits            0-9
1344    \l  letters           a-z, A-Z, and locale dependent letters
1345    \s  whitespace        \t, \r, \v, \f, and space
1346    \w  word characters   letters, digits, and underscore, `_'
1348   \D, \L, \S, and \W are the same as the lowercase versions except that the 
1349   resulting character class is negated. For example, \d is equivalent to 
1350   `[0-9]', while \D is equivalent to `[^0-9]'. 
1352   These escape sequences can also be used within a character class. For 
1353   example, `[\l_]' is the same as `[a-zA-Z_]', extended with possible locale 
1354   dependent letters. The escape sequences for special characters, and octal 
1355   and hexadecimal escapes are also valid within a class. 
1358   WORD DELIMITER TOKENS
1360   Although not strictly a character class, the following escape sequences 
1361   behave similarly to character classes: 
1363      \y   Word delimiter character
1364      \Y   Not a word delimiter character
1366   The `\y' token matches any single character that is one of the characters 
1367   that NEdit recognizes as a word delimiter character, while the `\Y' token 
1368   matches any character that is NOT a word delimiter character. Word delimiter 
1369   characters are dynamic in nature, meaning that the user can change them 
1370   through preference settings. For this reason, they must be handled 
1371   differently by the regular expression engine. As a consequence of this, `\y' 
1372   and `\Y' can not be used within a character class specification. 
1374 ------------------------
1375 PARENTHETICAL CONSTRUCTS
1376 ------------------------
1379   CAPTURING PARENTHESES
1381   Capturing Parentheses are of the form `(<regex>)' and can be used to group 
1382   arbitrarily complex regular expressions. Parentheses can be nested, but the 
1383   total number of parentheses, nested or otherwise, is limited to 50 pairs. 
1384   The text that is matched by the regular expression between a matched set of 
1385   parentheses is captured and available for text substitutions and 
1386   backreferences (see below.) Capturing parentheses carry a fairly high 
1387   overhead both in terms of memory used and execution speed, especially if 
1388   quantified by `*' or `+'. 
1391   NON-CAPTURING PARENTHESES
1393   Non-Capturing Parentheses are of the form `(?:<regex>)' and facilitate 
1394   grouping only and do not incur the overhead of normal capturing parentheses. 
1395   They should not be counted when determining numbers for capturing 
1396   parentheses which are used with backreferences and substitutions. Because of 
1397   the limit on the number of capturing parentheses allowed in a regex, it is 
1398   advisable to use non-capturing parentheses when possible. 
1401   POSITIVE LOOK-AHEAD
1403   Positive look-ahead constructs are of the form `(?=<regex>)' and implement a 
1404   zero width assertion of the enclosed regular expression. In other words, a 
1405   match of the regular expression contained in the positive look-ahead 
1406   construct is attempted. If it succeeds, control is passed to the next 
1407   regular expression atom, but the text that was consumed by the positive 
1408   look-ahead is first unmatched (backtracked) to the place in the text where 
1409   the positive look-ahead was first encountered. 
1411   One application of positive look-ahead is the manual implementation of a 
1412   first character discrimination optimization. You can include a positive 
1413   look-ahead that contains a character class which lists every character that 
1414   the following (potentially complex) regular expression could possibly start 
1415   with. This will quickly filter out match attempts that can not possibly 
1416   succeed. 
1419   NEGATIVE LOOK-AHEAD
1421   Negative look-ahead takes the form `(?!<regex>)' and is exactly the same as 
1422   positive look-ahead except that the enclosed regular expression must NOT 
1423   match. This can be particularly useful when you have an expression that is 
1424   general, and you want to exclude some special cases. Simply precede the 
1425   general expression with a negative look-ahead that covers the special cases 
1426   that need to be filtered out. 
1429   POSITIVE LOOK-BEHIND
1431   Positive look-behind constructs are of the form `(?<=<regex>)' and implement 
1432   a zero width assertion of the enclosed regular expression in front of the 
1433   current matching position. It is similar to a positive look-ahead assertion, 
1434   except for the fact the the match is attempted on the text preceeding the 
1435   current position, possibly even in front of the start of the matching range 
1436   of the entire regular expression. 
1438   A restriction on look-behind expressions is the fact that the expression 
1439   must match a string of a bounded size. In other words, `*', `+', and `{n,}' 
1440   quantifiers are not allowed inside the look-behind expression. Moreover, 
1441   matching performance is sensitive to the difference between the upper and 
1442   lower bound on the matching size. The smaller the difference, the better the 
1443   performance. This is especially important for regular expressions used in 
1444   highlight patterns. 
1446   Another (minor) restriction is the fact that look-ahead patterns, nor any 
1447   construct that requires look-ahead information (such as word boundaries) are 
1448   supported at the end of a look-behind pattern (no error is raised, but 
1449   matching behaviour is unspecified). It is always possible to place these 
1450   look-ahead patterns immediately after the look-behind pattern, where they 
1451   will work as expected. 
1453   Positive look-behind has similar applications as positive look-ahead. 
1456   NEGATIVE LOOK-BEHIND
1458   Negative look-behind takes the form `(?<!<regex>)' and is exactly the same 
1459   as positive look-behind except that the enclosed regular expression must NOT 
1460   match. The same restrictions apply. 
1462   Note however, that performance is even more sensitive to the distance 
1463   between the size boundaries: a negative look-behind must not match for any 
1464   possible size, so the matching engine must check every size. 
1467   CASE SENSITIVITY
1469   There are two parenthetical constructs that control case sensitivity: 
1471      (?i<regex>)   Case insensitive; `AbcD' and `aBCd' are
1472                    equivalent.
1474      (?I<regex>)   Case sensitive;   `AbcD' and `aBCd' are
1475                    different.
1477   Regular expressions are case sensitive by default, that is, `(?I<regex>)' is 
1478   assumed. All regular expression token types respond appropriately to case 
1479   insensitivity including character classes and backreferences. There is some 
1480   extra overhead involved when case insensitivity is in effect, but only to 
1481   the extent of converting each character compared to lower case. 
1484   MATCHING NEWLINES
1486   NEdit regular expressions by default handle the matching of newlines in a 
1487   way that should seem natural for most editing tasks. There are situations, 
1488   however, that require finer control over how newlines are matched by some 
1489   regular expression tokens. 
1491   By default, NEdit regular expressions will NOT match a newline character for 
1492   the following regex tokens: dot (`.'); a negated character class (`[^...]'); 
1493   and the following shortcuts for character classes: 
1495      `\d', `\D', `\l', `\L', `\s', `\S', `\w', `\W', `\Y'
1497   The matching of newlines can be controlled for the `.' token, negated 
1498   character classes, and the `\s' and `\S' shortcuts by using one of the 
1499   following parenthetical constructs: 
1501      (?n<regex>)  `.', `[^...]', `\s', `\S' match newlines
1503      (?N<regex>)  `.', `[^...]', `\s', `\S' don't match
1504                                             newlines
1506   `(?N<regex>)' is the default behavior. 
1509   NOTES ON NEW PARENTHETICAL CONSTRUCTS
1511   Except for plain parentheses, none of the parenthetical constructs capture 
1512   text. If that is desired, the construct must be wrapped with capturing 
1513   parentheses, e.g. `((?i<regex))'. 
1515   All parenthetical constructs can be nested as deeply as desired, except for 
1516   capturing parentheses which have a limit of 50 sets of parentheses, 
1517   regardless of nesting level. 
1520   BACK REFERENCES
1522   Backreferences allow you to match text captured by a set of capturing 
1523   parenthesis at some later position in your regular expression. A 
1524   backreference is specified using a single backslash followed by a single 
1525   digit from 1 to 9 (example: \3). Backreferences have similar syntax to 
1526   substitutions (see below), but are different from substitutions in that they 
1527   appear within the regular expression, not the substitution string. The 
1528   number specified with a backreference identifies which set of text capturing 
1529   parentheses the backreference is associated with. The text that was most 
1530   recently captured by these parentheses is used by the backreference to 
1531   attempt a match. As with substitutions, open parentheses are counted from 
1532   left to right beginning with 1. So the backreference `\3' will try to match 
1533   another occurrence of the text most recently matched by the third set of 
1534   capturing parentheses. As an example, the regular expression `(\d)\1' could 
1535   match `22', `33', or `00', but wouldn't match `19' or `01'. 
1537   A backreference must be associated with a parenthetical expression that is 
1538   complete. The expression `(\w(\1))' contains an invalid backreference since 
1539   the first set of parentheses are not complete at the point where the 
1540   backreference appears. 
1543   SUBSTITUTION
1545   Substitution strings are used to replace text matched by a set of capturing 
1546   parentheses. The substitution string is mostly interpreted as ordinary text 
1547   except as follows. 
1549   The escape sequences described above for special characters, and octal and 
1550   hexadecimal escapes are treated the same way by a substitution string. When 
1551   the substitution string contains the `&' character, NEdit will substitute 
1552   the entire string that was matched by the `Find...' operation. Any of the 
1553   first nine sub-expressions of the match string can also be inserted into the 
1554   replacement string. This is done by inserting a `\' followed by a digit from 
1555   1 to 9 that represents the string matched by a parenthesized expression 
1556   within the regular expression. These expressions are numbered left-to-right 
1557   in order of their opening parentheses. 
1559   The capitalization of text inserted by `&' or `\1', `\2', ... `\9' can be 
1560   altered by preceding them with `\U', `\u', `\L', or `\l'. `\u' and `\l' 
1561   change only the first character of the inserted entity, while `\U' and `\L' 
1562   change the entire entity to upper or lower case, respectively. 
1564 ---------------
1565 ADVANCED TOPICS
1566 ---------------
1569   SUBSTITUTIONS
1571   Regular expression substitution can be used to program automatic editing 
1572   operations. For example, the following are search and replace strings to 
1573   find occurrences of the `C' language subroutine `get_x', reverse the first 
1574   and second parameters, add a third parameter of NULL, and change the name to 
1575   `new_get_x': 
1577      Search string:   `get_x *\( *([^ ,]*), *([^\)]*)\)'
1578      Replace string:  `new_get_x(\2, \1, NULL)'
1581   AMBIGUITY
1583   If a regular expression could match two different parts of the text, it will 
1584   match the one which begins earliest. If both begin in the same place but 
1585   match different lengths, or match the same length in different ways, life 
1586   gets messier, as follows. 
1588   In general, the possibilities in a list of alternatives are considered in 
1589   left-to-right order. The possibilities for `*', `+', and `?' are considered 
1590   longest-first, nested constructs are considered from the outermost in, and 
1591   concatenated constructs are considered leftmost-first. The match that will 
1592   be chosen is the one that uses the earliest possibility in the first choice 
1593   that has to be made. If there is more than one choice, the next will be made 
1594   in the same manner (earliest possibility) subject to the decision on the 
1595   first choice. And so forth. 
1597   For example, `(ab|a)b*c' could match `abc' in one of two ways. The first 
1598   choice is between `ab' and `a'; since `ab' is earlier, and does lead to a 
1599   successful overall match, it is chosen. Since the `b' is already spoken for, 
1600   the `b*' must match its last possibility, the empty string, since it must 
1601   respect the earlier choice. 
1603   In the particular case where no `|'s are present and there is only one `*', 
1604   `+', or `?', the net effect is that the longest possible match will be 
1605   chosen. So `ab*', presented with `xabbbby', will match `abbbb'. Note that if 
1606   `ab*' is tried against `xabyabbbz', it will match `ab' just after `x', due 
1607   to the begins-earliest rule. (In effect, the decision on where to start the 
1608   match is the first choice to be made, hence subsequent choices must respect 
1609   it even if this leads them to less-preferred alternatives.) 
1612   REFERENCES
1614   An excellent book on the care and feeding of regular expressions is 
1616           "Mastering Regular Expressions"
1617           Jeffrey E. F. Friedl
1618           (c) 1997, O'Reilly & Associates
1619           ISBN 1-56592-257-3
1621 ---------------------------
1622 EXAMPLE REGULAR EXPRESSIONS
1623 ---------------------------
1625   The following are regular expression examples which will match: 
1627     * An entire line.
1628         ^.*$
1630     * Blank lines.
1631         ^$
1633     * Whitespace on a line.
1634         \s+
1636     * Whitespace across lines.
1637         (?n\s+)
1639     * Whitespace that spans at least two lines. Note minimal matching `*?' 
1640       quantifier.
1641         (?n\s*?\n\s*)
1643     * IP address (not robust).
1644         (?:\d{1,3}(?:\.\d{1,3}){3})
1646     * Two character US Postal state abbreviations (includes territories).
1647         [ACDF-IK-PR-W][A-Z]
1649     * Web addresses.
1650         (?:http://)?www\.\S+
1652     * Case insensitive double words across line breaks.
1653         (?i(?n<(\S+)\s+\1>))
1655     * Upper case words with possible punctuation.
1656         <[A-Z][^a-z\s]*>
1658 ======================
1659 MACRO/SHELL EXTENSIONS
1660 ======================
1662 --------------------------
1663 SHELL COMMANDS AND FILTERS
1664 --------------------------
1666   The Shell menu (Unix versions only) allows you to execute Unix shell 
1667   commands from within NEdit. You can add items to the menu to extend NEdit's 
1668   command set or to incorporate custom automatic editing features using shell 
1669   commands or editing languages like awk and sed. To add items to the menu, 
1670   select Preferences -> Default Settings Customize Menus -> Shell Menu. NEdit 
1671   comes pre-configured with a few useful Unix commands like spell and sort, 
1672   but we encourage you to add your own custom extensions. 
1674   Filter Selection... prompts you for a Unix command to use to process the 
1675   currently selected text. The output from this command replaces the contents 
1676   of the selection. 
1678   Execute Command... prompts you for a Unix command and replaces the current 
1679   selection with the output of the command. If there is no selection, it 
1680   deposits the output at the current insertion point. In the Shell Command 
1681   field, the % character expands to the name (including directory path), and 
1682   the # character expands to the current line number of the file in the 
1683   window. To include a % or # character in the command, use %% or ##, 
1684   respectively. 
1686   Execute Command Line uses the position of the cursor in the window to 
1687   indicate a line to execute as a shell command line. The cursor may be 
1688   positioned anywhere on the line. This command allows you to use an NEdit 
1689   window as an editable command window for saving output and saving commands 
1690   for re-execution. Note that the same character expansions described above in 
1691   Execute Command also occur with this command. 
1693   The X resource called nedit.shell (See "Customizing NEdit") determines which 
1694   Unix shell is used to execute commands. The default value for this resource 
1695   is /bin/csh. 
1697 ------------
1698 LEARN/REPLAY
1699 ------------
1701   Selecting Learn Keystrokes from the Macro menu puts NEdit in learn mode. In 
1702   learn mode, keystrokes and menu commands are recorded, to be played back 
1703   later, using the Replay Keystrokes command, or pasted into a macro in the 
1704   Macro Commands dialog of the Default Settings menu in Preferences. 
1706   Note that only keyboard and menu commands are recorded, not mouse clicks or 
1707   mouse movements since these have no absolute point of reference, such as 
1708   cursor or selection position. When you do a mouse-based operation in learn 
1709   mode, NEdit will beep (repeatedly) to remind you that the operation was not 
1710   recorded. 
1712   Learn mode is also the quickest and easiest method for writing macros. The 
1713   dialog for creating macro commands contains a button labeled "Paste Learn / 
1714   Replay Macro", which will deposit the last sequence learned into the body of 
1715   the macro. 
1718   REPEATING ACTIONS AND LEARN/REPLAY SEQUENCES
1720   You can repeat the last (keyboard-based) command, or learn/replay sequence 
1721   with the Repeat... command in the Macro menu. To repeat an action, first do 
1722   the action (that is, insert a character, do a search, move the cursor), then 
1723   select Repeat..., decide how or how many times you want it repeated, and 
1724   click OK. For example, to move down 30 lines through a file, you could type: 
1725   <Down Arrow> Ctrl+, 29 <Return>. To repeat a learn/replay sequence, first 
1726   learn it, then select Repeat..., click on Learn/Replay and how you want it 
1727   repeated, then click OK. 
1729   If the commands you are repeating advance the cursor through the file, you 
1730   can also repeat them within a range of characters, or from the current 
1731   cursor position to the end of the file. To iterate over a range of 
1732   characters, use the primary selection (drag the left mouse button over the 
1733   text) to mark the range you want to operate on, and select "In Selection" in 
1734   the Repeat dialog. 
1736   When using In "Selection" or "To End" with a learned sequence, try to do 
1737   cursor movement as the last step in the sequence, since testing of the 
1738   cursor position is only done at the end of the sequence execution. If you do 
1739   cursor movement first, for example searching for a particular word then 
1740   doing a modification, the position of the cursor won't be checked until the 
1741   sequence has potentially gone far beyond the end of your desired range. 
1743   It's easy for a repeated command to get out of hand, and you can easily 
1744   generate an infinite loop by using range iteration on a command which 
1745   doesn't progress. To cancel a repeating command in progress, type Ctrl+. 
1746   (period), or select Cancel Macro from the Macro menu. 
1748 --------------
1749 MACRO LANGUAGE
1750 --------------
1752   Macros can be called from Macro menu commands, window background menu 
1753   commands, within the smart-indent framework, from the autoload macro file 
1754   and from the command line. Macro menu and window background menu commands 
1755   are defined under Preferences -> Default Settings -> Customize Menus. Help 
1756   on creating items in these menus can be found in the section, Help -> 
1757   Customizing -> Preferences. 
1759   The autoload macro file is a file of macro commands and definitions which 
1760   NEdit will automatically execute when it is first started. Its location is 
1761   dependent on your environment: 
1763     * The default place for the file is '$HOME/.nedit/autoload.nm',
1764     * if the variable $NEDIT_HOME is set in your environment it is located at 
1765       '$NEDIT_HOME/autoload.nm',
1766     * if you are using old-style run control files (i.e. $HOME/.nedit is a 
1767       regular file) it is located in '$HOME/.neditmacro'.
1769   (For VMS, the file is in '$NEDIT_HOME/autoload.nm' if $NEDIT_HOME is set, in 
1770   'SYS$LOGIN:.neditmacro' otherwise.) 
1772   NEdit's macro language is a simple interpreter with integer arithmetic, 
1773   dynamic strings, and C-style looping constructs (very similar to the 
1774   procedural portion of the Unix awk program). From the macro language, you 
1775   can call the same action routines which are bound to keyboard keys and menu 
1776   items, as well additional subroutines for accessing and manipulating editor 
1777   data, which are specific to the macro language (these are listed in the 
1778   sections titled "Macro Subroutines", and "Action_Routines_"). 
1781   SYNTAX
1783   An NEdit macro language program consists of a list of statements, each 
1784   terminated by a newline. Groups of statements which are executed together 
1785   conditionally, such as the body of a loop, are surrounded by curly braces 
1786   "{}". 
1788   Blank lines and comments are also allowed. Comments begin with a "#" and end 
1789   with a newline, and can appear either on a line by themselves, or at the end 
1790   of a statement. 
1792   Statements which are too long to fit on a single line may be split across 
1793   several lines, by placing a backslash "\" character at the end of each line 
1794   to be continued. 
1797   DATA TYPES
1799   The NEdit macro language recognizes only three data types, dynamic character 
1800   strings, integer values and associative arrays. In general strings and 
1801   integers can be used interchangeably. If a string represents an integer 
1802   value, it can be used as an integer. Integers can be compared and 
1803   concatenated with strings. Arrays may contain integers, strings, or arrays. 
1804   Arrays are stored key/value pairs. Keys are always stored as strings. 
1807   Integer Constants
1809   Integers are non-fractional numbers in the range of -2147483647 to 
1810   2147483647. Integer constants must be in decimal. For example: 
1812     a = -1
1813     b = 1000
1816   Character String Constants
1818   Character string constants are enclosed in double quotes. For example: 
1820      a = "a string"
1821      dialog("Hi there!", "Dismiss")
1823   Strings may also include C-language style escape sequences: 
1825      \\ Backslash     \t Tab              \f Form feed
1826      \" Double quote  \b Backspace        \a Alert
1827      \n Newline       \r Carriage return  \v Vertical tab
1829   For example, to send output to the terminal from which NEdit was started, a 
1830   newline character is necessary because, like printf, t_print requires 
1831   explicit newlines, and also buffers its output on a per-line basis: 
1833      t_print("a = " a "\n")
1836   VARIABLES
1838   Variable names must begin either with a letter (local variables), or a $ 
1839   (global variables). Beyond the first character, variables may also contain 
1840   numbers and underscores `_'. Variables are called in to existence just by 
1841   setting them (no explicit declarations are necessary). 
1843   Local variables are limited in scope to the subroutine (or menu item 
1844   definition) in which they appear. Global variables are accessible from all 
1845   routines, and their values persist beyond the call which created them, until 
1846   reset. 
1849   Built-in Variables
1851   NEdit has a number of permanently defined variables, which are used to 
1852   access global editor information and information about the the window in 
1853   which the macro is executing. These are listed along with the built in 
1854   functions in the section titled "Macro Subroutines". 
1857   FUNCTIONS AND SUBROUTINES
1859   The syntax of a function or subroutine call is: 
1861      function_name(arg1, arg2, ...)
1863   where arg1, arg2, etc. represent up to 9 argument values which are passed to 
1864   the routine being called. A function or subroutine call can be on a line by 
1865   itself, as above, or if it returns a value, can be invoked within a 
1866   character or numeric expression: 
1868      a = fn1(b, c) + fn2(d)
1869      dialog("fn3 says: " fn3())
1871   Arguments are passed by value. This means that you can not return values via 
1872   the argument list, only through the function value or indirectly through 
1873   agreed-upon global variables. 
1876   Built-in Functions
1878   NEdit has a wide range of built in functions which can be called from the 
1879   macro language. These routines are divided into two classes, macro-language 
1880   functions, and editor action routines. Editor action routines are more 
1881   flexible, in that they may be called either from the macro language, or 
1882   bound directly to keys via translation tables. They are also limited, 
1883   however, in that they can not return values. Macro language routines can 
1884   return values, but can not be bound to keys in translation tables. 
1886   Nearly all of the built-in subroutines operate on an implied window, which 
1887   is initially the window from which the macro was started. To manipulate the 
1888   contents of other windows, use the focus_window subroutine to change the 
1889   focus to the ones you wish to modify. focus_window can also be used to 
1890   iterate over all of the currently open windows, using the special keyword 
1891   names, "last" and "next". 
1893   For backwards compatibility, hyphenated action routine names are allowed, 
1894   and most of the existing action routines names which contain underscores 
1895   have an equivalent version containing hyphens ('-') instead of underscores. 
1896   Use of these names is discouraged. The macro parser resolves the ambiguity 
1897   between '-' as the subtraction/negation operator, and - as part of an action 
1898   routine name by assuming subtraction unless the symbol specifically matches 
1899   an action routine name. 
1902   User Defined Functions
1904   Users can define their own macro subroutines, using the define keyword: 
1906      define subroutine_name {
1907         < body of subroutine >
1908      }
1910   Macro definitions can not appear within other definitions, or within macro 
1911   menu item definitions (usually they are found in the autoload macro file). 
1913   The arguments with which a user-defined subroutine or function was invoked, 
1914   are presented as $1, $2, ... , $9. The number of arguments can be read from 
1915   $n_args. 
1917   To return a value from a subroutine, and/or to exit from the subroutine 
1918   before the end of the subroutine body, use the return statement: 
1920      return <value to return>
1923   OPERATORS AND EXPRESSIONS
1925   Operators have the same meaning and precedence that they do in C, except for 
1926   ^, which raises a number to a power (y^x means y to the x power), rather 
1927   than bitwise exclusive OR. The table below lists operators in decreasing 
1928   order of precedence. 
1930      Operators                Associativity
1931      ()
1932      ^                        right to left
1933      - ! ++ --                (unary)
1934      * / %                    left to right
1935      + -                      left to right
1936      > >= < <= == !=          left to right
1937      &                        left to right
1938      |                        left to right
1939      &&                       left to right
1940      ||                       left to right
1941      (concatenation)          left to right
1942      = += -= *= /= %=, &= |=  right to left
1944   The order in which operands are evaluated in an expression is undefined, 
1945   except for && and ||, which like C, evaluate operands left to right, but 
1946   stop when further evaluation would no longer change the result. 
1949   Numerical Operators
1951   The numeric operators supported by the NEdit macro language are listed 
1952   below: 
1954      + addition
1955      - subtraction or negation
1956      * multiplication
1957      / division
1958      % modulo
1959      ^ power
1960      & bitwise and
1961      | bitwise or
1963   Increment (++) and decrement (--) operators can also be appended or 
1964   prepended to variables within an expression. Prepended increment/decrement 
1965   operators act before the variable is evaluated. Appended increment/decrement 
1966   operators act after the variable is evaluated. 
1969   Logical and Comparison Operators
1971   Logical operations produce a result of 0 (for false) or 1 (for true). In a 
1972   logical operation, any non-zero value is recognized to mean true. The 
1973   logical and comparison operators allowed in the NEdit macro language are 
1974   listed below: 
1976      && logical and
1977      || logical or
1978      !  not
1979      >  greater
1980      <  less
1981      >= greater or equal
1982      <= less or equal
1983      == equal (integers and/or strings)
1984      != not equal (integers and/or strings)
1987   Character String Operators
1989   The "operator" for concatenating two strings is the absence of an operator. 
1990   Adjoining character strings with no operator in between means concatenation: 
1992      d = a b "string" c
1993      t_print("the value of a is: " a)
1995   Comparison between character strings is done with the == and != operators, 
1996   (as with integers). There are a number of useful built-in routines for 
1997   working with character strings, which are listed in the section called 
1998   "Macro Subroutines". 
2001   Arrays and Array Operators
2003   Arrays may contain either strings, integers, or other arrays. Arrays are 
2004   associative, which means that they relate two pieces of information, the key 
2005   and the value. The key is always a string; if you use an integer it is 
2006   converted to a string. 
2008   To determine if a given key is in an array, use the 'in' keyword. 
2010       if ("6" in x)
2011           <body>
2013   If the left side of the in keyword is an array, the result is true if every 
2014   key in the left array is in the right array. Array values are not compared. 
2016   To iterate through all the keys of an array use the 'for' looping construct. 
2017   Keys are not guaranteed in any particular order: 
2019       for (aKey in x)
2020           <body>
2022   Elements can be removed from an array using the delete command: 
2024       delete x[3] # deletes element with key 3
2025       delete x[]  # deletes all elements
2027   The number of elements in an array can be determined by referencing the 
2028   array with no indices: 
2030       dialog("array x has " x[] " elements", "OK")
2032   Arrays can be combined with some operators. All the following operators only 
2033   compare the keys of the arrays. 
2035       result = x + y   (Merge arrays)
2037   The 'result' is a new array containing keys from both x and y. If duplicates 
2038   are present values from y are used. 
2040       result = x - y   (Remove keys)
2042   The 'result' is a new array containing all keys from x that are not in y. 
2044       result = x & y   (Common keys)
2046   The 'result' is a new array containing all keys which are in both x and y. 
2047   The values from y are used. 
2049       result = x | y   (Unique keys)
2051   The 'result' is a new array containing keys which exist in either x or y, 
2052   but not both. 
2054   When duplicate keys are encountered using the + and & operators, the values 
2055   from the array on the right side of the operators are used for the result. 
2056   All of the above operators are array only, meaning both the left and right 
2057   sides of the operator must be arrays. The results are also arrays. 
2059   Array keys can also contain multiple dimensions: 
2061       x[1, 1, 1] = "string"
2063   These are used in the expected way, e.g.: 
2065       for (i = 1; i < 3; i++)
2066       {
2067           for (j = 1; j < 3; j++)
2068           {
2069               x[i, j] = k++
2070           }
2071       }
2073   gives the following array: 
2075       x[1, 1] = 0
2076       x[1, 2] = 1
2077       x[2, 1] = 2
2078       x[2, 2] = 3
2080   Internally all indices are part of one string, separated by the string 
2081   $sub_sep (ASCII 0x18). The first key in the above example is in fact 
2083       ["1" $sub_sep "1"]
2085   If you need to extract one of the keys, you can use split(), using $sub_sep 
2086   as the separator. 
2088   You can also check for the existence of multi-dimensional array by looking 
2089   for $sub_sep in the key. 
2091   Last, you need $sub_sep if you want to use the 'in' keyword. 
2093       if ((1,2) in myArray)
2094       {..}
2096   doesn't work, but 
2098       if (("1" $sub_sep "2") in myArray)
2099       {..}
2101   does work. 
2104   LOOPING AND CONDITIONALS
2106   NEdit supports looping constructs: for and while, and conditional 
2107   statements: if and else, with essentially the same syntax as C: 
2109      for (<init>, ...; <condition>; <increment>, ...) <body>
2111      while (<condition>) <body>
2113      if (<condition>) <body>
2115      if (<condition>) <body> else <body>
2117   <body>, as in C, can be a single statement, or a list of statements enclosed 
2118   in curly braces ({}). <condition> is an expression which must evaluate to 
2119   true for the statements in <body> to be executed. for loops may also contain 
2120   initialization statements, <init>, executed once at the beginning of the 
2121   loop, and increment/decrement statements (or any arbitrary statement), which 
2122   are executed at the end of the loop, before the condition is evaluated 
2123   again. 
2125   Examples: 
2127     for (i=0; i<100; i++)
2128        j = i * 2
2130     for (i=0, j=20; i<20; i++, j--) {
2131        k = i * j
2132        t_print(i, j, k)
2133     }
2135     while (k > 0)
2136     {
2137        k = k - 1
2138        t_print(k)
2139     }
2141     for (;;) {
2142        if (i-- < 1)
2143            break
2144     }
2146   Loops may contain break and continue statements. A break statement causes an 
2147   exit from the innermost loop, a continue statement transfers control to the 
2148   end of the loop. 
2150 -----------------
2151 MACRO SUBROUTINES
2152 -----------------
2155   BUILT IN VARIABLES
2157   These variables are read-only and can not be changed. 
2159 $active_pane
2160   Index of the current pane. 
2162 $auto_indent
2163   Contains the current preference for auto indent. Can be "off", "on" or 
2164   "auto". 
2166 $calltip_ID
2167   Equals the ID of the currently displayed calltip, or 0 if no calltip is 
2168   being displayed. 
2170 $cursor
2171   Position of the cursor in the current window. 
2173 $column
2174   Column number of the cursor position in the current window. 
2176 $display_width
2177   Width of the current pane in pixels. 
2179 $em_tab_dist
2180   If tab emulation is turned on in the Tabs... dialog of the Preferences menu, 
2181   value is the distance between emulated tab stops. If tab emulation is turned 
2182   off, value is -1. 
2184 $empty_array
2185   An array with no elements. This can be used to initialize an array to an 
2186   empty state. 
2188 $file_format
2189   Current newline format that the file will be saved with. Can be "unix", 
2190   "dos" or "macintosh". 
2192 $file_name
2193   Name of the file being edited in the current window, stripped of directory 
2194   component. 
2196 $file_path
2197   Directory component of file being edited in the current window. 
2199 $font_name
2200   Contains the current plain text font name. 
2202 $font_name_bold
2203   Contains the current bold text font name. 
2205 $font_name_bold_italic
2206   Contains the current bold-italic text font name. 
2208 $font_name_italic
2209   Contains the current italic text font name. 
2211 $highlight_syntax
2212   Whether syntax highlighting is turned on. 
2214 $incremental_backup
2215   Contains 1 if incremental auto saving is on, otherwise 0. 
2217 $incremental_search_line
2218   Has a value of 1 if the preference is selected to always show the 
2219   incremental search line, otherwise 0. 
2221 $language_mode
2222   Name of language mode set in the current window. 
2224 $line
2225   Line number of the cursor position in the current window. 
2227 $locked
2228   True if the file has been locked by the user. 
2230 $make_backup_copy
2231   Has a value of 1 if original file is kept in a backup file on save, 
2232   otherwise 0. 
2234 $max_font_width
2235   The maximum font width of all the active styles. Syntax highlighting styles 
2236   are only considered if syntax highlighting is turned on. 
2238 $min_font_width
2239   The minimum font width of all the active styles. Syntax highlighting styles 
2240   are only considered if syntax highlighting is turned on. 
2242 $modified
2243   True if the file in the current window has been modified and the 
2244   modifications have not yet been saved. 
2246 $n_display_lines
2247   The number of lines visible in the currently active pane. 
2249 $n_panes
2250   The number of panes in the current window. 
2252 $overtype_mode
2253   True if in Overtype mode. 
2255 $read_only
2256   True if the file is read only. 
2258 $selection_start, $selection_end   
2259   Beginning and ending positions of the primary selection in the current 
2260   window, or -1 if there is no text selected in the current window. 
2262 $selection_left, $selection_right  
2263   Left and right character offsets of the rectangular (primary) selection in 
2264   the current window, or -1 if there is no selection or it is not rectangular. 
2266 $server_name
2267   Name of the current NEdit server. 
2269 $show_line_numbers
2270   Whether line numbers are shown next to the text. 
2272 $show_matching
2273   Contains the current preference for showing matching pairs, such as "[]" and 
2274   "{}" pairs. Can be "off", "delimiter", or "range". 
2276 $match_syntax_based
2277   Whether pair matching should use syntax information, if available. 
2279 $statistics_line
2280   Has a value of 1 if the statistics line is shown, otherwise 0. 
2282 $sub_sep
2283   Contains the value of the array sub-script separation string. 
2285 $tab_dist
2286   The distance between tab stops for a hardware tab character, as set in the 
2287   Tabs... dialog of the Preferences menu. 
2289 $text_length
2290   The length of the text in the current window. 
2292 $top_line
2293   The line number of the top line of the currently active pane. 
2295 $use_tabs
2296   Whether the user is allowing the NEdit to insert tab characters to maintain 
2297   spacing in tab emulation and rectangular dragging operations. (The setting 
2298   of the "Use tab characters in padding and emulated tabs" button in the 
2299   Tabs... dialog of the Preferences menu.) 
2301 $wrap_margin
2302   The right margin in the current window for text wrapping and filling. 
2304 $wrap_text
2305   The current wrap text mode. Values are "none", "auto" or "continuous". 
2308   BUILT-IN SUBROUTINES
2310 append_file( string, filename )
2311   Appends a string to a named file. Returns 1 on successful write, or 0 if 
2312   unsuccessful. 
2314 beep()
2315   Ring the bell. 
2317 calltip( "text_or_key" [, mode [, pos]] )
2318   Pops up a calltip. <pos> is an optional position in the buffer where the tip 
2319   will be displayed. The upper-left corner of the calltip will appear below 
2320   where the cursor would appear if it were at this position. <mode> is one of 
2321   "tipText" (default), "tipKey", or "tagKey". "tipText" displays the text 
2322   as-is, "tagKey" uses it as the key to look up a tag, then converts the tag 
2323   to a calltip, and "tipKey uses it as the key to look up a calltip, then 
2324   falls back to a tag if that fails. You'll usually use "tipKey" or "tipText". 
2325   Returns the ID of the calltip if it was found and/or displayed correctly, 0 
2326   otherwise. 
2328 clipboard_to_string()  
2329   Returns the contents of the clipboard as a macro string. Returns empty 
2330   string on error. 
2332 dialog( message, btn_1_label, btn_2_label, ... )  
2333   Pop up a dialog for querying and presenting information to the user. First 
2334   argument is a string to show in the message area of the dialog. Up to eight 
2335   additional optional arguments represent labels for buttons to appear along 
2336   the bottom of the dialog. Returns the number of the button pressed (the 
2337   first button is number 1), or 0 if the user closed the dialog via the window 
2338   close box. 
2340 focus_window( window_name )  
2341   Sets the window on which subsequent macro commands operate. window_name can 
2342   be either a fully qualified file name, or one of "last" for the last window 
2343   created, or "next" for the next window in the chain from the currently 
2344   focused window (the first window being the one returned from calling 
2345   focus_window("last"). Returns the name of the newly-focused window, or an 
2346   empty string if the requested window was not found. 
2348 get_character( position )  
2349   Returns the single character at the position indicated by the first argument 
2350   to the routine from the current window. 
2352 get_range( start, end )  
2353   Returns the text between a starting and ending position from the current 
2354   window. 
2356 get_selection()  
2357   Returns a string containing the text currently selected by the primary 
2358   selection either from the current window (no keyword), or from anywhere on 
2359   the screen (keyword "any"). 
2361 getenv( name )
2362   Gets the value of an environment variable. 
2364 kill_calltip( [calltip_ID] )
2365   Kills any calltip that is being displayed in the window in which the macro 
2366   is running. If there is no displayed calltip this does nothing. If a calltip 
2367   ID is supplied then the calltip is killed only if its ID is calltip_ID. 
2369 length( string )
2370   Returns the length of a string 
2372 list_dialog( message, text, btn_1_label, btn_2_label, ... )  
2373   Pop up a dialog for prompting the user to choose a line from the given text 
2374   string. The first argument is a message string to be used as a title for the 
2375   fixed text describing the list. The second string provides the list data: 
2376   this is a text string in which list entries are separated by newline 
2377   characters. Up to seven additional optional arguments represent labels for 
2378   buttons to appear along the bottom of the dialog. Returns the line of text 
2379   selected by the user as the function value (without any newline separator) 
2380   or the empty string if none was selected, and number of the button pressed 
2381   (the first button is number 1), in $list_dialog_button. If the user closes 
2382   the dialog via the window close box, the function returns the empty string, 
2383   and $list_dialog_button returns 0. 
2385 max( n1, n2, ... )
2386   Returns the maximum value of all of its arguments 
2388 min( n1, n2, ... )
2389   Returns the minimum value of all of its arguments 
2391 read_file( filename )  
2392   Reads the contents of a text file into a string. On success, returns 1 in 
2393   $read_status, and the contents of the file as a string in the subroutine 
2394   return value. On failure, returns the empty string "" and an 0 $read_status. 
2396 replace_in_string( string, search_for, replace_with [, type, "copy"] )  
2397   Replaces all occurrences of a search string in a string with a replacement 
2398   string. Arguments are 1: string to search in, 2: string to search for, 3: 
2399   replacement string. There are two optional arguments. One is a search type, 
2400   either "literal", "case", "word", "caseWord", "regex", or "regexNoCase". The 
2401   default search type is "literal". If the optional "copy" argument is 
2402   specified, a copy of the input string is returned when no replacements were 
2403   performed. By default an empty string ("") will be returned in this case. 
2404   Returns a new string with all of the replacements done. 
2406 replace_range( start, end, string )  
2407   Replaces all of the text in the current window between two positions. 
2409 replace_selection( string )  
2410   Replaces the primary-selection selected text in the current window. 
2412 replace_substring( string, start, end, replace_with )  
2413   Replacing a substring between two positions in a string within another 
2414   string. 
2416 search( search_for, start [, search_type, wrap, direction] )  
2417   Searches silently in a window without dialogs, beeps, or changes to the 
2418   selection. Arguments are: 1: string to search for, 2: starting position. 
2419   Optional arguments may include the strings: "wrap" to make the search wrap 
2420   around the beginning or end of the string, "backward" or "forward" to change 
2421   the search direction ("forward" is the default), "literal", "case", "word", 
2422   "caseWord", "regex", or "regexNoCase" to change the search type (default is 
2423   "literal"). Returns the starting position of the match, or -1 if nothing 
2424   matched. Also returns the ending position of the match in $search_end. 
2426 search_string( string, search_for, start [, search_type, direction] ) 
2428   Built-in macro subroutine for searching a string. Arguments are 1: string to 
2429   search in, 2: string to search for, 3: starting position. Optional arguments 
2430   may include the strings: "wrap" to make the search wrap around the beginning 
2431   or end of the string, "backward" or "forward" to change the search direction 
2432   ("forward" is the default), "literal", "case", "word", "caseWord", "regex", 
2433   or "regexNoCase" to change the search type (default is "literal"). Returns 
2434   the starting position of the match, or -1 if nothing matched. Also returns 
2435   the ending position of the match in $search_end. 
2437 select( start, end )  
2438   Selects (with the primary selection) text in the current buffer between a 
2439   starting and ending position. 
2441 select_rectangle( start, end, left, right )  
2442   Selects a rectangular area of text between a starting and ending position, 
2443   and confined horizontally to characters displayed between positions "left", 
2444   and "right". 
2446 set_cursor_pos( position )
2447   Set the cursor position for the current window. 
2449 shell_command( command, input_string )  
2450   Executes a shell command, feeding it input from input_string. On completion, 
2451   output from the command is returned as the function value, and the command's 
2452   exit status is returned in the global variable $shell_cmd_status. 
2454 split(string, separation_string [, search_type])
2455   Splits a string using the separator specified. Optionally the search_type 
2456   argument can specify how the separation_string is interpreted. The default 
2457   is "literal". The returned value is an array with keys beginning at 0. 
2459 string_dialog( message, btn_1_label, btn_2_label, ... )  
2460   Pops up a dialog prompting the user to enter information. The first argument 
2461   is a string to show in the message area of the dialog. Up to nine additional 
2462   optional arguments represent labels for buttons to appear along the bottom 
2463   of the dialog. Returns the string entered by the user as the function value, 
2464   and number of the button pressed (the first button is number 1), in 
2465   $string_dialog_button. If the user closes the dialog via the window close 
2466   box, the function returns the empty string, and $string_dialog_button 
2467   returns 0. 
2469 string_compare(string1, string2 [, consider-case])
2470   Compare two strings and return 0 if they are equal, -1 if string1 is less 
2471   than string2 or 1 if string1 is greater than string2. The values for the 
2472   optional consider-case argument is either "case" or "nocase". The default is 
2473   to do a case sensitive comparison. 
2475 string_to_clipboard( string )  
2476   Copy the contents of a macro string to the clipboard. 
2478 substring( string, start, end )  
2479   Returns the portion of a string between a starting and ending position. 
2481 t_print( string1, string2, ... )  
2482   Writes strings to the terminal (stdout) from which NEdit was started. 
2484 tolower( string )
2485   Return an all lower-case version of string. 
2487 toupper( string )
2488   Return an all upper-case version of string. 
2490 write_file( string, filename )  
2491   Writes a string (parameter 1) to a file named in parameter 2. Returns 1 on 
2492   successful write, or 0 if unsuccessful. 
2494 ---------------
2495 ACTION ROUTINES
2496 ---------------
2498   All of the editing capabilities of NEdit are represented as a special type 
2499   of subroutine, called an action routine, which can be invoked from both 
2500   macros and translation table entries (see "Key Binding" in the Customizing 
2501   section of the Help menu). 
2504   ACTIONS REPRESENTING MENU COMMANDS
2506     File Menu                 Search Menu
2507     -----------------------   -------------------------
2508     new()                     find()
2509     open()                    find_dialog()
2510     open_dialog()             find_again()
2511     open_selected()           find_selection()
2512     close()                   replace()
2513     save()                    replace_dialog()
2514     save_as()                 replace_all()
2515     save_as_dialog()          replace_in_selection()
2516     revert_to_saved()         replace_again()
2517     include_file()            goto_line_number()
2518     include_file_dialog()     goto_line_number_dialog()
2519     load_macro_file()         goto_selected()
2520     load_macro_file_dialog()  mark()
2521     load_tags_file()          mark_dialog()
2522     load_tags_file_dialog()   goto_mark()
2523     unload_tags_file()        goto_mark_dialog()
2524     print()                   goto_matching()
2525     print_selection()         select_to_matching()
2526     exit()                    find_definition()
2528     Edit Menu                 Shell Menu
2529     -----------------------   -------------------------
2530     undo()                    filter_selection_dialog()
2531     redo()                    filter_selection()
2532     delete()                  execute_command()
2533     select_all()              execute_command_dialog()
2534     shift_left()              execute_command_line()
2535     shift_left_by_tab()       shell_menu_command()
2536     shift_right()
2537     shift_right_by_tab()      Macro Menu
2538     uppercase()               -------------------------
2539     lowercase()               macro_menu_command()
2540     fill_paragraph()          repeat_macro()
2541     control_code_dialog()     repeat_dialog()
2543                               Windows Menu
2544                               -------------------------
2545                               split_window()
2546                               close_pane()
2548   An action representing a menu command is named the same as its corresponding 
2549   menu item except that all punctuation is removed, all letters are changed to 
2550   lower case, and spaces are replaced with underscores. To present a dialog to 
2551   ask the user for input, use the actions with the `_dialog` suffix. Actions 
2552   without the `_dialog` suffix take the information from the routine's 
2553   arguments (see below). 
2556   MENU ACTION ROUTINE ARGUMENTS
2558   Arguments are text strings enclosed in quotes. Below are the menu action 
2559   routines which take arguments. Optional arguments are enclosed in []. 
2561     close( ["prompt" | "save" | "nosave"] )
2563     execute_command( shell-command )
2565     filter_selection( shell-command )
2567     find( search-string [, search-direction] [, search-type] 
2568        [, search-wrap] )
2570     find_again( [search-direction] [, search-wrap] )
2572     find_definition( [tag-name] )
2574     find_dialog( [search-direction] [, search-type] 
2575        [, keep-dialog] )
2577     find_selection( [search-direction] [, search-wrap] 
2578        [, non-regex-search-type] )
2580     goto_line_number( [line-number] )
2582     goto_mark( mark-letter )
2584     include_file( filename )
2586     load_tags_file( filename )
2588     macro_menu_command( macro-menu-item-name )
2590     mark( mark-letter )
2592     open( filename )
2594     replace( search-string, replace-string, 
2595        [, search-direction] [, search-type] [, search-wrap] )
2597     replace_again( [search-direction] [, search-wrap] )
2599     replace_dialog( [search-direction] [, search-type]
2600        [, keep-dialog] )
2602     replace_in_selection( search-string, 
2603        replace-string [, search-type] )
2605     save_as( filename )
2607     shell_menu_command( shell-menu-item-name )
2609     unload_tags_file( filename )
2611     ----------- Some notes on argument types above -----------
2613     filename       Path names are relative to the directory from
2614                    which NEdit was started. Shell interpreted 
2615                    wildcards and `~' are not expanded.
2617     keep-dialog    Either "keep" or "nokeep".
2619     mark-letter    The mark command limits users to single 
2620                    letters. Inside of macros, numeric marks are
2621                    allowed, which won't interfere with marks set
2622                    by the user.
2624     macro-menu-item-name
2625                    Name of the command exactly as specified in 
2626                    the Macro Menu dialogs.
2628     non-regex-search-type 
2629                    Either "literal", "case", "word", or 
2630                    "caseWord".
2632     search-direction
2633                    Either "forward" or "backward".
2635     search-type    Either "literal", "case", "word", 
2636                    "caseWord", "regex", or "regexNoCase".
2638     search-wrap    Either "wrap" or "nowrap".
2640     shell-menu-item-name
2641                    Name of the command exactly as specified in 
2642                    the Shell Menu dialogs.
2645   WINDOW PREFERENCES ACTIONS
2647 set_auto_indent( "off" | "on" | "smart" )
2648   Set auto indent mode for the current window. 
2650 set_em_tab_dist( em-tab-distance )
2651   Set the emulated tab size. An em-tab-distance value of 0 or -1 translates to 
2652   no emulated tabs. Em-tab-distance must be smaller than 1000. 
2654 set_fonts( font-name, italic-font-name, bold-font-name, bold-italic-font-name )
2655   Set all the fonts used for the current window. 
2657 set_highlight_syntax( [0 | 1] )
2658   Set syntax highlighting mode for the current window. A value of 0 turns it 
2659   off and a value of 1 turns it on. If no parameters are supplied the option 
2660   is toggled. 
2662 set_incremental_backup( [0 | 1] )
2663   Set incremental backup mode for the current window. A value of 0 turns it 
2664   off and a value of 1 turns it on. If no parameters are supplied the option 
2665   is toggled. 
2667 set_incremental_search_line( [0 | 1] )
2668   Show or hide the incremental search line for the current window. A value of 
2669   0 turns it off and a value of 1 turns it on. If no parameters are supplied 
2670   the option is toggled. 
2672 set_language_mode( language-mode )
2673   Set the language mode for the current window. If the language mode is "" or 
2674   unrecognized, it will be set to Plain. 
2676 set_locked( [0 | 1] )
2677   This only affects the locked status of a file, not it's read-only status. 
2678   Permissions are NOT changed. A value of 0 turns it off and a value of 1 
2679   turns it on. If no parameters are supplied the option is toggled. 
2681 set_make_backup_copy( [0 | 1] )
2682   Set whether backup copies are made during saves for the current window. A 
2683   value of 0 turns it off and a value of 1 turns it on. If no parameters are 
2684   supplied the option is toggled. 
2686 set_overtype_mode( [0 | 1] )
2687   Set overtype mode for the current window. A value of 0 turns it off and a 
2688   value of 1 turns it on. If no parameters are supplied the option is toggled. 
2690 set_show_line_numbers( [0 | 1] )
2691   Show or hide line numbers for the current window. A value of 0 turns it off 
2692   and a value of 1 turns it on. If no parameters are supplied the option is 
2693   toggled. 
2695 set_show_matching( "off" | "delimiter" | "range" )
2696   Set show matching (...) mode for the current window. 
2698 set_match_syntax_based( [0 | 1] )
2699   Set whether matching should be syntax based for the current window. 
2701 set_statistics_line( [0 | 1] )
2702   Show or hide the statistics line for the current window. A value of 0 turns 
2703   it off and a value of 1 turns it on. If no parameters are supplied the 
2704   option is toggled. 
2706 set_tab_dist( tab-distance )
2707   Set the size of hardware tab spacing. Tab-distance must must be a value 
2708   greater than 0 and no greater than 20. 
2710 set_use_tabs( [0 | 1] )
2711   Set whether tabs are used for the current window. A value of 0 turns it off 
2712   and a value of 1 turns it on. If no parameters are supplied the option is 
2713   toggled. 
2715 set_wrap_margin( wrap-width )
2716   Set the wrap width for text wrapping of the current window. A value of 0 
2717   means to wrap at window width. 
2719 set_wrap_text( "none" | "auto" | "continuous" )
2720   Set wrap text mode for the current window. 
2723   KEYBOARD-ONLY ACTIONS
2725   In addition to the arguments listed in the call descriptions below, any 
2726   routine involving cursor movement can take the argument "extend", meaning, 
2727   adjust the primary selection to the new cursor position. Routines which take 
2728   the "extend" argument as well as mouse dragging operations for both primary 
2729   and secondary selections can take the optional keyword "rect", meaning, make 
2730   the selection rectangular. Any routine that accepts the "scrollbar" argument 
2731   will move the display but not the cursor or selection. Routines that accept 
2732   the "nobell" argument will fail silently without beeping, when that argument 
2733   is supplied. 
2735 backward_character( ["nobell"] )
2736   Moves the cursor one character to the left. 
2738 backward_paragraph(["nobell"] )
2739   Moves the cursor to the beginning of the paragraph, or if the cursor is 
2740   already at the beginning of a paragraph, moves the cursor to the beginning 
2741   of the previous paragraph. Paragraphs are defined as regions of text 
2742   delimited by one or more blank lines. 
2744 backward_word( ["nobell"] )
2745   Moves the cursor to the beginning of a word, or, if the cursor is already at 
2746   the beginning of a word, moves the cursor to the beginning of the previous 
2747   word. Word delimiters are user-settable, and defined by the X resource 
2748   wordDelimiters. 
2750 beginning_of_file( ["scrollbar"] )
2751   Moves the cursor to the beginning of the file. 
2753 beginning_of_line( ["absolute"] ) 
2754   Moves the cursor to the beginning of the line. If "absolute" is given, 
2755   always moves to the absolute beginning of line, regardless of the text 
2756   wrapping mode. 
2758 beginning_of_selection()
2759   Moves the cursor to the beginning of the selection without disturbing the 
2760   selection. 
2762 copy_clipboard()
2763   Copies the current selection to the clipboard. 
2765 copy_primary()
2766   Copies the primary selection to the cursor. 
2768 copy_to()
2769   If a secondary selection exists, copies the secondary selection to the 
2770   cursor. If no secondary selection exists, copies the primary selection to 
2771   the pointer location. 
2773 copy_to_or_end_drag()
2774   Completes either a secondary selection operation, or a primary drag. If the 
2775   user is dragging the mouse to adjust a secondary selection, the selection is 
2776   copied and either inserted at the cursor location, or, if pending-delete is 
2777   on and a primary selection exists in the window, replaces the primary 
2778   selection. If the user is dragging a block of text (primary selection), 
2779   completes the drag operation and leaves the text at it's current location. 
2781 cut_clipboard()
2782   Deletes the text in the primary selection and places it in the clipboard. 
2784 cut_primary()
2785   Copies the primary selection to the cursor and deletes it at its original 
2786   location. 
2788 delete_selection()
2789   Deletes the contents of the primary selection. 
2791 delete_next_character( ["nobell"] )
2792   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2793   character following the cursor. 
2795 delete_previous_character( ["nobell"] )
2796   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2797   character before the cursor. 
2799 delete_next_word( ["nobell"] )
2800   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2801   word following the cursor. 
2803 delete_previous_word( ["nobell"] )
2804   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2805   word before the cursor. 
2807 delete_to_start_of_line( ["nobell", "wrap"] )
2808   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2809   characters between the cursor and the start of the line. If "wrap" is given, 
2810   deletes to the previous wrap point or beginning of line, whichever is 
2811   closest. 
2813 delete_to_end_of_line( ["nobell", "absolute"] )
2814   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2815   characters between the cursor and the end of the line. If "absolute" is 
2816   given, always deletes to the absolute end of line, regardless of the text 
2817   wrapping mode. 
2819 deselect_all()
2820   De-selects the primary selection. 
2822 end_of_file( ["scrollbar"] )
2823   Moves the cursor to the end of the file. 
2825 end_of_line( ["absolute"] ) 
2826   Moves the cursor to the end of the line. If "absolute" is given, always 
2827   moves to the absolute end of line, regardless of the text wrapping mode. 
2829 end_of_selection()
2830   Moves the cursor to the end of the selection without disturbing the 
2831   selection. 
2833 exchange( ["nobell"] )
2834   Exchange the primary and secondary selections. 
2836 extend_adjust()
2837   Attached mouse-movement events to begin a selection between the cursor and 
2838   the mouse, or extend the primary selection to the mouse position. 
2840 extend_end()
2841   Completes a primary drag-selection operation. 
2843 extend_start()
2844   Begins a selection between the cursor and the mouse. A drag-selection 
2845   operation can be started with either extend_start or grab_focus. 
2847 focus_pane( [relative-pane] | [positive-index] | [negative-index] )
2848   Move the focus to the requested pane. Arguments can be specified in the form 
2849   of a relative-pane ("first", "last", "next", "previous"), a positive-index 
2850   (numbers greater than 0, 1 is the same as "first") or a negative-index 
2851   (numbers less than 0, -1 is the same as "last"). 
2853 forward_character()
2854   Moves the cursor one character to the right. 
2856 forward_paragraph( ["nobell"] )
2857   Moves the cursor to the beginning of the next paragraph. Paragraphs are 
2858   defined as regions of text delimited by one or more blank lines. 
2860 forward_word( ["tail"] ["nobell"] )
2861   Moves the cursor to the beginning of the next word. Word delimiters are 
2862   user-settable, and defined by the X resource wordDelimiters. If the "tail" 
2863   argument is supplied the cursor will be moved to the end of the current word 
2864   or the end of the next word, if the cursor is between words. 
2866 grab_focus()
2867   Moves the cursor to the mouse pointer location, and prepares for a possible 
2868   drag-selection operation (bound to extend_adjust), or multi-click operation 
2869   (a further grab_focus action). If a second invocation of grab focus follows 
2870   immediately, it selects a whole word, or a third, a whole line. 
2872 insert_string( "string" )
2873   If pending delete is on and the cursor is inside the selection, replaces the 
2874   selection with "string". Otherwise, inserts "string" at the cursor location. 
2876 key_select( "direction" [,"nobell"] )
2877   Moves the cursor one character in "direction" ("left", "right", "up", or 
2878   "down") and extends the selection. Same as 
2879   forward/backward-character("extend"), or process-up/down("extend"), for 
2880   compatibility with previous versions. 
2882 move-destination()
2883   Moves the cursor to the pointer location without disturbing the selection. 
2884   (This is an unusual way of working. We left it in for compatibility with 
2885   previous versions, but if you actually use this capability, please send us 
2886   some mail, otherwise it is likely to disappear in the future. 
2888 move_to()
2889   If a secondary selection exists, deletes the contents of the secondary 
2890   selection and inserts it at the cursor, or if pending-delete is on and there 
2891   is a primary selection, replaces the primary selection. If no secondary 
2892   selection exists, moves the primary selection to the pointer location, 
2893   deleting it from its original position. 
2895 move_to_or_end_drag()
2896   Completes either a secondary selection operation, or a primary drag. If the 
2897   user is dragging the mouse to adjust a secondary selection, the selection is 
2898   deleted and either inserted at the cursor location, or, if pending-delete is 
2899   on and a primary selection exists in the window, replaces the primary 
2900   selection. If the user is dragging a block of text (primary selection), 
2901   completes the drag operation and deletes the text from it's current 
2902   location. 
2904 newline()
2905   Inserts a newline character. If Auto Indent is on, lines up the indentation 
2906   of the cursor with the current line. 
2908 newline_and_indent()
2909   Inserts a newline character and lines up the indentation of the cursor with 
2910   the current line, regardless of the setting of Auto Indent. 
2912 newline_no_indent()
2913   Inserts a newline character, without automatic indentation, regardless of 
2914   the setting of Auto Indent. 
2916 next_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2917   Moves the cursor and scroll forward one page. The parameter "stutter" moves 
2918   the cursor to the bottom of the display, unless it is already there, 
2919   otherwise it will page down. The parameter "column" will maintain the 
2920   preferred column while moving the cursor. 
2922 page_left( ["scrollbar"] ["nobell"] )
2923   Move the cursor and scroll left one page. 
2925 page_right( ["scrollbar"] ["nobell"] )
2926   Move the cursor and scroll right one page. 
2928 paste_clipboard()
2929   Insert the contents of the clipboard at the cursor, or if pending delete is 
2930   on, replace the primary selection with the contents of the clipboard. 
2932 previous_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2933   Moves the cursor and scroll backward one page. The parameter "stutter" moves 
2934   the cursor to the top of the display, unless it is already there, otherwise 
2935   it will page up. The parameter "column" will maintain the preferred column 
2936   while moving the cursor. 
2938 process_bdrag()
2939   Same as secondary_or_drag_start for compatibility with previous versions. 
2941 process_cancel()
2942   Cancels the current extend_adjust, secondary_adjust, or 
2943   secondary_or_drag_adjust in progress. 
2945 process_down( ["nobell", "absolute"] )
2946   Moves the cursor down one line. If "absolute" is given, always moves to the 
2947   next line in the text buffer, regardless of wrapping. 
2949 process_return()
2950   Same as newline for compatibility with previous versions. 
2952 process_shift_down( ["nobell", "absolute"] )
2953   Same as process_down("extend") for compatibility with previous versions. 
2955 process_shift_up( ["nobell", "absolute"] )
2956   Same as process_up("extend") for compatibility with previous versions. 
2958 process_tab()
2959   If tab emulation is turned on, inserts an emulated tab, otherwise inserts a 
2960   tab character. 
2962 process_up( ["nobell", "absolute"] )
2963   Moves the cursor up one line. If "absolute" is given, always moves to the 
2964   previous line in the text buffer, regardless of wrapping. 
2966 raise_window([relative-window] | [positive-index] | [negative-index])
2967   Raise the current focused window to the front if no argument is supplied. 
2968   Arguments can be specified in the form of a relative-window ("first", 
2969   "last", "next", "previous"), a positive-index (numbers greater than 0, 1 is 
2970   the same as "last") or a negative-index (numbers less than 0, -1 is the same 
2971   as "first"). 
2973 scroll_down(nLines)
2974   Scroll the display down (towards the end of the file) by nLines. 
2976 scroll_left( nPixels )
2977   Scroll the display left by nPixels. 
2979 scroll_right( nPixels )
2980   Scroll the display right by nPixels. 
2982 scroll_up( nLines )
2983   Scroll the display up (towards the beginning of the file) by nLines. 
2985 scroll_to_line( lineNum )
2986   Scroll to position line number lineNum at the top of the pane. The first 
2987   line of a file is line 1. 
2989 secondary_adjust()
2990   Attached mouse-movement events to extend the secondary selection to the 
2991   mouse position. 
2993 secondary_or_drag_adjust()
2994   Attached mouse-movement events to extend the secondary selection, or 
2995   reposition the primary text being dragged. Takes two optional arguments, 
2996   "copy", and "overlay". "copy" leaves a copy of the dragged text at the site 
2997   at which the drag began. "overlay" does the drag in overlay mode, meaning 
2998   the dragged text is laid on top of the existing text, obscuring and 
2999   ultimately deleting it when the drag is complete. 
3001 secondary_or_drag_start()
3002   To be attached to a mouse down event. Begins drag selecting a secondary 
3003   selection, or dragging the contents of the primary selection, depending on 
3004   whether the mouse is pressed inside of an existing primary selection. 
3006 secondary_start()
3007   To be attached to a mouse down event. Begin drag selecting a secondary 
3008   selection. 
3010 select_all()
3011   Select the entire file. 
3013 self_insert()
3014   To be attached to a key-press event, inserts the character equivalent of the 
3015   key pressed. 
3018 ===========
3019 CUSTOMIZING
3020 ===========
3022 -----------------
3023 CUSTOMIZING NEDIT
3024 -----------------
3026   NEdit can be customized many different ways. The most important 
3027   user-settable options are presented in the Preferences menu, including all 
3028   options that users might need to change during an editing session. Options 
3029   set in the Default Settings sub-menu of the Preferences menu can be 
3030   preserved between sessions by selecting Save Defaults, which writes the 
3031   changes to the preferences file. See the section titled "Preferences" for 
3032   more details. 
3034   User defined commands can be added to NEdit's Shell, Macro, and window 
3035   background menus. Dialogs for creating items in these menus can be found 
3036   under Customize Menus in the Default Settings sub menu of the Preferences 
3037   menu. 
3039   For users who depend on NEdit every day and want to tune every excruciating 
3040   detail, there are also X resources for tuning a vast number of such details, 
3041   down to the color of each individual button. See the section "X Resources" 
3042   for more information, as well as a list of selected resources. 
3044   The most common reason customizing your X resources for NEdit, however, is 
3045   key binding. While limited key binding can be done through Preferences 
3046   settings (Preferences -> Default Settings -> Customize Menus), you can 
3047   really only add keys this way, and each key must have a corresponding menu 
3048   item. Any significant changes to key binding should be made via the 
3049   Translations resource and menu accelerator resources. The sections titled 
3050   "Key Binding" and "X Resources" have more information. 
3052 -----------
3053 PREFERENCES
3054 -----------
3056   The Preferences menu allows you to set options for both the current editing 
3057   window, and default values for newly created windows and future NEdit 
3058   sessions. Options in the Preferences menu itself (not in the Default 
3059   Settings sub-menu) take effect immediately and refer to the current window 
3060   only. Options in the Default Settings sub-menu provide initial settings for 
3061   future windows created using the New or Open commands; options affecting all 
3062   windows are also set here. Preferences set in the Default Settings sub-menu 
3063   can be saved in a file that is automatically read by NEdit at startup time, 
3064   by selecting Save Defaults. 
3067   PREFERENCES MENU
3069 Default Settings
3070   Menu of initial settings for future windows. Generally the same as the 
3071   options in the main part of the menu, but apply as defaults for future 
3072   windows created during this NEdit session. These settings can be saved using 
3073   the Save Defaults command below, to be loaded automatically each time NEdit 
3074   is started. 
3076 Save Defaults
3077   Save the default options as set under Default Settings for future NEdit 
3078   sessions. 
3080 Statistics Line
3081   Show the full file name, line number, and length of the file being edited. 
3083 Incremental Search Line
3084   Keep the incremental search bar (Search -> Find Incremental) permanently 
3085   displayed at the top of the window. 
3087 Show Line Numbers
3088   Display line numbers to the right of the text. 
3090 Language Mode
3091   Tells NEdit what language (if any) to assume, for selecting 
3092   language-specific features such as highlight patterns and smart indent 
3093   macros, and setting language specific preferences like word delimiters, tab 
3094   emulation, and auto-indent. See Features for Programming -> Programming with 
3095   NEdit for more information. 
3097 Auto Indent
3098   Setting Auto Indent "on" maintains a running indent (pressing the Return key 
3099   will line up the cursor with the indent level of the previous line). If 
3100   smart indent macros are available for the current language mode, smart 
3101   indent can be selected and NEdit will attempt to guess proper language 
3102   indentation for each new line. See Help -> Features for Programming -> 
3103   Automatic Indent for more information. 
3105 Wrap
3106   Choose between two styles of automatic wrapping or none. Auto Newline wrap, 
3107   wraps text at word boundaries when the cursor reaches the right margin, by 
3108   replacing the space or tab at the last word boundary with a newline 
3109   character. Continuous Wrap wraps long lines which extend past the right 
3110   margin. Continuous Wrap mode is typically used to produce files where 
3111   newlines are omitted within paragraphs, to make text filling automatic (a 
3112   kind of poor-man's word processor). Text of this style is common on Macs and 
3113   PCs but is not necessarily supported very well under Unix (except in 
3114   programs which deal with e-mail, for which it is often the format of 
3115   choice). 
3117 Wrap Margin
3118   Set margin for Auto Newline Wrap, Continuous Wrap, and Fill Paragraph. Lines 
3119   may, be wrapped at the right margin of the window, or the margin can be set 
3120   at a specific column. 
3122 Tabs
3123   Set the tab distance (number of characters between tab stops) for tab 
3124   characters, and control tab emulation and use of tab characters in padding 
3125   and emulated tabs. 
3127 Text Font...
3128   Change the font(s) used to display text (fonts for menus and dialogs must be 
3129   set using X resources for the text area of the window). See below for more 
3130   information. 
3132 Highlight Syntax
3133   If NEdit recognizes the language being edited, and highlighting patterns are 
3134   available for that language, use fonts and colors to enhance viewing of the 
3135   file. (See Help -> Features for Programming -> Syntax Highlighting for more 
3136   information. 
3138 Make Backup Copy
3139   On Save, write a backup copy of the file as it existed before the Save 
3140   command with the extension .bck (Unix only). 
3142 Incremental Backup
3143   Periodically make a backup copy of the file being edited under the name 
3144   `~filename` on Unix or `_filename` on VMS (see Crash Recovery). 
3146 Show Matching (..)
3147   Momentarily highlight matching parenthesis, brackets, and braces, or the 
3148   range between them, when one of these characters is typed, or when the 
3149   insertion cursor is positioned after it. Delimiter only highlights the 
3150   matching delimiter, while Range highlights the whole range of text between 
3151   the matching delimiters. 
3153   Optionally, the matching can make use of syntax information if syntax 
3154   highlighting is enabled. Alternatively, the matching is purely character 
3155   based. In general, syntax based matching results in fewer false matches. 
3157 Overtype
3158   In overtype mode, new characters entered replace the characters in front of 
3159   the insertion cursor, rather than being inserted before them. 
3161 Read Only
3162   Lock the file against accidental modification. This temporarily prevents the 
3163   file from being modified in this NEdit session. Note that this is different 
3164   from setting the file protection. 
3167   PREFERENCES -> DEFAULT SETTINGS MENU
3169   Options in the Preferences -> Default Settings menu have the same meaning as 
3170   those in the top-level Preferences menu, except that they apply to future 
3171   NEdit windows and future NEdit sessions if saved with the Save Defaults 
3172   command. Additional options which appear in this menu are: 
3174 Language Modes
3175   Define language recognition information (for determining language mode from 
3176   file name or content) and set language specific preferences. 
3178 Tag Collisions
3179   How to react to multiple tags for the same name. Tags are described in the 
3180   section: Features for Programmers -> Finding Declarations (ctags). In Show 
3181   All mode, all matching tags are displayed in a dialog. In Smart mode, if one 
3182   of the matching tags is in the current window, that tag is chosen, without 
3183   displaying the dialog. 
3185 Customize Menus
3186   Add/remove items from the Shell, Macro, and window background menus (see 
3187   below). 
3189 Customize Window Title
3190   Opens a dialog where the information to be displayed in the windows's title 
3191   field can be defined and tested. The dialog contains a Help button, 
3192   providing further information about the options available. 
3194 Searching
3195   Options for controlling the behavior of Find and Replace commands: 
3197   Verbose - Presents search results in dialog form, asks before wrapping a 
3198   search back around the beginning (or end) of the file (unless Beep On Search 
3199   Wrap is turned on). 
3201   Wrap Around - Search and Replace operations wrap around the beginning (or 
3202   end) of the file. 
3204   Beep On Search Wrap - Beep when Search and Replace operations wrap around 
3205   the beginning (or end) of the file (only if Wrap Around is turned on). 
3207   Keep Dialogs Up - Don't pop down Replace and Find boxes after searching. 
3209   Default Search Style - Initial setting for search type in Find and Replace 
3210   dialogs. 
3212   Default Replace Scope - [THIS OPTION IS ONLY PRESENT WHEN NEDIT WAS COMPILED 
3213   WITH THE 
3214    -DREPLACE_SCOPE FLAG TO SELECT AN ALTERNATIVE REPLACE DIALOG LAYOUT.]
3216   Initial setting for the scope in the Replace/Find dialog, when a selection 
3217   exists. It can be either "In Window", "In Selection", or "Smart". "Smart" 
3218   results in "In Window" if the size of the selection is smaller than 1 line, 
3219   and to "In Selection" otherwise. 
3221 Syntax Highlighting
3222   Program and configure enhanced text display for new or supported languages 
3223   (See Features for Programming -> Syntax Highlighting). 
3225 Append Line Feed on Save
3226   Some UNIX tools expect that files end with a line feed. If this option is 
3227   activated, NEdit will append one if required. 
3229 Sort Open Prev. Menu
3230   Option to order the File -> Open Previous menu alphabetically, versus in 
3231   order of last access. 
3233 Popups Under Pointer
3234   Display pop-up dialogs centered on the current mouse position, as opposed to 
3235   centered on the parent window. This generally speeds interaction, and is 
3236   essential for users who users who set their window managers so keyboard 
3237   focus follows the mouse. 
3239 Modification Warnings
3240   Pop up a warning dialog when files get changed external to NEdit. 
3242 Exit Warnings
3243   Ask before exiting when two or more files are open in an NEdit session. 
3245 Initial Window Size
3246   Default size for new windows. 
3249   CHANGING FONT(S)
3251   The font used to display text in NEdit is set under Preferences -> Text Font 
3252   (for the current window), or Preferences -> Default Settings Text Font (for 
3253   future windows). These dialogs also allow you to set fonts for syntax 
3254   highlighting. If you don't intend to use syntax highlighting, you can ignore 
3255   most of the dialog, and just set the field labeled Primary Font. 
3257   Unless you are absolutely certain about the types of files that you will be 
3258   editing with NEdit, you should choose a fixed-spacing font. Many, if not 
3259   most, plain-text files are written expecting to be viewed with fixed 
3260   character spacing, and will look wrong with proportional spacing. NEdit's 
3261   filling, wrapping, and rectangular operations will also work strangely if 
3262   you choose a proportional font. 
3264   Note that in the font browser (the dialog brought up by the Browse... 
3265   button), the subset of fonts which are shown is narrowed depending on the 
3266   characteristics already selected. It is therefore important to know that you 
3267   can unselect characteristics from the lists by clicking on the selected 
3268   items a second time. 
3270   Fonts for syntax highlighting should ideally match the primary font in both 
3271   height and spacing. A mismatch in spacing will result in similar distortions 
3272   as choosing a proportional font: column alignment will sometimes look wrong, 
3273   and rectangular operations, wrapping, and filling will behave strangely. A 
3274   mismatch in height will cause windows to re-size themselves slightly when 
3275   syntax highlighting is turned on or off, and increase the inter- line 
3276   spacing of the text. Unfortunately, on some systems it is hard to find sets 
3277   of fonts which match exactly in height. 
3280   CUSTOMIZING MENUS
3282   You can add or change items in the Shell, Macro, and window background menus 
3283   under Preferences -> Default Settings -> Customize Menus. When you choose 
3284   one of these, you will see a dialog with a list of the current 
3285   user-configurable items from the menu on the left. To change an existing 
3286   item, select it from the list, and its properties will appear in the 
3287   remaining fields of the dialog, where you may change them. Selecting the 
3288   item "New" from the list allows you to enter new items in the menu. 
3290   Hopefully most of the characteristics are self explanatory, but here are a 
3291   few things to note: 
3293   Accelerator keys are keyboard shortcuts which appear on the right hand side 
3294   of the menus, and allow you avoid pulling down the menu and activate the 
3295   command with a single keystroke. Enter accelerators by typing the keys 
3296   exactly as you would to activate the command. 
3298   Mnemonics are a single letter which should be part of the menu item name, 
3299   which allow users to traverse and activate menu items by typing keys when 
3300   the menu is pulled down. 
3302   In the Shell Command field of the Shell Commands dialog, the % character 
3303   expands to the name (including directory path) of the file in the window. To 
3304   include a % character in the command, use %%. 
3306   The Menu Entry field can contain special characters for constructing 
3307   hierarchical sub-menus, and for making items which appear only in certain 
3308   language modes. The right angle bracket character ">" creates a sub-menu. 
3309   The name of the item itself should be the last element of the path formed 
3310   from successive sub-menu names joined with ">". Menu panes are called in to 
3311   existence simply by naming them as part of a Menu Entry name. To put several 
3312   items in the same sub-menu, repeat the same hierarchical sequence for each. 
3313   For example, in the Macro Commands dialog, two items with menu entries: 
3314   a>b>c and a>b>d would create a single sub menu under the macro menu called 
3315   "a", which would contain a single sub-menu, b, holding the actual items, c 
3316   and d: 
3318       +---++---++---+
3319       |a >||b >||c  |
3320       +---++---+|d  |
3321                 +---+
3323   To qualify a menu entry with a language mode, simply add an at-sign "@" at 
3324   the end of the menu command, followed (no space) by a language mode name. To 
3325   make a menu item which appears in several language modes, append additional 
3326   @s and language mode names. For example, an item with the menu entry: 
3328     Make C Prototypes@C@C++
3330   would appear only in C and C++ language modes, and: 
3332     Make Class Template@C++
3334   would appear only in C++ mode. 
3336   Menu items with no qualification appear in all language modes. 
3338   If a menu item is followed by the single language qualification "@*", that 
3339   item will appear only if there are no applicable language-specific items of 
3340   the same name in the same submenu. For example, if you have the following 
3341   three entries in the same menu: 
3343     Make Prototypes@C@C++
3344     Make Prototypes@Java
3345     Make Prototypes@*
3347   The first will be available when the language mode is C or C++, the second 
3348   when the language mode is Java, and for all other language modes (including 
3349   the "Plain" non-language mode). If the entry: 
3351     Make Prototypes
3353   also exists, this will always appear, meaning that the menu will always have 
3354   two "Make Prototypes" entries, whatever the language mode. 
3357   THE NEDIT PREFERENCES FILE
3359   The NEdit saved preferences file is an X resource file, and its contents can 
3360   be moved into another X resource file (see X Resources). One reason for 
3361   doing so would be to attach server specific preferences, such as a default 
3362   font to a particular X server. Another reason for moving preferences into 
3363   the X resource file would be to keep preferences menu options and resource 
3364   settable options together in one place. Though the files are the same 
3365   format, additional resources should not be added to the preference file 
3366   since NEdit modifies this file by overwriting it completely. Note also that 
3367   the contents of the preference file take precedence over the values of X 
3368   resources. Using Save Defaults after moving the contents of your preference 
3369   file to your .Xdefaults file will re-create the preference file, interfering 
3370   with the options that you have moved. The location of NEdit's preferences 
3371   file depends on your environment: 
3373     * The default place for the file is '$HOME/.nedit/nedit.rc',
3374     * if the variable $NEDIT_HOME is set in your environment it is located at 
3375       '$NEDIT_HOME/nedit.rc',
3376     * you may also use old-style run control files; in this case, the 
3377       preferences are stored in $HOME/.nedit.
3379   (For VMS, the file is in '$NEDIT_HOME/nedit.rc' if $NEDIT_HOME is set, in 
3380   'SYS$LOGIN:.nedit' otherwise.) 
3383   SHARING CUSTOMIZATIONS WITH OTHER NEDIT USERS
3385   If you have written macro or shell menu commands, highlight patterns, or 
3386   smart-indent macros that you want to share with other NEdit users, you can 
3387   make a file which they can load into their NEdit environment. 
3389   To load such a file, start NEdit with the command: 
3391      nedit -import <file>
3393   In the new NEdit session, verify that the imported patterns or macros do 
3394   what you want, then select Preferences -> Save Defaults. Saving incorporates 
3395   the changes into the nedit preferences file, so the next time you run NEdit, 
3396   you will not have to import the distribution file. 
3398   Loading a customization file is automated, but creating one is not. To 
3399   produce a file to be imported by other users, you must make a copy of your 
3400   own NEdit configuration file, and edit it, by hand, to remove everything but 
3401   the few items of interest to the recipient. Leave only the individual 
3402   resource(s), and within those resources, only the particular macro, pattern, 
3403   style, etc, that you wish to exchange. 
3405   For example, to share a highlighting pattern set, you would include the 
3406   patterns, any new styles you added, and language mode information only if 
3407   the patterns are intended to support a new language rather than updating an 
3408   existing one. For example: 
3410      nedit.highlightPatterns:\
3411           My Language:1:0{\n\
3412                   Comment:"#":"$"::Comment::\n\
3413                   Loop Header:"^[ \\t]*loop:":::Loop::\n\
3414           }
3415      nedit.languageModes: My Language:.my::::::
3416      nedit.styles: Loop:blue:Bold
3418   Resources are in the format of X resource files, but the format of text 
3419   within multiple-item resources like highlight patterns, language modes, 
3420   macros, styles, etc., are private to NEdit. Each resource is a string which 
3421   ends at the first newline character not escaped with \, so you must be 
3422   careful about how you treat ends of lines. While you can generally just cut 
3423   and paste indented sections, if something which was originally in the middle 
3424   of a resource string is now at the end, you must remove the \ line 
3425   continuation character(s) so it will not join the next line into the 
3426   resource. Conversely, if something which was originally at the end of a 
3427   resource is now in the middle, you'll have to add continuation character(s) 
3428   to make sure that the resource string is properly continued from beginning 
3429   to end, and possibly newline character(s) (\n) to make sure that it is 
3430   properly separated from the next item. 
3432 -----------
3433 X RESOURCES
3434 -----------
3436   NEdit has additional options to those provided in the Preferences menu which 
3437   are set using X resources. Like most other X programs, NEdit can be 
3438   customized to vastly unnecessary proportions, from initial window positions 
3439   down to the font and shadow colors of each individual button (A complete 
3440   discussion of how to do this is left to books on the X Windows System). Key 
3441   binding (see "Key Binding" is one of the most useful of these resource 
3442   settable options. 
3444   X resources are usually specified in a file called .Xdefaults or .Xresources 
3445   in your home directory (on VMS this is sys$login:decw$xdefaults.dat). On 
3446   some systems, this file is read and its information attached to the X server 
3447   (your screen) when you start X. On other systems, the .Xdefaults file is 
3448   read each time you run an X program. When X resource values are attached to 
3449   the X server, changes to the resource file are not available to application 
3450   programs until you either run the xrdb program with the appropriate file as 
3451   input, or re-start the X server. 
3454   SELECTED X RESOURCE NAMES
3456   The following are selected NEdit resource names and default values for NEdit 
3457   options not settable via the Preferences menu (for preference resource 
3458   names, see your NEdit preference file): 
3460 nedit.tagFile: (not defined) 
3462   This can be the name of a file, or multiple files separated by a colon (:) 
3463   character, of the type produced by Exuberant Ctags or the Unix ctags 
3464   command, which NEdit will load at startup time (see ctag support ). The tag 
3465   file provides a database from which NEdit can automatically open files 
3466   containing the definition of a particular subroutine or data type. 
3468 nedit.alwaysCheckRelativeTagsSpecs: True
3470   When this resource is set to True, and there are tag files specified (with 
3471   the nedit.tagFile resource, see above) as relative paths, NEdit will 
3472   evaluate these tag value paths whenever a file is opened. All accessible tag 
3473   files will be loaded at this time. When this resource value is False, 
3474   relative path tag specifications will only be evaluated at NEdit startup 
3475   time. 
3477 nedit.shell: /bin/csh 
3479   (Unix systems only) The Unix shell (command interpreter) to use for 
3480   executing commands from the Shell menu 
3482 nedit.wordDelimiters: .,/\\`'!@#%^&*()-=+{}[]":;<>?
3484   The characters, in addition to blanks and tabs, which mark the boundaries 
3485   between words for the move-by-word (Ctrl+Arrow) and select-word (double 
3486   click) commands. Note that this default value may be overridden by the 
3487   setting in Preferences -> Default Settings -> Language Modes.... 
3489 nedit.remapDeleteKey: False
3491   Setting this resource to True forcibly maps the delete key to backspace. 
3492   This can be helpful on systems where the bindings have become tangled, and 
3493   in environments which mix systems with PC style keyboards and systems with 
3494   DEC and Macintosh keyboards. Theoretically, these bindings should be made 
3495   using the standard X/Motif mechanisms, outside of NEdit. In practice, some 
3496   environments where users access several different systems remotely, can be 
3497   very hard to configure. If you've given up and are using a backspace key 
3498   halfway off the keyboard because you can't figure out the bindings, set this 
3499   to True. 
3501 nedit.typingHidesPointer: False
3503   Setting this resource to True causes the mouse pointer to be hidden when you 
3504   type in the text area. As soon as the mouse pointer is moved, it will 
3505   reappear. This is useful to stop the mouse pointer from obscuring text. 
3507 nedit.overrideDefaultVirtualKeyBindings: Auto
3509   Motif uses a virtual key binding mechanism that shares the bindings between 
3510   different Motif applications. When a first Motif application is started, it 
3511   installs some default virtual key bindings and any other Motif application 
3512   that runs afterwards, simply reuses them. Obviously, if the first 
3513   application installs an invalid set, all others applications may have 
3514   problems. 
3516   In the past, NEdit has been the victim of invalid bindings installed by 
3517   other applications several times. Through this resource, NEdit can be 
3518   instructed to ignore the bindings installed by other applications, and use 
3519   its own private bindings. By default, NEdit tries to detect invalid bindings 
3520   and ignore them automatically (Auto). Optionally, NEdit can be told to 
3521   always keep the installed bindings (Never), or to always override them 
3522   (Always). 
3524 nedit.stdOpenDialog: False
3526   Setting this resource to True restores the standard Motif style of Open 
3527   dialog. NEdit file open dialogs are missing a text field at the bottom of 
3528   the dialog, where the file name can be entered as a string. The field is 
3529   removed in NEdit to encourage users to type file names in the list, a 
3530   non-standard, but much faster method for finding files. 
3532 nedit.bgMenuButton: ~Shift~Ctrl~Meta~Alt<Btn3Down>
3534   Specification for mouse button / key combination to post the background menu 
3535   (in the form of an X translation table event specification). The event 
3536   specification should be as specific as possible, since it will override less 
3537   specific translation table entries. 
3539 nedit.maxPrevOpenFiles: 30
3541   Number of files listed in the Open Previous sub-menu of the File menu. 
3542   Setting this to zero disables the Open Previous menu item and maintenance of 
3543   the NEdit file history file. 
3545 nedit.printCommand: (system specific)
3547   Command used by the print dialog to print a file, such as, lp, lpr, etc.. 
3548   The command must be capable of accepting input via stdin (standard input). 
3550 nedit.printCopiesOption: (system specific)
3552   Option name used to specify multiple copies to the print command. If the 
3553   option should be separated from its argument by a space, leave a trailing 
3554   space. If blank, no "Number of Copies" item will appear in the print dialog. 
3556 nedit.printQueueOption: (system specific)
3558   Option name used to specify a print queue to the print command. If the 
3559   option should be separated from its argument by a space, leave a trailing 
3560   space. If blank, no "Queue" item will appear in the print dialog. 
3562 nedit.printNameOption: (system specific)
3564   Option name used to specify a job name to the print command. If the option 
3565   should be separated from its argument by a space, leave a trailing space. If 
3566   blank, no job or file name will be attached to the print job or banner page. 
3568 nedit.printHostOption: (system specific)
3570   Option name used to specify a host name to the print command. If the option 
3571   should be separated from its argument by a space, leave a trailing space. If 
3572   blank, no "Host" item will appear in the print dialog. 
3574 nedit.printDefaultQueue: (system specific)
3576   The name of the default print queue. Used only to display in the print 
3577   dialog, and has no effect on printing. 
3579 nedit.visualID: Best
3581   If your screen supports multiple visuals (color mapping models), this 
3582   resource allows you to manually choose among them. The default value of 
3583   "Best" chooses the deepest (most colors) visual available. Since NEdit does 
3584   not depend on the specific characteristics of any given color model, Best 
3585   probably IS the best choice for everyone, and the only reason for setting 
3586   this resource would be to patch around some kind of X server problem. The 
3587   resource may also be set to "Default", which chooses the screen's default 
3588   visual (often a color-mapped, PseudoColor, visual for compatibility with 
3589   older X applications). It may also be set to a numeric visual-id value (use 
3590   xdpyinfo to see the list of visuals supported by your display), or a visual 
3591   class name: PseudoColor, DirectColor, TrueColor, etc.. 
3593 nedit.installColormap: False
3595   Force the installation of a private colormap. If you have a humble 8-bit 
3596   color display, and netscape is hogging all of the color cells, you may want 
3597   to try turning this on. On most systems, this will result in colors flashing 
3598   wildly when you switch between NEdit and other applications. But a few 
3599   systems (SGI) have hardware support for multiple simultaneous colormaps, and 
3600   applications with installed colormaps are well behaved. 
3602 nedit.findReplaceUsesSelection: False
3604   Controls if the Find and Replace dialogs are automatically loaded with the 
3605   contents of the primary selection. 
3607 nedit.stickyCaseSenseButton: True
3609   Controls if the "Case Sensitive" buttons in the Find and Replace dialogs and 
3610   the incremental search bar maintain a separate state for literal and regular 
3611   expression searches. Moreover, when set to True, by default literal searches 
3612   are case insensitive and regular expression searches are case sensitive. 
3613   When set to False, the "Case Sensitive" buttons are independent of the 
3614   "Regular Expression" toggle. 
3616 nedit.printDefaultHost: (system specific)
3618   The node name of the default print host. Used only to display in the print 
3619   dialog, and has no effect on printing. 
3621 nedit.multiClickTime: (system specific)
3623   Maximum time in milliseconds allowed between mouse clicks within double and 
3624   triple click actions. 
3626 nedit*scrollBarPlacement: BOTTOM_LEFT
3628   How scroll bars are placed in NEdit windows, as well as various lists and 
3629   text fields in the program. Other choices are: BOTTOM_RIGHT, TOP_LEFT, or 
3630   TOP_RIGHT. 
3632 nedit*text.autoWrapPastedText: False
3634   When Auto Newline Wrap is turned on, apply automatic wrapping (which 
3635   normally only applies to typed text) to pasted text as well. 
3637 nedit*text.foreground: black
3639   Foreground color of the text editing area of the NEdit window. 
3641 nedit*text.background: white
3643   Background color of the text editing area of the NEdit window. 
3645 nedit*text.selectForeground: black
3647   Foreground (text) color for selections in the text editing area of the NEdit 
3648   window. 
3650 nedit*text.selectBackground: gray80
3652   Color for selections in the text editing area of the NEdit window. 
3654 nedit*text.highlightForeground: white
3656   Foreground (text) color for highlights (parenthesis flashing) in the text 
3657   editing area of the NEdit window. 
3659 nedit*text.highlightBackground: red
3661   Color for highlights (parenthesis flashing) in the text editing area of the 
3662   NEdit window. 
3664 nedit*text.cursorForeground: black
3666   Color for text cursor in the text editing area of the NEdit window. 
3668 nedit*text.lineNumForeground: gray47
3670   Color for displaying line numbers in the NEdit window. 
3672 nedit*text.heavyCursor: False
3674   For monitors with poor resolution or users who have difficulty seeing the 
3675   cursor, makes the cursor in the text editing area of the window heavier and 
3676   darker. 
3678 nedit*text.cursorVPadding: 0
3680   Number of lines to keep the cursor away from the top or bottom line of the 
3681   window. Keyboard operations that would cause the cursor to get closer than 
3682   this distance cause the window to scroll up or down instead, except at the 
3683   beginning of the file. Mouse operations are not affected. 
3685 nedit*text.blinkRate: 500
3687   Blink rate of the text insertion cursor in milliseconds. Set to zero to stop 
3688   blinking. 
3690 nedit*text.Translations:
3692   Modifies key bindings (see below). 
3694 nedit*foreground: black
3696   Default foreground color for menus, dialogs, scroll bars, etc.. 
3698 nedit*background: #b3b3b3
3700   Default background color for menus, dialogs, scroll bars, etc.. 
3702 nedit*fontList: helvetica medium 12 points
3704   Default font for menus, dialogs, scroll bars, etc.. 
3706 nedit.helpFont: helvetica medium 12 points
3708   Font used for displaying online help. 
3710 nedit.boldHelpFont: helvetica bold 12 points
3712   Bold font for online help. 
3714 nedit.italicHelpFont: helvetica italic 12 points
3716   Italic font for online help. 
3718 nedit.fixedHelpFont: courier medium 12 points
3720   Fixed font for online help. 
3722 nedit.boldFixedHelpFont: courier bold 12 points
3724   Fixed bold for online help. 
3726 nedit.italicFixedHelpFont: courier italic 12 points
3728   Fixed italic font for online help. 
3730 nedit.h1HelpFont: helvetica bold 14 points
3732   Font for level-1 titles in help text. 
3734 nedit.h2HelpFont: helvetica bold italic 12 points
3736   Font for level-2 titles in help text. 
3738 nedit.h3HelpFont: courier bold 12 points
3740   Font for level-3 titles in help text. 
3742 nedit.helpLinkFont: helvetica medium 12 points
3744   Font for hyperlinks in the help text 
3746 nedit.helpLinkColor: #009900
3748   Color for hyperlinks in the help text 
3750 nc.autoStart: True 
3752   Whether the nc program should automatically start an NEdit server (without 
3753   prompting the user) if an appropriate server is not found. 
3755 nc.serverCommand: nedit -server
3757   Command used by the nc program to start an NEdit server. 
3759    and other characteristics):
3760   The following are Selected widget names (to which you may append 
3761   .background, .foreground, .fontList, etc., to change colors, fonts 
3763 nedit*statsAreaForm
3765   Statistics line and incremental search bar. To get consistent results across 
3766   the entire stats line and the incremental search bar, use '*' rather than 
3767   '.' to separate the resource name. For example, to set the foreground color 
3768   of both components use: 
3769     nedit*statsAreaForm*foreground
3770   instead of: 
3771     nedit*statsAreaForm.foreground
3773 nedit*menuBar
3775   Top-of-window menu-bar. 
3777 nedit*textHorScrollBar
3779   Horizontal scroll bar. 
3781 nedit*textVertScrollBar
3783   Vertical scroll bar. 
3785 nedit*calltip
3787   Calltip pop-ups. 
3789 -----------
3790 KEY BINDING
3791 -----------
3793   There are several ways to change key bindings in NEdit. The easiest way to 
3794   add a new key binding in NEdit is to define a macro in Preferences -> 
3795   Default Settings -> Customize Menus -> Macro Menu. However, if you want to 
3796   change existing bindings or add a significant number of new key bindings you 
3797   will need to do so via X resources. 
3799   Before reading this section, you must understand how to set X resources (see 
3800   the help section "X Resources"). Since setting X resources is tricky, it is 
3801   also helpful when working on key-binding, to set some easier-to-verify 
3802   resource at the same time, as a simple check that the NEdit program is 
3803   actually seeing your changes. The appres program is also very helpful in 
3804   checking that the resource settings that you make, actually reach the 
3805   program for which they are intended in the correct form. 
3808   KEY BINDING IN GENERAL
3810   Keyboard commands are associated with editor action routines through two 
3811   separate mechanisms in NEdit. Commands which appear in pull-down menus have 
3812   individual resources designating a keyboard equivalent to the menu command, 
3813   called an accelerator key. Commands which do not have an associated menu 
3814   item are bound to keys via the X toolkit translation mechanism. The methods 
3815   for changing these two kinds of bindings are quite different. 
3818   KEY BINDING VIA TRANSLATIONS
3820   The most general way to bind actions to keys in NEdit is to use the 
3821   translation table associated with the text widget. To add a binding to Alt+Y 
3822   to insert the string "Hi!", for example, add lines similar to the following 
3823   to your X resource file: 
3825     NEdit*text.Translations: #override \n\
3826       Alt<Key>y: insert_string("Hi!") \n
3828   The Help topic "Action Routines" lists the actions available to be bound. 
3830   Translation tables map key and mouse presses, window operations, and other 
3831   kinds of events, to actions. The syntax for translation tables is simplified 
3832   here, so you may need to refer to a book on the X window system for more 
3833   detailed information. 
3835   Note that accelerator resources (discussed below) override translations, and 
3836   that most Ctrl+letter and Alt+letter combinations are already bound to an 
3837   accelerator key. To use one of these combinations from a translation table, 
3838   therefore, you must first un-bind the original menu accelerator. 
3840   A resource for changing a translation table consists of a keyword; 
3841   #override, #augment, or #replace; followed by lines (separated by newline 
3842   characters) pairing events with actions. Events begin with modifiers, like 
3843   Ctrl, Shift, or Alt, followed by the event type in <>. BtnDown, Btn1Down, 
3844   Btn2Down, Btn1Up, Key, KeyUp are valid event types. For key presses, the 
3845   event type is followed by the name of the key. You can specify a combination 
3846   of events, such as a sequence of key presses, by separating them with 
3847   commas. The other half of the event/action pair is a set of actions. These 
3848   are separated from the event specification by a colon and from each other by 
3849   spaces. Actions are names followed by parentheses, optionally containing one 
3850   or more parameters separated by comas. 
3853   CHANGING MENU ACCELERATOR KEYS
3855   The menu shortcut keys shown at the right of NEdit menu items can also be 
3856   changed via X resources. Each menu item has two resources associated with 
3857   it, accelerator, the event to trigger the menu item; and acceleratorText, 
3858   the string shown in the menu. The form of the accelerator resource is the 
3859   same as events for translation table entries discussed above, though 
3860   multiple keys and other subtleties are not allowed. The resource name for a 
3861   menu is the title in lower case, followed by "Menu", the resource name of 
3862   menu item is the name in lower case, run together, with words separated by 
3863   caps, and all punctuation removed. For example, to change Cut to Ctrl+X, you 
3864   would add the following to your .Xdefaults file: 
3866       nedit*editMenu.cut.accelerator: Ctrl<Key>x
3867       nedit*editMenu.cut.acceleratorText: Ctrl+X
3869   Accelerator keys with optional shift key modifiers, like Find..., have an 
3870   additional accelerator resource with Shift appended to the name. For 
3871   example: 
3873       nedit*searchMenu.find.acceleratorText: [Shift]Alt+F
3874       nedit*searchMenu.find.accelerator: Alt<Key>f
3875       nedit*searchMenu.findShift.accelerator: Shift Alt<Key>f
3877 ---------------------
3878 HIGHLIGHTING PATTERNS
3879 ---------------------
3882   WRITING SYNTAX HIGHLIGHTING PATTERNS
3884   Patterns are the mechanism by which language syntax highlighting is 
3885   implemented in NEdit (see Syntax Highlighting under the heading of Features 
3886   for Programming). To create syntax highlighting patterns for a new language, 
3887   or to modify existing patterns, select "Recognition Patterns" from "Syntax 
3888   Highlighting" sub-section of the "Default Settings" sub-menu of the 
3889   "Preferences" menu. 
3891   First, a word of caution. As with regular expression matching in general, it 
3892   is quite possible to write patterns which are so inefficient that they 
3893   essentially lock up the editor as they recursively re-examine the entire 
3894   contents of the file thousands of times. With the multiplicity of patterns, 
3895   the possibility of a lock-up is significantly increased in syntax 
3896   highlighting. When working on highlighting patterns, be sure to save your 
3897   work frequently. 
3899   NEdit's syntax highlighting is unusual in that it works in real-time (as you 
3900   type), and yet is completely programmable using standard regular expression 
3901   notation. Other syntax highlighting editors usually fall either into the 
3902   category of fully programmable but unable to keep up in real-time, or 
3903   real-time but limited programmability. The additional burden that NEdit 
3904   places on pattern writers in order to achieve this speed/flexibility mix, is 
3905   to force them to state self-imposed limitations on the amount of context 
3906   that patterns may examine when re-parsing after a change. While the "Pattern 
3907   Context Requirements" heading is near the end of this section, it is not 
3908   optional, and must be understood before making any any serious effort at 
3909   pattern writing. 
3911   In its simplest form, a highlight pattern consists of a regular expression 
3912   to match, along with a style representing the font an color for displaying 
3913   any text which matches that expression. To bold the word, "highlight", 
3914   wherever it appears the text, the regular expression simply would be the 
3915   word "highlight". The style (selected from the menu under the heading of 
3916   "Highlight Style") determines how the text will be drawn. To bold the text, 
3917   either select an existing style, such as "Keyword", which bolds text, or 
3918   create a new style and select it under Highlight Style. 
3920   The full range of regular expression capabilities can be applied in such a 
3921   pattern, with the single caveat that the expression must conclusively match 
3922   or not match, within the pre-defined context distance (as discussed below 
3923   under Pattern Context Requirements). 
3925   To match longer ranges of text, particularly any constructs which exceed the 
3926   requested context, you must use a pattern which highlights text between a 
3927   starting and ending regular expression match. To do so, select "Highlight 
3928   text between starting and ending REs" under "Matching", and enter both a 
3929   starting and ending regular expression. For example, to highlight everything 
3930   between double quotes, you would enter a double quote character in both the 
3931   starting and ending regular expression fields. Patterns with both a 
3932   beginning and ending expression span all characters between the two 
3933   expressions, including newlines. 
3935   Again, the limitation for automatic parsing to operate properly is that both 
3936   expressions must match within the context distance stated for the pattern 
3937   set. 
3939   With the ability to span large distances, comes the responsibility to 
3940   recover when things go wrong. Remember that syntax highlighting is called 
3941   upon to parse incorrect or incomplete syntax as often as correct syntax. To 
3942   stop a pattern short of matching its end expression, you can specify an 
3943   error expression, which stops the pattern from gobbling up more than it 
3944   should. For example, if the text between double quotes shouldn't contain 
3945   newlines, the error expression might be "$". As with both starting and 
3946   ending expressions, error expressions must also match within the requested 
3947   context distance. 
3950   Coloring Sub-Expressions
3952   It is also possible to color areas of text within a regular expression 
3953   match. A pattern of this type associates a style with sub-expressions 
3954   references of the parent pattern (as used in regular expression substitution 
3955   patterns, see the NEdit Help menu item on Regular Expressions). 
3956   Sub-expressions of both the starting and ending patterns may be colored. For 
3957   example, if the parent pattern has a starting expression "\<", and end 
3958   expression "\>", (for highlighting all of the text contained within angle 
3959   brackets), a sub-pattern using "&" in both the starting and ending 
3960   expression fields could color the brackets differently from the intervening 
3961   text. A quick shortcut to typing in pattern names in the Parent Pattern 
3962   field is to use the middle mouse button to drag them from the Patterns list. 
3965   Hierarchical Patterns
3967   A hierarchical sub-pattern, is identical to a top level pattern, but is 
3968   invoked only between the beginning and ending expression matches of its 
3969   parent pattern. Like the sub-expression coloring patterns discussed above, 
3970   it is associated with a parent pattern using the Parent Pattern field in the 
3971   pattern specification. Pattern names can be dragged from the pattern list 
3972   with the middle mouse button to the Parent Pattern field. 
3974   After the start expression of the parent pattern matches, the syntax 
3975   highlighting parser searches for either the parent's end pattern or a 
3976   matching sub-pattern. When a sub-pattern matches, control is not returned to 
3977   the parent pattern until the entire sub-pattern has been parsed, regardless 
3978   of whether the parent's end pattern appears in the text matched by the 
3979   sub-pattern. 
3981   The most common use for this capability is for coloring sub-structure of 
3982   language constructs (smaller patterns embedded in larger patterns). 
3983   Hierarchical patterns can also simplify parsing by having sub-patterns 
3984   "hide" special syntax from parent patterns, such as special escape sequences 
3985   or internal comments. 
3987   There is no depth limit in nesting hierarchical sub-patterns, but beyond the 
3988   third level of nesting, automatic re-parsing will sometimes have to re-parse 
3989   more than the requested context distance to guarantee a correct parse (which 
3990   can slow down the maximum rate at which the user can type if large sections 
3991   of text are matched only by deeply nested patterns). 
3993   While this is obviously not a complete hierarchical language parser it is 
3994   still useful in many text coloring situations. As a pattern writer, your 
3995   goal is not to completely cover the language syntax, but to generate 
3996   colorings that are useful to the programmer. Simpler patterns are usually 
3997   more efficient and also more robust when applied to incorrect code. 
4000   Deferred (Pass-2) Parsing
4002   NEdit does pattern matching for syntax highlighting in two passes. The first 
4003   pass is applied to the entire file when syntax highlighting is first turned 
4004   on, and to new ranges of text when they are initially read or pasted in. The 
4005   second pass is applied only as needed when text is exposed (scrolled in to 
4006   view). 
4008   If you have a particularly complex set of patterns, and parsing is beginning 
4009   to add a noticeable delay to opening files or operations which change large 
4010   regions of text, you can defer some of that parsing from startup time, to 
4011   when it is actually needed for viewing the text. Deferred parsing can only 
4012   be used with single expression patterns, or begin/end patterns which match 
4013   entirely within the requested context distance. To defer the parsing of a 
4014   pattern to when the text is exposed, click on the Pass-2 pattern type button 
4015   in the highlight patterns dialog. 
4017   Sometimes a pattern can't be deferred, not because of context requirements, 
4018   but because it must run concurrently with pass-1 (non-deferred) patterns. If 
4019   they didn't run concurrently, a pass-1 pattern might incorrectly match some 
4020   of the characters which would normally be hidden inside of a sequence 
4021   matched by the deferred pattern. For example, C has character constants 
4022   enclosed in single quotes. These typically do not cross line boundaries, 
4023   meaning they can be parsed entirely within the context distance of the C 
4024   pattern set and should be good candidates for deferred parsing. However, 
4025   they can't be deferred because they can contain sequences of characters 
4026   which can trigger pass-one patterns. Specifically, the sequence, '\"', 
4027   contains a double quote character, which would be matched by the string 
4028   pattern and interpreted as introducing a string. 
4031   Pattern Context Requirements
4033   The context requirements of a pattern set state how much additional text 
4034   around any change must be examined to guarantee that the patterns will match 
4035   what they are intended to match. Context requirements are a promise by NEdit 
4036   to the pattern writer, that the regular expressions in his/her patterns will 
4037   be matched against at least <line context> lines and <character context> 
4038   characters, around any modified text. Combining line and character 
4039   requirements guarantee that both will be met. 
4041   Automatic re-parsing happens on EVERY KEYSTROKE, so the amount of context 
4042   which must be examined is very critical to typing efficiency. The more 
4043   complicated your patterns, the more critical the context becomes. To cover 
4044   all of the keywords in a typical language, without affecting the maximum 
4045   rate at which users can enter text, you may be limited to just a few lines 
4046   and/or a few hundred characters of context. 
4048   The default context distance is 1 line, with no minimum character 
4049   requirement. There are several benefits to sticking with this default. One 
4050   is simply that it is easy to understand and to comply with. Regular 
4051   expression notation is designed around single line matching. To span lines 
4052   in a regular expression, you must explicitly mention the newline character 
4053   "\n", and matches which are restricted to a single line are virtually immune 
4054   to lock-ups. Also, if you can code your patterns to work within a single 
4055   line of context, without an additional character-range context requirement, 
4056   the parser can take advantage the fact that patterns don't cross line 
4057   boundaries, and nearly double its efficiency over a one-line and 1-character 
4058   context requirement. (In a single line context, you are allowed to match 
4059   newlines, but only as the first and/or last character.) 
4061 -------------------
4062 SMART INDENT MACROS
4063 -------------------
4065   Smart indent macros can be written for any language, but are usually more 
4066   difficult to write than highlighting patterns. A good place to start, of 
4067   course, is to look at the existing macros for C and C++. 
4069   Smart indent macros for a language mode consist of standard NEdit macro 
4070   language code attached to any or all of the following three activation 
4071   conditions: 1) When smart indent is first turned on for a text window 
4072   containing code of the language, 2) When a newline is typed and smart indent 
4073   is expected, 3) after any character is typed. To attach macro code to any of 
4074   these code "hooks", enter it in the appropriate section in the Preferences 
4075   -> Default Settings -> Auto Indent -> Program Smart Indent dialog. 
4077   Typically most of the code should go in the initialization section, because 
4078   that is the appropriate place for subroutine definitions, and smart indent 
4079   macros are complicated enough that you are not likely to want to write them 
4080   as one monolithic run of code. You may also put code in the Common/Shared 
4081   Initialization section (accessible through the button in the upper left 
4082   corner of the dialog). Unfortunately, since the C/C++ macros also reside in 
4083   the common/shared section, when you add code there, you run some risk of 
4084   missing out on future upgrades to these macros, because your changes will 
4085   override the built-in defaults. 
4087   The newline macro is invoked after the user types a newline, but before the 
4088   newline is entered in the buffer. It takes a single argument ($1) which is 
4089   the position at which the newline will be inserted. It must return the 
4090   number of characters of indentation the line should have, or -1. A return 
4091   value of -1 means to do a standard auto-indent. You must supply a newline 
4092   macro, but the code: "return -1" (auto-indent), or "return 0" (no indent) is 
4093   sufficient. 
4095   The type-in macro takes two arguments. $1 is the insert position, and $2 is 
4096   the character just inserted, and does not return a value. You can do just 
4097   about anything here, but keep in mind that this macro is executed for every 
4098   keystroke typed, so if you try to get too fancy, you may degrade 
4099   performance. 
4101 ------------------
4102 NEDIT COMMAND LINE
4103 ------------------
4105    nedit [-read] [-create] [-line n | +n] [-server]
4106       [-do command] [-tags file] [-tabs n] [-wrap]
4107       [-nowrap] [-autowrap] [-autoindent] [-noautoindent]
4108       [-autosave] [-noautosave] [-rows n] [-columns n]
4109       [-font font] [-lm languagemode] [-geometry geometry]
4110       [-iconic] [-noiconic] [-display [host]:server[.screen]
4111       [-xrm resourcestring] [-svrname name] [-import file]
4112       [-background color] [-foreground color] [-V|-version]
4113       [--] [file...]
4115 -read
4116   Open the file Read Only regardless of the actual file protection. 
4118 -create
4119   Don't warn about file creation when a file doesn't exist. 
4121 -line n (or +n)
4122   Go to line number n 
4124 -server
4125   Designate this session as an NEdit server, for processing commands from the 
4126   nc program. nc can be used to interface NEdit to code development 
4127   environments, mailers, etc., or just as a quick way to open files from the 
4128   shell command line without starting a new NEdit session. 
4130 -do command
4131   Execute an NEdit macro or action. On each file following the -do argument on 
4132   the command line. -do is particularly useful from the nc program, where nc 
4133   -do can remotely execute commands in an NEdit -server session. 
4135 -tags file
4136   Load a file of directions for finding definitions of program subroutines and 
4137   data objects. The file must be of the format gen- erated by Exuberant Ctags, 
4138   or the standard Unix ctags command. 
4140 -tabs n
4141   Set tab stops every n characters. 
4143 -wrap, -nowrap
4144   Wrap long lines at the right edge of the window rather than continuing them 
4145   past it. (Continuous Wrap mode) 
4147 -autowrap, -noautowrap
4148   Wrap long lines when the cursor reaches the right edge of the window by 
4149   inserting newlines at word boundaries. (Auto Newline Wrap mode) 
4151 -autoindent, -noautoindent
4152   Maintain a running indent. 
4154 -autosave, -noautosave
4155   Maintain a backup copy of the file being edited under the name '~filename'. 
4157 -rows n
4158   Default height in characters for an editing window. 
4160 -columns n
4161   Default width in characters for an editing window. 
4163 -font font (or -fn font)
4164   Font for text being edited (Font for menus and dialogs can be set with -xrm 
4165   "*fontList:font"). 
4167 -lm languagemode
4168   Initial language mode used for editing succeeding files. 
4170 -geometry geometry (or -g geometry)
4171   The initial size and/or location of editor windows. The argument geometry 
4172   has the form: 
4174    [<width>x<height>][+|-][<xoffset>[+|-]<yoffset>]
4176   where <width> and <height> are the desired width and height of the window, 
4177   and <xoffset> and <yoffset> are the distance from the edge of the screen to 
4178   the window, + for top or left, - for bottom or right. -geometry can be 
4179   specified for individual files on the command line. 
4181 -iconic, -noiconic
4182   Initial window state for succeeding files. 
4184 -display [host]:server[.screen]
4185   The name of the X server to use. host specifies the machine, server 
4186   specifies the display server number, and screen specifies the screen number. 
4187   host or screen can be omitted and default to the local machine, and screen 
4188   0. 
4190 -background color (or -bg color)
4191   Background color. (background color for text can be set separately with -xrm 
4192   "nedit*text.background: color"). 
4194 -foreground color (or -fg color)
4195   Foreground color. (foreground color for text can be set separately with -xrm 
4196   "nedit*text.foreground: color"). 
4198 -xrm resourcestring 
4199   Set the value of an X resource to override a default value (see "Customizing 
4200   NEdit"). 
4202 -svrname name
4203   When starting NEdit in server mode, name the server, such that it responds 
4204   to requests only when nc is given a corresponding -svrname argument. By 
4205   naming servers, you can run several simultaneously, and direct files and 
4206   commands specifically to any one. 
4208 -import file
4209   Loads an additional preferences file on top of the existing defaults saved 
4210   in your preferences file. To incorporate macros, language modes, and 
4211   highlight patterns and styles written by other users, run NEdit with -import 
4212   <file>, then re-save your preference file with Preferences -> Save Defaults. 
4214 -version
4215   Prints out the NEdit version information. The -V option is synonymous. 
4218   Treats all subsequent arguments as file names, even if they start with a 
4219   dash. This is so NEdit can access files that begin with the dash character. 
4222 ------------------
4223 CLIENT/SERVER MODE
4224 ------------------
4226   NEdit can be operated on its own, or as a two-part client/server 
4227   application. Client/server mode is useful for integrating NEdit with 
4228   software development environments, mailers, and other programs; or just as a 
4229   quick way to open files from the shell command line without starting a new 
4230   NEdit session. 
4232   To run NEdit in server mode, type: 
4234       nedit -server
4236   NEdit can also be started in server mode via the Nedit Client (nc) program 
4237   when no servers are available. 
4239   The nc program, which is distributed along with NEdit, sends commands to an 
4240   nedit server to open files, select lines, or execute editor actions. It 
4241   accepts a limited set of the nedit command line options: -read, -create, 
4242   -line (or +n), -do, and a list of file names. Listing a file on the nc 
4243   command line means, open it if it is not already open and bring the window 
4244   to the front. -read and -create affect only newly opened files, but -line 
4245   and -do can also be used on files which are already open (See "NEdit Command 
4246   Line" for more information). 
4248   In typical Unix style, arguments affect the files which follow them on the 
4249   command line, for example: 
4251       incorrect:   nc file.c -line 25
4252       correct:     nc -line 25 file.c
4254   -read, -create, and -line affect all of the files which follow them on the 
4255   command line. The -do macro is executed only once, on the next file on the 
4256   line. -do without a file following it on the command line, executes the 
4257   macro on the first available window (presumably when you give a -do command 
4258   without a corresponding file or window, you intend it to do something 
4259   independent of the window in which it happens to execute). 
4261   nc also accepts one command line option of its own, -noask (or -ask), which 
4262   instructs it whether to automatically start a server if one is not 
4263   available. This is also settable via the X resource, nc.autoStart (See "X 
4264   Resources" section). 
4266   Sometimes it is useful to have more than one NEdit server running, for 
4267   example to keep mail and programming work separate. The option, -svrname, to 
4268   both nedit and nc, allows you to start, and communicate with, separate named 
4269   servers. A named server responds only to requests with the corresponding 
4270   -svrname argument. If you use ClearCase and are within a ClearCase view, the 
4271   server name will default to the name of the view (based on the value of the 
4272   CLEARCASE_ROOT environment variable). 
4274   Communication between nc and nedit is through the X display. So as long as X 
4275   windows is set up and working properly, nc will work properly as well. nc 
4276   uses the DISPLAY environment variable, the machine name and your user name 
4277   to find the appropriate server, meaning, if you have several machines 
4278   sharing a common file system, nc will not be able to find a server that is 
4279   running on a machine with a different host name, even though it may be 
4280   perfectly appropriate for editing a given file. 
4282   The command which nc uses to start an nedit server is settable via the X 
4283   resource nc.serverCommand, by default, "nedit -server". 
4285 --------------
4286 CRASH RECOVERY
4287 --------------
4289   If a system crash, network failure, X server crash, or program error should 
4290   happen while you are editing a file, you can still recover most of your 
4291   work. NEdit maintains a backup file which it updates periodically (every 8 
4292   editing operations or 80 characters typed). This file has the same name as 
4293   the file that you are editing, but with the character `~' (tilde) on Unix or 
4294   `_' (underscore) on VMS prefixed to the name. To recover a file after a 
4295   crash, simply rename the file to remove the tilde or underscore character, 
4296   replacing the older version of the file. (Because several of the Unix shells 
4297   consider the tilde to be a special character, you may have to prefix the 
4298   character with a `\' (backslash) when you move or delete an NEdit backup 
4299   file.) 
4301   Example, to recover the file called "help.c" on Unix type the command: 
4303       mv \~help.c help.c
4305   A minor caveat, is that if the file you were editing was in MS DOS format, 
4306   the backup file will be in Unix format, and you will need to open the backup 
4307   file in NEdit and change the file format back to MS DOS via the Save As... 
4308   dialog (or use the Unix unix2dos command outside of NEdit). 
4310 -------
4311 VERSION
4312 -------
4314 NEdit release of Aug 31, 2002
4315 Aug 31, 2002
4317   NEdit was written by Mark Edel, Joy Kyriakopulos, Christopher Conrad, Jim 
4318   Clark, Arnulfo Zepeda-Navratil, Suresh Ravoor, Tony Balinski, Max Vohlken, 
4319   Yunliang Yu, Donna Reid, Arne Førlie, Eddy De Greef, Steve LoBasso, 
4320   Alexander Mai, Scott Tringali, Thorsten Haude, and Steve Haehn. 
4322   The regular expression matching routines used in NEdit are adapted (with 
4323   permission) from original code written by Henry Spencer at the University of 
4324   Toronto. 
4326   Syntax highlighting patterns and smart indent macros were contributed by: 
4327   Simon T. MacDonald, Maurice Leysens, Matt Majka, Alfred Smeenk, Alain 
4328   Fargues, Christopher Conrad, Scott Markinson, Konrad Bernloehr, Ivan Herman, 
4329   Patrice Venant, Christian Denat, Philippe Couton, Max Vohlken, Markus 
4330   Schwarzenberg, Himanshu Gohel, Steven C. Kapp, Michael Turomsha, John 
4331   Fieber, Chris Ross, Nathaniel Gray, Joachim Lous, Mike Duigou, Seak 
4332   Teng-Fong, Joor Loohuis, Mark Jones, and Niek van den Berg. 
4334   NEdit sources, executables, additional documentation, and contributed 
4335   software are available from the NEdit web site at http://www.nedit.org. 
4337   This program is free software; you can redistribute it and/or modify it 
4338   under the terms of the GNU General Public License as published by the Free 
4339   Software Foundation; either version 2 of the License, or (at your option) 
4340   any later version. 
4342   This program is distributed in the hope that it will be useful, but WITHOUT 
4343   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
4344   FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License in the 
4345   Help section "Distribution Policy" for more details. 
4347 -------------------
4348 DISTRIBUTION POLICY
4349 -------------------
4351   GNU GENERAL PUBLIC LICENSE 
4353   Version 2, June 1991 
4355   Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, 
4356   Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute 
4357   verbatim copies of this license document, but changing it is not allowed. 
4359   Preamble 
4361   The licenses for most software are designed to take away your freedom to 
4362   share and change it. By contrast, the GNU General Public License is intended 
4363   to guarantee your freedom to share and change free software--to make sure 
4364   the software is free for all its users. This General Public License applies 
4365   to most of the Free Software Foundation's software and to any other program 
4366   whose authors commit to using it. (Some other Free Software Foundation 
4367   software is covered by the GNU Library General Public License instead.) You 
4368   can apply it to your programs, too. 
4370   When we speak of free software, we are referring to freedom, not price. Our 
4371   General Public Licenses are designed to make sure that you have the freedom 
4372   to distribute copies of free software (and charge for this service if you 
4373   wish), that you receive source code or can get it if you want it, that you 
4374   can change the software or use pieces of it in new free programs; and that 
4375   you know you can do these things. 
4377   To protect your rights, we need to make restrictions that forbid anyone to 
4378   deny you these rights or to ask you to surrender the rights. These 
4379   restrictions translate to certain responsibilities for you if you distribute 
4380   copies of the software, or if you modify it. 
4382   For example, if you distribute copies of such a program, whether gratis or 
4383   for a fee, you must give the recipients all the rights that you have. You 
4384   must make sure that they, too, receive or can get the source code. And you 
4385   must show them these terms so they know their rights. 
4387   We protect your rights with two steps: (1) copyright the software, and (2) 
4388   offer you this license which gives you legal permission to copy, distribute 
4389   and/or modify the software. 
4391   Also, for each author's protection and ours, we want to make certain that 
4392   everyone understands that there is no warranty for this free software. If 
4393   the software is modified by someone else and passed on, we want its 
4394   recipients to know that what they have is not the original, so that any 
4395   problems introduced by others will not reflect on the original authors' 
4396   reputations. 
4398   Finally, any free program is threatened constantly by software patents. We 
4399   wish to avoid the danger that redistributors of a free program will 
4400   individually obtain patent licenses, in effect making the program 
4401   proprietary. To prevent this, we have made it clear that any patent must be 
4402   licensed for everyone's free use or not licensed at all. 
4404   The precise terms and conditions for copying, distribution and modification 
4405   follow. 
4407   GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION 
4408   AND MODIFICATION 
4410   0. This License applies to any program or other work which contains a notice 
4411   placed by the copyright holder saying it may be distributed under the terms 
4412   of this General Public License. The "Program", below, refers to any such 
4413   program or work, and a "work based on the Program" means either the Program 
4414   or any derivative work under copyright law: that is to say, a work 
4415   containing the Program or a portion of it, either verbatim or with 
4416   modifications and/or translated into another language. (Hereinafter, 
4417   translation is included without limitation in the term "modification".) Each 
4418   licensee is addressed as "you". 
4420   Activities other than copying, distribution and modification are not covered 
4421   by this License; they are outside its scope. The act of running the Program 
4422   is not restricted, and the output from the Program is covered only if its 
4423   contents constitute a work based on the Program (independent of having been 
4424   made by running the Program). Whether that is true depends on what the 
4425   Program does. 
4427   1. You may copy and distribute verbatim copies of the Program's source code 
4428   as you receive it, in any medium, provided that you conspicuously and 
4429   appropriately publish on each copy an appropriate copyright notice and 
4430   disclaimer of warranty; keep intact all the notices that refer to this 
4431   License and to the absence of any warranty; and give any other recipients of 
4432   the Program a copy of this License along with the Program. 
4434   You may charge a fee for the physical act of transferring a copy, and you 
4435   may at your option offer warranty protection in exchange for a fee. 
4437   2. You may modify your copy or copies of the Program or any portion of it, 
4438   thus forming a work based on the Program, and copy and distribute such 
4439   modifications or work under the terms of Section 1 above, provided that you 
4440   also meet all of these conditions: 
4442   a) You must cause the modified files to carry prominent notices stating that 
4443   you changed the files and the date of any change. 
4445   b) You must cause any work that you distribute or publish, that in whole or 
4446   in part contains or is derived from the Program or any part thereof, to be 
4447   licensed as a whole at no charge to all third parties under the terms of 
4448   this License. 
4450   c) If the modified program normally reads commands interactively when run, 
4451   you must cause it, when started running for such interactive use in the most 
4452   ordinary way, to print or display an announcement including an appropriate 
4453   copyright notice and a notice that there is no warranty (or else, saying 
4454   that you provide a warranty) and that users may redistribute the program 
4455   under these conditions, and telling the user how to view a copy of this 
4456   License. (Exception: if the Program itself is interactive but does not 
4457   normally print such an announcement, your work based on the Program is not 
4458   required to print an announcement.) 
4460   These requirements apply to the modified work as a whole. If identifiable 
4461   sections of that work are not derived from the Program, and can be 
4462   reasonably considered independent and separate works in themselves, then 
4463   this License, and its terms, do not apply to those sections when you 
4464   distribute them as separate works. But when you distribute the same sections 
4465   as part of a whole which is a work based on the Program, the distribution of 
4466   the whole must be on the terms of this License, whose permissions for other 
4467   licensees extend to the entire whole, and thus to each and every part 
4468   regardless of who wrote it. 
4470   Thus, it is not the intent of this section to claim rights or contest your 
4471   rights to work written entirely by you; rather, the intent is to exercise 
4472   the right to control the distribution of derivative or collective works 
4473   based on the Program. 
4475   In addition, mere aggregation of another work not based on the Program with 
4476   the Program (or with a work based on the Program) on a volume of a storage 
4477   or distribution medium does not bring the other work under the scope of this 
4478   License. 
4480   3. You may copy and distribute the Program (or a work based on it, under 
4481   Section 2) in object code or executable form under the terms of Sections 1 
4482   and 2 above provided that you also do one of the following: 
4484   a) Accompany it with the complete corresponding machine-readable source 
4485   code, which must be distributed under the terms of Sections 1 and 2 above on 
4486   a medium customarily used for software interchange; or, 
4488   b) Accompany it with a written offer, valid for at least three years, to 
4489   give any third party, for a charge no more than your cost of physically 
4490   performing source distribution, a complete machine-readable copy of the 
4491   corresponding source code, to be distributed under the terms of Sections 1 
4492   and 2 above on a medium customarily used for software interchange; or, 
4494   c) Accompany it with the information you received as to the offer to 
4495   distribute corresponding source code. (This alternative is allowed only for 
4496   noncommercial distribution and only if you received the program in object 
4497   code or executable form with such an offer, in accord with Subsection b 
4498   above.) 
4500   The source code for a work means the preferred form of the work for making 
4501   modifications to it. For an executable work, complete source code means all 
4502   the source code for all modules it contains, plus any associated interface 
4503   definition files, plus the scripts used to control compilation and 
4504   installation of the executable. However, as a special exception, the source 
4505   code distributed need not include anything that is normally distributed (in 
4506   either source or binary form) with the major components (compiler, kernel, 
4507   and so on) of the operating system on which the executable runs, unless that 
4508   component itself accompanies the executable. 
4510   If distribution of executable or object code is made by offering access to 
4511   copy from a designated place, then offering equivalent access to copy the 
4512   source code from the same place counts as distribution of the source code, 
4513   even though third parties are not compelled to copy the source along with 
4514   the object code. 
4516   4. You may not copy, modify, sublicense, or distribute the Program except as 
4517   expressly provided under this License. Any attempt otherwise to copy, 
4518   modify, sublicense or distribute the Program is void, and will automatically 
4519   terminate your rights under this License. However, parties who have received 
4520   copies, or rights, from you under this License will not have their licenses 
4521   terminated so long as such parties remain in full compliance. 
4523   5. You are not required to accept this License, since you have not signed 
4524   it. However, nothing else grants you permission to modify or distribute the 
4525   Program or its derivative works. These actions are prohibited by law if you 
4526   do not accept this License. Therefore, by modifying or distributing the 
4527   Program (or any work based on the Program), you indicate your acceptance of 
4528   this License to do so, and all its terms and conditions for copying, 
4529   distributing or modifying the Program or works based on it. 
4531   6. Each time you redistribute the Program (or any work based on the 
4532   Program), the recipient automatically receives a license from the original 
4533   licensor to copy, distribute or modify the Program subject to these terms 
4534   and conditions. You may not impose any further restrictions on the 
4535   recipients' exercise of the rights granted herein. You are not responsible 
4536   for enforcing compliance by third parties to this License. 
4538   7. If, as a consequence of a court judgment or allegation of patent 
4539   infringement or for any other reason (not limited to patent issues), 
4540   conditions are imposed on you (whether by court order, agreement or 
4541   otherwise) that contradict the conditions of this License, they do not 
4542   excuse you from the conditions of this License. If you cannot distribute so 
4543   as to satisfy simultaneously your obligations under this License and any 
4544   other pertinent obligations, then as a consequence you may not distribute 
4545   the Program at all. For example, if a patent license would not permit 
4546   royalty-free redistribution of the Program by all those who receive copies 
4547   directly or indirectly through you, then the only way you could satisfy both 
4548   it and this License would be to refrain entirely from distribution of the 
4549   Program. 
4551   If any portion of this section is held invalid or unenforceable under any 
4552   particular circumstance, the balance of the section is intended to apply and 
4553   the section as a whole is intended to apply in other circumstances. 
4555   It is not the purpose of this section to induce you to infringe any patents 
4556   or other property right claims or to contest validity of any such claims; 
4557   this section has the sole purpose of protecting the integrity of the free 
4558   software distribution system, which is implemented by public license 
4559   practices. Many people have made generous contributions to the wide range of 
4560   software distributed through that system in reliance on consistent 
4561   application of that system; it is up to the author/donor to decide if he or 
4562   she is willing to distribute software through any other system and a 
4563   licensee cannot impose that choice. 
4565   This section is intended to make thoroughly clear what is believed to be a 
4566   consequence of the rest of this License. 
4568   8. If the distribution and/or use of the Program is restricted in certain 
4569   countries either by patents or by copyrighted interfaces, the original 
4570   copyright holder who places the Program under this License may add an 
4571   explicit geographical distribution limitation excluding those countries, so 
4572   that distribution is permitted only in or among countries not thus excluded. 
4573   In such case, this License incorporates the limitation as if written in the 
4574   body of this License. 
4576   9. The Free Software Foundation may publish revised and/or new versions of 
4577   the General Public License from time to time. Such new versions will be 
4578   similar in spirit to the present version, but may differ in detail to 
4579   address new problems or concerns. 
4581   Each version is given a distinguishing version number. If the Program 
4582   specifies a version number of this License which applies to it and "any 
4583   later version", you have the option of following the terms and conditions 
4584   either of that version or of any later version published by the Free 
4585   Software Foundation. If the Program does not specify a version number of 
4586   this License, you may choose any version ever published by the Free Software 
4587   Foundation. 
4589   10. If you wish to incorporate parts of the Program into other free programs 
4590   whose distribution conditions are different, write to the author to ask for 
4591   permission. For software which is copyrighted by the Free Software 
4592   Foundation, write to the Free Software Foundation; we sometimes make 
4593   exceptions for this. Our decision will be guided by the two goals of 
4594   preserving the free status of all derivatives of our free software and of 
4595   promoting the sharing and reuse of software generally. 
4597   NO WARRANTY 
4599   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 
4600   THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 
4601   OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
4602   PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
4603   OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
4604   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO 
4605   THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM 
4606   PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR 
4607   CORRECTION. 
4609   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
4610   WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
4611   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
4612   INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 
4613   OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO 
4614   LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR 
4615   THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 
4616   PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 
4617   POSSIBILITY OF SUCH DAMAGES. 
4619   END OF TERMS AND CONDITIONS 
4621 -------------
4622 MAILING LISTS
4623 -------------
4625   There are two separate mailing lists for nedit users, and one for 
4626   developers. Users may post to the developer mailing list to report defects 
4627   and communicate with the nedit developers. Remember that nedit is entirely a 
4628   volunteer effort, so please ask questions first to the discussion list, and 
4629   do your share to answer other users questions as well. 
4631     discuss@nedit.org
4633   General discussion, questions and answers among NEdit users and developers. 
4635     announce@nedit.org
4637   A low-volume mailing list for announcing new versions. 
4639     develop@nedit.org
4641   Communication among and with NEdit developers. Developers should also 
4642   subscribe to the discuss list. 
4644   To subscribe, send mail to <majordomo@nedit.org> with one or more of the 
4645   following in the body of the message: 
4647     subscribe announce
4648     subscribe discuss
4649     subscribe develop
4651 ----------------
4652 PROBLEMS/DEFECTS
4653 ----------------
4656   SOLUTIONS TO COMMON PROBLEMS
4658   For a much more comprehensive list of common problems and solutions, see the 
4659   NEdit FAQ. The latest version of the FAQ can always be found on the NEdit 
4660   web site at: 
4662       http://www.nedit.org.
4664   P: No files are shown in the "Files" list in the Open... dialog. 
4666   S: When you use the "Filter" field, include the file specification or a 
4667   complete directory specification, including the trailing "/" on Unix. (See 
4668   Help in the Open... dialog). 
4670   P: Find Again and Replace Again don't continue in the same direction as the 
4671   original Find or Replace. 
4673   S: Find Again and Replace Again don't use the direction of the original 
4674   search. The Shift key controls the direction: Ctrl+G means forward, 
4675   Shift+Ctrl+G means backward. 
4677   P: Preferences specified in the Preferences menu don't seem to get saved 
4678   when I select Save Defaults. 
4680   S: NEdit has two kinds of preferences: 1) per-window preferences, in the 
4681   Preferences menu, and 2) default settings for preferences in newly created 
4682   windows, in the Default Settings sub-menu of the Preferences menu. 
4683   Per-window preferences are not saved by Save Defaults, only Default 
4684   Settings. 
4686   P: Columns and indentation don't line up. 
4688   S: NEdit is using a proportional width font. Set the font to a fixed style 
4689   (see Preferences menu). 
4691   P: NEdit performs poorly on very large files. 
4693   S: Turn off Incremental Backup. With Incremental Backup on, NEdit 
4694   periodically writes a full copy of the file to disk. 
4696   P: Commands added to the Shell Commands menu (Unix only) don't output 
4697   anything until they are finished executing. 
4699   S: If the command output is directed to a dialog, or the input is from a 
4700   selection, output is collected together and held until the command 
4701   completes. De-select both of the options and the output will be shown 
4702   incrementally as the command executes. 
4704   P: Dialogs don't automatically get keyboard focus when they pop up. 
4706   S: Most X Window managers allow you to choose between two categories of 
4707   keyboard focus models: pointer focus, and explicit focus. Pointer focus 
4708   means that as you move the mouse around the screen, the window under the 
4709   mouse automatically gets the keyboard focus. NEdit users who use this focus 
4710   model should set "Popups Under Pointer" in the Default Settings sub menu of 
4711   the preferences menu in NEdit. Users with the explicit focus model, in some 
4712   cases, may have problems with certain dialogs, such as Find and Replace. In 
4713   MWM this is caused by the mwm resource startupKeyFocus being set to False 
4714   (generally a bad choice for explicit focus users). NCDwm users should use 
4715   the focus model "click" instead of "explicit", again, unless you have set it 
4716   that way to correct specific problems, this is the appropriate setting for 
4717   most explicit focus users. 
4719   P: The Backspace key doesn't work, or deletes forward rather than backward. 
4721   S: While this is an X/Motif binding problem, and should be solved outside of 
4722   NEdit in the Motif virtual binding layer (or possibly xmodmap or 
4723   translations), NEdit provides an out. If you set the resource: 
4724   nedit.remapDeleteKey to True, NEdit will forcibly map the delete key to 
4725   backspace. The default setting of this resource recently changed, so users 
4726   who have been depending on this remapping will now have to set it explicitly 
4727   (or fix their bindings). 
4729   P: NEdit crashes when I try to paste text in to a text field in a dialog 
4730   (like Find or Replace) on my SunOS system. 
4732   S: On many SunOS systems, you have to set up an nls directory before various 
4733   inter-client communication features of Motif will function properly. There 
4734   are instructions in README.sun in /pub/v5_0_2/individual/README.sun on 
4735   ftp.nedit.org, as well as a tar file containing a complete nls directory: 
4736   ftp://ftp.nedit.org/pub/v5_0_2/nls.tar. README.sun contains directions for 
4737   setting up an nls directory, which is required by Motif for handling copy 
4738   and paste to Motif text fields. 
4741   KNOWN DEFECTS
4743   Below is the list of known defects which affect NEdit. The defects your copy 
4744   of NEdit will exhibit depend on which system you are running and with which 
4745   Motif libraries it was built. Note that there are now Motif 1.2 and/or 2.0 
4746   libraries available on ALL supported platforms, and as you can see below 
4747   there are far fewer defects in Motif 1.2, so it is in your best interest to 
4748   upgrade your system. 
4751   All Versions
4753 DEFECT
4754   Operations between rectangular selections on overlapping lines do nothing. 
4756 Work Around
4757   None. These operations are very complicated and rarely used. 
4759 DEFECT
4760   Cut and Paste menu items fail, or possibly crash, for very large 
4761   (multi-megabyte) selections. 
4763 Work Around
4764   Use selection copy (middle mouse button click) for transferring larger 
4765   quantities of data. Cut and Paste save the copied text in server memory, 
4766   which is usually limited. 
4769   REPORTING DEFECTS
4771   Submit bugs through the web at: 
4773     http://sf.net/tracker/?func=add&group_id=11005&atid=111005
4775   Please include the first few lines from Help > Version, which identifes 
4776   NEdit's version and other system attributes important for diagnosing your 
4777   problem. 
4779   The NEdit developers subscribe to both discuss@nedit.org and 
4780   develop@nedit.org, either of which may be used for reporting defects. If 
4781   you're not sure, or you think the report might be of interest to the general 
4782   NEdit user community, send the report to discuss@nedit.org. If it's 
4783   something obvious and boring, like we misspelled "anemometer" in the on-line 
4784   help, send it to develop@nedit.org. If you don't want to subscribe to the 
4785   Mailing Lists, please add a note to your mail about cc'ing you on responses.