home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume1 / 8707 / 73 < prev    next >
Internet Message Format  |  1990-07-13  |  46KB

  1. From: roger@mips.UUCP (Roger March)
  2. Newsgroups: comp.sources.misc
  3. Subject: Troffable MicroEmacs manual, part 2 of 2 ...
  4. Message-ID: <3695@ncoast.UUCP>
  5. Date: 1 Aug 87 00:39:45 GMT
  6. Sender: allbery@ncoast.UUCP
  7. Lines: 1713
  8. Approved: allbery@ncoast.UUCP
  9. X-Archive: comp.sources.misc/8707/73
  10.  
  11.       And here's the second part.
  12. --
  13. -Rogue Monster                                   (also known as Roger March)
  14. UUCP: ...!decwrl!mips!roger  OR  roger@mips.com
  15. USPS: MIPS Computer Systems, 930 Arques, Sunnyvale, CA 94086, (408) 991-0220
  16. --------------------------------- cut --------------------------------------
  17. .I "set-fill-column."
  18. Notice EMACS responds
  19. "[Fill column is 1]." Now try typing some text.  You'll notice some very
  20. strange things happening -- your text wraps at every word!! This effect
  21. occurs because the set wrap margin command must be preceded by a
  22. numeric argument or EMACS sets it to the first column.  Thus any text
  23. you type that extends past the first column will wrap at the most
  24. convenient line break. 
  25. .PP
  26. To reset the wrap column to 72 characters, press the
  27. .B "<META>"
  28. key and enter 72.  EMACS will respond "Arg: 72".  Now press
  29. .B "^X-F."
  30. EMACS will respond "[Fill column is 72]".  Your text will again wrap at the
  31. margin you've been using up to this point.
  32. .sb
  33. .SH
  34. Reformatting Paragraphs
  35. .sf
  36. .PP
  37. After an intensive editing session, you may find that you have
  38. paragraphs containing lines of differing lengths.  Although this
  39. disparity will not affect the formatted text, aesthetic and technical
  40. concerns may make it desirable to have consistent paragraph blocks on
  41. the screen.  If you are in WRAP mode, you can reformat a paragraph with
  42. the command
  43. .B "M-Q"
  44. .I "fill-paragraph."
  45. This command 'fills' the current paragraph reformatting it so all the lines
  46. are filled and wrap logically.  The process is complex, and (especially
  47. with longer paragraphs) may take a little time. 
  48. .sb
  49. .SH
  50. Changing Case
  51. .sf
  52. .PP
  53. There may be occasions when you find it necessary to change the case of
  54. the text you've entered.  EMACS allows you to change the case of even
  55. large amounts of text with ease.  Let's try and convert a few of the
  56. office traditionalists to the joy of word processing.  Type in the
  57. following text:
  58. .IP
  59. .I
  60. Throw away your typewriter and learn to use a word processor. 
  61. Word processing is relatively easy to learn and will increase your
  62. productivity enormously.  Enter the Computer Age and find out just how
  63. much fun it can be!!
  64. .LP
  65. .R
  66. Let's give it a little more impact by capitalizing the first four words. 
  67. The first step is to define the region of text just as you would if you
  68. were doing an extensive deletion.  Set the mark at the beginning of the
  69. paragraph with
  70. .B "M-<space>"
  71. .I "set-mark"
  72. and move the cursor to the space beyond "typewriter." Now enter
  73. .B "^X-^U"
  74. .I "case-region-upper."
  75. Your text should now look like this:
  76. .IP
  77. .I
  78. THROW AWAY YOUR TYPEWRITER and learn to use a word processor. 
  79. Word processing is relatively easy to learn and will increase your
  80. productivity enormously.  Enter the Computer Age and find out just how
  81. much fun it can be!!
  82. .LP
  83. .R
  84. If you want to change the text back to lower case, type
  85. .B "^X-^L"
  86. .I "case-region-lower."
  87. You can also
  88. capitalize individual words.  To capitalize the word "fun", position the
  89. cursor in front of the word and type
  90. .B "M-U"
  91. .I "case-word-upper."
  92. The word is now capitalized.  To change it
  93. back to lower case, move the cursor back to the beginning of the word
  94. and type
  95. .B "M-L"
  96. .I "case-word-lower."
  97. .PP
  98. You may also capitalize individual letters in EMACS.  The command
  99. .B "M-C"
  100. .I "case-word-capitalize"
  101. capitalizes the first letter after the point.  This command would
  102. normally be issued with the cursor positioned in front of the first
  103. letter of the word you wish to capitalize.  If you issue it in the
  104. middle of a word, you can end up with some strAnge looking text. 
  105. .sb
  106. .SH
  107. Tabs
  108. .sf
  109. .PP
  110. Unless your formatter is instructed to take screen text literally (as
  111. MicroSCRIBE does in the 'verbatim' environment for example), tabs in
  112. EMACS generally affect screen formatting only. 
  113. .PP
  114. When EMACS is first started, it sets the default tab to every eighth
  115. column.  As long as you stay with default, every time you press the tab
  116. key a tab character,
  117. .B "^I"
  118. is inserted.  This character, like other
  119. control characters, is invisible -- but it makes a subtle and
  120. significant difference to your file and editing. 
  121. .PP
  122. For example, in default mode, press the tab key and then type the word
  123. .B "Test."
  124. "Test" appears at the eighth column.  Move your cursor to the
  125. beginning of the word and delete the backward character.  The word
  126. doesn't move back just one character, but flushes to the left margin. 
  127. The reason for this behavior is easily explained.  In tab default, EMACS
  128. inserts a 'real' tab character when you press the tab key.  This
  129. character is inserted at the default position, but NO SPACES are
  130. inserted between the tab character and the margin (or previous tab
  131. character).  As you will recall, EMACS only recognizes characters (such
  132. as spaces or letters) and thus when the tab character is removed, the
  133. text beyond the tab is flushed back to the margin or previous tab mark.
  134. .PP
  135. This situation changes if you alter the default configuration.  The
  136. default value may be changed by entering a numeric argument before
  137. pressing the tab key.  As we saw earlier, pressing the
  138. .B "META"
  139. key and entering a number allows you to specify how EMACS performs a given
  140. action.  In this case, let's specify an argument of 10 and hit the tab
  141. key. 
  142. .PP
  143. Now hit the tab key again and type
  144. .B "Test."
  145. Notice the word now
  146. appears at the tenth column.  Now move to the beginning of the word and
  147. delete the backward character.    "Test" moves back by one character. 
  148. .PP
  149. EMACS behaves differently in these circumstances because the
  150. .B "^I"
  151. .I "handle-tab"
  152. function deals
  153. with tabbing in two distinct ways.  In default conditions, or if the
  154. numeric argument of zero is used,
  155. .I "handle-tab"
  156. inserts a true tab
  157. character.  If, however, a non-zero numeric argument is specified,
  158. .I "handle-tab"
  159. inserts the correct number of spaces needed to position
  160. the cursor at the next specified tab position.  It does NOT insert the
  161. single tab character and hence any editing functions should take account
  162. of the number of spaces between tabbed columns. 
  163. .PP
  164. Many times you would like to take a line which has been created using
  165. the tab character and change it to use just spaces.  The command
  166. .B "^X-^D"
  167. .I "detab-line"
  168. changes any tabs from the
  169. point to the end of the current line into the right number of spaces so
  170. the line does not change.  This is very useful for times when the file
  171. must be printed or transferred to a machine which does not understand
  172. tabs. 
  173. .PP
  174. Also, the inverse command,
  175. .B "^X-^E"
  176. .I "entab-lines"
  177. changes multiple spaces to tabs where possible.  This is a good way to
  178. shrink the size of large documents, especially with data tables.  Both
  179. of these commands can take a numeric argument which will be interpreted
  180. as the number of lines to en/detab. 
  181. .sb
  182. .SH
  183. Summary
  184. .sf
  185. .PP
  186. This chapter introduced some of the formatting features of
  187. EMACS. Text-wrap, paragraph reformatting, and tabs were discussed in
  188. some detail.  The commands in the following table were covered in the
  189. chapter. 
  190. .KS
  191. .TS
  192. tab(;);
  193. l l l
  194. lfI lfB lw(3i).
  195. Key Binding;Keystroke;Effect
  196. _
  197. Add-Mode/WRAP;^X-M [WRAP];Add wrap mode to current buffer
  198. .sp .5
  199. Delete-Mode/WRAP;^X-^M [WRAP];Remove wrap mode from current buffer
  200. .sp .5
  201. Set-Fill-Column;^X-F;Set fill column to given numeric argument  
  202. .sp .5
  203. Fill-Paragraph;M-Q;Logically reformats the current paragraph
  204. .sp .5
  205. Case-Word-Upper;M-U;T{
  206. Text from point to end of the current word is changed to uppercase
  207. T}
  208. .sp .5
  209. Case-Word-Lower;M-L;T{
  210. Text from point to end of the  current word is changed to lowercase
  211. T}
  212. .sp .5
  213. Case-Word-Capitalize;M-C;T{
  214. First word (or letter) after the point is capitalized
  215. T}
  216. .sp .5
  217. Case-Region-Upper;^X-^U;The current region is uppercased
  218. .sp .5
  219. Case-Region-Lower;^X-^L;The current region is lowercased
  220. .sp .5
  221. Handle-Tab;^I;T{
  222. Tab interval is set to the given numeric argument
  223. T}
  224. .sp .5
  225. Entab-Line;^X-^E;T{
  226. Changes multiple spaces to tabs characters where possible
  227. T}
  228. .sp .5
  229. Detab-Line;^X-^D;T{
  230. Changes tab characters to the appropriate number of spaces
  231. T}
  232. .TE
  233. .KE
  234. .sb
  235. .bp
  236. .SH
  237. Keyboard Macros
  238. .sf
  239. .PP
  240. In many applications, it may be necessary to repeat a series of
  241. characters or commands frequently.  For example, a paper may require the
  242. frequent repetition of a complex formula or a long name.  You may also
  243. have a series of EMACS commands that you invoke frequently.  Keyboard
  244. macros offer a convenient method of recording and repeating these
  245. commands. 
  246. .PP
  247. Imagine, for example, you are writing a scholarly paper on
  248. .I "Asplenium platyneuron,"
  249. the spleenwort fern.  Even the dedicated botanist would
  250. probably find it a task bordering on the agonizing to type
  251. .I "Asplenium platyneuron"
  252. frequently throughout the paper.  An
  253. alternative method is 'record' the name in a keyboard macro.  Try it
  254. yourself.
  255. .PP
  256. The command
  257. .B "^X-("
  258. .I "begin-macro"
  259. starts recording the all the keystrokes and commands you input.  After you've
  260. typed it, enter
  261. .I "Asplenium platyneuron."
  262. To stop recording, type
  263. .B "^X-)"
  264. .I "end-macro."
  265. EMACS has stored all the
  266. keystrokes between the two commands.  To repeat the name you've stored,
  267. just enter
  268. .B "^X-E"
  269. .I "execute-macro,"
  270. and the name "Asplenium platyneuron" appears.  You can repeat this action as
  271. often as you want, and of course as with any EMACS command, you may
  272. precede it with a numerical argument. 
  273. .PP
  274. Because EMACS records keystrokes, you may freely intermix commands and
  275. text.  Unfortunately, you can only store one macro at a time.  Thus, if
  276. you begin to record another macro, the previously defined macro is
  277. lost. Be careful to ensure that you've finished with one macro before
  278. defining another.  If you have a series of commands that you would like
  279. to 'record' for future use, use the macro or procedure facilities
  280. detailed in chapter <X>.
  281. .SH
  282. Summary
  283. .sf
  284. .SH
  285. This chapter covered keyboard macros.  You learned how to
  286. record keystrokes and how to repeat the stored sequence. 
  287. .KS
  288. .TS
  289. tab(;);
  290. l l l
  291. lfI lfB lw(3i).
  292. Key Binding;Keystroke;Effect
  293. _
  294. Start-Macro;^X-(;Starts recording all keyboard input
  295. .sp .5
  296. End-Macro;^X-);Stops recording keystrokes for macro
  297. .sp .5
  298. Execute-Macro;^X-E;T{
  299. Entire sequence of recorded keystrokes is replayed
  300. T}
  301. .TE
  302. .KE
  303. .sb
  304. .bp
  305. .SH
  306. MicroEMACS Macros
  307. .sf
  308. .PP
  309. Macros are programs that are used to customize the editor and to
  310. perform complicated editing tasks.  They may be stored in files or
  311. buffers and may be executed using an appropriate command, or bound to a
  312. particular keystroke.  Portions of the standard start-up file are
  313. implement via macros, as well as the example menu system.  The
  314. .I "execute-macro-<n>"
  315. commands cause the
  316. macro, numbered from 1 to 40, to be executed.  The
  317. .I "execute-file"
  318. command allows you to execute a macro stored in a
  319. disk file, and the
  320. .I "execute-buffer"
  321. command allows you to execute a macro stored in a buffer.  Macros are stored for
  322. easy execution by executing files that contain the store-macro command. 
  323. .PP
  324. There are many different aspects to the macro language within
  325. MicroEMACS.  Editor commands are the various commands that manipulate
  326. text, buffers, windows, etc, within the editor.  Directives are commands
  327. which control what lines get executed within a macro.  Also there are
  328. various types of variables.  Environmental variables both control and
  329. report on different aspects of the editor.  User variables hold string
  330. values which may be changed and inspected.  Buffer variables allow text
  331. to be placed into variables.  Interactive variable allow the program to
  332. prompt the user for information.  Functions can be used to manipulate
  333. all these variables. 
  334. .SH
  335. Variables
  336. .sf
  337. .PP
  338. Variables in MicroEMACS can be used to return values within
  339. expressions, as repeat counts to editing commands, or as text to be
  340. inserted into buffers and messages.  The value of these variables is set
  341. using the set
  342. .B "^X-A"
  343. command.  For example, to set the current fill
  344. column to 64 characters, the following macro line would be used:
  345. .IP
  346. set $fillcol 64
  347. .LP
  348. or to have the contents of
  349. .B "%name"
  350. inserted at the point in the current buffer, the command to use would be:
  351. .IP
  352. insert-string %name
  353. .sb
  354. .SH
  355. Environmental Variables
  356. .sf
  357. .PP
  358. "What good is a quote if you can't change it?"
  359. .PP
  360. These variables are used to change different aspects of the way
  361. the editor works.  Also they will return the current settings if used as
  362. part of an expression.  All environmental variable names begin with a
  363. dollar sign ($) and are in lower case.
  364. .TS
  365. tab(;);
  366. l lw(4i).
  367. $fillcol;Current fill column
  368. .sp .5
  369. $pagelen;Number of screen lines used currently
  370. .sp .5
  371. $curwidth;Number of columns used currently
  372. .sp .5
  373. $curcol;Current column of point in current buffer
  374. .sp .5
  375. $curline;Current line of point in current buffer
  376. .sp .5
  377. $flicker;T{
  378. Flicker Flag set to TRUE if IBM CGA set to FALSE for most others
  379. T}
  380. .sp .5
  381. $cbufname;Name of the current buffer
  382. .sp .5
  383. $cfname;File name of the current buffer
  384. .sp .5
  385. $sres;T{
  386. Current screen resolution (CGA, MONO or EGA on the IBM-PC driver.
  387. LOW, MEDIUM, HIGH or DENSE on the Atari ST1040, NORMAL on all others)
  388. T}
  389. .sp .5
  390. $debug;T{
  391. Flag to trigger macro debugging (try it... you'll like it!)
  392. T}
  393. .sp .5
  394. $status;T{
  395. return status of the success of the last command
  396. (TRUE or FALSE) usually used with !force
  397. T}
  398. .sp .5
  399. $palette;T{
  400. string used to control the palette register settings on graphics versions.
  401. The usually form consists of groups of three octal digits
  402. setting the red, green, and blue levels.
  403. T}
  404. .sp .5
  405. $asave;T{
  406. The number of inserted characters between automatic file-saves in ASAVE mode.
  407. T}
  408. .sp .5
  409. $acount;T{
  410. The countdown of inserted characters until the next save-file.
  411. T}
  412. .sp .5
  413. $lastkey;Last keyboard character typed
  414. .sp .5
  415. $curchar;Character currently at the point
  416. .sp .5
  417. $discmd;T{
  418. Flag to disable the echoing of messages on the command line
  419. T}
  420. .sp .5
  421. $version;T{
  422. Contains the current MicroEMACS version number
  423. T}
  424. .sp .5
  425. $progname;T{
  426. Always contains the string "MicroEMACS" for standard MicroEMACS.
  427. Could be something else if used as part of someone else's program
  428. T}
  429. .sp .5
  430. $seed;integer seed of the random number generator
  431. .sp .5
  432. $disinp;T{
  433. Flag to disable the echoing of characters during command line input
  434. T}
  435. .TE
  436. .PP
  437. Obviously, many more of these variables will be available in
  438. future releases of MicroEMACS. (Yes, send a vote for your favorite new
  439. environmental variables today).
  440. .sb
  441. .SH
  442. User variables
  443. .sf
  444. .PP
  445. User variables allow you, the user, to store strings and
  446. manipulate them.  These strings can be pieces of text, numbers (in text
  447. form), or the logical values
  448. .B "TRUE"
  449. and
  450. .B "FALSE."
  451. These variables
  452. can be combined, tested, inserted into buffers, and otherwise used to
  453. control the way your macros execute.  At the moment, up to 100 user
  454. variables may be in use in one editing session.  All users variable
  455. names must begin with a percent sign (%) and may contain any printing
  456. characters.  Only the first 10 characters are significant (i.e
  457. differences beyond the tenth character are ignored).  Most operators
  458. will truncate strings to a length of 128 characters. 
  459. .sb
  460. .SH
  461. Buffer Variables
  462. .sf
  463. .PP
  464. Buffer variables are special in that they can only be queried
  465. and cannot be set.  What buffer variables are is a way to take text from
  466. a buffer and place it in a variable. For example, if I have a buffer by
  467. the name of RIGEL2, and it contains the text:
  468. .KS
  469. .TS
  470. tab(;);
  471. l l
  472. l s.
  473. ;Richmond
  474. ;Lafayette
  475. <*>;Bloomington
  476. ;Indianapolis
  477. ;Gary
  478.  =* MicroEMACS 3.8i (WRAP) == rigel2 == File: /data/rigel2.txt =====
  479. .TE
  480. .KE
  481. .FS
  482. where <*> is the current point
  483. .FE
  484. and within a command I reference #rigel2, like:
  485. .IP
  486. insert-string #rigel2
  487. .PP
  488. MicroEMACS would start at the current point in the RIGEL2
  489. buffer and grab all the text up to the end of that line and pass that
  490. back.  Then it would advance the point to the beginning of the next line.
  491. Thus, after our last command executes, the string "Bloomington" gets
  492. inserted into the current buffer, and the buffer RIGEL2 now looks like
  493. this:
  494. .KS
  495. .TS
  496. tab(;);
  497. l l
  498. l s.
  499. ;Richmond
  500. ;Lafayette
  501. ;Bloomington
  502. <*>;Indianapolis
  503. ;Gary
  504.  =* MicroEMACS 3.8i (WRAP) == rigel2 == File: /data/rigel2.txt =====
  505. .TE
  506. .KE
  507. as you have probably noticed, a buffer variable consists of the
  508. buffer name, preceded by a pound sign (#).
  509. .sb
  510. .SH
  511. Interactive variables
  512. .sf
  513. .PP
  514. Interactive variables are actually a method to prompt the user
  515. for a string.  This is done by using an at sign (@) followed either with
  516. a quoted string, or a variable containing a string.  The string is the
  517. placed on the bottom line, and the editor waits for the user to type in
  518. a string.  Then the string typed in by the users is returned as the
  519. value of the interactive variable.  For example:
  520. .IP
  521. set %quest "What file? "
  522. .br
  523. find-file @%quest
  524. .LP
  525. will ask the user for a file name, and then attempt to find it.
  526. .sb
  527. .SH
  528. Functions
  529. .sf
  530. .PP
  531. Functions can be used to manipulate variables in various ways. 
  532. Functions can have one, two, or three arguments.  These arguments will
  533. always be placed after the function on the current command line.  For
  534. example, if we wanted to increase the current fill column by two, using
  535. emacs's set
  536. .B "^X-A"
  537. command, we would write:
  538. .KS
  539. .TS
  540. tab(;);
  541. l l l l l l
  542. c c c c c l.
  543. set;$fillcol;&add;$fillcol;2;
  544. ;;;;\(ua;second operand
  545. ;;;\(ua;;first operand
  546. ;;\(ua;;;function to execute
  547. ;\(ua;;;;variable to set
  548. \(ua;;;;;set (^X-A) command
  549. .TE
  550. .KE
  551. .PP
  552. Function names always begin with the ampersand (&) character,
  553. and are only significant to the first three characters after the
  554. ampersand.  Functions will normal expect one of three types of
  555. arguments, and will automatically convert types when needed.
  556. .KS
  557. .TS
  558. tab(;);
  559. l lw(4i).
  560. <num>;T{
  561. an ascii string of digits which is interpreted as a numeric value. 
  562. Any string which does not start with a digit or a minus sign (-) will be
  563. considered zero. 
  564. T}
  565. .sp .5
  566. <str>;T{
  567. An arbitrary string of characters.  At the moment, strings are
  568. limited to 128 characters in length. 
  569. T}
  570. .sp .5
  571. <log>;T{
  572. A logical value consisting of the string "TRUE" or "FALSE". 
  573. Numeric strings will also evaluate to "FALSE" if they are equal to zero,
  574. and "TRUE" if they are non-zero.  Arbitrary text strings will have the
  575. value of "FALSE".
  576. T}
  577. .TE
  578. .KE
  579. A list of the currently available functions follows: (Once
  580. again, send in those votes on what kind of functions you would like to
  581. see added!) Functions are always used in lower case, the uppercase
  582. letters in the function table are the short form of the function (i.e
  583. &div for ÷).
  584. .KS
  585. .TS
  586. tab(;);
  587. l s l
  588. l l lw(3i).
  589. Numeric Functions:;(returns <num>)
  590. _
  591. &ADD;<num> <num>;Add two numbers
  592. .sp .5
  593. &SUB;<num> <num>;T{
  594. Subtract the second number from the first
  595. T}
  596. .sp .5
  597. &TIMes;<num> <num>;Multiply two numbers
  598. .sp .5
  599. &DIVide;<num> <num>;T{
  600. Divide the first number by the second giving an integer result
  601. T}
  602. .sp .5
  603. &MOD;<num> <num>;T{
  604. Return the reminder of dividing the first number by the second
  605. T}
  606. .sp .5
  607. &NEGate;<num>;Multiply the arg by -1
  608. .sp .5
  609. &LENgth;<str>;Returns length of string
  610. .sp .5
  611. &ASCii;<str>;T{
  612. Return the ascii code of the first character in <str>
  613. T}
  614. .sp .5
  615. &RND;<num>;T{
  616. Returns a random integer between 1 and <num>
  617. T}
  618. .sp .5
  619. &ABS;<num>;T{
  620. Returns the absolute value of <num>
  621. T}
  622. .TE
  623. .KE
  624. .KS
  625. .TS
  626. tab(;);
  627. l s l
  628. l l lw(3i).
  629. String manipulation functions:;(returns <str>)
  630. _
  631. &CAT;<str> <str>;Concatenate the two strings to form one
  632. .sp .5
  633. &LEFt;<str> <num>;T{
  634. return the <num> leftmost characters from <str>
  635. T}
  636. .sp .5
  637. &RIGht;<str> <num>;T{
  638. return the <num> rightmost characters from <str>
  639. T}
  640. .sp .5
  641. &MID;<str> <num1> <num2>;T{
  642. Starting from <num1> position in <str>, return <num2> characters.
  643. T}
  644. .sp .5
  645. &UPPer;<str>;Uppercase <str>
  646. .sp .5
  647. &LOWer;<str>;lowercase <str>
  648. .sp .5
  649. &CHR;<num>;T{
  650. return a string with the character represented by ascii code <num>
  651. T}
  652. .sp .5
  653. >K;;T{
  654. return a string containing a single keystroke from the user
  655. T}
  656. .TE
  657. .KE
  658. .KS
  659. .TS
  660. tab(;);
  661. l s l
  662. l l lw(3i).
  663. Logical Testing functions:;(returns <log>)
  664. _
  665. &NOT;<log>;Return the opposite logical value
  666. .sp .5
  667. &AND;<log1> <log2>;T{
  668. Returns TRUE if BOTH logical arguments are TRUE
  669. T}
  670. .sp .5
  671. &OR;<log1> <log2>;T{
  672. Returns TRUE if either argument is TRUE
  673. T}
  674. .sp .5
  675. &EQUal;<num> <num>;T{
  676. If <num> and <num> are numerically equal, return TRUE
  677. T}
  678. .sp .5
  679. &LESs;<num1> <num2>;T{
  680. If <num1> is less than <num2>, return TRUE.
  681. T}
  682. .sp .5
  683. &GREater;<num1> <num2>;T{
  684. If <num1> is greater than, or equal to <num2>, return TRUE.
  685. T}
  686. .sp .5
  687. &SEQual;<str1> <str2>;T{
  688. If the two strings are the same, return TRUE.
  689. T}
  690. .sp .5
  691. &SLEss;<str1> <str2>;T{
  692. If <str1> is less alphabetically than <str2>, return TRUE.
  693. T}
  694. .sp .5
  695. &SGReater;<str1> <str2>;T{
  696. If <str1> is alphabetically greater than or equal to <str2>, return TRUE.
  697. T}
  698. .TE
  699. .KE
  700. .KS
  701. .TS
  702. tab(;);
  703. l s l
  704. l l lw(3i).
  705. Special Functions:;;
  706. _
  707. &INDirect;<str>;Evaluate <str> as a variable.
  708. .TE
  709. .KE
  710. .PP
  711. This last function deserves more explanation. The &IND function
  712. evaluates its argument, takes the resulting string, and then uses it as
  713. a variable name.  For example, given the following code sequence:
  714. .IP
  715. ; set up reference table
  716. .sp
  717. set %one    "elephant"
  718. .br
  719. set %two    "giraffe"
  720. .br
  721. set %thee    "donkey"
  722. .sp
  723. set %index "two"
  724. .br
  725. insert-string &ind %index
  726. .LP
  727. the string "giraffe" would have been inserted at the point in
  728. the current buffer.  This indirection can be safely nested up to about
  729. 10 levels.
  730. .sb
  731. .SH
  732. Directives
  733. .sf
  734. .PP
  735. Directives are commands which only operate within an executing
  736. macro, i.e they do not make sense as a single command. As such, they
  737. cannot be called up singly or bound to keystroke. Used within macros,
  738. they control what lines are executed and in what order.
  739. .PP
  740. Directives always start with the exclamation mark (!) character
  741. and must be the first thing placed on a line. Directives executed singly
  742. (via the execute-command-line command) interactively will be ignored.
  743. .SH
  744. !ENDM Directive
  745. .sf
  746. .PP
  747. This directive is used to terminate a macro being stored. For
  748. example, if a file is being executed contains the text:
  749. .KS
  750. .TS
  751. tab(%);
  752. l s
  753. l l
  754. l s.
  755. ;  Read in a file in view mode, and make the window red
  756. .sp
  757. 26%store-macro
  758. %find-file @"File to view: "
  759. %add-mode "view"
  760. %add-mode "red"
  761. !endm
  762. .sp
  763. write-message "[Consult macro has been loaded]"
  764. .TE
  765. .KE
  766. only the lines between the store-macro command and the !ENDM
  767. directive are stored in macro 26.
  768. .sb
  769. .SH
  770. !FORCE Directive
  771. .sf
  772. .PP
  773. When MicroEMACS executes a macro, if any command fails, the
  774. macro is terminated at that point. If a line is preceded by a !FORCE
  775. directive, execution continues weather the command succeeds or not. For
  776. example:
  777. .KS
  778. .TS
  779. tab(%);
  780. l s
  781. l l.
  782. ; Merge the top two windows
  783. .sp
  784. save-window%;remember what window we are at
  785. 1 next-window%;go to the top window
  786. delete-window%;merge it with the second window
  787. !force restore-window%;This will continue regardless
  788. add-mode "red"%
  789. .TE
  790. .KE
  791. .sb
  792. .SH
  793. !IF, !ELSE, and !ENDIF Directives
  794. .sf
  795. .PP
  796. This directive allows statements only to be executed if a
  797. condition specified in the directive is met.  Every line following the
  798. !IF directive, until the first !ELSE or !ENDIF directive, is only
  799. executed if the expression following the !IF directive evaluates to a
  800. TRUE value.  For example, the following macro segment creates the
  801. portion of a text file automatically.  (yes believe me, this will be
  802. easier to understand then that last explanation....)
  803. .KS
  804. .IP
  805. !if &sequal %curplace "timespace vortex"
  806. .ti +4
  807. insert-string "First, rematerialize~n"
  808. .br
  809. !endif
  810. .br
  811. !if &sequal %planet "earth"    ;If we have landed on earth...
  812. .ti +4
  813. !if &sequal %time "late 20th century"  ;and we are then
  814. .ti +8
  815. write-message "Contact U.N.I.T."
  816. .ti +4
  817. !else
  818. .ti +8
  819. insert-string "Investigate the situation....~n"
  820. .ti +8
  821. insert-string "(SAY 'stay here Sara')~n"
  822. .ti +4
  823. !endif
  824. .br
  825. !else
  826. .ti +4
  827. set %conditions @"Atmosphere conditions outside? "
  828. .ti +4
  829. !if &sequal %conditions "safe"
  830. .ti +8
  831. insert-string &cat "Go outside......" "~n"
  832. .ti +8
  833. insert-string "lock the door~n"
  834. .ti +4
  835. !else
  836. .ti +8
  837. insert-string "Dematerialize..try somewhere else"
  838. .ti +8
  839. newline
  840. .ti +4
  841. !endif
  842. .br
  843. !endif
  844. .KE
  845. .sb
  846. .SH
  847. !GOTO Directive
  848. .sf
  849. .PP
  850. Flow can be controlled within a MicroEMACS macro using the !GOTO
  851. directive. It takes as an argument a label. A label consists of a line
  852. starting with an asterisk (*) and then an alphanumeric label.  Only
  853. labels in the currently executing macro can be jumped to, and trying to
  854. jump to a non-existing label terminates execution of a macro.  For
  855. example..
  856. .KS
  857. .IP
  858. ;Create a block of DATA statements for a BASIC program
  859. .sp
  860. .ti +4
  861. insert-string "1000 DATA "
  862. .ti +4
  863. set %linenum 1000
  864. .sp
  865. *nxtin
  866. .ti +4
  867. update-screen        ;make sure we see the changes
  868. .ti +4
  869. set %data @"Next number: "
  870. .ti +4
  871. !if &equal %data 0
  872. .ti +8
  873. !goto finish
  874. .ti +4
  875. !endif
  876. .sp
  877. .ti +4
  878. !if &greater $curcol 60
  879. .ti +8
  880. 2 delete-previous-character
  881. .ti +8
  882. newline
  883. .ti +8
  884. set %linenum &add %linenum 10
  885. .ti +8
  886. insert-string &cat %linenum " DATA "
  887. .ti +4
  888. !endif
  889. .sp
  890. .ti +4
  891. insert-string &cat %data ", "
  892. .ti +4
  893. !goto nxtin
  894. .sp
  895. *finish
  896. .sp
  897. .ti +4
  898. 2 delete-previous-character
  899. .ti +4
  900. newline
  901. .KE
  902. .sb
  903. .SH
  904. !RETURN Directive
  905. .sf
  906. .PP
  907. The !RETURN Directive causes the current macro to exit, either
  908. returning to the caller (if any) or to interactive mode.  For example:
  909. .KS
  910. .IP
  911. ; Check the monitor type and set %mtyp
  912. .sp
  913. !if &sres "CGA"
  914. .ti +4
  915. set %mtyp 1
  916. .ti +4
  917. !return
  918. .br
  919. !else
  920. .ti +4
  921. set %mtyp 2
  922. .br
  923. !endif
  924. .sp
  925. insert-string "You are on a MONOCHROME machine!~n"
  926. .KE
  927. .sb
  928. .bp
  929. .SH
  930. MicroEMACS commands
  931. .sf
  932. .PP
  933. Below is a complete list of the commands in EMACS, the keys
  934. normally used to do the command, and what the command does.  Remember,
  935. on some computers there may also be additional ways of using a command
  936. (cursor keys and special function keys for example). 
  937. .TS
  938. tab(;);
  939. l l l
  940. lfI lfB lw(3i).
  941. Key Binding;Keystroke;Effect
  942. _
  943. abort-command;^G;T{
  944. This allows the user to abort out of any command that is waiting for input
  945. T}
  946. .sp .5
  947. add-mode;^X-M;Add a mode to the current buffer
  948. .sp .5
  949. add-global-mode;M-M;Add a global mode for all new buffers
  950. .sp .5
  951. apropos;M-A;T{
  952. List out commands whose name contains the string specified
  953. T}
  954. .sp .5
  955. backward-character;^B;Move one character to the left
  956. .sp .5
  957. begin-macro;^X-(;Begin recording a keyboard macro
  958. .sp .5
  959. beginning-of-file;M-<;T{
  960. Move to the beginning of the file in the current buffer
  961. T}
  962. .sp .5
  963. beginning-of-line;^A;Move to the beginning of the current line
  964. .sp .5
  965. bind-to-key;M-K;Bind a key to a function
  966. .sp .5
  967. buffer-position;^X-=;T{
  968. List the position of the cursor in the current window on the command line
  969. T}
  970. .sp .5
  971. case-region-lower;^X-^L;Make a marked region all lower case
  972. .sp .5
  973. case-region-upper;^X-^U;Make a marked region all upper case
  974. .sp .5
  975. case-word-capitalize;M-C;Capitalize the following word
  976. .sp .5
  977. case-word-lower;M-L;Lower case the following word
  978. .sp .5
  979. case-word-upper;M-U;Upper case the following word
  980. .sp .5
  981. change-file-name;^X-N;T{
  982. Change the name of the file in the current buffer
  983. T}
  984. .sp .5
  985. change-screen-size;M-^S;T{
  986. Change the number of lines of the screen currently being used
  987. T}
  988. .sp .5
  989. change-screen-width;M-^T;T{
  990. Change the number of columns of the screen currently being used
  991. T}
  992. .sp .5
  993. clear-and-redraw;^L;Clear the physical screen and redraw it
  994. .sp .5
  995. clear-message-line;(none);Clear the command line
  996. .sp .5
  997. copy-region;M-W;T{
  998. Copy the currently marked region into the kill buffer
  999. T}
  1000. .sp .5
  1001. count-words;M-^C;T{
  1002. Count how many words, lines and characters are in the current marked region
  1003. T}
  1004. .sp .5
  1005. ctlx-prefix;^X;Change the key used as the ^X prefix
  1006. .sp .5
  1007. delete-blank-lines;^X-^O;Delete all blank lines around the cursor
  1008. .sp .5
  1009. delete-buffer;^X-K;T{
  1010. Delete a buffer which is not being currently displayed in a window
  1011. T}
  1012. .TE
  1013. .bp
  1014. .TS
  1015. tab(;);
  1016. l l l
  1017. lfI lfB lw(3i).
  1018. Key Binding;Keystroke;Effect
  1019. _
  1020. delete-mode;^X-^M;Turn off a mode in the current buffer
  1021. .sp .5
  1022. delete-global-mode;M-^M;Turn off a global mode
  1023. .sp .5
  1024. delete-next-character;^D;Delete the character following the cursor
  1025. .sp .5
  1026. delete-next-word;M-D;Delete the word following the cursor
  1027. .sp .5
  1028. delete-other-windows;^X-1;T{
  1029. Make the current window cover the entire screen
  1030. T}
  1031. .sp .5
  1032. delete-previous-character;^H;T{
  1033. Delete the character to the left of the cursor
  1034. T}
  1035. .sp .5
  1036. delete-previous-word;M-^H;Delete the word to the left of the cursor
  1037. .sp .5
  1038. delete-window;^X-0;Remove the current window from the screen
  1039. .sp .5
  1040. describe-bindings;(none);Make a list of all legal commands
  1041. .sp .5
  1042. describe-key;^X-?;T{
  1043. Describe what command is bound to a keystroke sequence
  1044. T}
  1045. .sp .5
  1046. detab-line;^X-^D;T{
  1047. Change all tabs in a line to the equivalent spaces
  1048. T}
  1049. .sp .5
  1050. end-macro;^X-);stop recording a keyboard macro
  1051. .sp .5
  1052. end-of-file;M->;Move cursor to the end of the current buffer
  1053. .sp .5
  1054. end-of-line;^E;Move to the end of the current line
  1055. .sp .5
  1056. entab-line;^X-^E;T{
  1057. Change multiple spaces to tabs where possible
  1058. T}
  1059. .sp .5
  1060. exchange-point-and-mark;^X-^X;T{
  1061. Move cursor to the last marked spot, make the original position be marked
  1062. T}
  1063. .sp .5
  1064. execute-buffer;(none);Execute a buffer as a macro
  1065. .sp .5
  1066. execute-command-line;(none);T{
  1067. Execute a line typed on the command line as a macro command
  1068. T}
  1069. .sp .5
  1070. execute-file;FNB;Execute a file as a macro
  1071. .sp .5
  1072. execute-macro;^X-E;T{
  1073. Execute the keyboard macro (play back the recorded keystrokes)
  1074. T}
  1075. .sp .5
  1076. execute-macro-<n>;(none);T{
  1077. Execute numbered macro <N> where <N> is an integer from 1 to 40
  1078. T}
  1079. .sp .5
  1080. execute-named-command;M-X;Execute a command by name
  1081. .sp .5
  1082. execute-procedure;M-^E;Execute a procedure by name
  1083. .sp .5
  1084. exit-emacs;^X-^C;T{
  1085. Exit EMACS. If there are unwritten, changed buffers EMACS will ask to confirm
  1086. T}
  1087. .sp .5
  1088. fill-paragraph;M-Q;Fill the current paragraph
  1089. .sp .5
  1090. filter-buffer;^X-#;T{
  1091. Filter the current buffer through an external filter
  1092. T}
  1093. .sp .5
  1094. find-file;^X-^F;Find a file to edit in the current window
  1095. .sp .5
  1096. forward-character;^F;Move cursor one character to the right
  1097. .sp .5
  1098. goto-line;M-G;Goto a numbered line
  1099. .sp .5
  1100. goto-matching-fence;M-^F;Goto the matching fence
  1101. .TE
  1102. .bp
  1103. .TS
  1104. tab(;);
  1105. l l l
  1106. lfI lfB lw(3i).
  1107. Key Binding;Keystroke;Effect
  1108. _
  1109. grow-window;^X-^;Make the current window larger
  1110. .sp .5
  1111. handle-tab;^I;Insert a tab or set tab stops
  1112. .sp .5
  1113. hunt-forward;FN=;T{
  1114. Hunt for the next match of the last search string
  1115. T}
  1116. .sp .5
  1117. hunt-backward;FN>;T{
  1118. Hunt for the last match of the last search string
  1119. T}
  1120. .sp .5
  1121. help;M-?;Read EMACS.HLP into a buffer and display it
  1122. .sp .5
  1123. i-shell;^X-C;Shell up to a new command processor
  1124. .sp .5
  1125. incremental-search;^X-S;Search for a string, incrementally
  1126. .sp .5
  1127. insert-file;^X-^I;T{
  1128. insert a file at the cursor in the current file
  1129. T}
  1130. .sp .5
  1131. insert-space;^C;Insert a space to the right of the cursor
  1132. .sp .5
  1133. insert-string;(none);Insert a string at the cursor
  1134. .sp .5
  1135. kill-paragraph;M-^W;Delete the current paragraph
  1136. .sp .5
  1137. kill-region;^W;T{
  1138. Delete the current marked region, moving it to the kill buffer
  1139. T}
  1140. .sp .5
  1141. kill-to-end-of-line;^K;Delete the rest of the current line
  1142. .sp .5
  1143. list-buffers;^X-^B;List all existing buffers
  1144. .sp .5
  1145. meta-prefix;<ESC>;Key used to precede all META commands
  1146. .sp .5
  1147. move-window-down;^X-^N;TMove all the lines in the current window down
  1148. .sp .5
  1149. move-window-up;^X-^P;Move all the lines in the current window up
  1150. .sp .5
  1151. name-buffer;M-^N;Change the name of the current buffer
  1152. .sp .5
  1153. newline;^M;Insert a <NL> at the cursor
  1154. .sp .5
  1155. newline-and-indent;^J;T{
  1156. Insert a <NL> at the cursor and indent
  1157. the new line the same as the preceding line
  1158. T}
  1159. .sp .5
  1160. next-buffer;^X-X;T{
  1161. Bring the next buffer in the list into the current window
  1162. T}
  1163. .sp .5
  1164. next-line;^N;Move the cursor down one line
  1165. .sp .5
  1166. next-page;^V;Move the cursor down one page
  1167. .sp .5
  1168. next-paragraph;M-N;Move cursor to the next paragraph
  1169. .sp .5
  1170. next-window;^X-O;Move cursor to the next window
  1171. .sp .5
  1172. next-word;M-F;T{
  1173. Move cursor to the beginning of the next word
  1174. T}
  1175. .sp .5
  1176. open-line;^O;Open a line at the cursor
  1177. .sp .5
  1178. pipe-command;^X-@;T{
  1179. Execute an external command and place its output in a buffer
  1180. T}
  1181. .sp .5
  1182. previous-line;^P;Move cursor up one line
  1183. .sp .5
  1184. previous-page;^Z;Move cursor up one page
  1185. .sp .5
  1186. previous-paragraph;M-P;Move back one paragraph
  1187. .sp .5
  1188. previous-window;^X-P;Move the cursor to the last window
  1189. .TE
  1190. .bp
  1191. .TS
  1192. tab(;);
  1193. l l l
  1194. lfI lfB lw(3i).
  1195. Key Binding;Keystroke;Effect
  1196. _
  1197. previous-word;M-B;T{
  1198. Move the cursor to the beginning of the word to the left of the cursor
  1199. T}
  1200. .sp .5
  1201. query-replace-string;M-^R;T{
  1202. Replace all of one string with another
  1203. string, interactively querying the user
  1204. T}
  1205. .sp .5
  1206. quick-exit;M-Z;Exit EMACS, writing out all changed buffers
  1207. .sp .5
  1208. quote-character;^Q;Insert the next character literally
  1209. .sp .5
  1210. read-file;^X-^R;Read a file into the current buffer
  1211. .sp .5
  1212. redraw-display;M-^L;T{
  1213. Redraw the display, centering the current line
  1214. T}
  1215. .sp .5
  1216. resize-window;^X-W;T{
  1217. Change the number of lines in the current window
  1218. T}
  1219. .sp .5
  1220. restore-window;(none);Move cursor to the last saved window
  1221. .sp .5
  1222. replace-string;M-R;T{
  1223. Replace all occurrences of one string
  1224. with another string from the cursor to the end of the buffer
  1225. T}
  1226. .sp .5
  1227. reverse-incremental-search;^X-R;Search backwards, incrementally
  1228. .sp .5
  1229. run;M-^E;Execute a named procedure
  1230. .sp .5
  1231. save-file;^X-^S;Save the current buffer if it is changed
  1232. .sp .5
  1233. save-window;(none);Remember current window (to restore later)
  1234. .sp .5
  1235. scroll-next-up;M-^Z;Scroll the next window up
  1236. .sp .5
  1237. scroll-next-down;M-^V;Scroll the next window down
  1238. .sp .5
  1239. search-forward;^S;Search for a string
  1240. .sp .5
  1241. search-reverse;^R;Search backwards for a string
  1242. .sp .5
  1243. select-buffer;^X-B;T{
  1244. Select a buffer to display in the current window
  1245. T}
  1246. .sp .5
  1247. set;^X-A;Set a variable to a value
  1248. .sp .5
  1249. set-encryption-key;M-E;Set the encryption key of the current buffer
  1250. .sp .5
  1251. set-fill-column;^X-F;Set the current fill column
  1252. .sp .5
  1253. set-mark;^X-.;Set the mark
  1254. .sp .5
  1255. shell-command;^X-!;Execute an external command
  1256. .sp .5
  1257. shrink-window;^X-^Z;Make the current window smaller
  1258. .sp .5
  1259. split-current-window;^X-2;Split the current window in two
  1260. .sp .5
  1261. store-macro;(none);T{
  1262. Store the following macro lines to a numbered macro
  1263. T}
  1264. .sp .5
  1265. store-procedure;(none);T{
  1266. Store the following macro lines to a named procedure
  1267. T}
  1268. .sp .5
  1269. transpose-characters;^T;T{
  1270. Transpose the character at the cursor with the character to the left
  1271. T}
  1272. .sp .5
  1273. trim-line;^X-^T;Trim any trailing whitespace from line
  1274. .sp .5
  1275. unbind-key;M-^K;Unbind a key from a function
  1276. .sp .5
  1277. universal-argument;^U;Execute the following command 4 times
  1278. .sp .5
  1279. unmark-buffer;M-~;T{
  1280. Unmark the current buffer (so it is no longer changed)
  1281. T}
  1282. .sp .5
  1283. update-screen;(none);Force a screen update during macro execution
  1284. .sp .5
  1285. view-file;^X-^V;Find a file,and put it in view mode
  1286. .sp .5
  1287. wrap-word;M-FNW;T{
  1288. Wrap the current word, this is an internal function
  1289. T}
  1290. .sp .5
  1291. write-file;^X-^W;T{
  1292. Write the current buffer under a new file name
  1293. T}
  1294. .sp .5
  1295. write-message;(none);Display a string on the command line
  1296. .sp .5
  1297. yank;^Y;T{
  1298. yank the kill buffer into the current buffer at the cursor
  1299. T}
  1300. .TE
  1301. .sb
  1302. .bp
  1303. .SH
  1304. MicroEMACS Bindings
  1305. .sf
  1306. .PP
  1307. Below is a complete list of the key bindings used in MicroEMACS.
  1308. This can be used as a wall chart reference for MicroEMACS commands.
  1309. .KS
  1310. .TS
  1311. tab(;);
  1312. c s s s
  1313. lfB l lfB l.
  1314. Default Key Bindings for MicroEmacs 3.8i
  1315. _
  1316. ^A;Move to start of line;ESC A;Apropos (list some commands)
  1317. ^B;Move backward by characters;ESC B;Backup by words
  1318. ^C;Insert space;ESC C;Initial capitalize word
  1319. ^D;Forward delete;ESC D;Delete forward word
  1320. ^E;Goto end of line;ESC E;Reset Encryption Key
  1321. ^F;Move forward by characters;ESC F;Advance by words
  1322. ^G;Abort out of things;ESC G;Go to a line
  1323. ^H;Backward delete              
  1324. ^I;Insert tab/Set tab stops
  1325. ^J;Insert CR-LF, then indent             
  1326. ^K;Kill forward;ESC K;Bind Key to function
  1327. ^L;Refresh the screen;ESC L;Lower case word
  1328. ^M;Insert CR-LF;ESC M;Add global mode
  1329. ^N;Move forward by lines;ESC N;Goto End paragraph
  1330. ^O;Open up a blank line          
  1331. ^P;Move backward by lines;ESC P;Goto Beginning of paragraph
  1332. ^Q;Insert literal;ESC Q;Fill current paragraph
  1333. ^R;Search backwards;ESC R;Search and replace
  1334. ^S;Search forward
  1335. ^T;Transpose characters               
  1336. ^U;Repeat command four times;ESC U;Upper case word
  1337. ^V;Move forward by pages;ESC V;Move backward by pages
  1338. ^W;Kill region;ESC W;Copy region to kill buffer
  1339. ^Y;Yank back from killbuffer;ESC X;Execute named command
  1340. ^Z;Move backward by pages;ESC Z;Save all buffers and exit
  1341. .sp
  1342. ESC ^C;Count words in region;ESC ~;Unmark current buffer
  1343. ESC ^F;Goto matching fence;ESC !;Reposition window
  1344. ESC ^H;Delete backward word;ESC <;Move to start of buffer
  1345. ESC ^K;Unbind Key from function;ESC >;Move to end of buffer
  1346. ESC ^L;Reposition window;ESC .;Set mark
  1347. ESC ^M;Delete global mode;ESC space;Set mark
  1348. ESC ^N;Rename current buffer;ESC rubout;Delete backward word
  1349. ESC ^R;Search & replace w/query;rubout;Backward delete
  1350. ESC ^S;Change screen rows
  1351. ESC ^T;Change screen columns
  1352. ESC ^V;Scroll next window down
  1353. ESC ^W;Delete Paragraph
  1354. ESC ^Z;Scroll next window up
  1355. .TE
  1356. .KE
  1357. .KS
  1358. .TS
  1359. tab(;);
  1360. c s s s
  1361. lfB l lfB l.
  1362. Default Key Bindings for MicroEmacs 3.8i
  1363. _
  1364. .sp
  1365. ^X ?;Describe a key;^X !;Run 1 command in a subjob
  1366. ^X =;Show the cursor position;^X @;Pipe DOS command to buffer
  1367. ^X ^;Enlarge display window;^X #;Filter buffer thru DOS filter
  1368. ^X 0;Delete current window;^X (;Begin macro
  1369. ^X 1;Delete other windows;^X );End macro
  1370. ^X 2;Split current window
  1371. ;;^X A;Set variable value
  1372. ^X ^B;Display buffer list;^X B;Switch a window to a buffer
  1373. ^X ^C;Exit MicroEMACS;^X C;Start a new command processor
  1374. ;;^X D;Suspend MicroEMACS (BSD4.2 only)
  1375. ;;^X E;Execute macro
  1376. ^X ^F;Find file;^X F;Set fill column
  1377. ^X ^I;Insert file
  1378. ;;^X K;Delete buffer
  1379. ^X ^L;Lower case region
  1380. ^X ^M;Delete Mode;^X M;Add a mode
  1381. ^X ^N;Move window down;^X N;Rename current filename
  1382. ^X ^O;Delete blank lines;^X O;Move to the next window
  1383. ^X ^P;Move window up;^X P;Move to the previous window
  1384. ^X ^R;Get a file from disk;^X R;Incremental reverse search
  1385. ^X ^S;Save current file;^X S;Incremental forward search
  1386. ^X ^U;Upper case region
  1387. ^X ^V;View file
  1388. ^X ^W;Write a file to disk;^X W;resize Window
  1389. ^X ^X;Swap "." and mark;^X X;Use next buffer
  1390. ^X ^Z;Shrink window;^X Z;Enlarge display window
  1391. .TE
  1392. .KE
  1393. .KS
  1394. .TS
  1395. tab (;);
  1396. l l.
  1397. Only under PCDOS:
  1398. .sp .5
  1399. <ALT>-S Hunt forward;SHIFT <F1> - <F10>
  1400. <ALT>-R Hunt backward;Execute macros 1 - 10
  1401. .TE
  1402. .KE
  1403. .KS
  1404. .TS
  1405. tab(;);
  1406. l s
  1407. l l.
  1408. Usable Modes
  1409. _
  1410. WRAP;Lines going past right margin "wrap" to a new line
  1411. VIEW;Read-Only mode where no modifications are allowed
  1412. CMODE;Change behavior of some commands to work with C better
  1413. EXACT;Exact case matching on search strings
  1414. OVER;Overwrite typed characters instead of inserting them
  1415. CRYPT;Current buffer will be encrypted on write, decrypted on read
  1416. MAGIC;Use regular expression matching in searches
  1417. ASAVE;Save the file every 256 inserted characters
  1418. .TE
  1419. .sp .5
  1420. .TS
  1421. tab(;);
  1422. l l.
  1423. WHITE/CYAN/MAGENTA/YELLOW/BLUE/RED/GREEN/BLACK;Sets foreground color
  1424. white/cyan/magenta/yellow/blue/red/green/black;Sets background color
  1425. .TE
  1426. .KE
  1427. .sb
  1428. .bp
  1429. .SH
  1430. Supported machines
  1431. .sf
  1432. .PP
  1433. The following table lists all the hardware/compilers for which I
  1434. currently support MicroEMACS.  This is not exclusive of all machines
  1435. which MicroEMACS will run on, but I have either run it myself, or had a
  1436. first hand report of it running.
  1437. .KS
  1438. .TS
  1439. tab(;);
  1440. l l l l.
  1441. Hardware;OS;Compiler;Comments
  1442. _
  1443. VAX 780;UNIX V5;native
  1444. ;UNIX V7;native
  1445. ;BSD 4.2;native;job control supported
  1446. ;*VMS;native;only some terminals supported
  1447. .sp
  1448. NCR Tower;UNIX V5;native
  1449. .sp
  1450. Fortune 32:16;UNIX V7;native
  1451. .sp
  1452. IBM-PC;MSDOS 2/3.2;Lattice 2.15;Large CODE/Large DATA
  1453. ;;AZTEC 3.4e;Small CODE/Large DATA
  1454. ;;*MSC 4.0
  1455. ;;*MWC 86
  1456. .sp
  1457. HP150;MSDOS;Lattice 2.15;T{
  1458. Function key labels for the touch screen
  1459. T}
  1460. .sp
  1461. HP110;MSDOS;Lattice 2.15
  1462. ;;Aztec 3.4e
  1463. .sp
  1464. T{
  1465. *Data General 10
  1466. T};MSDOS;Lattice 2.15
  1467. .sp
  1468. T{
  1469. *Texas Instruments Professional
  1470. T};MSDOS;Lattice 2.15
  1471. .sp
  1472. Amiga;Intuition;Lattice 3.03;no mouse or menus yet
  1473. ;;*Aztec 3
  1474. .sp
  1475. ST520;TOS;Lattice 3.10;T{
  1476. no menus yet, no shell commands
  1477. T}
  1478. +Macintosh;Finder 5.0;Aztec
  1479. .TE
  1480. .KE
  1481. .FS
  1482. * means that I do not own or have access to the listed compiler and/or
  1483. machine and must rely upon others to help support it.
  1484. .FE
  1485. .FS
  1486. + Systems to be supported (i.e some code is already written:)
  1487. .FE
  1488. .sb
  1489. .bp
  1490. .SH
  1491. Machine Dependent Notes
  1492. .sf
  1493. .PP
  1494. This appendix lists some notes specific to individual
  1495. implementations of MicroEMACS. Every attempt has been made to allow
  1496. EMACS to be identical on all machines, but we have also tried to take
  1497. advantage of function keys, cursor keys, mice, and special screen modes
  1498. where possible.
  1499. .SH
  1500. IBM-PC/XT/AT and its clones
  1501. .sf
  1502. .PP
  1503. The IBM-PC family of computers is supported with a variety of
  1504. different display adapters.  EMACS will attempt to discover what adapter
  1505. is connected and use the proper driver for it.    Below is a list of the
  1506. currently supported video adapters:
  1507. .KS
  1508. .TS
  1509. tab(;);
  1510. l l l.
  1511. ;Adapter;$sres;Original mode used
  1512. _
  1513. Monochrome Graphics Adapter;MONO;MONO
  1514. Color Graphics Adapter;CGA;CGA
  1515. Enhanced graphics Adapter;EGA;CGA
  1516. .TE
  1517. .KE
  1518. .PP
  1519. EMACS also takes advantage of various function keys and the keys
  1520. on the keypad on an IBM-PC.  The function keys are initially not bound
  1521. to any particular functions (except by the emacs.rc startup file), but
  1522. the keypad keys do default to the following:
  1523. .KS
  1524. .TS
  1525. tab(;);
  1526. l l.
  1527. Keypad key;Function
  1528. _
  1529. Home;beginning-of-file
  1530. CSRS UP;previous-line
  1531. Pg Up;previous-page
  1532. CSRS LEFT;backward-character
  1533. CSRS RIGHT;forward-character
  1534. End;end-of-file
  1535. CSRS DOWN;next-line
  1536. Pg Dn;Next-page
  1537. .TE
  1538. .KE
  1539. .PP
  1540. All these special keys are indicated in EMACS macros by use of the
  1541. .B "FN"
  1542. prefix.  Below is a list of many of the keys and the codes
  1543. used to specify them.  Also the codes may be gotten by using the
  1544. describe-key (^X ?) command on the suspect key.
  1545. .KS
  1546. .TS
  1547. tab(%);
  1548. l s s s s
  1549. l l l l l.
  1550. IBM PC function keys in MicroEmacs
  1551. .sp .5
  1552. %function%Function%^function%Alt-function
  1553. f1)%FN;%FNT%FN^%FNh
  1554. f2)%FN<%FNU%FN_%FNi
  1555. f3)%FN=%FNV%FN`%FNj
  1556. f4)%FN>%FNW%FNa%FNk
  1557. f5)%FN?%FNX%FNb%FNl
  1558. f6)%FN@%FNY%FNc%FNm
  1559. f7)%FNA%FNZ%FNd%FNn
  1560. f8)%FNB%FN[%FNe%FNo
  1561. f9)%FNC%FN\%FNf%FNp
  1562. f10)%FND%FN]%FNg%FNq
  1563. .sp
  1564. home)%FNG%%FNw
  1565. CuUp)%FNH
  1566. PgUp)%FNI%%FN {Alt 132}
  1567. CuLf)%FNK%%FNs
  1568.  5  )
  1569. CuRt)%FNM%%FNt
  1570.  End)%FNO%%FNu
  1571. CuDn)%FNP
  1572. PgDn)%FNQ%%FNv
  1573.  Ins)%FNR
  1574.  Del)%FNS
  1575. .TE
  1576. .KE
  1577. .sb
  1578. .bp
  1579. .SH
  1580. Atari 520/1040ST
  1581. .sf
  1582. .PP
  1583. The ATARI ST family of computers have a dual personality.  They
  1584. may use either a monochrome or a color screen.    EMACS supports two
  1585. screen resolutions on each monitor. 
  1586. .KS
  1587. .TS
  1588. tab(;);
  1589. l l l l l.
  1590. Monitor;$sres;size;#color;$palette format
  1591. _
  1592. Color;LOW;40x25;16;000111222333444555666777
  1593. ;MEDIUM;80x25;4;000111222333
  1594. Mono;HIGH;80x25;2;000
  1595. ;DENSE*;80x40;2;000
  1596. .TE
  1597. .KE
  1598. .FS
  1599. * DENSE mode is not yet supported in 3.8i.  It will be soon
  1600. .FE
  1601. .PP
  1602. The $palette environment variable can be used to change what
  1603. color is associated with each color name.  With a color monitor, each
  1604. group of three digits indicates an octal number specifying the RED,
  1605. GREEN and BLUE levels of that color.  Each color digit can vary from 0
  1606. to 7.  For example, the initial setting of $palette in LOW resolution is:
  1607. .IP
  1608. 000700070770007707077777
  1609. .LP
  1610. which broken up is:
  1611. .IP
  1612. 000 700 070 770 007 707 077 777
  1613. .LP
  1614. which means:
  1615. .KS
  1616. .TS
  1617. tab(;);
  1618. l l.
  1619. 000;Black
  1620. 700;Red
  1621. 070;Green
  1622. 770;Yellow
  1623. 007;Blue
  1624. 707;Magenta
  1625. 077;Cyan
  1626. 777;White
  1627. .TE
  1628. .KE
  1629. .PP
  1630. Also the mouse generates FN prefix codes when moved, or when one
  1631. of the two buttons is pressed.    Initially the movement of the mouse is
  1632. bound to movement of the cursor, and the left mouse button generates a
  1633. set-mark (M-space) command.  The cursor keys and the function keys are
  1634. bound similarly to IBM-PC.
  1635. .sb
  1636. .SH
  1637. Amiga 1000
  1638. .sf
  1639. .PP
  1640. The Commodore AMIGA 1000 version of MicroEMACS does not have
  1641. extensive support of the mouse or of pull down menus as of yet.  It does
  1642. however come up in a window, and it is possible to re-size it to run in
  1643. different sized windows.  The
  1644. .B "M-^S"
  1645. .I "change-screen-size"
  1646. takes its numeric argument as the new number
  1647. of lines for EMACS to use.  The
  1648. .B "M-^T"
  1649. .I "change-screen-width"
  1650. command allows you to change the number of
  1651. columns EMACS will use.  The defaults for these are 23 lines and 77
  1652. characters across for a full screen window.
  1653. .DS C
  1654. Note about Compiling MicroEMACS
  1655. .DE
  1656. .IP
  1657. .I
  1658. If you are compiling the sources on the AMIGA to produce an
  1659. executable image, and you are using the Lattice compiler, be sure to
  1660. give the CLI command 'STACK 40000' before compiling to make sure the
  1661. compiler has sufficient stack space to successfully complete
  1662. compilation.
  1663. .sb
  1664. .bp
  1665. .SH
  1666. UNIX V5, V7, and BSD4.[23]
  1667. .sf
  1668. .PP
  1669. MicroEMACS under UNIX utilizes the
  1670. .B "TERMCAP"
  1671. library to provide machine independent screen functions.  Make sure that
  1672. termcap is available and properly set on your account before attempting
  1673. to use MicroEMACS. 
  1674. .PP
  1675. Under systems which support job control, you can use the
  1676. .B "^X-D"
  1677. .I "suspend-emacs"
  1678. command to place EMACS
  1679. into the background.  This carries a much smaller overhead than bringing
  1680. up a new shell under EMACS.  EMACS will properly redraw the screen when
  1681. you bring it back to the foreground.
  1682. .PP
  1683. With the addition of some very machine/operating system specific
  1684. code, EMACS can prevent two or more people from modifying the same file
  1685. at the same time. The upper level of a set of
  1686. functions to provide file locking exist in the source file
  1687. .B "LOCK.C."
  1688. It requires two machine specific functions written and linked into EMACS
  1689. for it to operate properly. 
  1690. .IP
  1691. char *dolock(fname)
  1692. .sp
  1693. char *fname;
  1694. .sp
  1695. dolock() locks a file, preventing others from modifying it. If
  1696. it succeeds, it returns NULL, otherwise it returns a pointer to
  1697. a string in the form "LOCK ERROR: explanation".
  1698. .sp
  1699. char *undolock(fname)
  1700. .sp
  1701. char *fname;
  1702. .sp
  1703. undolock() unlocks a file, allowing others to modifying it. If
  1704. it succeeds, it returns NULL, otherwise it returns a pointer to
  1705. a string in the form "LOCK ERROR: explanation".
  1706. --------------------------------- cut --------------------------------------
  1707.