More detail for Motif version, and change button labels on help browser to be more...
[nedit.git] / doc / nedit.doc
blob87721fcbcca7f0fb0d59fd870b6266f9594b3256
1                =========================================
2                Nirvana Editor (NEdit) Help Documentation
3                =========================================
5 NEdit 5.4DEV                                               August 9, 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 `*?' quantifier.
1640         (?n\s*?\n\s*)
1642     * IP address (not robust).
1643         (?:\d{1,3}(?:\.\d{1,3}){3})
1645     * Two character US Postal state abbreviations (includes territories).
1646         [ACDF-IK-PR-W][A-Z]
1648     * Web addresses.
1649         (?:http://)?www\.\S+
1651     * Case insensitive double words across line breaks.
1652         (?i(?n<(\S+)\s+\1>))
1654     * Upper case words with possible punctuation.
1655         <[A-Z][^a-z\s]*>
1657 ======================
1658 MACRO/SHELL EXTENSIONS
1659 ======================
1661 --------------------------
1662 SHELL COMMANDS AND FILTERS
1663 --------------------------
1665   The Shell menu (Unix versions only) allows you to execute Unix shell 
1666   commands from within NEdit. You can add items to the menu to extend NEdit's 
1667   command set or to incorporate custom automatic editing features using shell 
1668   commands or editing languages like awk and sed. To add items to the menu, 
1669   select Preferences -> Default Settings Customize Menus -> Shell Menu. NEdit 
1670   comes pre-configured with a few useful Unix commands like spell and sort, 
1671   but we encourage you to add your own custom extensions. 
1673   Filter Selection... prompts you for a Unix command to use to process the 
1674   currently selected text. The output from this command replaces the contents 
1675   of the selection. 
1677   Execute Command... prompts you for a Unix command and replaces the current 
1678   selection with the output of the command. If there is no selection, it 
1679   deposits the output at the current insertion point. In the Shell Command 
1680   field, the % character expands to the name (including directory path), and 
1681   the # character expands to the current line number of the file in the 
1682   window. To include a % or # character in the command, use %% or ##, 
1683   respectively. 
1685   Execute Command Line uses the position of the cursor in the window to 
1686   indicate a line to execute as a shell command line. The cursor may be 
1687   positioned anywhere on the line. This command allows you to use an NEdit 
1688   window as an editable command window for saving output and saving commands 
1689   for re-execution. Note that the same character expansions described above in 
1690   Execute Command also occur with this command. 
1692   The X resource called nedit.shell (See "Customizing NEdit") determines which 
1693   Unix shell is used to execute commands. The default value for this resource 
1694   is /bin/csh. 
1696 ------------
1697 LEARN/REPLAY
1698 ------------
1700   Selecting Learn Keystrokes from the Macro menu puts NEdit in learn mode. In 
1701   learn mode, keystrokes and menu commands are recorded, to be played back 
1702   later, using the Replay Keystrokes command, or pasted into a macro in the 
1703   Macro Commands dialog of the Default Settings menu in Preferences. 
1705   Note that only keyboard and menu commands are recorded, not mouse clicks or 
1706   mouse movements since these have no absolute point of reference, such as 
1707   cursor or selection position. When you do a mouse-based operation in learn 
1708   mode, NEdit will beep (repeatedly) to remind you that the operation was not 
1709   recorded. 
1711   Learn mode is also the quickest and easiest method for writing macros. The 
1712   dialog for creating macro commands contains a button labeled "Paste Learn / 
1713   Replay Macro", which will deposit the last sequence learned into the body of 
1714   the macro. 
1717   REPEATING ACTIONS AND LEARN/REPLAY SEQUENCES
1719   You can repeat the last (keyboard-based) command, or learn/replay sequence 
1720   with the Repeat... command in the Macro menu. To repeat an action, first do 
1721   the action (that is, insert a character, do a search, move the cursor), then 
1722   select Repeat..., decide how or how many times you want it repeated, and 
1723   click OK. For example, to move down 30 lines through a file, you could type: 
1724   <Down Arrow> Ctrl+, 29 <Return>. To repeat a learn/replay sequence, first 
1725   learn it, then select Repeat..., click on Learn/Replay and how you want it 
1726   repeated, then click OK. 
1728   If the commands you are repeating advance the cursor through the file, you 
1729   can also repeat them within a range of characters, or from the current 
1730   cursor position to the end of the file. To iterate over a range of 
1731   characters, use the primary selection (drag the left mouse button over the 
1732   text) to mark the range you want to operate on, and select "In Selection" in 
1733   the Repeat dialog. 
1735   When using In "Selection" or "To End" with a learned sequence, try to do 
1736   cursor movement as the last step in the sequence, since testing of the 
1737   cursor position is only done at the end of the sequence execution. If you do 
1738   cursor movement first, for example searching for a particular word then 
1739   doing a modification, the position of the cursor won't be checked until the 
1740   sequence has potentially gone far beyond the end of your desired range. 
1742   It's easy for a repeated command to get out of hand, and you can easily 
1743   generate an infinite loop by using range iteration on a command which 
1744   doesn't progress. To cancel a repeating command in progress, type Ctrl+. 
1745   (period), or select Cancel Macro from the Macro menu. 
1747 --------------
1748 MACRO LANGUAGE
1749 --------------
1751   Macros can be called from Macro menu commands, window background menu 
1752   commands, within the smart-indent framework, from the autoload macro file 
1753   and from the command line. Macro menu and window background menu commands 
1754   are defined under Preferences -> Default Settings -> Customize Menus. Help 
1755   on creating items in these menus can be found in the section, Help -> 
1756   Customizing -> Preferences. 
1758   The autoload macro file is a file of macro commands and definitions which 
1759   NEdit will automatically execute when it is first started. Its location is 
1760   dependent on your environment: 
1761     * The default place for the file is '$HOME/.nedit/autoload.nm',
1762     * if the variable $NEDIT_HOME is set in your environment it is located at
1763 '$NEDIT_HOME/autoload.nm',
1764     * if you are using old-style run control files (i.e. $HOME/.nedit is a regular
1765 file) it is located in $HOME/.neditmacro'.
1766   (For VMS, the file is in '$NEDIT_HOME/autoload.nm' if $NEDIT_HOME is set, in 
1767   'SYS$LOGIN:.neditmacro' otherwise.) 
1769   NEdit's macro language is a simple interpreter with integer arithmetic, 
1770   dynamic strings, and C-style looping constructs (very similar to the 
1771   procedural portion of the Unix awk program). From the macro language, you 
1772   can call the same action routines which are bound to keyboard keys and menu 
1773   items, as well additional subroutines for accessing and manipulating editor 
1774   data, which are specific to the macro language (these are listed in the 
1775   sections titled "Macro Subroutines", and "Action_Routines_"). 
1778   SYNTAX
1780   An NEdit macro language program consists of a list of statements, each 
1781   terminated by a newline. Groups of statements which are executed together 
1782   conditionally, such as the body of a loop, are surrounded by curly braces 
1783   "{}". 
1785   Blank lines and comments are also allowed. Comments begin with a "#" and end 
1786   with a newline, and can appear either on a line by themselves, or at the end 
1787   of a statement. 
1789   Statements which are too long to fit on a single line may be split across 
1790   several lines, by placing a backslash "\" character at the end of each line 
1791   to be continued. 
1794   DATA TYPES
1796   The NEdit macro language recognizes only three data types, dynamic character 
1797   strings, integer values and associative arrays. In general strings and 
1798   integers can be used interchangeably. If a string represents an integer 
1799   value, it can be used as an integer. Integers can be compared and 
1800   concatenated with strings. Arrays may contain integers, strings, or arrays. 
1801   Arrays are stored key/value pairs. Keys are always stored as strings. 
1804   Integer Constants
1806   Integers are non-fractional numbers in the range of -2147483647 to 
1807   2147483647. Integer constants must be in decimal. For example: 
1809     a = -1
1810     b = 1000
1813   Character String Constants
1815   Character string constants are enclosed in double quotes. For example: 
1817      a = "a string"
1818      dialog("Hi there!", "Dismiss")
1820   Strings may also include C-language style escape sequences: 
1822      \\ Backslash     \t Tab              \f Form feed
1823      \" Double quote  \b Backspace        \a Alert
1824      \n Newline       \r Carriage return  \v Vertical tab
1826   For example, to send output to the terminal from which NEdit was started, a 
1827   newline character is necessary because, like printf, t_print requires 
1828   explicit newlines, and also buffers its output on a per-line basis: 
1830      t_print("a = " a "\n")
1833   VARIABLES
1835   Variable names must begin either with a letter (local variables), or a $ 
1836   (global variables). Beyond the first character, variables may also contain 
1837   numbers and underscores `_'. Variables are called in to existence just by 
1838   setting them (no explicit declarations are necessary). 
1840   Local variables are limited in scope to the subroutine (or menu item 
1841   definition) in which they appear. Global variables are accessible from all 
1842   routines, and their values persist beyond the call which created them, until 
1843   reset. 
1846   Built-in Variables
1848   NEdit has a number of permanently defined variables, which are used to 
1849   access global editor information and information about the the window in 
1850   which the macro is executing. These are listed along with the built in 
1851   functions in the section titled "Macro Subroutines". 
1854   FUNCTIONS AND SUBROUTINES
1856   The syntax of a function or subroutine call is: 
1858      function_name(arg1, arg2, ...)
1860   where arg1, arg2, etc. represent up to 9 argument values which are passed to 
1861   the routine being called. A function or subroutine call can be on a line by 
1862   itself, as above, or if it returns a value, can be invoked within a 
1863   character or numeric expression: 
1865      a = fn1(b, c) + fn2(d)
1866      dialog("fn3 says: " fn3())
1868   Arguments are passed by value. This means that you can not return values via 
1869   the argument list, only through the function value or indirectly through 
1870   agreed-upon global variables. 
1873   Built-in Functions
1875   NEdit has a wide range of built in functions which can be called from the 
1876   macro language. These routines are divided into two classes, macro-language 
1877   functions, and editor action routines. Editor action routines are more 
1878   flexible, in that they may be called either from the macro language, or 
1879   bound directly to keys via translation tables. They are also limited, 
1880   however, in that they can not return values. Macro language routines can 
1881   return values, but can not be bound to keys in translation tables. 
1883   Nearly all of the built-in subroutines operate on an implied window, which 
1884   is initially the window from which the macro was started. To manipulate the 
1885   contents of other windows, use the focus_window subroutine to change the 
1886   focus to the ones you wish to modify. focus_window can also be used to 
1887   iterate over all of the currently open windows, using the special keyword 
1888   names, "last" and "next". 
1890   For backwards compatibility, hyphenated action routine names are allowed, 
1891   and most of the existing action routines names which contain underscores 
1892   have an equivalent version containing hyphens ('-') instead of underscores. 
1893   Use of these names is discouraged. The macro parser resolves the ambiguity 
1894   between '-' as the subtraction/negation operator, and - as part of an action 
1895   routine name by assuming subtraction unless the symbol specifically matches 
1896   an action routine name. 
1899   User Defined Functions
1901   Users can define their own macro subroutines, using the define keyword: 
1903      define subroutine_name {
1904         < body of subroutine >
1905      }
1907   Macro definitions can not appear within other definitions, or within macro 
1908   menu item definitions (usually they are found in the autoload macro file). 
1910   The arguments with which a user-defined subroutine or function was invoked, 
1911   are presented as $1, $2, ... , $9. The number of arguments can be read from 
1912   $n_args. 
1914   To return a value from a subroutine, and/or to exit from the subroutine 
1915   before the end of the subroutine body, use the return statement: 
1917      return <value to return>
1920   OPERATORS AND EXPRESSIONS
1922   Operators have the same meaning and precedence that they do in C, except for 
1923   ^, which raises a number to a power (y^x means y to the x power), rather 
1924   than bitwise exclusive OR. The table below lists operators in decreasing 
1925   order of precedence. 
1927      Operators                Associativity
1928      ()
1929      ^                        right to left
1930      - ! ++ --                (unary)
1931      * / %                    left to right
1932      + -                      left to right
1933      > >= < <= == !=          left to right
1934      &                        left to right
1935      |                        left to right
1936      &&                       left to right
1937      ||                       left to right
1938      (concatenation)          left to right
1939      = += -= *= /= %=, &= |=  right to left
1941   The order in which operands are evaluated in an expression is undefined, 
1942   except for && and ||, which like C, evaluate operands left to right, but 
1943   stop when further evaluation would no longer change the result. 
1946   Numerical Operators
1948   The numeric operators supported by the NEdit macro language are listed 
1949   below: 
1951      + addition
1952      - subtraction or negation
1953      * multiplication
1954      / division
1955      % modulo
1956      ^ power
1957      & bitwise and
1958      | bitwise or
1960   Increment (++) and decrement (--) operators can also be appended or 
1961   prepended to variables within an expression. Prepended increment/decrement 
1962   operators act before the variable is evaluated. Appended increment/decrement 
1963   operators act after the variable is evaluated. 
1966   Logical and Comparison Operators
1968   Logical operations produce a result of 0 (for false) or 1 (for true). In a 
1969   logical operation, any non-zero value is recognized to mean true. The 
1970   logical and comparison operators allowed in the NEdit macro language are 
1971   listed below: 
1973      && logical and
1974      || logical or
1975      !  not
1976      >  greater
1977      <  less
1978      >= greater or equal
1979      <= less or equal
1980      == equal (integers and/or strings)
1981      != not equal (integers and/or strings)
1984   Character String Operators
1986   The "operator" for concatenating two strings is the absence of an operator. 
1987   Adjoining character strings with no operator in between means concatenation: 
1989      d = a b "string" c
1990      t_print("the value of a is: " a)
1992   Comparison between character strings is done with the == and != operators, 
1993   (as with integers). There are a number of useful built-in routines for 
1994   working with character strings, which are listed in the section called 
1995   "Macro Subroutines". 
1998   Arrays and Array Operators
2000   Arrays may contain either strings, integers, or other arrays. Arrays are 
2001   associative, which means that they relate two pieces of information, the key 
2002   and the value. The key is always a string; if you use an integer it is 
2003   converted to a string. 
2005   To determine if a given key is in an array, use the 'in' keyword. 
2007       if ("6" in x)
2008           <body>
2010   If the left side of the in keyword is an array, the result is true if every 
2011   key in the left array is in the right array. Array values are not compared. 
2013   To iterate through all the keys of an array use the 'for' looping construct. 
2014   Keys are not guaranteed in any particular order: 
2016       for (aKey in x)
2017           <body>
2019   Elements can be removed from an array using the delete command: 
2021       delete x[3] # deletes element with key 3
2022       delete x[]  # deletes all elements
2024   The number of elements in an array can be determined by referencing the 
2025   array with no indices: 
2027       dialog("array x has " x[] " elements", "OK")
2029   Arrays can be combined with some operators. All the following operators only 
2030   compare the keys of the arrays. 
2032       result = x + y   (Merge arrays)
2034   The 'result' is a new array containing keys from both x and y. If duplicates 
2035   are present values from y are used. 
2037       result = x - y   (Remove keys)
2039   The 'result' is a new array containing all keys from x that are not in y. 
2041       result = x & y   (Common keys)
2043   The 'result' is a new array containing all keys which are in both x and y. 
2044   The values from y are used. 
2046       result = x | y   (Unique keys)
2048   The 'result' is a new array containing keys which exist in either x or y, 
2049   but not both. 
2051   When duplicate keys are encountered using the + and & operators, the values 
2052   from the array on the right side of the operators are used for the result. 
2053   All of the above operators are array only, meaning both the left and right 
2054   sides of the operator must be arrays. The results are also arrays. 
2056   Array keys can also contain multiple dimensions: 
2058       x[1, 1, 1] = "string"
2060   These are used in the expected way, e.g.: 
2062       for (i = 1; i < 3; i++)
2063       {
2064           for (j = 1; j < 3; j++)
2065           {
2066               x[i, j] = k++
2067           }
2068       }
2070   gives the following array: 
2072       x[1, 1] = 0
2073       x[1, 2] = 1
2074       x[2, 1] = 2
2075       x[2, 2] = 3
2077   Internally all indices are part of one string, separated by the string 
2078   $sub_sep (ASCII 0x18). The first key in the above example is in fact 
2080       ["1" $sub_sep "1"]
2082   If you need to extract one of the keys, you can use split(), using $sub_sep 
2083   as the separator. 
2085   You can also check for the existence of multi-dimensional array by looking 
2086   for $sub_sep in the key. 
2088   Last, you need $sub_sep if you want to use the 'in' keyword. 
2090       if ((1,2) in myArray)
2091       {..}
2093   doesn't work, but 
2095       if (("1" $sub_sep "2") in myArray)
2096       {..}
2098   does work. 
2101   LOOPING AND CONDITIONALS
2103   NEdit supports looping constructs: for and while, and conditional 
2104   statements: if and else, with essentially the same syntax as C: 
2106      for (<init>, ...; <condition>; <increment>, ...) <body>
2108      while (<condition>) <body>
2110      if (<condition>) <body>
2112      if (<condition>) <body> else <body>
2114   <body>, as in C, can be a single statement, or a list of statements enclosed 
2115   in curly braces ({}). <condition> is an expression which must evaluate to 
2116   true for the statements in <body> to be executed. for loops may also contain 
2117   initialization statements, <init>, executed once at the beginning of the 
2118   loop, and increment/decrement statements (or any arbitrary statement), which 
2119   are executed at the end of the loop, before the condition is evaluated 
2120   again. 
2122   Examples: 
2124     for (i=0; i<100; i++)
2125        j = i * 2
2127     for (i=0, j=20; i<20; i++, j--) {
2128        k = i * j
2129        t_print(i, j, k)
2130     }
2132     while (k > 0)
2133     {
2134        k = k - 1
2135        t_print(k)
2136     }
2138     for (;;) {
2139        if (i-- < 1)
2140            break
2141     }
2143   Loops may contain break and continue statements. A break statement causes an 
2144   exit from the innermost loop, a continue statement transfers control to the 
2145   end of the loop. 
2147 -----------------
2148 MACRO SUBROUTINES
2149 -----------------
2152   BUILT IN VARIABLES
2154   These variables are read-only and can not be changed. 
2156 $active_pane
2157   Index of the current pane. 
2159 $auto_indent
2160   Contains the current preference for auto indent. Can be "off", "on" or 
2161   "auto". 
2163 $calltip_ID
2164   Equals the ID of the currently displayed calltip, or 0 if no calltip is 
2165   being displayed. 
2167 $cursor
2168   Position of the cursor in the current window. 
2170 $column
2171   Column number of the cursor position in the current window. 
2173 $display_width
2174   Width of the current pane in pixels. 
2176 $em_tab_dist
2177   If tab emulation is turned on in the Tabs... dialog of the Preferences menu, 
2178   value is the distance between emulated tab stops. If tab emulation is turned 
2179   off, value is -1. 
2181 $empty_array
2182   An array with no elements. This can be used to initialize an array to an 
2183   empty state. 
2185 $file_format
2186   Current newline format that the file will be saved with. Can be "unix", 
2187   "dos" or "macintosh". 
2189 $file_name
2190   Name of the file being edited in the current window, stripped of directory 
2191   component. 
2193 $file_path
2194   Directory component of file being edited in the current window. 
2196 $font_name
2197   Contains the current plain text font name. 
2199 $font_name_bold
2200   Contains the current bold text font name. 
2202 $font_name_bold_italic
2203   Contains the current bold-italic text font name. 
2205 $font_name_italic
2206   Contains the current italic text font name. 
2208 $highlight_syntax
2209   Whether syntax highlighting is turned on. 
2211 $incremental_backup
2212   Contains 1 if incremental auto saving is on, otherwise 0. 
2214 $incremental_search_line
2215   Has a value of 1 if the preference is selected to always show the 
2216   incremental search line, otherwise 0. 
2218 $language_mode
2219   Name of language mode set in the current window. 
2221 $line
2222   Line number of the cursor position in the current window. 
2224 $locked
2225   True if the file has been locked by the user. 
2227 $make_backup_copy
2228   Has a value of 1 if original file is kept in a backup file on save, 
2229   otherwise 0. 
2231 $max_font_width
2232   The maximum font width of all the active styles. Syntax highlighting styles 
2233   are only considered if syntax highlighting is turned on. 
2235 $min_font_width
2236   The minimum font width of all the active styles. Syntax highlighting styles 
2237   are only considered if syntax highlighting is turned on. 
2239 $modified
2240   True if the file in the current window has been modified and the 
2241   modifications have not yet been saved. 
2243 $n_display_lines
2244   The number of lines visible in the currently active pane. 
2246 $n_panes
2247   The number of panes in the current window. 
2249 $overtype_mode
2250   True if in Overtype mode. 
2252 $read_only
2253   True if the file is read only. 
2255 $selection_start, $selection_end   
2256   Beginning and ending positions of the primary selection in the current 
2257   window, or -1 if there is no text selected in the current window. 
2259 $selection_left, $selection_right  
2260   Left and right character offsets of the rectangular (primary) selection in 
2261   the current window, or -1 if there is no selection or it is not rectangular. 
2263 $server_name
2264   Name of the current NEdit server. 
2266 $show_line_numbers
2267   Whether line numbers are shown next to the text. 
2269 $show_matching
2270   Contains the current preference for showing matching pairs, such as "[]" and 
2271   "{}" pairs. Can be "off", "delimiter", or "range". 
2273 $match_syntax_based
2274   Whether pair matching should use syntax information, if available. 
2276 $statistics_line
2277   Has a value of 1 if the statistics line is shown, otherwise 0. 
2279 $sub_sep
2280   Contains the value of the array sub-script separation string. 
2282 $tab_dist
2283   The distance between tab stops for a hardware tab character, as set in the 
2284   Tabs... dialog of the Preferences menu. 
2286 $text_length
2287   The length of the text in the current window. 
2289 $top_line
2290   The line number of the top line of the currently active pane. 
2292 $use_tabs
2293   Whether the user is allowing the NEdit to insert tab characters to maintain 
2294   spacing in tab emulation and rectangular dragging operations. (The setting 
2295   of the "Use tab characters in padding and emulated tabs" button in the 
2296   Tabs... dialog of the Preferences menu.) 
2298 $wrap_margin
2299   The right margin in the current window for text wrapping and filling. 
2301 $wrap_text
2302   The current wrap text mode. Values are "none", "auto" or "continuous". 
2305   BUILT-IN SUBROUTINES
2307 append_file( string, filename )
2308   Appends a string to a named file. Returns 1 on successful write, or 0 if 
2309   unsuccessful. 
2311 beep()
2312   Ring the bell. 
2314 calltip( "text_or_key" [, mode [, pos]] )
2315   Pops up a calltip. <pos> is an optional position in the buffer where the tip 
2316   will be displayed. The upper-left corner of the calltip will appear below 
2317   where the cursor would appear if it were at this position. <mode> is one of 
2318   "tipText" (default), "tipKey", or "tagKey". "tipText" displays the text 
2319   as-is, "tagKey" uses it as the key to look up a tag, then converts the tag 
2320   to a calltip, and "tipKey uses it as the key to look up a calltip, then 
2321   falls back to a tag if that fails. You'll usually use "tipKey" or "tipText". 
2322   Returns the ID of the calltip if it was found and/or displayed correctly, 0 
2323   otherwise. 
2325 clipboard_to_string()  
2326   Returns the contents of the clipboard as a macro string. Returns empty 
2327   string on error. 
2329 dialog( message, btn_1_label, btn_2_label, ... )  
2330   Pop up a dialog for querying and presenting information to the user. First 
2331   argument is a string to show in the message area of the dialog. Up to eight 
2332   additional optional arguments represent labels for buttons to appear along 
2333   the bottom of the dialog. Returns the number of the button pressed (the 
2334   first button is number 1), or 0 if the user closed the dialog via the window 
2335   close box. 
2337 focus_window( window_name )  
2338   Sets the window on which subsequent macro commands operate. window_name can 
2339   be either a fully qualified file name, or one of "last" for the last window 
2340   created, or "next" for the next window in the chain from the currently 
2341   focused window (the first window being the one returned from calling 
2342   focus_window("last"). Returns the name of the newly-focused window, or an 
2343   empty string if the requested window was not found. 
2345 get_character( position )  
2346   Returns the single character at the position indicated by the first argument 
2347   to the routine from the current window. 
2349 get_range( start, end )  
2350   Returns the text between a starting and ending position from the current 
2351   window. 
2353 get_selection()  
2354   Returns a string containing the text currently selected by the primary 
2355   selection either from the current window (no keyword), or from anywhere on 
2356   the screen (keyword "any"). 
2358 getenv( name )
2359   Gets the value of an environment variable. 
2361 kill_calltip( [calltip_ID] )
2362   Kills any calltip that is being displayed in the window in which the macro 
2363   is running. If there is no displayed calltip this does nothing. If a calltip 
2364   ID is supplied then the calltip is killed only if its ID is calltip_ID. 
2366 length( string )
2367   Returns the length of a string 
2369 list_dialog( message, text, btn_1_label, btn_2_label, ... )  
2370   Pop up a dialog for prompting the user to choose a line from the given text 
2371   string. The first argument is a message string to be used as a title for the 
2372   fixed text describing the list. The second string provides the list data: 
2373   this is a text string in which list entries are separated by newline 
2374   characters. Up to seven additional optional arguments represent labels for 
2375   buttons to appear along the bottom of the dialog. Returns the line of text 
2376   selected by the user as the function value (without any newline separator) 
2377   or the empty string if none was selected, and number of the button pressed 
2378   (the first button is number 1), in $list_dialog_button. If the user closes 
2379   the dialog via the window close box, the function returns the empty string, 
2380   and $list_dialog_button returns 0. 
2382 max( n1, n2, ... )
2383   Returns the maximum value of all of its arguments 
2385 min( n1, n2, ... )
2386   Returns the minimum value of all of its arguments 
2388 read_file( filename )  
2389   Reads the contents of a text file into a string. On success, returns 1 in 
2390   $read_status, and the contents of the file as a string in the subroutine 
2391   return value. On failure, returns the empty string "" and an 0 $read_status. 
2393 replace_in_string( string, search_for, replace_with [, type, "copy"] )  
2394   Replaces all occurrences of a search string in a string with a replacement 
2395   string. Arguments are 1: string to search in, 2: string to search for, 3: 
2396   replacement string. There are two optional arguments. One is a search type, 
2397   either "literal", "case", "word", "caseWord", "regex", or "regexNoCase". The 
2398   default search type is "literal". If the optional "copy" argument is 
2399   specified, a copy of the input string is returned when no replacements were 
2400   performed. By default an empty string ("") will be returned in this case. 
2401   Returns a new string with all of the replacements done. 
2403 replace_range( start, end, string )  
2404   Replaces all of the text in the current window between two positions. 
2406 replace_selection( string )  
2407   Replaces the primary-selection selected text in the current window. 
2409 replace_substring( string, start, end, replace_with )  
2410   Replacing a substring between two positions in a string within another 
2411   string. 
2413 search( search_for, start [, search_type, wrap, direction] )  
2414   Searches silently in a window without dialogs, beeps, or changes to the 
2415   selection. Arguments are: 1: string to search for, 2: starting position. 
2416   Optional arguments may include the strings: "wrap" to make the search wrap 
2417   around the beginning or end of the string, "backward" or "forward" to change 
2418   the search direction ("forward" is the default), "literal", "case", "word", 
2419   "caseWord", "regex", or "regexNoCase" to change the search type (default is 
2420   "literal"). Returns the starting position of the match, or -1 if nothing 
2421   matched. Also returns the ending position of the match in $search_end. 
2423 search_string( string, search_for, start [, search_type, direction] ) 
2425   Built-in macro subroutine for searching a string. Arguments are 1: string to 
2426   search in, 2: string to search for, 3: starting position. Optional arguments 
2427   may include the strings: "wrap" to make the search wrap around the beginning 
2428   or end of the string, "backward" or "forward" to change the search direction 
2429   ("forward" is the default), "literal", "case", "word", "caseWord", "regex", 
2430   or "regexNoCase" to change the search type (default is "literal"). Returns 
2431   the starting position of the match, or -1 if nothing matched. Also returns 
2432   the ending position of the match in $search_end. 
2434 select( start, end )  
2435   Selects (with the primary selection) text in the current buffer between a 
2436   starting and ending position. 
2438 select_rectangle( start, end, left, right )  
2439   Selects a rectangular area of text between a starting and ending position, 
2440   and confined horizontally to characters displayed between positions "left", 
2441   and "right". 
2443 set_cursor_pos( position )
2444   Set the cursor position for the current window. 
2446 shell_command( command, input_string )  
2447   Executes a shell command, feeding it input from input_string. On completion, 
2448   output from the command is returned as the function value, and the command's 
2449   exit status is returned in the global variable $shell_cmd_status. 
2451 split(string, separation_string [, search_type])
2452   Splits a string using the separator specified. Optionally the search_type 
2453   argument can specify how the separation_string is interpreted. The default 
2454   is "literal". The returned value is an array with keys beginning at 0. 
2456 string_dialog( message, btn_1_label, btn_2_label, ... )  
2457   Pops up a dialog prompting the user to enter information. The first argument 
2458   is a string to show in the message area of the dialog. Up to nine additional 
2459   optional arguments represent labels for buttons to appear along the bottom 
2460   of the dialog. Returns the string entered by the user as the function value, 
2461   and number of the button pressed (the first button is number 1), in 
2462   $string_dialog_button. If the user closes the dialog via the window close 
2463   box, the function returns the empty string, and $string_dialog_button 
2464   returns 0. 
2466 string_compare(string1, string2 [, consider-case])
2467   Compare two strings and return 0 if they are equal, -1 if string1 is less 
2468   than string2 or 1 if string1 is greater than string2. The values for the 
2469   optional consider-case argument is either "case" or "nocase". The default is 
2470   to do a case sensitive comparison. 
2472 string_to_clipboard( string )  
2473   Copy the contents of a macro string to the clipboard. 
2475 substring( string, start, end )  
2476   Returns the portion of a string between a starting and ending position. 
2478 t_print( string1, string2, ... )  
2479   Writes strings to the terminal (stdout) from which NEdit was started. 
2481 tolower( string )
2482   Return an all lower-case version of string. 
2484 toupper( string )
2485   Return an all upper-case version of string. 
2487 write_file( string, filename )  
2488   Writes a string (parameter 1) to a file named in parameter 2. Returns 1 on 
2489   successful write, or 0 if unsuccessful. 
2491 ---------------
2492 ACTION ROUTINES
2493 ---------------
2495   All of the editing capabilities of NEdit are represented as a special type 
2496   of subroutine, called an action routine, which can be invoked from both 
2497   macros and translation table entries (see "Key Binding" in the Customizing 
2498   section of the Help menu). 
2501   ACTIONS REPRESENTING MENU COMMANDS
2503     File Menu                 Search Menu
2504     -----------------------   -------------------------
2505     new()                     find()
2506     open()                    find_dialog()
2507     open_dialog()             find_again()
2508     open_selected()           find_selection()
2509     close()                   replace()
2510     save()                    replace_dialog()
2511     save_as()                 replace_all()
2512     save_as_dialog()          replace_in_selection()
2513     revert_to_saved()         replace_again()
2514     include_file()            goto_line_number()
2515     include_file_dialog()     goto_line_number_dialog()
2516     load_macro_file()         goto_selected()
2517     load_macro_file_dialog()  mark()
2518     load_tags_file()          mark_dialog()
2519     load_tags_file_dialog()   goto_mark()
2520     unload_tags_file()        goto_mark_dialog()
2521     print()                   goto_matching()
2522     print_selection()         select_to_matching()
2523     exit()                    find_definition()
2525     Edit Menu                 Shell Menu
2526     -----------------------   -------------------------
2527     undo()                    filter_selection_dialog()
2528     redo()                    filter_selection()
2529     delete()                  execute_command()
2530     select_all()              execute_command_dialog()
2531     shift_left()              execute_command_line()
2532     shift_left_by_tab()       shell_menu_command()
2533     shift_right()
2534     shift_right_by_tab()      Macro Menu
2535     uppercase()               -------------------------
2536     lowercase()               macro_menu_command()
2537     fill_paragraph()          repeat_macro()
2538     control_code_dialog()     repeat_dialog()
2540                               Windows Menu
2541                               -------------------------
2542                               split_window()
2543                               close_pane()
2545   An action representing a menu command is named the same as its corresponding 
2546   menu item except that all punctuation is removed, all letters are changed to 
2547   lower case, and spaces are replaced with underscores. To present a dialog to 
2548   ask the user for input, use the actions with the `_dialog` suffix. Actions 
2549   without the `_dialog` suffix take the information from the routine's 
2550   arguments (see below). 
2553   MENU ACTION ROUTINE ARGUMENTS
2555   Arguments are text strings enclosed in quotes. Below are the menu action 
2556   routines which take arguments. Optional arguments are enclosed in []. 
2558     close( ["prompt" | "save" | "nosave"] )
2560     execute_command( shell-command )
2562     filter_selection( shell-command )
2564     find( search-string [, search-direction] [, search-type] 
2565        [, search-wrap] )
2567     find_again( [search-direction] [, search-wrap] )
2569     find_definition( [tag-name] )
2571     find_dialog( [search-direction] [, search-type] 
2572        [, keep-dialog] )
2574     find_selection( [search-direction] [, search-wrap] 
2575        [, non-regex-search-type] )
2577     goto_line_number( [line-number] )
2579     goto_mark( mark-letter )
2581     include_file( filename )
2583     load_tags_file( filename )
2585     macro_menu_command( macro-menu-item-name )
2587     mark( mark-letter )
2589     open( filename )
2591     replace( search-string, replace-string, 
2592        [, search-direction] [, search-type] [, search-wrap] )
2594     replace_again( [search-direction] [, search-wrap] )
2596     replace_dialog( [search-direction] [, search-type]
2597        [, keep-dialog] )
2599     replace_in_selection( search-string, 
2600        replace-string [, search-type] )
2602     save_as( filename )
2604     shell_menu_command( shell-menu-item-name )
2606     unload_tags_file( filename )
2608     ----------- Some notes on argument types above -----------
2610     filename       Path names are relative to the directory from
2611                    which NEdit was started. Shell interpreted 
2612                    wildcards and `~' are not expanded.
2614     keep-dialog    Either "keep" or "nokeep".
2616     mark-letter    The mark command limits users to single 
2617                    letters. Inside of macros, numeric marks are
2618                    allowed, which won't interfere with marks set
2619                    by the user.
2621     macro-menu-item-name
2622                    Name of the command exactly as specified in 
2623                    the Macro Menu dialogs.
2625     non-regex-search-type 
2626                    Either "literal", "case", "word", or 
2627                    "caseWord".
2629     search-direction
2630                    Either "forward" or "backward".
2632     search-type    Either "literal", "case", "word", 
2633                    "caseWord", "regex", or "regexNoCase".
2635     search-wrap    Either "wrap" or "nowrap".
2637     shell-menu-item-name
2638                    Name of the command exactly as specified in 
2639                    the Shell Menu dialogs.
2642   WINDOW PREFERENCES ACTIONS
2644 set_auto_indent( "off" | "on" | "smart" )
2645   Set auto indent mode for the current window. 
2647 set_em_tab_dist( em-tab-distance )
2648   Set the emulated tab size. An em-tab-distance value of 0 or -1 translates to 
2649   no emulated tabs. Em-tab-distance must be smaller than 1000. 
2651 set_fonts( font-name, italic-font-name, bold-font-name, bold-italic-font-name )
2652   Set all the fonts used for the current window. 
2654 set_highlight_syntax( [0 | 1] )
2655   Set syntax highlighting mode for the current window. A value of 0 turns it 
2656   off and a value of 1 turns it on. If no parameters are supplied the option 
2657   is toggled. 
2659 set_incremental_backup( [0 | 1] )
2660   Set incremental backup mode for the current window. A value of 0 turns it 
2661   off and a value of 1 turns it on. If no parameters are supplied the option 
2662   is toggled. 
2664 set_incremental_search_line( [0 | 1] )
2665   Show or hide the incremental search line for the current window. A value of 
2666   0 turns it off and a value of 1 turns it on. If no parameters are supplied 
2667   the option is toggled. 
2669 set_language_mode( language-mode )
2670   Set the language mode for the current window. If the language mode is "" or 
2671   unrecognized, it will be set to Plain. 
2673 set_locked( [0 | 1] )
2674   This only affects the locked status of a file, not it's read-only status. 
2675   Permissions are NOT changed. A value of 0 turns it off and a value of 1 
2676   turns it on. If no parameters are supplied the option is toggled. 
2678 set_make_backup_copy( [0 | 1] )
2679   Set whether backup copies are made during saves for the current window. A 
2680   value of 0 turns it off and a value of 1 turns it on. If no parameters are 
2681   supplied the option is toggled. 
2683 set_overtype_mode( [0 | 1] )
2684   Set overtype mode for the current window. A value of 0 turns it off and a 
2685   value of 1 turns it on. If no parameters are supplied the option is toggled. 
2687 set_show_line_numbers( [0 | 1] )
2688   Show or hide line numbers for the current window. A value of 0 turns it off 
2689   and a value of 1 turns it on. If no parameters are supplied the option is 
2690   toggled. 
2692 set_show_matching( "off" | "delimiter" | "range" )
2693   Set show matching (...) mode for the current window. 
2695 set_match_syntax_based( [0 | 1] )
2696   Set whether matching should be syntax based for the current window. 
2698 set_statistics_line( [0 | 1] )
2699   Show or hide the statistics line for the current window. A value of 0 turns 
2700   it off and a value of 1 turns it on. If no parameters are supplied the 
2701   option is toggled. 
2703 set_tab_dist( tab-distance )
2704   Set the size of hardware tab spacing. Tab-distance must must be a value 
2705   greater than 0 and no greater than 20. 
2707 set_use_tabs( [0 | 1] )
2708   Set whether tabs are used for the current window. A value of 0 turns it off 
2709   and a value of 1 turns it on. If no parameters are supplied the option is 
2710   toggled. 
2712 set_wrap_margin( wrap-width )
2713   Set the wrap width for text wrapping of the current window. A value of 0 
2714   means to wrap at window width. 
2716 set_wrap_text( "none" | "auto" | "continuous" )
2717   Set wrap text mode for the current window. 
2720   KEYBOARD-ONLY ACTIONS
2722   In addition to the arguments listed in the call descriptions below, any 
2723   routine involving cursor movement can take the argument "extend", meaning, 
2724   adjust the primary selection to the new cursor position. Routines which take 
2725   the "extend" argument as well as mouse dragging operations for both primary 
2726   and secondary selections can take the optional keyword "rect", meaning, make 
2727   the selection rectangular. Any routine that accepts the "scrollbar" argument 
2728   will move the display but not the cursor or selection. Routines that accept 
2729   the "nobell" argument will fail silently without beeping, when that argument 
2730   is supplied. 
2732 backward_character( ["nobell"] )
2733   Moves the cursor one character to the left. 
2735 backward_paragraph(["nobell"] )
2736   Moves the cursor to the beginning of the paragraph, or if the cursor is 
2737   already at the beginning of a paragraph, moves the cursor to the beginning 
2738   of the previous paragraph. Paragraphs are defined as regions of text 
2739   delimited by one or more blank lines. 
2741 backward_word( ["nobell"] )
2742   Moves the cursor to the beginning of a word, or, if the cursor is already at 
2743   the beginning of a word, moves the cursor to the beginning of the previous 
2744   word. Word delimiters are user-settable, and defined by the X resource 
2745   wordDelimiters. 
2747 beginning_of_file( ["scrollbar"] )
2748   Moves the cursor to the beginning of the file. 
2750 beginning_of_line()
2751   Moves the cursor to the beginning of the line. 
2753 beginning_of_selection()
2754   Moves the cursor to the beginning of the selection without disturbing the 
2755   selection. 
2757 copy_clipboard()
2758   Copies the current selection to the clipboard. 
2760 copy_primary()
2761   Copies the primary selection to the cursor. 
2763 copy_to()
2764   If a secondary selection exists, copies the secondary selection to the 
2765   cursor. If no secondary selection exists, copies the primary selection to 
2766   the pointer location. 
2768 copy_to_or_end_drag()
2769   Completes either a secondary selection operation, or a primary drag. If the 
2770   user is dragging the mouse to adjust a secondary selection, the selection is 
2771   copied and either inserted at the cursor location, or, if pending-delete is 
2772   on and a primary selection exists in the window, replaces the primary 
2773   selection. If the user is dragging a block of text (primary selection), 
2774   completes the drag operation and leaves the text at it's current location. 
2776 cut_clipboard()
2777   Deletes the text in the primary selection and places it in the clipboard. 
2779 cut_primary()
2780   Copies the primary selection to the cursor and deletes it at its original 
2781   location. 
2783 delete_selection()
2784   Deletes the contents of the primary selection. 
2786 delete_next_character( ["nobell"] )
2787   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2788   character following the cursor. 
2790 delete_previous_character( ["nobell"] )
2791   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2792   character before the cursor. 
2794 delete_next_word( ["nobell"] )
2795   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2796   word following the cursor. 
2798 delete_previous_word( ["nobell"] )
2799   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2800   word before the cursor. 
2802 delete_to_start_of_line( ["nobell"] )
2803   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2804   characters between the cursor and the start of the line. 
2806 delete_to_end_of_line( ["nobell"] )
2807   If a primary selection exists, deletes its contents. Otherwise, deletes the 
2808   characters between the cursor and the end of the line. 
2810 deselect_all()
2811   De-selects the primary selection. 
2813 end_of_file( ["scrollbar"] )
2814   Moves the cursor to the end of the file. 
2816 end_of_line()
2817   Moves the cursor to the end of the line. 
2819 end_of_selection()
2820   Moves the cursor to the end of the selection without disturbing the 
2821   selection. 
2823 exchange( ["nobell"] )
2824   Exchange the primary and secondary selections. 
2826 extend_adjust()
2827   Attached mouse-movement events to begin a selection between the cursor and 
2828   the mouse, or extend the primary selection to the mouse position. 
2830 extend_end()
2831   Completes a primary drag-selection operation. 
2833 extend_start()
2834   Begins a selection between the cursor and the mouse. A drag-selection 
2835   operation can be started with either extend_start or grab_focus. 
2837 focus_pane( [relative-pane] | [positive-index] | [negative-index] )
2838   Move the focus to the requested pane. Arguments can be specified in the form 
2839   of a relative-pane ("first", "last", "next", "previous"), a positive-index 
2840   (numbers greater than 0, 1 is the same as "first") or a negative-index 
2841   (numbers less than 0, -1 is the same as "last"). 
2843 forward_character()
2844   Moves the cursor one character to the right. 
2846 forward_paragraph( ["nobell"] )
2847   Moves the cursor to the beginning of the next paragraph. Paragraphs are 
2848   defined as regions of text delimited by one or more blank lines. 
2850 forward_word( ["tail"] ["nobell"] )
2851   Moves the cursor to the beginning of the next word. Word delimiters are 
2852   user-settable, and defined by the X resource wordDelimiters. If the "tail" 
2853   argument is supplied the cursor will be moved to the end of the current word 
2854   or the end of the next word, if the cursor is between words. 
2856 grab_focus()
2857   Moves the cursor to the mouse pointer location, and prepares for a possible 
2858   drag-selection operation (bound to extend_adjust), or multi-click operation 
2859   (a further grab_focus action). If a second invocation of grab focus follows 
2860   immediately, it selects a whole word, or a third, a whole line. 
2862 insert_string( "string" )
2863   If pending delete is on and the cursor is inside the selection, replaces the 
2864   selection with "string". Otherwise, inserts "string" at the cursor location. 
2866 key_select( "direction" [,"nobell"] )
2867   Moves the cursor one character in "direction" ("left", "right", "up", or 
2868   "down") and extends the selection. Same as 
2869   forward/backward-character("extend"), or process-up/down("extend"), for 
2870   compatibility with previous versions. 
2872 move-destination()
2873   Moves the cursor to the pointer location without disturbing the selection. 
2874   (This is an unusual way of working. We left it in for compatibility with 
2875   previous versions, but if you actually use this capability, please send us 
2876   some mail, otherwise it is likely to disappear in the future. 
2878 move_to()
2879   If a secondary selection exists, deletes the contents of the secondary 
2880   selection and inserts it at the cursor, or if pending-delete is on and there 
2881   is a primary selection, replaces the primary selection. If no secondary 
2882   selection exists, moves the primary selection to the pointer location, 
2883   deleting it from its original position. 
2885 move_to_or_end_drag()
2886   Completes either a secondary selection operation, or a primary drag. If the 
2887   user is dragging the mouse to adjust a secondary selection, the selection is 
2888   deleted and either inserted at the cursor location, or, if pending-delete is 
2889   on and a primary selection exists in the window, replaces the primary 
2890   selection. If the user is dragging a block of text (primary selection), 
2891   completes the drag operation and deletes the text from it's current 
2892   location. 
2894 newline()
2895   Inserts a newline character. If Auto Indent is on, lines up the indentation 
2896   of the cursor with the current line. 
2898 newline_and_indent()
2899   Inserts a newline character and lines up the indentation of the cursor with 
2900   the current line, regardless of the setting of Auto Indent. 
2902 newline_no_indent()
2903   Inserts a newline character, without automatic indentation, regardless of 
2904   the setting of Auto Indent. 
2906 next_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2907   Moves the cursor and scroll forward one page. The parameter "stutter" moves 
2908   the cursor to the bottom of the display, unless it is already there, 
2909   otherwise it will page down. The parameter "column" will maintain the 
2910   preferred column while moving the cursor. 
2912 page_left( ["scrollbar"] ["nobell"] )
2913   Move the cursor and scroll left one page. 
2915 page_right( ["scrollbar"] ["nobell"] )
2916   Move the cursor and scroll right one page. 
2918 paste_clipboard()
2919   Insert the contents of the clipboard at the cursor, or if pending delete is 
2920   on, replace the primary selection with the contents of the clipboard. 
2922 previous_page( ["stutter"] ["column"] ["scrollbar"] ["nobell"] )
2923   Moves the cursor and scroll backward one page. The parameter "stutter" moves 
2924   the cursor to the top of the display, unless it is already there, otherwise 
2925   it will page up. The parameter "column" will maintain the preferred column 
2926   while moving the cursor. 
2928 process_bdrag()
2929   Same as secondary_or_drag_start for compatibility with previous versions. 
2931 process_cancel()
2932   Cancels the current extend_adjust, secondary_adjust, or 
2933   secondary_or_drag_adjust in progress. 
2935 process_down( ["nobell"] )
2936   Moves the cursor down one line. 
2938 process_return()
2939   Same as newline for compatibility with previous versions. 
2941 process_shift_down( ["nobell"] )
2942   Same as process_down("extend") for compatibility with previous versions. 
2944 process_shift_up( ["nobell"] )
2945   Same as process_up("extend") for compatibility with previous versions. 
2947 process_tab()
2948   If tab emulation is turned on, inserts an emulated tab, otherwise inserts a 
2949   tab character. 
2951 process_up( ["nobell"] )
2952   Moves the cursor up one line. 
2954 raise_window([relative-window] | [positive-index] | [negative-index])
2955   Raise the current focused window to the front if no argument is supplied. 
2956   Arguments can be specified in the form of a relative-window ("first", 
2957   "last", "next", "previous"), a positive-index (numbers greater than 0, 1 is 
2958   the same as "last") or a negative-index (numbers less than 0, -1 is the same 
2959   as "first"). 
2961 scroll_down(nLines)
2962   Scroll the display down (towards the end of the file) by nLines. 
2964 scroll_left( nPixels )
2965   Scroll the display left by nPixels. 
2967 scroll_right( nPixels )
2968   Scroll the display right by nPixels. 
2970 scroll_up( nLines )
2971   Scroll the display up (towards the beginning of the file) by nLines. 
2973 scroll_to_line( lineNum )
2974   Scroll to position line number lineNum at the top of the pane. The first 
2975   line of a file is line 1. 
2977 secondary_adjust()
2978   Attached mouse-movement events to extend the secondary selection to the 
2979   mouse position. 
2981 secondary_or_drag_adjust()
2982   Attached mouse-movement events to extend the secondary selection, or 
2983   reposition the primary text being dragged. Takes two optional arguments, 
2984   "copy", and "overlay". "copy" leaves a copy of the dragged text at the site 
2985   at which the drag began. "overlay" does the drag in overlay mode, meaning 
2986   the dragged text is laid on top of the existing text, obscuring and 
2987   ultimately deleting it when the drag is complete. 
2989 secondary_or_drag_start()
2990   To be attached to a mouse down event. Begins drag selecting a secondary 
2991   selection, or dragging the contents of the primary selection, depending on 
2992   whether the mouse is pressed inside of an existing primary selection. 
2994 secondary_start()
2995   To be attached to a mouse down event. Begin drag selecting a secondary 
2996   selection. 
2998 select_all()
2999   Select the entire file. 
3001 self_insert()
3002   To be attached to a key-press event, inserts the character equivalent of the 
3003   key pressed. 
3006 ===========
3007 CUSTOMIZING
3008 ===========
3010 -----------------
3011 CUSTOMIZING NEDIT
3012 -----------------
3014   NEdit can be customized many different ways. The most important 
3015   user-settable options are presented in the Preferences menu, including all 
3016   options that users might need to change during an editing session. Options 
3017   set in the Default Settings sub-menu of the Preferences menu can be 
3018   preserved between sessions by selecting Save Defaults, which writes the 
3019   changes to the preferences file. See the section titled "Preferences" for 
3020   more details. 
3022   User defined commands can be added to NEdit's Shell, Macro, and window 
3023   background menus. Dialogs for creating items in these menus can be found 
3024   under Customize Menus in the Default Settings sub menu of the Preferences 
3025   menu. 
3027   For users who depend on NEdit every day and want to tune every excruciating 
3028   detail, there are also X resources for tuning a vast number of such details, 
3029   down to the color of each individual button. See the section "X Resources" 
3030   for more information, as well as a list of selected resources. 
3032   The most common reason customizing your X resources for NEdit, however, is 
3033   key binding. While limited key binding can be done through Preferences 
3034   settings (Preferences -> Default Settings -> Customize Menus), you can 
3035   really only add keys this way, and each key must have a corresponding menu 
3036   item. Any significant changes to key binding should be made via the 
3037   Translations resource and menu accelerator resources. The sections titled 
3038   "Key Binding" and "X Resources" have more information. 
3040 -----------
3041 PREFERENCES
3042 -----------
3044   The Preferences menu allows you to set options for both the current editing 
3045   window, and default values for newly created windows and future NEdit 
3046   sessions. Options in the Preferences menu itself (not in the Default 
3047   Settings sub-menu) take effect immediately and refer to the current window 
3048   only. Options in the Default Settings sub-menu provide initial settings for 
3049   future windows created using the New or Open commands; options affecting all 
3050   windows are also set here. Preferences set in the Default Settings sub-menu 
3051   can be saved in a file that is automatically read by NEdit at startup time, 
3052   by selecting Save Defaults. 
3055   PREFERENCES MENU
3057 Default Settings
3058   Menu of initial settings for future windows. Generally the same as the 
3059   options in the main part of the menu, but apply as defaults for future 
3060   windows created during this NEdit session. These settings can be saved using 
3061   the Save Defaults command below, to be loaded automatically each time NEdit 
3062   is started. 
3064 Save Defaults
3065   Save the default options as set under Default Settings for future NEdit 
3066   sessions. 
3068 Statistics Line
3069   Show the full file name, line number, and length of the file being edited. 
3071 Incremental Search Line
3072   Keep the incremental search bar (Search -> Find Incremental) permanently 
3073   displayed at the top of the window. 
3075 Show Line Numbers
3076   Display line numbers to the right of the text. 
3078 Language Mode
3079   Tells NEdit what language (if any) to assume, for selecting 
3080   language-specific features such as highlight patterns and smart indent 
3081   macros, and setting language specific preferences like word delimiters, tab 
3082   emulation, and auto-indent. See Features for Programming -> Programming with 
3083   NEdit for more information. 
3085 Auto Indent
3086   Setting Auto Indent "on" maintains a running indent (pressing the Return key 
3087   will line up the cursor with the indent level of the previous line). If 
3088   smart indent macros are available for the current language mode, smart 
3089   indent can be selected and NEdit will attempt to guess proper language 
3090   indentation for each new line. See Help -> Features for Programming -> 
3091   Automatic Indent for more information. 
3093 Wrap
3094   Choose between two styles of automatic wrapping or none. Auto Newline wrap, 
3095   wraps text at word boundaries when the cursor reaches the right margin, by 
3096   replacing the space or tab at the last word boundary with a newline 
3097   character. Continuous Wrap wraps long lines which extend past the right 
3098   margin. Continuous Wrap mode is typically used to produce files where 
3099   newlines are omitted within paragraphs, to make text filling automatic (a 
3100   kind of poor-man's word processor). Text of this style is common on Macs and 
3101   PCs but is not necessarily supported very well under Unix (except in 
3102   programs which deal with e-mail, for which it is often the format of 
3103   choice). 
3105 Wrap Margin
3106   Set margin for Auto Newline Wrap, Continuous Wrap, and Fill Paragraph. Lines 
3107   may, be wrapped at the right margin of the window, or the margin can be set 
3108   at a specific column. 
3110 Tabs
3111   Set the tab distance (number of characters between tab stops) for tab 
3112   characters, and control tab emulation and use of tab characters in padding 
3113   and emulated tabs. 
3115 Text Font...
3116   Change the font(s) used to display text (fonts for menus and dialogs must be 
3117   set using X resources for the text area of the window). See below for more 
3118   information. 
3120 Highlight Syntax
3121   If NEdit recognizes the language being edited, and highlighting patterns are 
3122   available for that language, use fonts and colors to enhance viewing of the 
3123   file. (See Help -> Features for Programming -> Syntax Highlighting for more 
3124   information. 
3126 Make Backup Copy
3127   On Save, write a backup copy of the file as it existed before the Save 
3128   command with the extension .bck (Unix only). 
3130 Incremental Backup
3131   Periodically make a backup copy of the file being edited under the name 
3132   `~filename` on Unix or `_filename` on VMS (see Crash Recovery). 
3134 Show Matching (..)
3135   Momentarily highlight matching parenthesis, brackets, and braces, or the 
3136   range between them, when one of these characters is typed, or when the 
3137   insertion cursor is positioned after it. Delimiter only highlights the 
3138   matching delimiter, while Range highlights the whole range of text between 
3139   the matching delimiters. 
3141   Optionally, the matching can make use of syntax information if syntax 
3142   highlighting is enabled. Alternatively, the matching is purely character 
3143   based. In general, syntax based matching results in fewer false matches. 
3145 Overtype
3146   In overtype mode, new characters entered replace the characters in front of 
3147   the insertion cursor, rather than being inserted before them. 
3149 Read Only
3150   Lock the file against accidental modification. This temporarily prevents the 
3151   file from being modified in this NEdit session. Note that this is different 
3152   from setting the file protection. 
3155   PREFERENCES -> DEFAULT SETTINGS MENU
3157   Options in the Preferences -> Default Settings menu have the same meaning as 
3158   those in the top-level Preferences menu, except that they apply to future 
3159   NEdit windows and future NEdit sessions if saved with the Save Defaults 
3160   command. Additional options which appear in this menu are: 
3162 Language Modes
3163   Define language recognition information (for determining language mode from 
3164   file name or content) and set language specific preferences. 
3166 Tag Collisions
3167   How to react to multiple tags for the same name. Tags are described in the 
3168   section: Features for Programmers -> Finding Declarations (ctags). In Show 
3169   All mode, all matching tags are displayed in a dialog. In Smart mode, if one 
3170   of the matching tags is in the current window, that tag is chosen, without 
3171   displaying the dialog. 
3173 Customize Menus
3174   Add/remove items from the Shell, Macro, and window background menus (see 
3175   below). 
3177 Customize Window Title
3178   Opens a dialog where the information to be displayed in the windows's title 
3179   field can be defined and tested. The dialog contains a Help button, 
3180   providing further information about the options available. 
3182 Searching
3183   Options for controlling the behavior of Find and Replace commands: 
3185   Verbose - Presents search results in dialog form, asks before wrapping a 
3186   search back around the beginning (or end) of the file (unless Beep On Search 
3187   Wrap is turned on). 
3189   Wrap Around - Search and Replace operations wrap around the beginning (or 
3190   end) of the file. 
3192   Beep On Search Wrap - Beep when Search and Replace operations wrap around 
3193   the beginning (or end) of the file (only if Wrap Around is turned on). 
3195   Keep Dialogs Up - Don't pop down Replace and Find boxes after searching. 
3197   Default Search Style - Initial setting for search type in Find and Replace 
3198   dialogs. 
3200   Default Replace Scope - [THIS OPTION IS ONLY PRESENT WHEN NEDIT WAS COMPILED 
3201   WITH THE 
3202    -DREPLACE_SCOPE FLAG TO SELECT AN ALTERNATIVE REPLACE DIALOG LAYOUT.]
3204   Initial setting for the scope in the Replace/Find dialog, when a selection 
3205   exists. It can be either "In Window", "In Selection", or "Smart". "Smart" 
3206   results in "In Window" if the size of the selection is smaller than 1 line, 
3207   and to "In Selection" otherwise. 
3209 Syntax Highlighting
3210   Program and configure enhanced text display for new or supported languages 
3211   (See Features for Programming -> Syntax Highlighting). 
3213 Append Line Feed on Save
3214   Some UNIX tools expect that files end with a line feed. If this option is 
3215   activated, NEdit will append one if required. 
3217 Sort Open Prev. Menu
3218   Option to order the File -> Open Previous menu alphabetically, versus in 
3219   order of last access. 
3221 Popups Under Pointer
3222   Display pop-up dialogs centered on the current mouse position, as opposed to 
3223   centered on the parent window. This generally speeds interaction, and is 
3224   essential for users who users who set their window managers so keyboard 
3225   focus follows the mouse. 
3227 Modification Warnings
3228   Pop up a warning dialog when files get changed external to NEdit. 
3230 Exit Warnings
3231   Ask before exiting when two or more files are open in an NEdit session. 
3233 Initial Window Size
3234   Default size for new windows. 
3237   CHANGING FONT(S)
3239   The font used to display text in NEdit is set under Preferences -> Text Font 
3240   (for the current window), or Preferences -> Default Settings Text Font (for 
3241   future windows). These dialogs also allow you to set fonts for syntax 
3242   highlighting. If you don't intend to use syntax highlighting, you can ignore 
3243   most of the dialog, and just set the field labeled Primary Font. 
3245   Unless you are absolutely certain about the types of files that you will be 
3246   editing with NEdit, you should choose a fixed-spacing font. Many, if not 
3247   most, plain-text files are written expecting to be viewed with fixed 
3248   character spacing, and will look wrong with proportional spacing. NEdit's 
3249   filling, wrapping, and rectangular operations will also work strangely if 
3250   you choose a proportional font. 
3252   Note that in the font browser (the dialog brought up by the Browse... 
3253   button), the subset of fonts which are shown is narrowed depending on the 
3254   characteristics already selected. It is therefore important to know that you 
3255   can unselect characteristics from the lists by clicking on the selected 
3256   items a second time. 
3258   Fonts for syntax highlighting should ideally match the primary font in both 
3259   height and spacing. A mismatch in spacing will result in similar distortions 
3260   as choosing a proportional font: column alignment will sometimes look wrong, 
3261   and rectangular operations, wrapping, and filling will behave strangely. A 
3262   mismatch in height will cause windows to re-size themselves slightly when 
3263   syntax highlighting is turned on or off, and increase the inter- line 
3264   spacing of the text. Unfortunately, on some systems it is hard to find sets 
3265   of fonts which match exactly in height. 
3268   CUSTOMIZING MENUS
3270   You can add or change items in the Shell, Macro, and window background menus 
3271   under Preferences -> Default Settings -> Customize Menus. When you choose 
3272   one of these, you will see a dialog with a list of the current 
3273   user-configurable items from the menu on the left. To change an existing 
3274   item, select it from the list, and its properties will appear in the 
3275   remaining fields of the dialog, where you may change them. Selecting the 
3276   item "New" from the list allows you to enter new items in the menu. 
3278   Hopefully most of the characteristics are self explanatory, but here are a 
3279   few things to note: 
3281   Accelerator keys are keyboard shortcuts which appear on the right hand side 
3282   of the menus, and allow you avoid pulling down the menu and activate the 
3283   command with a single keystroke. Enter accelerators by typing the keys 
3284   exactly as you would to activate the command. 
3286   Mnemonics are a single letter which should be part of the menu item name, 
3287   which allow users to traverse and activate menu items by typing keys when 
3288   the menu is pulled down. 
3290   In the Shell Command field of the Shell Commands dialog, the % character 
3291   expands to the name (including directory path) of the file in the window. To 
3292   include a % character in the command, use %%. 
3294   The Menu Entry field can contain special characters for constructing 
3295   hierarchical sub-menus, and for making items which appear only in certain 
3296   language modes. The right angle bracket character ">" creates a sub-menu. 
3297   The name of the item itself should be the last element of the path formed 
3298   from successive sub-menu names joined with ">". Menu panes are called in to 
3299   existence simply by naming them as part of a Menu Entry name. To put several 
3300   items in the same sub-menu, repeat the same hierarchical sequence for each. 
3301   For example, in the Macro Commands dialog, two items with menu entries: 
3302   a>b>c and a>b>d would create a single sub menu under the macro menu called 
3303   "a", which would contain a single sub-menu, b, holding the actual items, c 
3304   and d: 
3306       +---++---++---+
3307       |a >||b >||c  |
3308       +---++---+|d  |
3309                 +---+
3311   To qualify a menu entry with a language mode, simply add an at-sign "@" at 
3312   the end of the menu command, followed (no space) by a language mode name. To 
3313   make a menu item which appears in several language modes, append additional 
3314   @s and language mode names. For example, an item with the menu entry: 
3316     Make C Prototypes@C@C++
3318   would appear only in C and C++ language modes, and: 
3320     Make Class Template@C++
3322   would appear only in C++ mode. 
3324   Menu items with no qualification appear in all language modes. 
3326   If a menu item is followed by the single language qualification "@*", that 
3327   item will appear only if there are no applicable language-specific items of 
3328   the same name in the same submenu. For example, if you have the following 
3329   three entries in the same menu: 
3331     Make Prototypes@C@C++
3332     Make Prototypes@Java
3333     Make Prototypes@*
3335   The first will be available when the language mode is C or C++, the second 
3336   when the language mode is Java, and for all other language modes (including 
3337   the "Plain" non-language mode). If the entry: 
3339     Make Prototypes
3341   also exists, this will always appear, meaning that the menu will always have 
3342   two "Make Prototypes" entries, whatever the language mode. 
3345   THE NEDIT PREFERENCES FILE
3347   The NEdit saved preferences file is an X resource file, and its contents can 
3348   be moved into another X resource file (see X Resources). One reason for 
3349   doing so would be to attach server specific preferences, such as a default 
3350   font to a particular X server. Another reason for moving preferences into 
3351   the X resource file would be to keep preferences menu options and resource 
3352   settable options together in one place. Though the files are the same 
3353   format, additional resources should not be added to the preference file 
3354   since NEdit modifies this file by overwriting it completely. Note also that 
3355   the contents of the preference file take precedence over the values of X 
3356   resources. Using Save Defaults after moving the contents of your preference 
3357   file to your .Xdefaults file will re-create the preference file, interfering 
3358   with the options that you have moved. The location of NEdit's preferences 
3359   file depends on your environment: 
3360     * The default place for the file is '$HOME/.nedit/nedit.rc',
3361     * if the variable $NEDIT_HOME is set in your environment it is located at
3362 '$NEDIT_HOME/nedit.rc',
3363     * you may also use old-style run control files; in this case, the preferences
3364 are stored in $HOME/.nedit.
3365   (For VMS, the file is in '$NEDIT_HOME/nedit.rc' if $NEDIT_HOME is set, in 
3366   'SYS$LOGIN:.nedit' otherwise.) 
3369   SHARING CUSTOMIZATIONS WITH OTHER NEDIT USERS
3371   If you have written macro or shell menu commands, highlight patterns, or 
3372   smart-indent macros that you want to share with other NEdit users, you can 
3373   make a file which they can load into their NEdit environment. 
3375   To load such a file, start NEdit with the command: 
3377      nedit -import <file>
3379   In the new NEdit session, verify that the imported patterns or macros do 
3380   what you want, then select Preferences -> Save Defaults. Saving incorporates 
3381   the changes into the nedit preferences file, so the next time you run NEdit, 
3382   you will not have to import the distribution file. 
3384   Loading a customization file is automated, but creating one is not. To 
3385   produce a file to be imported by other users, you must make a copy of your 
3386   own NEdit configuration file, and edit it, by hand, to remove everything but 
3387   the few items of interest to the recipient. Leave only the individual 
3388   resource(s), and within those resources, only the particular macro, pattern, 
3389   style, etc, that you wish to exchange. 
3391   For example, to share a highlighting pattern set, you would include the 
3392   patterns, any new styles you added, and language mode information only if 
3393   the patterns are intended to support a new language rather than updating an 
3394   existing one. For example: 
3396      nedit.highlightPatterns:\
3397           My Language:1:0{\n\
3398                   Comment:"#":"$"::Comment::\n\
3399                   Loop Header:"^[ \\t]*loop:":::Loop::\n\
3400           }
3401      nedit.languageModes: My Language:.my::::::
3402      nedit.styles: Loop:blue:Bold
3404   Resources are in the format of X resource files, but the format of text 
3405   within multiple-item resources like highlight patterns, language modes, 
3406   macros, styles, etc., are private to NEdit. Each resource is a string which 
3407   ends at the first newline character not escaped with \, so you must be 
3408   careful about how you treat ends of lines. While you can generally just cut 
3409   and paste indented sections, if something which was originally in the middle 
3410   of a resource string is now at the end, you must remove the \ line 
3411   continuation character(s) so it will not join the next line into the 
3412   resource. Conversely, if something which was originally at the end of a 
3413   resource is now in the middle, you'll have to add continuation character(s) 
3414   to make sure that the resource string is properly continued from beginning 
3415   to end, and possibly newline character(s) (\n) to make sure that it is 
3416   properly separated from the next item. 
3418 -----------
3419 X RESOURCES
3420 -----------
3422   NEdit has additional options to those provided in the Preferences menu which 
3423   are set using X resources. Like most other X programs, NEdit can be 
3424   customized to vastly unnecessary proportions, from initial window positions 
3425   down to the font and shadow colors of each individual button (A complete 
3426   discussion of how to do this is left to books on the X Windows System). Key 
3427   binding (see "Key Binding" is one of the most useful of these resource 
3428   settable options. 
3430   X resources are usually specified in a file called .Xdefaults or .Xresources 
3431   in your home directory (on VMS this is sys$login:decw$xdefaults.dat). On 
3432   some systems, this file is read and its information attached to the X server 
3433   (your screen) when you start X. On other systems, the .Xdefaults file is 
3434   read each time you run an X program. When X resource values are attached to 
3435   the X server, changes to the resource file are not available to application 
3436   programs until you either run the xrdb program with the appropriate file as 
3437   input, or re-start the X server. 
3440   SELECTED X RESOURCE NAMES
3442   The following are selected NEdit resource names and default values for NEdit 
3443   options not settable via the Preferences menu (for preference resource 
3444   names, see your NEdit preference file): 
3446 nedit.tagFile: (not defined) 
3448   This can be the name of a file, or multiple files separated by a colon (:) 
3449   character, of the type produced by Exuberant Ctags or the Unix ctags 
3450   command, which NEdit will load at startup time (see ctag support ). The tag 
3451   file provides a database from which NEdit can automatically open files 
3452   containing the definition of a particular subroutine or data type. 
3454 nedit.alwaysCheckRelativeTagsSpecs: True
3456   When this resource is set to True, and there are tag files specified (with 
3457   the nedit.tagFile resource, see above) as relative paths, NEdit will 
3458   evaluate these tag value paths whenever a file is opened. All accessible tag 
3459   files will be loaded at this time. When this resource value is False, 
3460   relative path tag specifications will only be evaluated at NEdit startup 
3461   time. 
3463 nedit.shell: /bin/csh 
3465   (Unix systems only) The Unix shell (command interpreter) to use for 
3466   executing commands from the Shell menu 
3468 nedit.wordDelimiters: .,/\\`'!@#%^&*()-=+{}[]":;<>?
3470   The characters, in addition to blanks and tabs, which mark the boundaries 
3471   between words for the move-by-word (Ctrl+Arrow) and select-word (double 
3472   click) commands. Note that this default value may be overridden by the 
3473   setting in Preferences -> Default Settings -> Language Modes.... 
3475 nedit.remapDeleteKey: False
3477   Setting this resource to True forcibly maps the delete key to backspace. 
3478   This can be helpful on systems where the bindings have become tangled, and 
3479   in environments which mix systems with PC style keyboards and systems with 
3480   DEC and Macintosh keyboards. Theoretically, these bindings should be made 
3481   using the standard X/Motif mechanisms, outside of NEdit. In practice, some 
3482   environments where users access several different systems remotely, can be 
3483   very hard to configure. If you've given up and are using a backspace key 
3484   halfway off the keyboard because you can't figure out the bindings, set this 
3485   to True. 
3487 nedit.typingHidesPointer: False
3489   Setting this resource to True causes the mouse pointer to be hidden when you 
3490   type in the text area. As soon as the mouse pointer is moved, it will 
3491   reappear. This is useful to stop the mouse pointer from obscuring text. 
3493 nedit.overrideDefaultVirtualKeyBindings: Auto
3495   Motif uses a virtual key binding mechanism that shares the bindings between 
3496   different Motif applications. When a first Motif application is started, it 
3497   installs some default virtual key bindings and any other Motif application 
3498   that runs afterwards, simply reuses them. Obviously, if the first 
3499   application installs an invalid set, all others applications may have 
3500   problems. 
3502   In the past, NEdit has been the victim of invalid bindings installed by 
3503   other applications several times. Through this resource, NEdit can be 
3504   instructed to ignore the bindings installed by other applications, and use 
3505   its own private bindings. By default, NEdit tries to detect invalid bindings 
3506   and ignore them automatically (Auto). Optionally, NEdit can be told to 
3507   always keep the installed bindings (Never), or to always override them 
3508   (Always). 
3510 nedit.stdOpenDialog: False
3512   Setting this resource to True restores the standard Motif style of Open 
3513   dialog. NEdit file open dialogs are missing a text field at the bottom of 
3514   the dialog, where the file name can be entered as a string. The field is 
3515   removed in NEdit to encourage users to type file names in the list, a 
3516   non-standard, but much faster method for finding files. 
3518 nedit.bgMenuButton: ~Shift~Ctrl~Meta~Alt<Btn3Down>
3520   Specification for mouse button / key combination to post the background menu 
3521   (in the form of an X translation table event specification). The event 
3522   specification should be as specific as possible, since it will override less 
3523   specific translation table entries. 
3525 nedit.maxPrevOpenFiles: 30
3527   Number of files listed in the Open Previous sub-menu of the File menu. 
3528   Setting this to zero disables the Open Previous menu item and maintenance of 
3529   the NEdit file history file. 
3531 nedit.printCommand: (system specific)
3533   Command used by the print dialog to print a file, such as, lp, lpr, etc.. 
3534   The command must be capable of accepting input via stdin (standard input). 
3536 nedit.printCopiesOption: (system specific)
3538   Option name used to specify multiple copies to the print command. If the 
3539   option should be separated from its argument by a space, leave a trailing 
3540   space. If blank, no "Number of Copies" item will appear in the print dialog. 
3542 nedit.printQueueOption: (system specific)
3544   Option name used to specify a print queue to the print command. If the 
3545   option should be separated from its argument by a space, leave a trailing 
3546   space. If blank, no "Queue" item will appear in the print dialog. 
3548 nedit.printNameOption: (system specific)
3550   Option name used to specify a job name to the print command. If the option 
3551   should be separated from its argument by a space, leave a trailing space. If 
3552   blank, no job or file name will be attached to the print job or banner page. 
3554 nedit.printHostOption: (system specific)
3556   Option name used to specify a host name to the print command. If the option 
3557   should be separated from its argument by a space, leave a trailing space. If 
3558   blank, no "Host" item will appear in the print dialog. 
3560 nedit.printDefaultQueue: (system specific)
3562   The name of the default print queue. Used only to display in the print 
3563   dialog, and has no effect on printing. 
3565 nedit.visualID: Best
3567   If your screen supports multiple visuals (color mapping models), this 
3568   resource allows you to manually choose among them. The default value of 
3569   "Best" chooses the deepest (most colors) visual available. Since NEdit does 
3570   not depend on the specific characteristics of any given color model, Best 
3571   probably IS the best choice for everyone, and the only reason for setting 
3572   this resource would be to patch around some kind of X server problem. The 
3573   resource may also be set to "Default", which chooses the screen's default 
3574   visual (often a color-mapped, PseudoColor, visual for compatibility with 
3575   older X applications). It may also be set to a numeric visual-id value (use 
3576   xdpyinfo to see the list of visuals supported by your display), or a visual 
3577   class name: PseudoColor, DirectColor, TrueColor, etc.. 
3579 nedit.installColormap: False
3581   Force the installation of a private colormap. If you have a humble 8-bit 
3582   color display, and netscape is hogging all of the color cells, you may want 
3583   to try turning this on. On most systems, this will result in colors flashing 
3584   wildly when you switch between NEdit and other applications. But a few 
3585   systems (SGI) have hardware support for multiple simultaneous colormaps, and 
3586   applications with installed colormaps are well behaved. 
3588 nedit.findReplaceUsesSelection: False
3590   Controls if the Find and Replace dialogs are automatically loaded with the 
3591   contents of the primary selection. 
3593 nedit.stickyCaseSenseButton: True
3595   Controls if the "Case Sensitive" buttons in the Find and Replace dialogs and 
3596   the incremental search bar maintain a separate state for literal and regular 
3597   expression searches. Moreover, when set to True, by default literal searches 
3598   are case insensitive and regular expression searches are case sensitive. 
3599   When set to False, the "Case Sensitive" buttons are independent of the 
3600   "Regular Expression" toggle. 
3602 nedit.printDefaultHost: (system specific)
3604   The node name of the default print host. Used only to display in the print 
3605   dialog, and has no effect on printing. 
3607 nedit.multiClickTime: (system specific)
3609   Maximum time in milliseconds allowed between mouse clicks within double and 
3610   triple click actions. 
3612 nedit*scrollBarPlacement: BOTTOM_LEFT
3614   How scroll bars are placed in NEdit windows, as well as various lists and 
3615   text fields in the program. Other choices are: BOTTOM_RIGHT, TOP_LEFT, or 
3616   TOP_RIGHT. 
3618 nedit*text.autoWrapPastedText: False
3620   When Auto Newline Wrap is turned on, apply automatic wrapping (which 
3621   normally only applies to typed text) to pasted text as well. 
3623 nedit*text.heavyCursor: False
3625   For monitors with poor resolution or users who have difficulty seeing the 
3626   cursor, makes the cursor in the text editing area of the window heavier and 
3627   darker. 
3629 nedit*text.foreground: black
3631   Foreground color of the text editing area of the NEdit window. 
3633 nedit*text.background: white
3635   Background color of the text editing area of the NEdit window. 
3637 nedit*text.selectForeground: black
3639   Foreground (text) color for selections in the text editing area of the NEdit 
3640   window. 
3642 nedit*text.selectBackground: gray80
3644   Color for selections in the text editing area of the NEdit window. 
3646 nedit*text.highlightForeground: white
3648   Foreground (text) color for highlights (parenthesis flashing) in the text 
3649   editing area of the NEdit window. 
3651 nedit*text.highlightBackground: red
3653   Color for highlights (parenthesis flashing) in the text editing area of the 
3654   NEdit window. 
3656 nedit*text.cursorForeground: black
3658   Color for text cursor in the text editing area of the NEdit window. 
3660 nedit*text.lineNumForeground: gray47
3662   Color for displaying line numbers in the NEdit window. 
3664 nedit*text.blinkRate: 500
3666   Blink rate of the text insertion cursor in milliseconds. Set to zero to stop 
3667   blinking. 
3669 nedit*text.Translations:
3671   Modifies key bindings (see below). 
3673 nedit*foreground: black
3675   Default foreground color for menus, dialogs, scroll bars, etc.. 
3677 nedit*background: #b3b3b3
3679   Default background color for menus, dialogs, scroll bars, etc.. 
3681 nedit*fontList: helvetica medium 12 points
3683   Default font for menus, dialogs, scroll bars, etc.. 
3685 nedit.helpFont: helvetica medium 12 points
3687   Font used for displaying online help. 
3689 nedit.boldHelpFont: helvetica bold 12 points
3691   Bold font for online help. 
3693 nedit.italicHelpFont: helvetica italic 12 points
3695   Italic font for online help. 
3697 nedit.fixedHelpFont: courier medium 12 points
3699   Fixed font for online help. 
3701 nedit.boldFixedHelpFont: courier bold 12 points
3703   Fixed bold for online help. 
3705 nedit.italicFixedHelpFont: courier italic 12 points
3707   Fixed italic font for online help. 
3709 nedit.h1HelpFont: helvetica bold 14 points
3711   Font for level-1 titles in help text. 
3713 nedit.h2HelpFont: helvetica bold italic 12 points
3715   Font for level-2 titles in help text. 
3717 nedit.h3HelpFont: courier bold 12 points
3719   Font for level-3 titles in help text. 
3721 nedit.helpLinkFont: helvetica medium 12 points
3723   Font for hyperlinks in the help text 
3725 nedit.helpLinkColor: #009900
3727   Color for hyperlinks in the help text 
3729 nc.autoStart: True 
3731   Whether the nc program should automatically start an NEdit server (without 
3732   prompting the user) if an appropriate server is not found. 
3734 nc.serverCommand: nedit -server
3736   Command used by the nc program to start an NEdit server. 
3738    and other characteristics):
3739   The following are Selected widget names (to which you may append 
3740   .background, .foreground, .fontList, etc., to change colors, fonts 
3742 nedit*statsAreaForm
3744   Statistics line and incremental search bar. To get consistent results across 
3745   the entire stats line and the incremental search bar, use '*' rather than 
3746   '.' to separate the resource name. For example, to set the foreground color 
3747   of both components use: 
3748     nedit*statsAreaForm*foreground
3749   instead of: 
3750     nedit*statsAreaForm.foreground
3752 nedit*menuBar
3754   Top-of-window menu-bar. 
3756 nedit*textHorScrollBar
3758   Horizontal scroll bar. 
3760 nedit*textVertScrollBar
3762   Vertical scroll bar. 
3764 nedit*calltip
3766   Calltip pop-ups. 
3768 -----------
3769 KEY BINDING
3770 -----------
3772   There are several ways to change key bindings in NEdit. The easiest way to 
3773   add a new key binding in NEdit is to define a macro in Preferences -> 
3774   Default Settings -> Customize Menus -> Macro Menu. However, if you want to 
3775   change existing bindings or add a significant number of new key bindings you 
3776   will need to do so via X resources. 
3778   Before reading this section, you must understand how to set X resources (see 
3779   the help section "X Resources"). Since setting X resources is tricky, it is 
3780   also helpful when working on key-binding, to set some easier-to-verify 
3781   resource at the same time, as a simple check that the NEdit program is 
3782   actually seeing your changes. The appres program is also very helpful in 
3783   checking that the resource settings that you make, actually reach the 
3784   program for which they are intended in the correct form. 
3787   KEY BINDING IN GENERAL
3789   Keyboard commands are associated with editor action routines through two 
3790   separate mechanisms in NEdit. Commands which appear in pull-down menus have 
3791   individual resources designating a keyboard equivalent to the menu command, 
3792   called an accelerator key. Commands which do not have an associated menu 
3793   item are bound to keys via the X toolkit translation mechanism. The methods 
3794   for changing these two kinds of bindings are quite different. 
3797   KEY BINDING VIA TRANSLATIONS
3799   The most general way to bind actions to keys in NEdit is to use the 
3800   translation table associated with the text widget. To add a binding to Alt+Y 
3801   to insert the string "Hi!", for example, add lines similar to the following 
3802   to your X resource file: 
3804     NEdit*text.Translations: #override \n\
3805       Alt<Key>y: insert_string("Hi!") \n
3807   The Help topic "Action Routines" lists the actions available to be bound. 
3809   Translation tables map key and mouse presses, window operations, and other 
3810   kinds of events, to actions. The syntax for translation tables is simplified 
3811   here, so you may need to refer to a book on the X window system for more 
3812   detailed information. 
3814   Note that accelerator resources (discussed below) override translations, and 
3815   that most Ctrl+letter and Alt+letter combinations are already bound to an 
3816   accelerator key. To use one of these combinations from a translation table, 
3817   therefore, you must first un-bind the original menu accelerator. 
3819   A resource for changing a translation table consists of a keyword; 
3820   #override, #augment, or #replace; followed by lines (separated by newline 
3821   characters) pairing events with actions. Events begin with modifiers, like 
3822   Ctrl, Shift, or Alt, followed by the event type in <>. BtnDown, Btn1Down, 
3823   Btn2Down, Btn1Up, Key, KeyUp are valid event types. For key presses, the 
3824   event type is followed by the name of the key. You can specify a combination 
3825   of events, such as a sequence of key presses, by separating them with 
3826   commas. The other half of the event/action pair is a set of actions. These 
3827   are separated from the event specification by a colon and from each other by 
3828   spaces. Actions are names followed by parentheses, optionally containing one 
3829   or more parameters separated by comas. 
3832   CHANGING MENU ACCELERATOR KEYS
3834   The menu shortcut keys shown at the right of NEdit menu items can also be 
3835   changed via X resources. Each menu item has two resources associated with 
3836   it, accelerator, the event to trigger the menu item; and acceleratorText, 
3837   the string shown in the menu. The form of the accelerator resource is the 
3838   same as events for translation table entries discussed above, though 
3839   multiple keys and other subtleties are not allowed. The resource name for a 
3840   menu is the title in lower case, followed by "Menu", the resource name of 
3841   menu item is the name in lower case, run together, with words separated by 
3842   caps, and all punctuation removed. For example, to change Cut to Ctrl+X, you 
3843   would add the following to your .Xdefaults file: 
3845       nedit*editMenu.cut.accelerator: Ctrl<Key>x
3846       nedit*editMenu.cut.acceleratorText: Ctrl+X
3848   Accelerator keys with optional shift key modifiers, like Find..., have an 
3849   additional accelerator resource with Shift appended to the name. For 
3850   example: 
3852       nedit*searchMenu.find.acceleratorText: [Shift]Alt+F
3853       nedit*searchMenu.find.accelerator: Alt<Key>f
3854       nedit*searchMenu.findShift.accelerator: Shift Alt<Key>f
3856 ---------------------
3857 HIGHLIGHTING PATTERNS
3858 ---------------------
3861   WRITING SYNTAX HIGHLIGHTING PATTERNS
3863   Patterns are the mechanism by which language syntax highlighting is 
3864   implemented in NEdit (see Syntax Highlighting under the heading of Features 
3865   for Programming). To create syntax highlighting patterns for a new language, 
3866   or to modify existing patterns, select "Recognition Patterns" from "Syntax 
3867   Highlighting" sub-section of the "Default Settings" sub-menu of the 
3868   "Preferences" menu. 
3870   First, a word of caution. As with regular expression matching in general, it 
3871   is quite possible to write patterns which are so inefficient that they 
3872   essentially lock up the editor as they recursively re-examine the entire 
3873   contents of the file thousands of times. With the multiplicity of patterns, 
3874   the possibility of a lock-up is significantly increased in syntax 
3875   highlighting. When working on highlighting patterns, be sure to save your 
3876   work frequently. 
3878   NEdit's syntax highlighting is unusual in that it works in real-time (as you 
3879   type), and yet is completely programmable using standard regular expression 
3880   notation. Other syntax highlighting editors usually fall either into the 
3881   category of fully programmable but unable to keep up in real-time, or 
3882   real-time but limited programmability. The additional burden that NEdit 
3883   places on pattern writers in order to achieve this speed/flexibility mix, is 
3884   to force them to state self-imposed limitations on the amount of context 
3885   that patterns may examine when re-parsing after a change. While the "Pattern 
3886   Context Requirements" heading is near the end of this section, it is not 
3887   optional, and must be understood before making any any serious effort at 
3888   pattern writing. 
3890   In its simplest form, a highlight pattern consists of a regular expression 
3891   to match, along with a style representing the font an color for displaying 
3892   any text which matches that expression. To bold the word, "highlight", 
3893   wherever it appears the text, the regular expression simply would be the 
3894   word "highlight". The style (selected from the menu under the heading of 
3895   "Highlight Style") determines how the text will be drawn. To bold the text, 
3896   either select an existing style, such as "Keyword", which bolds text, or 
3897   create a new style and select it under Highlight Style. 
3899   The full range of regular expression capabilities can be applied in such a 
3900   pattern, with the single caveat that the expression must conclusively match 
3901   or not match, within the pre-defined context distance (as discussed below 
3902   under Pattern Context Requirements). 
3904   To match longer ranges of text, particularly any constructs which exceed the 
3905   requested context, you must use a pattern which highlights text between a 
3906   starting and ending regular expression match. To do so, select "Highlight 
3907   text between starting and ending REs" under "Matching", and enter both a 
3908   starting and ending regular expression. For example, to highlight everything 
3909   between double quotes, you would enter a double quote character in both the 
3910   starting and ending regular expression fields. Patterns with both a 
3911   beginning and ending expression span all characters between the two 
3912   expressions, including newlines. 
3914   Again, the limitation for automatic parsing to operate properly is that both 
3915   expressions must match within the context distance stated for the pattern 
3916   set. 
3918   With the ability to span large distances, comes the responsibility to 
3919   recover when things go wrong. Remember that syntax highlighting is called 
3920   upon to parse incorrect or incomplete syntax as often as correct syntax. To 
3921   stop a pattern short of matching its end expression, you can specify an 
3922   error expression, which stops the pattern from gobbling up more than it 
3923   should. For example, if the text between double quotes shouldn't contain 
3924   newlines, the error expression might be "$". As with both starting and 
3925   ending expressions, error expressions must also match within the requested 
3926   context distance. 
3929   Coloring Sub-Expressions
3931   It is also possible to color areas of text within a regular expression 
3932   match. A pattern of this type associates a style with sub-expressions 
3933   references of the parent pattern (as used in regular expression substitution 
3934   patterns, see the NEdit Help menu item on Regular Expressions). 
3935   Sub-expressions of both the starting and ending patterns may be colored. For 
3936   example, if the parent pattern has a starting expression "\<", and end 
3937   expression "\>", (for highlighting all of the text contained within angle 
3938   brackets), a sub-pattern using "&" in both the starting and ending 
3939   expression fields could color the brackets differently from the intervening 
3940   text. A quick shortcut to typing in pattern names in the Parent Pattern 
3941   field is to use the middle mouse button to drag them from the Patterns list. 
3944   Hierarchical Patterns
3946   A hierarchical sub-pattern, is identical to a top level pattern, but is 
3947   invoked only between the beginning and ending expression matches of its 
3948   parent pattern. Like the sub-expression coloring patterns discussed above, 
3949   it is associated with a parent pattern using the Parent Pattern field in the 
3950   pattern specification. Pattern names can be dragged from the pattern list 
3951   with the middle mouse button to the Parent Pattern field. 
3953   After the start expression of the parent pattern matches, the syntax 
3954   highlighting parser searches for either the parent's end pattern or a 
3955   matching sub-pattern. When a sub-pattern matches, control is not returned to 
3956   the parent pattern until the entire sub-pattern has been parsed, regardless 
3957   of whether the parent's end pattern appears in the text matched by the 
3958   sub-pattern. 
3960   The most common use for this capability is for coloring sub-structure of 
3961   language constructs (smaller patterns embedded in larger patterns). 
3962   Hierarchical patterns can also simplify parsing by having sub-patterns 
3963   "hide" special syntax from parent patterns, such as special escape sequences 
3964   or internal comments. 
3966   There is no depth limit in nesting hierarchical sub-patterns, but beyond the 
3967   third level of nesting, automatic re-parsing will sometimes have to re-parse 
3968   more than the requested context distance to guarantee a correct parse (which 
3969   can slow down the maximum rate at which the user can type if large sections 
3970   of text are matched only by deeply nested patterns). 
3972   While this is obviously not a complete hierarchical language parser it is 
3973   still useful in many text coloring situations. As a pattern writer, your 
3974   goal is not to completely cover the language syntax, but to generate 
3975   colorings that are useful to the programmer. Simpler patterns are usually 
3976   more efficient and also more robust when applied to incorrect code. 
3979   Deferred (Pass-2) Parsing
3981   NEdit does pattern matching for syntax highlighting in two passes. The first 
3982   pass is applied to the entire file when syntax highlighting is first turned 
3983   on, and to new ranges of text when they are initially read or pasted in. The 
3984   second pass is applied only as needed when text is exposed (scrolled in to 
3985   view). 
3987   If you have a particularly complex set of patterns, and parsing is beginning 
3988   to add a noticeable delay to opening files or operations which change large 
3989   regions of text, you can defer some of that parsing from startup time, to 
3990   when it is actually needed for viewing the text. Deferred parsing can only 
3991   be used with single expression patterns, or begin/end patterns which match 
3992   entirely within the requested context distance. To defer the parsing of a 
3993   pattern to when the text is exposed, click on the Pass-2 pattern type button 
3994   in the highlight patterns dialog. 
3996   Sometimes a pattern can't be deferred, not because of context requirements, 
3997   but because it must run concurrently with pass-1 (non-deferred) patterns. If 
3998   they didn't run concurrently, a pass-1 pattern might incorrectly match some 
3999   of the characters which would normally be hidden inside of a sequence 
4000   matched by the deferred pattern. For example, C has character constants 
4001   enclosed in single quotes. These typically do not cross line boundaries, 
4002   meaning they can be parsed entirely within the context distance of the C 
4003   pattern set and should be good candidates for deferred parsing. However, 
4004   they can't be deferred because they can contain sequences of characters 
4005   which can trigger pass-one patterns. Specifically, the sequence, '\"', 
4006   contains a double quote character, which would be matched by the string 
4007   pattern and interpreted as introducing a string. 
4010   Pattern Context Requirements
4012   The context requirements of a pattern set state how much additional text 
4013   around any change must be examined to guarantee that the patterns will match 
4014   what they are intended to match. Context requirements are a promise by NEdit 
4015   to the pattern writer, that the regular expressions in his/her patterns will 
4016   be matched against at least <line context> lines and <character context> 
4017   characters, around any modified text. Combining line and character 
4018   requirements guarantee that both will be met. 
4020   Automatic re-parsing happens on EVERY KEYSTROKE, so the amount of context 
4021   which must be examined is very critical to typing efficiency. The more 
4022   complicated your patterns, the more critical the context becomes. To cover 
4023   all of the keywords in a typical language, without affecting the maximum 
4024   rate at which users can enter text, you may be limited to just a few lines 
4025   and/or a few hundred characters of context. 
4027   The default context distance is 1 line, with no minimum character 
4028   requirement. There are several benefits to sticking with this default. One 
4029   is simply that it is easy to understand and to comply with. Regular 
4030   expression notation is designed around single line matching. To span lines 
4031   in a regular expression, you must explicitly mention the newline character 
4032   "\n", and matches which are restricted to a single line are virtually immune 
4033   to lock-ups. Also, if you can code your patterns to work within a single 
4034   line of context, without an additional character-range context requirement, 
4035   the parser can take advantage the fact that patterns don't cross line 
4036   boundaries, and nearly double its efficiency over a one-line and 1-character 
4037   context requirement. (In a single line context, you are allowed to match 
4038   newlines, but only as the first and/or last character.) 
4040 -------------------
4041 SMART INDENT MACROS
4042 -------------------
4044   Smart indent macros can be written for any language, but are usually more 
4045   difficult to write than highlighting patterns. A good place to start, of 
4046   course, is to look at the existing macros for C and C++. 
4048   Smart indent macros for a language mode consist of standard NEdit macro 
4049   language code attached to any or all of the following three activation 
4050   conditions: 1) When smart indent is first turned on for a text window 
4051   containing code of the language, 2) When a newline is typed and smart indent 
4052   is expected, 3) after any character is typed. To attach macro code to any of 
4053   these code "hooks", enter it in the appropriate section in the Preferences 
4054   -> Default Settings -> Auto Indent -> Program Smart Indent dialog. 
4056   Typically most of the code should go in the initialization section, because 
4057   that is the appropriate place for subroutine definitions, and smart indent 
4058   macros are complicated enough that you are not likely to want to write them 
4059   as one monolithic run of code. You may also put code in the Common/Shared 
4060   Initialization section (accessible through the button in the upper left 
4061   corner of the dialog). Unfortunately, since the C/C++ macros also reside in 
4062   the common/shared section, when you add code there, you run some risk of 
4063   missing out on future upgrades to these macros, because your changes will 
4064   override the built-in defaults. 
4066   The newline macro is invoked after the user types a newline, but before the 
4067   newline is entered in the buffer. It takes a single argument ($1) which is 
4068   the position at which the newline will be inserted. It must return the 
4069   number of characters of indentation the line should have, or -1. A return 
4070   value of -1 means to do a standard auto-indent. You must supply a newline 
4071   macro, but the code: "return -1" (auto-indent), or "return 0" (no indent) is 
4072   sufficient. 
4074   The type-in macro takes two arguments. $1 is the insert position, and $2 is 
4075   the character just inserted, and does not return a value. You can do just 
4076   about anything here, but keep in mind that this macro is executed for every 
4077   keystroke typed, so if you try to get too fancy, you may degrade 
4078   performance. 
4080 ------------------
4081 NEDIT COMMAND LINE
4082 ------------------
4084    nedit [-read] [-create] [-line n | +n] [-server]
4085       [-do command] [-tags file] [-tabs n] [-wrap]
4086       [-nowrap] [-autowrap] [-autoindent] [-noautoindent]
4087       [-autosave] [-noautosave] [-rows n] [-columns n]
4088       [-font font] [-lm languagemode] [-geometry geometry]
4089       [-iconic] [-noiconic] [-display [host]:server[.screen]
4090       [-xrm resourcestring] [-svrname name] [-import file]
4091       [-background color] [-foreground color] [-V|-version]
4092       [--] [file...]
4094 -read
4095   Open the file Read Only regardless of the actual file protection. 
4097 -create
4098   Don't warn about file creation when a file doesn't exist. 
4100 -line n (or +n)
4101   Go to line number n 
4103 -server
4104   Designate this session as an NEdit server, for processing commands from the 
4105   nc program. nc can be used to interface NEdit to code development 
4106   environments, mailers, etc., or just as a quick way to open files from the 
4107   shell command line without starting a new NEdit session. 
4109 -do command
4110   Execute an NEdit macro or action. On each file following the -do argument on 
4111   the command line. -do is particularly useful from the nc program, where nc 
4112   -do can remotely execute commands in an NEdit -server session. 
4114 -tags file
4115   Load a file of directions for finding definitions of program subroutines and 
4116   data objects. The file must be of the format gen- erated by Exuberant Ctags, 
4117   or the standard Unix ctags command. 
4119 -tabs n
4120   Set tab stops every n characters. 
4122 -wrap, -nowrap
4123   Wrap long lines at the right edge of the window rather than continuing them 
4124   past it. (Continuous Wrap mode) 
4126 -autowrap, -noautowrap
4127   Wrap long lines when the cursor reaches the right edge of the window by 
4128   inserting newlines at word boundaries. (Auto Newline Wrap mode) 
4130 -autoindent, -noautoindent
4131   Maintain a running indent. 
4133 -autosave, -noautosave
4134   Maintain a backup copy of the file being edited under the name '~filename'. 
4136 -rows n
4137   Default height in characters for an editing window. 
4139 -columns n
4140   Default width in characters for an editing window. 
4142 -font font (or -fn font)
4143   Font for text being edited (Font for menus and dialogs can be set with -xrm 
4144   "*fontList:font"). 
4146 -lm languagemode
4147   Initial language mode used for editing succeeding files. 
4149 -geometry geometry (or -g geometry)
4150   The initial size and/or location of editor windows. The argument geometry 
4151   has the form: 
4153    [<width>x<height>][+|-][<xoffset>[+|-]<yoffset>]
4155   where <width> and <height> are the desired width and height of the window, 
4156   and <xoffset> and <yoffset> are the distance from the edge of the screen to 
4157   the window, + for top or left, - for bottom or right. -geometry can be 
4158   specified for individual files on the command line. 
4160 -iconic, -noiconic
4161   Initial window state for succeeding files. 
4163 -display [host]:server[.screen]
4164   The name of the X server to use. host specifies the machine, server 
4165   specifies the display server number, and screen specifies the screen number. 
4166   host or screen can be omitted and default to the local machine, and screen 
4167   0. 
4169 -background color (or -bg color)
4170   Background color. (background color for text can be set separately with -xrm 
4171   "nedit*text.background: color"). 
4173 -foreground color (or -fg color)
4174   Foreground color. (foreground color for text can be set separately with -xrm 
4175   "nedit*text.foreground: color"). 
4177 -xrm resourcestring 
4178   Set the value of an X resource to override a default value (see "Customizing 
4179   NEdit"). 
4181 -svrname name
4182   When starting NEdit in server mode, name the server, such that it responds 
4183   to requests only when nc is given a corresponding -svrname argument. By 
4184   naming servers, you can run several simultaneously, and direct files and 
4185   commands specifically to any one. 
4187 -import file
4188   Loads an additional preferences file on top of the existing defaults saved 
4189   in your preferences file. To incorporate macros, language modes, and 
4190   highlight patterns and styles written by other users, run NEdit with -import 
4191   <file>, then re-save your preference file with Preferences -> Save Defaults. 
4193 -version
4194   Prints out the NEdit version information. The -V option is synonymous. 
4197   Treats all subsequent arguments as file names, even if they start with a 
4198   dash. This is so NEdit can access files that begin with the dash character. 
4201 ------------------
4202 CLIENT/SERVER MODE
4203 ------------------
4205   NEdit can be operated on its own, or as a two-part client/server 
4206   application. Client/server mode is useful for integrating NEdit with 
4207   software development environments, mailers, and other programs; or just as a 
4208   quick way to open files from the shell command line without starting a new 
4209   NEdit session. 
4211   To run NEdit in server mode, type: 
4213       nedit -server
4215   NEdit can also be started in server mode via the Nedit Client (nc) program 
4216   when no servers are available. 
4218   The nc program, which is distributed along with NEdit, sends commands to an 
4219   nedit server to open files, select lines, or execute editor actions. It 
4220   accepts a limited set of the nedit command line options: -read, -create, 
4221   -line (or +n), -do, and a list of file names. Listing a file on the nc 
4222   command line means, open it if it is not already open and bring the window 
4223   to the front. -read and -create affect only newly opened files, but -line 
4224   and -do can also be used on files which are already open (See "NEdit Command 
4225   Line" for more information). 
4227   In typical Unix style, arguments affect the files which follow them on the 
4228   command line, for example: 
4230       incorrect:   nc file.c -line 25
4231       correct:     nc -line 25 file.c
4233   -read, -create, and -line affect all of the files which follow them on the 
4234   command line. The -do macro is executed only once, on the next file on the 
4235   line. -do without a file following it on the command line, executes the 
4236   macro on the first available window (presumably when you give a -do command 
4237   without a corresponding file or window, you intend it to do something 
4238   independent of the window in which it happens to execute). 
4240   nc also accepts one command line option of its own, -noask (or -ask), which 
4241   instructs it whether to automatically start a server if one is not 
4242   available. This is also settable via the X resource, nc.autoStart (See "X 
4243   Resources" section). 
4245   Sometimes it is useful to have more than one NEdit server running, for 
4246   example to keep mail and programming work separate. The option, -svrname, to 
4247   both nedit and nc, allows you to start, and communicate with, separate named 
4248   servers. A named server responds only to requests with the corresponding 
4249   -svrname argument. If you use ClearCase and are within a ClearCase view, the 
4250   server name will default to the name of the view (based on the value of the 
4251   CLEARCASE_ROOT environment variable). 
4253   Communication between nc and nedit is through the X display. So as long as X 
4254   windows is set up and working properly, nc will work properly as well. nc 
4255   uses the DISPLAY environment variable, the machine name and your user name 
4256   to find the appropriate server, meaning, if you have several machines 
4257   sharing a common file system, nc will not be able to find a server that is 
4258   running on a machine with a different host name, even though it may be 
4259   perfectly appropriate for editing a given file. 
4261   The command which nc uses to start an nedit server is settable via the X 
4262   resource nc.serverCommand, by default, "nedit -server". 
4264 --------------
4265 CRASH RECOVERY
4266 --------------
4268   If a system crash, network failure, X server crash, or program error should 
4269   happen while you are editing a file, you can still recover most of your 
4270   work. NEdit maintains a backup file which it updates periodically (every 8 
4271   editing operations or 80 characters typed). This file has the same name as 
4272   the file that you are editing, but with the character `~' (tilde) on Unix or 
4273   `_' (underscore) on VMS prefixed to the name. To recover a file after a 
4274   crash, simply rename the file to remove the tilde or underscore character, 
4275   replacing the older version of the file. (Because several of the Unix shells 
4276   consider the tilde to be a special character, you may have to prefix the 
4277   character with a `\' (backslash) when you move or delete an NEdit backup 
4278   file.) 
4280   Example, to recover the file called "help.c" on Unix type the command: 
4282       mv \~help.c help.c
4284   A minor caveat, is that if the file you were editing was in MS DOS format, 
4285   the backup file will be in Unix format, and you will need to open the backup 
4286   file in NEdit and change the file format back to MS DOS via the Save As... 
4287   dialog (or use the Unix unix2dos command outside of NEdit). 
4289 -------
4290 VERSION
4291 -------
4293 NEdit 5.4DEV
4294 Aug 9, 2002
4296   NEdit was written by Mark Edel, Joy Kyriakopulos, Christopher Conrad, Jim 
4297   Clark, Arnulfo Zepeda-Navratil, Suresh Ravoor, Tony Balinski, Max Vohlken, 
4298   Yunliang Yu, Donna Reid, Arne Førlie, Eddy De Greef, Steve LoBasso, 
4299   Alexander Mai, Scott Tringali, Thorsten Haude, and Steve Haehn. 
4301   The regular expression matching routines used in NEdit are adapted (with 
4302   permission) from original code written by Henry Spencer at the University of 
4303   Toronto. 
4305   Syntax highlighting patterns and smart indent macros were contributed by: 
4306   Simon T. MacDonald, Maurice Leysens, Matt Majka, Alfred Smeenk, Alain 
4307   Fargues, Christopher Conrad, Scott Markinson, Konrad Bernloehr, Ivan Herman, 
4308   Patrice Venant, Christian Denat, Philippe Couton, Max Vohlken, Markus 
4309   Schwarzenberg, Himanshu Gohel, Steven C. Kapp, Michael Turomsha, John 
4310   Fieber, Chris Ross, Nathaniel Gray, Joachim Lous, Mike Duigou, Seak 
4311   Teng-Fong, Joor Loohuis, Mark Jones, and Niek van den Berg. 
4313   NEdit sources, executables, additional documentation, and contributed 
4314   software are available from the NEdit web site at http://www.nedit.org. 
4316   This program is free software; you can redistribute it and/or modify it 
4317   under the terms of the GNU General Public License as published by the Free 
4318   Software Foundation; either version 2 of the License, or (at your option) 
4319   any later version. 
4321   This program is distributed in the hope that it will be useful, but WITHOUT 
4322   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
4323   FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License in the 
4324   Help section "Distribution Policy" for more details. 
4326 -------------------
4327 DISTRIBUTION POLICY
4328 -------------------
4330   GNU GENERAL PUBLIC LICENSE 
4332   Version 2, June 1991 
4334   Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, 
4335   Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute 
4336   verbatim copies of this license document, but changing it is not allowed. 
4338   Preamble 
4340   The licenses for most software are designed to take away your freedom to 
4341   share and change it. By contrast, the GNU General Public License is intended 
4342   to guarantee your freedom to share and change free software--to make sure 
4343   the software is free for all its users. This General Public License applies 
4344   to most of the Free Software Foundation's software and to any other program 
4345   whose authors commit to using it. (Some other Free Software Foundation 
4346   software is covered by the GNU Library General Public License instead.) You 
4347   can apply it to your programs, too. 
4349   When we speak of free software, we are referring to freedom, not price. Our 
4350   General Public Licenses are designed to make sure that you have the freedom 
4351   to distribute copies of free software (and charge for this service if you 
4352   wish), that you receive source code or can get it if you want it, that you 
4353   can change the software or use pieces of it in new free programs; and that 
4354   you know you can do these things. 
4356   To protect your rights, we need to make restrictions that forbid anyone to 
4357   deny you these rights or to ask you to surrender the rights. These 
4358   restrictions translate to certain responsibilities for you if you distribute 
4359   copies of the software, or if you modify it. 
4361   For example, if you distribute copies of such a program, whether gratis or 
4362   for a fee, you must give the recipients all the rights that you have. You 
4363   must make sure that they, too, receive or can get the source code. And you 
4364   must show them these terms so they know their rights. 
4366   We protect your rights with two steps: (1) copyright the software, and (2) 
4367   offer you this license which gives you legal permission to copy, distribute 
4368   and/or modify the software. 
4370   Also, for each author's protection and ours, we want to make certain that 
4371   everyone understands that there is no warranty for this free software. If 
4372   the software is modified by someone else and passed on, we want its 
4373   recipients to know that what they have is not the original, so that any 
4374   problems introduced by others will not reflect on the original authors' 
4375   reputations. 
4377   Finally, any free program is threatened constantly by software patents. We 
4378   wish to avoid the danger that redistributors of a free program will 
4379   individually obtain patent licenses, in effect making the program 
4380   proprietary. To prevent this, we have made it clear that any patent must be 
4381   licensed for everyone's free use or not licensed at all. 
4383   The precise terms and conditions for copying, distribution and modification 
4384   follow. 
4386   GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION 
4387   AND MODIFICATION 
4389   0. This License applies to any program or other work which contains a notice 
4390   placed by the copyright holder saying it may be distributed under the terms 
4391   of this General Public License. The "Program", below, refers to any such 
4392   program or work, and a "work based on the Program" means either the Program 
4393   or any derivative work under copyright law: that is to say, a work 
4394   containing the Program or a portion of it, either verbatim or with 
4395   modifications and/or translated into another language. (Hereinafter, 
4396   translation is included without limitation in the term "modification".) Each 
4397   licensee is addressed as "you". 
4399   Activities other than copying, distribution and modification are not covered 
4400   by this License; they are outside its scope. The act of running the Program 
4401   is not restricted, and the output from the Program is covered only if its 
4402   contents constitute a work based on the Program (independent of having been 
4403   made by running the Program). Whether that is true depends on what the 
4404   Program does. 
4406   1. You may copy and distribute verbatim copies of the Program's source code 
4407   as you receive it, in any medium, provided that you conspicuously and 
4408   appropriately publish on each copy an appropriate copyright notice and 
4409   disclaimer of warranty; keep intact all the notices that refer to this 
4410   License and to the absence of any warranty; and give any other recipients of 
4411   the Program a copy of this License along with the Program. 
4413   You may charge a fee for the physical act of transferring a copy, and you 
4414   may at your option offer warranty protection in exchange for a fee. 
4416   2. You may modify your copy or copies of the Program or any portion of it, 
4417   thus forming a work based on the Program, and copy and distribute such 
4418   modifications or work under the terms of Section 1 above, provided that you 
4419   also meet all of these conditions: 
4421   a) You must cause the modified files to carry prominent notices stating that 
4422   you changed the files and the date of any change. 
4424   b) You must cause any work that you distribute or publish, that in whole or 
4425   in part contains or is derived from the Program or any part thereof, to be 
4426   licensed as a whole at no charge to all third parties under the terms of 
4427   this License. 
4429   c) If the modified program normally reads commands interactively when run, 
4430   you must cause it, when started running for such interactive use in the most 
4431   ordinary way, to print or display an announcement including an appropriate 
4432   copyright notice and a notice that there is no warranty (or else, saying 
4433   that you provide a warranty) and that users may redistribute the program 
4434   under these conditions, and telling the user how to view a copy of this 
4435   License. (Exception: if the Program itself is interactive but does not 
4436   normally print such an announcement, your work based on the Program is not 
4437   required to print an announcement.) 
4439   These requirements apply to the modified work as a whole. If identifiable 
4440   sections of that work are not derived from the Program, and can be 
4441   reasonably considered independent and separate works in themselves, then 
4442   this License, and its terms, do not apply to those sections when you 
4443   distribute them as separate works. But when you distribute the same sections 
4444   as part of a whole which is a work based on the Program, the distribution of 
4445   the whole must be on the terms of this License, whose permissions for other 
4446   licensees extend to the entire whole, and thus to each and every part 
4447   regardless of who wrote it. 
4449   Thus, it is not the intent of this section to claim rights or contest your 
4450   rights to work written entirely by you; rather, the intent is to exercise 
4451   the right to control the distribution of derivative or collective works 
4452   based on the Program. 
4454   In addition, mere aggregation of another work not based on the Program with 
4455   the Program (or with a work based on the Program) on a volume of a storage 
4456   or distribution medium does not bring the other work under the scope of this 
4457   License. 
4459   3. You may copy and distribute the Program (or a work based on it, under 
4460   Section 2) in object code or executable form under the terms of Sections 1 
4461   and 2 above provided that you also do one of the following: 
4463   a) Accompany it with the complete corresponding machine-readable source 
4464   code, which must be distributed under the terms of Sections 1 and 2 above on 
4465   a medium customarily used for software interchange; or, 
4467   b) Accompany it with a written offer, valid for at least three years, to 
4468   give any third party, for a charge no more than your cost of physically 
4469   performing source distribution, a complete machine-readable copy of the 
4470   corresponding source code, to be distributed under the terms of Sections 1 
4471   and 2 above on a medium customarily used for software interchange; or, 
4473   c) Accompany it with the information you received as to the offer to 
4474   distribute corresponding source code. (This alternative is allowed only for 
4475   noncommercial distribution and only if you received the program in object 
4476   code or executable form with such an offer, in accord with Subsection b 
4477   above.) 
4479   The source code for a work means the preferred form of the work for making 
4480   modifications to it. For an executable work, complete source code means all 
4481   the source code for all modules it contains, plus any associated interface 
4482   definition files, plus the scripts used to control compilation and 
4483   installation of the executable. However, as a special exception, the source 
4484   code distributed need not include anything that is normally distributed (in 
4485   either source or binary form) with the major components (compiler, kernel, 
4486   and so on) of the operating system on which the executable runs, unless that 
4487   component itself accompanies the executable. 
4489   If distribution of executable or object code is made by offering access to 
4490   copy from a designated place, then offering equivalent access to copy the 
4491   source code from the same place counts as distribution of the source code, 
4492   even though third parties are not compelled to copy the source along with 
4493   the object code. 
4495   4. You may not copy, modify, sublicense, or distribute the Program except as 
4496   expressly provided under this License. Any attempt otherwise to copy, 
4497   modify, sublicense or distribute the Program is void, and will automatically 
4498   terminate your rights under this License. However, parties who have received 
4499   copies, or rights, from you under this License will not have their licenses 
4500   terminated so long as such parties remain in full compliance. 
4502   5. You are not required to accept this License, since you have not signed 
4503   it. However, nothing else grants you permission to modify or distribute the 
4504   Program or its derivative works. These actions are prohibited by law if you 
4505   do not accept this License. Therefore, by modifying or distributing the 
4506   Program (or any work based on the Program), you indicate your acceptance of 
4507   this License to do so, and all its terms and conditions for copying, 
4508   distributing or modifying the Program or works based on it. 
4510   6. Each time you redistribute the Program (or any work based on the 
4511   Program), the recipient automatically receives a license from the original 
4512   licensor to copy, distribute or modify the Program subject to these terms 
4513   and conditions. You may not impose any further restrictions on the 
4514   recipients' exercise of the rights granted herein. You are not responsible 
4515   for enforcing compliance by third parties to this License. 
4517   7. If, as a consequence of a court judgment or allegation of patent 
4518   infringement or for any other reason (not limited to patent issues), 
4519   conditions are imposed on you (whether by court order, agreement or 
4520   otherwise) that contradict the conditions of this License, they do not 
4521   excuse you from the conditions of this License. If you cannot distribute so 
4522   as to satisfy simultaneously your obligations under this License and any 
4523   other pertinent obligations, then as a consequence you may not distribute 
4524   the Program at all. For example, if a patent license would not permit 
4525   royalty-free redistribution of the Program by all those who receive copies 
4526   directly or indirectly through you, then the only way you could satisfy both 
4527   it and this License would be to refrain entirely from distribution of the 
4528   Program. 
4530   If any portion of this section is held invalid or unenforceable under any 
4531   particular circumstance, the balance of the section is intended to apply and 
4532   the section as a whole is intended to apply in other circumstances. 
4534   It is not the purpose of this section to induce you to infringe any patents 
4535   or other property right claims or to contest validity of any such claims; 
4536   this section has the sole purpose of protecting the integrity of the free 
4537   software distribution system, which is implemented by public license 
4538   practices. Many people have made generous contributions to the wide range of 
4539   software distributed through that system in reliance on consistent 
4540   application of that system; it is up to the author/donor to decide if he or 
4541   she is willing to distribute software through any other system and a 
4542   licensee cannot impose that choice. 
4544   This section is intended to make thoroughly clear what is believed to be a 
4545   consequence of the rest of this License. 
4547   8. If the distribution and/or use of the Program is restricted in certain 
4548   countries either by patents or by copyrighted interfaces, the original 
4549   copyright holder who places the Program under this License may add an 
4550   explicit geographical distribution limitation excluding those countries, so 
4551   that distribution is permitted only in or among countries not thus excluded. 
4552   In such case, this License incorporates the limitation as if written in the 
4553   body of this License. 
4555   9. The Free Software Foundation may publish revised and/or new versions of 
4556   the General Public License from time to time. Such new versions will be 
4557   similar in spirit to the present version, but may differ in detail to 
4558   address new problems or concerns. 
4560   Each version is given a distinguishing version number. If the Program 
4561   specifies a version number of this License which applies to it and "any 
4562   later version", you have the option of following the terms and conditions 
4563   either of that version or of any later version published by the Free 
4564   Software Foundation. If the Program does not specify a version number of 
4565   this License, you may choose any version ever published by the Free Software 
4566   Foundation. 
4568   10. If you wish to incorporate parts of the Program into other free programs 
4569   whose distribution conditions are different, write to the author to ask for 
4570   permission. For software which is copyrighted by the Free Software 
4571   Foundation, write to the Free Software Foundation; we sometimes make 
4572   exceptions for this. Our decision will be guided by the two goals of 
4573   preserving the free status of all derivatives of our free software and of 
4574   promoting the sharing and reuse of software generally. 
4576   NO WARRANTY 
4578   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR 
4579   THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 
4580   OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 
4581   PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 
4582   OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
4583   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO 
4584   THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM 
4585   PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR 
4586   CORRECTION. 
4588   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 
4589   WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 
4590   REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 
4591   INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 
4592   OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO 
4593   LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR 
4594   THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 
4595   PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 
4596   POSSIBILITY OF SUCH DAMAGES. 
4598   END OF TERMS AND CONDITIONS 
4600 -------------
4601 MAILING LISTS
4602 -------------
4604   There are two separate mailing lists for nedit users, and one for 
4605   developers. Users may post to the developer mailing list to report defects 
4606   and communicate with the nedit developers. Remember that nedit is entirely a 
4607   volunteer effort, so please ask questions first to the discussion list, and 
4608   do your share to answer other users questions as well. 
4610     discuss@nedit.org
4612   General discussion, questions and answers among NEdit users and developers. 
4614     announce@nedit.org
4616   A low-volume mailing list for announcing new versions. 
4618     develop@nedit.org
4620   Communication among and with NEdit developers. Developers should also 
4621   subscribe to the discuss list. 
4623   To subscribe, send mail to <majordomo@nedit.org> with one or more of the 
4624   following in the body of the message: 
4626     subscribe announce
4627     subscribe discuss
4628     subscribe develop
4630 ----------------
4631 PROBLEMS/DEFECTS
4632 ----------------
4635   SOLUTIONS TO COMMON PROBLEMS
4637   For a much more comprehensive list of common problems and solutions, see the 
4638   NEdit FAQ. The latest version of the FAQ can always be found on the NEdit 
4639   web site at: 
4641       http://www.nedit.org.
4643   P: No files are shown in the "Files" list in the Open... dialog. 
4645   S: When you use the "Filter" field, include the file specification or a 
4646   complete directory specification, including the trailing "/" on Unix. (See 
4647   Help in the Open... dialog). 
4649   P: Find Again and Replace Again don't continue in the same direction as the 
4650   original Find or Replace. 
4652   S: Find Again and Replace Again don't use the direction of the original 
4653   search. The Shift key controls the direction: Ctrl+G means forward, 
4654   Shift+Ctrl+G means backward. 
4656   P: Preferences specified in the Preferences menu don't seem to get saved 
4657   when I select Save Defaults. 
4659   S: NEdit has two kinds of preferences: 1) per-window preferences, in the 
4660   Preferences menu, and 2) default settings for preferences in newly created 
4661   windows, in the Default Settings sub-menu of the Preferences menu. 
4662   Per-window preferences are not saved by Save Defaults, only Default 
4663   Settings. 
4665   P: Columns and indentation don't line up. 
4667   S: NEdit is using a proportional width font. Set the font to a fixed style 
4668   (see Preferences menu). 
4670   P: NEdit performs poorly on very large files. 
4672   S: Turn off Incremental Backup. With Incremental Backup on, NEdit 
4673   periodically writes a full copy of the file to disk. 
4675   P: Commands added to the Shell Commands menu (Unix only) don't output 
4676   anything until they are finished executing. 
4678   S: If the command output is directed to a dialog, or the input is from a 
4679   selection, output is collected together and held until the command 
4680   completes. De-select both of the options and the output will be shown 
4681   incrementally as the command executes. 
4683   P: Dialogs don't automatically get keyboard focus when they pop up. 
4685   S: Most X Window managers allow you to choose between two categories of 
4686   keyboard focus models: pointer focus, and explicit focus. Pointer focus 
4687   means that as you move the mouse around the screen, the window under the 
4688   mouse automatically gets the keyboard focus. NEdit users who use this focus 
4689   model should set "Popups Under Pointer" in the Default Settings sub menu of 
4690   the preferences menu in NEdit. Users with the explicit focus model, in some 
4691   cases, may have problems with certain dialogs, such as Find and Replace. In 
4692   MWM this is caused by the mwm resource startupKeyFocus being set to False 
4693   (generally a bad choice for explicit focus users). NCDwm users should use 
4694   the focus model "click" instead of "explicit", again, unless you have set it 
4695   that way to correct specific problems, this is the appropriate setting for 
4696   most explicit focus users. 
4698   P: The Backspace key doesn't work, or deletes forward rather than backward. 
4700   S: While this is an X/Motif binding problem, and should be solved outside of 
4701   NEdit in the Motif virtual binding layer (or possibly xmodmap or 
4702   translations), NEdit provides an out. If you set the resource: 
4703   nedit.remapDeleteKey to True, NEdit will forcibly map the delete key to 
4704   backspace. The default setting of this resource recently changed, so users 
4705   who have been depending on this remapping will now have to set it explicitly 
4706   (or fix their bindings). 
4708   P: NEdit crashes when I try to paste text in to a text field in a dialog 
4709   (like Find or Replace) on my SunOS system. 
4711   S: On many SunOS systems, you have to set up an nls directory before various 
4712   inter-client communication features of Motif will function properly. There 
4713   are instructions in README.sun in /pub/v5_0_2/individual/README.sun on 
4714   ftp.nedit.org, as well as a tar file containing a complete nls directory: 
4715   ftp://ftp.nedit.org/pub/v5_0_2/nls.tar. README.sun contains directions for 
4716   setting up an nls directory, which is required by Motif for handling copy 
4717   and paste to Motif text fields. 
4720   KNOWN DEFECTS
4722   Below is the list of known defects which affect NEdit. The defects your copy 
4723   of NEdit will exhibit depend on which system you are running and with which 
4724   Motif libraries it was built. Note that there are now Motif 1.2 and/or 2.0 
4725   libraries available on ALL supported platforms, and as you can see below 
4726   there are far fewer defects in Motif 1.2, so it is in your best interest to 
4727   upgrade your system. 
4730   All Versions
4732 DEFECT
4733   Operations between rectangular selections on overlapping lines do nothing. 
4735 Work Around
4736   None. These operations are very complicated and rarely used. 
4738 DEFECT
4739   Cut and Paste menu items fail, or possibly crash, for very large 
4740   (multi-megabyte) selections. 
4742 Work Around
4743   Use selection copy (middle mouse button click) for transferring larger 
4744   quantities of data. Cut and Paste save the copied text in server memory, 
4745   which is usually limited. 
4748   REPORTING DEFECTS
4750   Submit bugs through the web at: 
4752     http://sf.net/tracker/?func=add&group_id=11005&atid=111005
4754   Please include the first few lines from Help > Version, which identifes 
4755   NEdit's version and other system attributes important for diagnosing your 
4756   problem. 
4758   The NEdit developers subscribe to both discuss@nedit.org and 
4759   develop@nedit.org, either of which may be used for reporting defects. If 
4760   you're not sure, or you think the report might be of interest to the general 
4761   NEdit user community, send the report to discuss@nedit.org. If it's 
4762   something obvious and boring, like we misspelled "anemometer" in the on-line 
4763   help, send it to develop@nedit.org. If you don't want to subscribe to the 
4764   Mailing Lists, please add a note to your mail about cc'ing you on responses.