home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume26 / ee-1.23 / part01 / easyedit.el < prev    next >
Encoding:
Text File  |  1993-06-20  |  44.2 KB  |  1,299 lines

  1. (setq ee-VERSION "1.23")
  2.  
  3. ;                    Easy-Edit  1.23       GNU Emacs configuration
  4. ;            7/2/92
  5. ;
  6. ;
  7. ; Easy-edit novice screen editor for Unix systems with GNU emacs
  8. ;
  9. ; Copyright (C) 1992     Larry Broda
  10. ;                      
  11. ;
  12. ;    This program is distributed in the hope that it will be useful,
  13. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This program 
  15. ;    is an extension of GNU emacs; See the GNU General Public License 
  16. ;    for more details.
  17. ;
  18. ;    This program is free software; you can redistribute it and/or modify
  19. ;    it under the same terms as the GNU General Public License as 
  20. ;    published by the Free Software Foundation; either version 1, or 
  21. ;    (at your option) any later version.
  22. ;
  23. ;
  24. ;
  25. ;    Easy-edit 1.23
  26. ;       By Larry Broda  
  27. ;    Department of Psychology
  28. ;    University of Illinois at Urbana-Champaign
  29. ;       Email: lbroda@s.psych.uiuc.edu
  30. ;    4/13/92 
  31. ;
  32. ;    GNU emacs information:
  33. ;    contact:
  34. ;    Free Software Foundation
  35. ;    675 Massachusetts Avenu
  36. ;    Cambridge, MA 02139
  37. ;    USA
  38.  
  39. (defconst ee-com-map nil
  40.   "Keymap for easyedit")
  41. ;
  42. ; Function to give an error message for using an key out of context
  43. ;
  44. (defun ee-not-here ()
  45.   "That key unbound at moment"
  46.   (interactive)
  47.   (ding))
  48.  
  49. ;
  50. ;
  51.  
  52. (defun ee-nofun ()
  53.   "function to give an error for an unbound key"
  54.   (interactive)
  55.   (message "Not currently an easy-edit command" (ding))
  56.   (sleep-for 2)
  57.   (ee-message HELP_HELP))
  58.  
  59.  
  60. (defun ee-quit ()
  61.   "Exit without saving"
  62.   (interactive)    
  63.   (progn
  64.     (if (buffer-modified-p (get-buffer "EDIT"))
  65.     (progn
  66.       (cond 
  67.        ((yes-or-no-p "Really quit and cancel changes? " ) 
  68.         (message "Cancelling changes!")
  69.         (sleep-for 1)
  70.         (discard-input)
  71.         (kill-emacs))
  72.        ((ee-message HELP_HELP))))
  73.       (message "No changes to cancel...")
  74.       (sleep-for 1)
  75.       (discard-input)
  76.       (kill-emacs))))
  77.  
  78. (defun ee-kill-to-eof ()
  79.   "Delete from point to End of buffer"
  80.   (interactive)
  81.   (end-of-buffer)
  82.   (delete-region (point) (mark)))
  83.  
  84. (defun ee-move-block ()
  85.   "Demark a block of text and copy or move it"
  86.   (interactive)
  87.   (if (> ee-BLOCK-MARK 0)
  88.      (progn 
  89.  
  90.        (let ((imsg "
  91.          Type  m  to move the block (delete original)
  92.          Type  c  to copy the block (leave original)
  93.  
  94.                  Type ESC +  when ready to insert the block at cursor
  95.  
  96.                  ... you may continue to insert the block repeatedly
  97.                      until you mark another block.")
  98.          (iprmpt "Choose m or c, please: "))
  99.  
  100.          (setq DELFLG (eq (ee-choosefrom-list imsg iprmpt '(?c ?m)) ?m)))
  101.  
  102.        (copy-to-register ?b ee-BLOCK-MARK (point) DELFLG)
  103.        (setq ee-BLOCK-MARK 0)
  104.        (message "type ESC + to insert block at cursor location")
  105.        (setq ee-BLOCK-SAVED 'true)
  106.        (ding))
  107.  
  108.     (setq ee-BLOCK-MARK (point))
  109.     (setq ee-BLOCK-SAVED 'nil)
  110.     (message "Move cursor to other end of text block and press ESC / again")
  111.     (ding)
  112.     (sleep-for 2)))
  113.  
  114. ;
  115. ; Code from GNU Emacs: ee-query-replace and ee-perform-replace are modifications by
  116. ; Larry Broda, Dept. of Psychology/University of Illinois at C-U, of the
  117. ; functions query-replace and perform-replace from the GNU Emacs distribution, and are subject
  118. ; to all terms of the GNU Emacs Public License.
  119. ;
  120.  
  121. (defun ee-query-replace (from-string to-string &optional arg)
  122.   "\
  123. Replace some occurrences of FROM-STRING with TO-STRING.
  124. As each match is found, the user must type a character saying
  125. what to do with it.  
  126. Preserves case in each replacement if  case-replace  and  case-fold-search
  127. are non-nil and FROM-STRING has no uppercase letters.
  128. Third arg DELIMITED (prefix arg if interactive) non-nil means replace
  129. only matches surrounded by word boundaries."
  130.   (interactive "sQuery replace: \nsQuery replace %s with: \nP")
  131.   (ee-perform-replace from-string to-string t nil arg)
  132.   (message "Done"))
  133.  
  134. (defun ee-perform-replace (from-string to-string
  135.                 query-flag regexp-flag delimited-flag)
  136.   (let ((nocasify (not (and case-fold-search case-replace
  137.                 (string-equal from-string
  138.                       (downcase from-string)))))
  139.     (literal (not regexp-flag))
  140.     (search-function (if regexp-flag 're-search-forward 'search-forward))
  141.     (search-string from-string)
  142.     (keep-going t)
  143.     (lastrepl nil))            ;Position after last match considered.
  144.     (if delimited-flag
  145.     (setq search-function 're-search-forward
  146.           search-string (concat "\\b"
  147.                     (if regexp-flag from-string
  148.                       (regexp-quote from-string))
  149.                     "\\b")))
  150.     (push-mark)
  151.     (push-mark)
  152.     (while (and keep-going
  153.         (not (eobp))
  154.         (progn
  155.          (set-mark (point))
  156.          (funcall search-function search-string nil t)))
  157.       ;; Don't replace the null string 
  158.       ;; right after end of previous replacement.
  159.       (if (eq lastrepl (point))
  160.       (forward-char 1)
  161.     (undo-boundary)
  162.     (if (not query-flag)
  163.         (replace-match to-string nocasify literal)
  164.       (let (done replaced)
  165.         (while (not done)
  166.           ;; Preserve the match data.  Process filters and sentinels
  167.           ;; could run inside read-char..
  168. ;          (let ((data (match-data))
  169. ;            (help-form
  170. ;             '(concat "Query replacing "
  171. ;                  (if regexp-flag "regexp " "")
  172. ;                  from-string " with " to-string ".\n\n"
  173. ;                  (substitute-command-keys query-replace-help))))
  174. ;        (setq char help-char)
  175. ;        (while (= char help-char)
  176. ;          (message "Query replacing %s with %s: " from-string to-string)
  177. ;          (setq char (read-char))
  178. ;          (if (= char ??)
  179. ;              (setq unread-command-char help-char char help-char)))
  180. ;        (store-match-data data))
  181.  
  182.          
  183.         (message "Query replacing %s with %s: " from-string to-string)
  184.         (setq char (read-char))
  185.  
  186.           (cond ((or (= char ?\e)
  187.              (= char ?q))
  188.              (setq keep-going nil)
  189.              (setq done t))
  190.             ((= char ?y)
  191.              (or replaced
  192.              (replace-match to-string nocasify literal))
  193.              (setq done t))
  194.             ((= char ?\.)
  195.              (or replaced
  196.              (replace-match to-string nocasify literal))
  197.              (setq keep-going nil)
  198.              (setq done t))
  199.             ((= char ?!)
  200.              (or replaced
  201.              (replace-match to-string nocasify literal))
  202.              (setq done t query-flag nil))
  203.             ((= char ?n)
  204.              (setq done t))
  205.             ((= char ?\C-l)
  206.              (recenter nil))
  207.             (t
  208.              (message "Not a choice")
  209.              (ding)
  210.              (sleep-for 2))))))
  211.     (setq lastrepl (point))))
  212.     (pop-mark)
  213.     keep-going))
  214.  
  215. (defun ee-search-replace ()
  216.   "Do a text search/replace"
  217.   (interactive)
  218.   (setq sprompt (concat "Replace-> [" search-last-string "]: "))
  219.   (setq sstring (read-string sprompt))
  220.   (if (> (length sstring) 0)
  221.       (setq search-last-string sstring)
  222.     (setq sstring search-last-string))
  223.   
  224.     (if (> (length sstring) 0)
  225.     (progn
  226.       (setq rstring (read-string "Replace with-> "))
  227.       (save-window-excursion
  228.         (with-output-to-temp-buffer "*INFORMATION*"
  229.           (save-excursion
  230.         (set-buffer "*INFORMATION*")
  231.         (erase-buffer))
  232.           (princ "             Search/Replace\n\n")
  233.           (princ (concat "Replace all occurrences of " sstring " with " rstring "\n"))
  234.           (princ "from the current position to the end of file.\n")
  235.           (princ "(use confirm if you don't want to replace every occurrence)\n\n")
  236.           (princ "Type y for confirm (will ask before doing each replacement)\n")
  237.           (princ "Type n to do all replacements without confirming\n"))
  238.         (setq SRFLG ?x)
  239.         (while (not (ee-member SRFLG '(?y ?n)))
  240.           (progn
  241.         (let ((cursor-in-echo-area t))
  242.           (message "Confirm replacements (y or n)? ")
  243.           (ding)
  244.           (setq SRFLG (downcase (read-char))))
  245.         (let ((cursor-in-echo-area nil))
  246.           (cond
  247.          ((eq SRFLG ?y)
  248.           (with-output-to-temp-buffer "*INFORMATION*"
  249.             (save-excursion
  250.               (set-buffer "*INFORMATION*")
  251.               (erase-buffer))
  252.             (princ "Choices for answering replace query: \n\n")
  253.             (princ "(press ESC or q to stop the search/replace at any time)\n\n")
  254.             (princ "  y     - do the replacement and continue searching\n")
  255.             (princ "  n     - don't replace, but continue searching\n")
  256.             (princ "  .     - Replace this occurrence and stop\n")
  257.             (princ "  q     - Don't replace, and stop\n")
  258.             (princ "  !     - replace all occurrences from here on without confirming\n"))
  259.           (ee-query-replace sstring rstring nil))
  260.          ((eq SRFLG ?n)  (replace-string sstring rstring))
  261.          (t  (message "Type y for confirm, n for no confirm, please")
  262.              (sleep-for 2))))))))))
  263.  
  264. (defun ee-insert-block ()
  265.   "Insert block"
  266.   (interactive)
  267.  
  268.   (if (null ee-BLOCK-SAVED )
  269.       (progn
  270.         (message "No block has been marked and saved with ESC /")
  271.         (ding))
  272.     (insert-register ?b)))
  273.     
  274.  
  275. (defun ee-recover ()
  276.   "recover from an Emacs auto-save file"
  277.   (interactive)
  278.   (ee-recover-file EE_FILE_NAME)
  279.   (auto-save-mode 1)
  280.   (easyedit-mode))
  281.  
  282. ;
  283. ; following function derived from GNU Emacs recover-file function, by
  284. ; Richard Stallman
  285. ;
  286. (defun ee-recover-file (file)
  287.   "Visit file FILE, but get contents from its last auto-save file."
  288.   (interactive "FRecover file: ")
  289.   (setq file (expand-file-name file))
  290.   (if (auto-save-file-name-p file) (error "%s is an auto-save file" file))
  291.   (let ((file-name (let ((buffer-file-name file))
  292.              (make-auto-save-file-name))))
  293.     (cond ((not (file-newer-than-file-p file-name file))
  294.        (error "Auto-save file %s not current" file-name))
  295.        ((yes-or-no-p "Recover previous unsaved edits? " ) 
  296.         (switch-to-buffer (find-file-noselect file t))
  297.         (let ((buffer-read-only nil))
  298.          (erase-buffer)
  299.          (insert-file-contents file-name nil))
  300.         (after-find-file nil))
  301.         (t (error "Recovery cancelled.")))
  302.   (setq buffer-auto-save-file-name nil)))
  303.   
  304.  
  305. (defun ee-check-recovery-file (file)
  306.   "Print a nicer message if the save file is current"
  307.   (interactive)
  308.   (setq file (expand-file-name file))
  309.   (if (auto-save-file-name-p file) (error "%s is an auto-save file" file))
  310.   (let ((file-name (let ((buffer-file-name file))
  311.              (make-auto-save-file-name))))
  312.     (cond ((file-newer-than-file-p file-name file)
  313.            (message "Found recovery file from unsaved edit; consider ESC R to recover.")
  314.             (ding)
  315.             (sleep-for 4)))))
  316.  
  317. (defun ee-suspend-edit ()
  318.   "suspend"
  319.   (interactive)
  320.   (progn
  321.     (suspend-emacs EE_RESUME_MSG)
  322.     (ee-message HELP_HELP)))
  323.  
  324. (defun ee-create-help ()
  325.   "Create the help window"
  326.   (progn
  327.     (setq EEHELPF
  328.       (cond
  329.        ((setq temp (getenv "EASYEDIT_HELP")) temp)
  330.        (t "/usr/local/lib/easyedit/HELP-WINDOW")))
  331.     (setq ALTERNATE_HELP (concat EEHELPF "-ADVANCED"))
  332.     (setq EASYEDIT_MANUAL
  333.       (cond
  334.        ((setq temp (getenv "EASYEDIT_MANUAL")) temp)
  335.        (t "/usr/local/lib/easyedit/HELP-MANUAL")))
  336.     (if (string-equal (getenv "HELP_LEVEL") "advanced")
  337.     (progn
  338.       (setq temp ALTERNATE_HELP)
  339.       (setq ALTERNATE_HELP EEHELPF)
  340.       (setq EEHELPF temp)))
  341.     (if (file-exists-p EEHELPF)
  342.     (progn
  343.       (setq ee-HWIN (split-window nil nil nil))
  344.       (select-window ee-HWIN)
  345.       (switch-to-buffer "HELP")
  346.       (insert-file-contents EEHELPF)
  347.       (setq buffer-read-only t)
  348.       (select-window ee-EWIN))
  349.       (message "HELP FILE NOT FOUND!")
  350.       (ding)
  351.       (sleep-for 3)
  352.       (discard-input)
  353.       (kill-emacs))))
  354.  
  355. (defun ee-switch-help ()
  356.   "toggle between the advanced and basic help files"
  357.   (interactive)
  358.   (if (not (file-exists-p ALTERNATE_HELP))
  359.       (progn
  360.     (message "Alternate help file not found!")
  361.     (ding))
  362.     (define-key ee-com-map "\e>" 'ee-not-manual)
  363.     (define-key ee-com-map "\e<" 'ee-not-manual)
  364.     (set-buffer "HELP")
  365.     (setq buffer-read-only nil)
  366.     (erase-buffer)
  367.     (insert-file-contents ALTERNATE_HELP)
  368.     (setq buffer-read-only t)
  369.     (set-buffer "EDIT")
  370.     (setq temp ALTERNATE_HELP)
  371.     (setq ALTERNATE_HELP EEHELPF)
  372.     (setq EEHELPF temp)))
  373.  
  374. (defun ee-manual ()
  375.   "replace HELP with MANUAL display"
  376.   (interactive)
  377.   (if (not (file-exists-p EASYEDIT_MANUAL))
  378.       (progn
  379.     (message "Easy-edit manual file not found!")
  380.     (ding))
  381.     (set-buffer "HELP")
  382.     (let ((buffer-read-only nil))
  383.       (erase-buffer)
  384.       (insert-file-contents EASYEDIT_MANUAL))
  385.     (set-buffer "EDIT")
  386.     (define-key ee-com-map "\e>" 'ee-next-subject)
  387.     (define-key ee-com-map "\e<" 'ee-previous-subject)
  388.     (setq HELP_HELP "ESC F/B scroll fwd/bkwd;  ESC H - restore HELP")
  389.     (ee-message HELP_HELP)))
  390.  
  391. (defun ee-insert-file ()
  392.   "Insert file"
  393.   (interactive)
  394.   (setq ifile (read-string "File to insert: "))
  395.   (if (> (length ifile) 0) 
  396. (let ((default-directory "./"))
  397. (insert-file-contents ifile)))
  398.   (ee-message HELP_HELP))
  399.  
  400. (defun ee-search-forward ()
  401.   "search forward"
  402.   (interactive)
  403.   (setq sprompt (concat "Find-> [" search-last-string "]: "))
  404.   (setq sstring (read-string sprompt))
  405.   (if (> (length sstring) 0) (setq search-last-string sstring)) 
  406.   (search-forward search-last-string))
  407.  
  408. (defun ee-search-backward ()
  409.   "search forward"
  410.   (interactive)
  411.   (setq sprompt (concat "<-Find [" search-last-string "]: "))
  412.   (setq sstring (read-string sprompt))
  413.   (if (> (length sstring) 0) (setq search-last-string sstring)) 
  414.   (search-backward search-last-string))
  415.  
  416. (defun ee-message (ee_txt)
  417.   "write an easy-edit message at bottom of screen"
  418.   (interactive)
  419.   (message (concat EE_FILE_NAME (concat EE_MODE  (concat " ---- " ee_txt)))))
  420.  
  421. (defun ee-upp-help ()
  422.   "Scroll help window upwards"
  423.   (interactive)
  424.   (if (window-point ee-HWIN)
  425.       (progn
  426.     (select-window ee-HWIN)
  427.     (setq HWSIZE (- (window-height) 1))
  428.     (select-window ee-EWIN)
  429.     (scroll-other-window (* -1 HWSIZE)))
  430.     (message "No HELP window to scroll")
  431.     (ding)
  432.     (sleep-for 2))
  433.   (ee-message HELP_HELP))
  434.  
  435. (defun ee-downp-help ()
  436.   "Scroll help window upwards"
  437.   (interactive)
  438.   (if (window-point ee-HWIN)
  439.       (progn
  440.     (select-window ee-HWIN)
  441.     (setq HWSIZE (- (window-height) 1))
  442.     (select-window ee-EWIN)
  443.     (scroll-other-window HWSIZE))
  444.     (message "No HELP window to scroll")
  445.     (ding)
  446.     (sleep-for 2))
  447.   (ee-message HELP_HELP))
  448.  
  449.  
  450. (defun ee-upl-help ()
  451.   "Scroll help window upwards"
  452.   (interactive)
  453.   (if (window-point ee-HWIN)
  454.       (scroll-other-window -1)
  455.     (message "No HELP window to scroll")
  456.     (ding)
  457.     (sleep-for 2))
  458.   (ee-message HELP_HELP))
  459.  
  460. (defun ee-downl-help ()
  461.   "Scroll help window upwards"
  462.   (interactive)
  463.   (if (window-point ee-HWIN)
  464.       (scroll-other-window 1)
  465.     (message "No HELP window to scroll")
  466.     (ding)
  467.     (sleep-for 2))
  468.   (ee-message HELP_HELP))
  469.  
  470.  
  471. (defun ee-kill-line (cnt)
  472.   "Delete a line"
  473.   (interactive "P")
  474.   (progn 
  475.     (beginning-of-line)
  476.     (kill-line (if (eq cnt nil) 1 cnt))))
  477.  
  478. (defun ee-restore-help ()
  479.   "restore a lost help window"
  480.   (interactive)
  481.   (progn
  482.     (define-key ee-com-map "\e>" 'ee-not-manual)
  483.     (define-key ee-com-map "\e<" 'ee-not-manual)
  484.     (switch-to-buffer "EDIT")
  485.     (delete-other-windows)
  486.     (setq ee-HWIN (split-window nil nil nil))
  487.     (select-window ee-HWIN)
  488.     (switch-to-buffer "HELP")
  489.     (let ((buffer-read-only nil))
  490.       (erase-buffer)
  491.       (insert-file-contents EEHELPF))
  492.     (select-window ee-EWIN)
  493.     (setq HELP_HELP "ESC F / ESC B -> HELP forward / backward")
  494.     (ee-message HELP_HELP)))
  495.  
  496. (defun ee-zap-help ()
  497.   "Remove the HELP window"
  498.   (interactive)
  499.   (progn
  500.     (delete-other-windows)
  501.     (switch-to-buffer "EDIT")
  502.     (setq HELP_HELP "To display HELP window: ESC H")
  503.     (ee-message HELP_HELP)))
  504.  
  505.   ;
  506.   ;
  507.   ; display the *INFORMATION* window with the mesg "mesg", for 
  508.   ; duration seconds.  If duration =0, display it until a character is typed
  509.   ; if cmd is non-nil, execute the function
  510.   ;
  511. (defun ee-INFO (mesg)
  512.   (save-window-excursion
  513.     (with-output-to-temp-buffer "*INFORMATION*"
  514.       (save-excursion
  515.     (set-buffer "*INFORMATION*")
  516.     (erase-buffer)
  517.     )
  518.       (princ "\n\n")
  519.       (princ mesg))
  520.     (let ((cursor-in-echo-area t))
  521.       (message "Type any character to continue: ")(read-char))
  522.     ))
  523.  
  524.  
  525. ;
  526. ; this command displays "mesg" in a tien INFORMATION window,
  527. ; and prompts for a character which must be a member of choices, using
  528. ; the prompt string "prompt" to prompt for it
  529. ;
  530. (defun ee-choosefrom-list (mesg prompt choices)
  531.   (progn
  532.       (save-window-excursion
  533.     (with-output-to-temp-buffer "*INFORMATION*"
  534.       (save-excursion
  535.         (set-buffer "*INFORMATION*")
  536.         (erase-buffer)
  537.         )
  538.       (princ "\n\n")
  539.       (princ mesg))
  540.     (let ((cursor-in-echo-area t))
  541.       (setq achar '(x))
  542.       (while (not (ee-member achar choices))
  543.         (message prompt)
  544.         (ding)
  545.         (setq achar (downcase (read-char)))))
  546.     )
  547.       achar))
  548.  
  549. (defun ee-member (item list)
  550.   "is item in list?"
  551.   (cond
  552.    ((null list)  nil)
  553.    ((eq item (car list))   list)
  554.    (t        (ee-member item (cdr list)))))
  555.  
  556. (defun ee-status ()
  557.   "status "
  558.   (interactive)
  559.   (progn
  560.     (setq IMSG
  561.       (concat (current-time-string) "
  562.  
  563. You are editing "  buffer-file-name "
  564.  
  565. File editing status: " (cond ((buffer-modified-p (get-buffer "EDIT")) "Modified")
  566.              (t "Not modified")) "
  567.  
  568. (type ESC @ for easy-edit license information)"))
  569.     (ee-INFO IMSG)))
  570.  
  571. (defun ee-get-arg (mesg prompt)
  572.   (let (char)
  573.       (save-window-excursion
  574. (with-output-to-temp-buffer "*INFORMATION*"
  575.   (save-excursion
  576.     (set-buffer "*INFORMATION*")
  577.     (erase-buffer)
  578.     )
  579.   (princ mesg))
  580. (let ((cursor-in-echo-area t))
  581.   (read-string prompt))
  582. )))
  583.  
  584. (defun ee-save-exit ()
  585.   "save file and exit"
  586.   (interactive)
  587.   (progn
  588.     (if (buffer-modified-p (get-buffer "EDIT"))
  589.     (message (concat "Saving " EE_FILE_NAME))
  590.       (message (concat EE_FILE_NAME " not modified")))
  591.     (sleep-for 1)      
  592.     (save-buffer)
  593.     (discard-input)
  594.     (kill-emacs)))
  595.  
  596. (defun ee-save-noexit ()
  597.   "save file but do not exit"
  598.   (interactive)
  599.   (progn
  600.     (if (buffer-modified-p (get-buffer "EDIT"))
  601.     (message (concat "Saving " EE_FILE_NAME))
  602.       (message (concat EE_FILE_NAME " not modified")))
  603.     (sleep-for 1)      
  604.     (save-buffer)))
  605.  
  606. (defun ee-saveto-file ()
  607.   "save file and exit"
  608.   (interactive)
  609.   (let ((default-directory "./"))
  610.     (progn
  611.       (set-buffer "EDIT")
  612.       
  613.       (setq sprompt "Save to what filename: ")
  614.       (setq savename (read-string sprompt))
  615.       (if (> (length savename) 0) 
  616.       (progn
  617.         (if (file-writable-p savename)
  618.         (progn
  619.           (setq SAVEFL
  620.             (if (file-exists-p savename)
  621.                 (yes-or-no-p 
  622.                  (concat savename " exists!  Overwrite it? "))
  623.               t))
  624.           (if SAVEFL
  625.               (progn
  626.             (write-file savename)
  627.             (message 
  628.              (concat savename " saved;  " 
  629.                  EE_FILE_NAME " unchanged"))
  630.             (sleep-for 2)
  631.             (discard-input)
  632.             (kill-emacs))))
  633.           (message (concat "Cannot create/write to " savename))))))))
  634.  
  635.  
  636. (defun ee-grow-EDIT ()
  637.   "Enlarge EDIT window"
  638.   (interactive)
  639.   (cond 
  640.    ((window-point ee-HWIN) 
  641.     (progn
  642.       (enlarge-window 1)
  643.       (if (not (window-point ee-HWIN))
  644.       (setq HELP_HELP "To restore HELP window: ESC H"))
  645.     (ee-message HELP_HELP)))))
  646.  
  647. (defun ee-next-subject ()
  648.   "Move to the next subject in the manual"
  649.   (interactive)
  650.   (if (window-point ee-HWIN)
  651.       (progn
  652.     (select-window ee-HWIN)
  653.     (forward-line)
  654.     (if (not (re-search-forward "^=" nil t))
  655.         (progn
  656.           (beginning-of-buffer)
  657.           (re-search-forward "^=" nil t)))
  658.     (recenter 1)
  659.     (ee-message HELP_HELP)
  660.     (select-window ee-EWIN))))
  661.  
  662. (defun ee-previous-subject ()
  663.   "Move to the next subject in the manual"
  664.   (interactive)
  665.   (if (window-point ee-HWIN)
  666.       (progn
  667.     (select-window ee-HWIN)
  668.     (forward-line -1)
  669.     (if (not (re-search-backward "^=" nil t))
  670.         (progn
  671.           (end-of-buffer)
  672.           (re-search-backward "^=" nil t)))
  673.     (recenter 1)
  674.     (ee-message HELP_HELP)
  675.     (select-window ee-EWIN))))
  676.  
  677. (defun ee-toggle-insert ()
  678.   "toggle insert/overwrite modes"
  679.   (interactive)
  680.   (cond 
  681.    ((= EASYEDIT-INSERT 1) 
  682.     (overwrite-mode 1)
  683.     (setq EASYEDIT-INSERT 0)
  684.     (setq EE_MODE "  *Overwrite*")
  685.     (ee-message HELP_HELP))
  686.    (t   (overwrite-mode 0)
  687. (setq EASYEDIT-INSERT 1)
  688. (setq EE_MODE "  *Insert*")
  689. (ee-message HELP_HELP))))
  690.  
  691. ;
  692. ; elm easy editor setup
  693.  
  694. (defun easyedit-mode ()
  695.   "set easyedit mode"
  696.   (if (eq major-mode 'easyedit-mode)
  697.       (message "already in easyedit-mode" (ding))
  698.     (setq mode-name "easy-edit")
  699.     (setq major-mode "easyedit-mode")
  700.     (use-local-map ee-com-map)
  701.     (put 'switch-to-buffer 'disabled t)
  702.     (put 'switch-to-buffer-other-window 'disabled t)
  703.     (put 'other-window 'disabled t)
  704.     (put 'kill-region 'disabled t)
  705.     (put 'execute-extended-command 'disabled t)
  706.     (setq HELP_HELP "ESC F / ESC B -> HELP forward / backward")
  707.     (setq window-min-height 1)
  708.     (setq fill-column 72)
  709.     (setq EASYEDIT-INSERT 1)
  710.     (setq EE_MODE "  *Insert*")
  711.     (setq search-last-string "")
  712.     (setq make-backup-files nil)
  713.     (setq require-final-newline t)
  714.     (auto-fill-mode 1)
  715.  
  716.     (if (setq EE_RES_CMD (getenv "EE_RESUME_CMD"))
  717.     (setq EE_RESUME_MSG (concat "echo Suspending easy-edit.... to resume type " EE_RES_CMD))
  718.       (setq EE_RESUME_MSG (concat "echo Suspending easy-edit")))
  719.  
  720.     (ee-message HELP_HELP)))
  721.     
  722. (if ee-com-map nil
  723.   (setq ee-com-map (make-keymap))
  724.  
  725.   (define-key ee-com-map "\C-a" 'beginning-of-line)
  726.   (define-key ee-com-map "\C-b" 'backward-char)
  727.   (define-key ee-com-map "\C-c" 'abort-recursive-edit)
  728.   (define-key ee-com-map "\C-d" 'scroll-up)
  729.   (define-key ee-com-map "\C-e" 'end-of-line)
  730.   (define-key ee-com-map "\C-f" 'forward-char)
  731.   (define-key ee-com-map "\C-g" 'forward-word)
  732.   (define-key ee-com-map "\C-h" 'backward-delete-char-untabify)
  733. ; i is the tab
  734.   (define-key ee-com-map "\C-j" 'next-line)
  735.   (define-key ee-com-map "\C-k" 'previous-line)
  736.   (define-key ee-com-map "\C-l" 'ee-not-here)
  737. ; m is carriage return
  738.   (define-key ee-com-map "\C-n" 'next-line)
  739.   (define-key ee-com-map "\C-o" 'backward-word)
  740.   (define-key ee-com-map "\C-p" 'previous-line)
  741.   (define-key ee-com-map "\C-q" 'ee-search-backward)
  742.   (define-key ee-com-map "\C-r" 'redraw-display)
  743.   (define-key ee-com-map "\C-s" 'ee-search-forward)
  744.   (define-key ee-com-map "\C-t" 'ee-status)
  745.   (define-key ee-com-map "\C-u" 'scroll-down)
  746.   (define-key ee-com-map "\C-v" 'next-line)
  747.   (define-key ee-com-map "\C-w" 'kill-word)
  748.   (define-key ee-com-map "\C-x" 'delete-char)
  749.   (define-key ee-com-map "\C-y" 'yank)
  750.   (define-key ee-com-map "\C-z" 'ee-suspend-edit)
  751.  
  752. ; Make Sun and RT arrow keys work (at expense of back-paragraph (esc-[))
  753.   (defconst ee-esc-map (make-sparse-keymap)
  754.     " yea yea")
  755.   (define-key ee-com-map "\e" ee-esc-map)
  756.   (defconst esc-bracket-map (make-sparse-keymap)
  757.          "*Keymap for ESC-[ encoded keyboard")
  758.  
  759.   (defconst esc-O-map (make-sparse-keymap)
  760.          "*Keymap for ESC-O encoded keyboard")
  761.   (define-key ee-esc-map "O" esc-O-map)
  762.  
  763.   (define-key ee-esc-map "[" esc-bracket-map)   ; Install esc-bracket-map
  764.   (define-key ee-esc-map "[A" 'previous-line)   ; R8
  765.   (define-key ee-esc-map "[B" 'next-line)   ; R14
  766.   (define-key ee-esc-map "[C" 'forward-char)   ; R12
  767.   (define-key ee-esc-map "[D" 'backward-char)   ; R10
  768.   (define-key ee-esc-map "OA" 'previous-line)   ; R8
  769.  (define-key ee-esc-map "OB" 'next-line)   ; R14
  770.  (define-key ee-esc-map "OC" 'forward-char)   ; R12
  771.  (define-key ee-esc-map "OD" 'backward-char)
  772.  (define-key ee-esc-map "\e" 'abort-recursive-edit)
  773.  
  774.   (define-key ee-com-map "\eA" 'beginning-of-buffer)
  775.   (define-key ee-com-map "\eb" 'ee-upp-help)
  776.   (define-key ee-com-map "\eB" 'ee-upl-help)
  777.   (define-key ee-com-map "\eC" 'ee-repeat-count)
  778.   (define-key ee-com-map "\eD" 'ee-nofun)
  779.   (define-key ee-com-map "\eE" 'end-of-buffer)
  780.   (define-key ee-com-map "\ef" 'ee-downp-help)
  781.   (define-key ee-com-map "\eF" 'ee-downl-help)
  782.   (define-key ee-com-map "\eG" 'goto-line)
  783.   (define-key ee-com-map "\eH" 'ee-restore-help)  
  784.   (define-key ee-com-map "\eI" 'ee-insert-file)  
  785.   (define-key ee-com-map "\eJ" 'ee-grow-EDIT)
  786.   (define-key ee-com-map "\eK" 'ee-kill-to-eof)
  787.   (define-key ee-com-map "\eL" 'ee-kill-line)  
  788.   (define-key ee-com-map "\eM" 'ee-manual)
  789.   (define-key ee-com-map "\eN" 'ee-toggle-insert)
  790. ; ESC O used for cursor motion map
  791.   (define-key ee-com-map "\eP" 'fill-paragraph)  
  792.   (define-key ee-com-map "\eQ" 'ee-quit)
  793.   (define-key ee-com-map "\eR" 'ee-recover)
  794.   (define-key ee-com-map "\eS" 'ee-save-exit)
  795.   (define-key ee-com-map "\eT" 'ee-saveto-file)
  796.   (define-key ee-com-map "\eU" 'undo)
  797.   (define-key ee-com-map "\eV" 'ee-switch-help)
  798.   (define-key ee-com-map "\eW" 'ee-save-noexit)
  799.   (define-key ee-com-map "\eX" 'kill-line)
  800.   (define-key ee-com-map "\eY" 'ee-search-replace)
  801.   (define-key ee-com-map "\eZ" 'ee-zap-help)
  802.   (define-key ee-com-map "\ea" 'beginning-of-buffer)
  803.   (define-key ee-com-map "\ec" 'ee-repeat-count)
  804.   (define-key ee-com-map "\ed" 'ee-list-dir)
  805.   (define-key ee-com-map "\ee" 'end-of-buffer)
  806.   (define-key ee-com-map "\eg" 'goto-line)
  807.   (define-key ee-com-map "\eh" 'ee-restore-help)  
  808.   (define-key ee-com-map "\ei" 'ee-insert-file)  
  809.   (define-key ee-com-map "\ej" 'ee-grow-EDIT)
  810.   (define-key ee-com-map "\ek" 'ee-kill-to-eof)
  811.   (define-key ee-com-map "\el" 'ee-kill-line)  
  812.   (define-key ee-com-map "\em" 'ee-manual)
  813.   (define-key ee-com-map "\en" 'ee-toggle-insert)
  814. ; ESC O used for cursor motion map
  815.   (define-key ee-com-map "\eo" 'ee-nofun)
  816.   (define-key ee-com-map "\ep" 'fill-paragraph)  
  817.   (define-key ee-com-map "\eq" 'ee-quit)
  818.   (define-key ee-com-map "\er" 'ee-recover)
  819.   (define-key ee-com-map "\es" 'ee-save-exit)
  820.   (define-key ee-com-map "\et" 'ee-saveto-file)
  821.   (define-key ee-com-map "\eu" 'undo)
  822.   (define-key ee-com-map "\ev" 'ee-switch-help)
  823.   (define-key ee-com-map "\ew" 'ee-save-noexit)
  824.   (define-key ee-com-map "\ex" 'kill-line)
  825.   (define-key ee-com-map "\ey" 'ee-search-replace)
  826.   (define-key ee-com-map "\ez" 'ee-zap-help)
  827.  
  828.   (define-key ee-com-map "\e!" 'ee-unix-command)
  829.   (define-key ee-com-map "\e>" 'ee-not-manual)
  830.   (define-key ee-com-map "\e<" 'ee-not-manual)
  831.   (define-key ee-com-map "\e@" 'ee-license)
  832.   (define-key ee-com-map "\e#" 'ee-nofun)
  833.   (define-key ee-com-map "\e$" 'ee-nofun)
  834.   (define-key ee-com-map "\e%" 'ee-nofun)
  835.   (define-key ee-com-map "\e^" 'ee-nofun)
  836.   (define-key ee-com-map "\e&" 'ee-nofun)
  837.   (define-key ee-com-map "\e*" 'ee-nofun)
  838.   (define-key ee-com-map "\e(" 'ee-nofun)
  839.   (define-key ee-com-map "\e)" 'ee-nofun)
  840.   (define-key ee-com-map "\e_" 'ee-nofun)
  841.   (define-key ee-com-map "\e+" 'ee-insert-block)
  842.   (define-key ee-com-map "\e-" 'ee-nofun)
  843.   (define-key ee-com-map "\e=" 'ee-nofun)
  844.   (define-key ee-com-map "\e{" 'ee-nofun)
  845.   (define-key ee-com-map "\e}" 'ee-nofun)
  846.   (define-key ee-com-map "\e]" 'ee-nofun)
  847.   (define-key ee-com-map "\e:" 'ee-nofun)
  848.   (define-key ee-com-map "\e;" 'ee-nofun)
  849.   (define-key ee-com-map "\e\"" 'ee-nofun)
  850.   (define-key ee-com-map "\e~" 'ee-nofun)
  851.   (define-key ee-com-map "\e'" 'ee-nofun)
  852.   (define-key ee-com-map "\e`" 'ee-nofun)
  853.   (define-key ee-com-map "\e\." 'ee-nofun)
  854.   (define-key ee-com-map "\e\," 'ee-nofun)
  855.   (define-key ee-com-map "\e?" 'ee-nofun)
  856.   (define-key ee-com-map "\e/" 'ee-move-block)
  857.   (define-key ee-com-map "\e|" 'ee-nofun)
  858.   (define-key ee-com-map "\e\\" 'ee-nofun)
  859.  
  860. ;
  861. ;  DISABLE (or set) all esc/control sequecnes for minibuffer and regular editing
  862. ;
  863.  
  864.   (define-key ee-com-map "\e\C-a" 'ee-nofun)
  865.   (define-key ee-com-map "\e\C-b" 'ee-nofun)
  866.   (define-key ee-com-map "\e\C-c" 'ee-nofun)
  867.   (define-key ee-com-map "\e\C-d" 'ee-nofun)
  868.   (define-key ee-com-map "\e\C-e" 'ee-nofun)
  869.   (define-key ee-com-map "\e\C-f" 'ee-nofun)
  870.   (define-key ee-com-map "\e\C-g" 'ee-nofun)
  871.   (define-key ee-com-map "\e\C-h" 'ee-nofun)
  872.   (define-key ee-com-map "\e\C-i" 'ee-nofun)
  873.   (define-key ee-com-map "\e\C-j" 'ee-nofun)
  874.   (define-key ee-com-map "\e\C-k" 'ee-nofun)
  875.   (define-key ee-com-map "\e\C-l" 'ee-nofun)
  876.   (define-key ee-com-map "\e\C-m" 'ee-nofun)
  877.   (define-key ee-com-map "\e\C-n" 'ee-nofun)
  878.   (define-key ee-com-map "\e\C-o" 'ee-nofun)
  879.   (define-key ee-com-map "\e\C-p" 'ee-nofun)
  880.   (define-key ee-com-map "\e\C-q" 'ee-nofun)
  881.   (define-key ee-com-map "\e\C-r" 'ee-nofun)
  882.   (define-key ee-com-map "\e\C-s" 'ee-nofun)
  883.   (define-key ee-com-map "\e\C-t" 'ee-nofun)
  884.   (define-key ee-com-map "\e\C-u" 'ee-nofun)
  885.   (define-key ee-com-map "\e\C-v" 'ee-nofun)
  886.   (define-key ee-com-map "\e\C-w" 'ee-nofun)
  887.   (define-key ee-com-map "\e\C-x" 'ee-nofun)
  888.   (define-key ee-com-map "\e\C-y" 'ee-nofun)
  889.   (define-key ee-com-map "\e\C-z" 'ee-nofun)
  890.   (define-key ee-com-map "\e\C-!" 'ee-nofun)
  891.   (define-key ee-com-map "\e\C->" 'ee-nofun)
  892.   (define-key ee-com-map "\e\C-<" 'ee-nofun)
  893.   (define-key ee-com-map "\e\C-@" 'ee-nofun)
  894.   (define-key ee-com-map "\e\C-#" 'ee-nofun)
  895.   (define-key ee-com-map "\e\C-$" 'ee-nofun)
  896.   (define-key ee-com-map "\e\C-%" 'ee-nofun)
  897.   (define-key ee-com-map "\e\C-^" 'ee-nofun)
  898.   (define-key ee-com-map "\e\C-&" 'ee-nofun)
  899.   (define-key ee-com-map "\e\C-*" 'ee-nofun)
  900.   (define-key ee-com-map "\e\C-(" 'ee-nofun)
  901.   (define-key ee-com-map "\e\C-)" 'ee-nofun)
  902.   (define-key ee-com-map "\e\C-_" 'ee-nofun)
  903.   (define-key ee-com-map "\e\C-+" 'ee-nofun)
  904.   (define-key ee-com-map "\e\C--" 'ee-nofun)
  905.   (define-key ee-com-map "\e\C-=" 'ee-nofun)
  906.   (define-key ee-com-map "\e\C-{" 'ee-nofun)
  907.   (define-key ee-com-map "\e\C-}" 'ee-nofun)
  908.   (define-key ee-com-map "\e\C-]" 'ee-nofun)
  909.   (define-key ee-com-map "\e\C-:" 'ee-nofun)
  910.   (define-key ee-com-map "\e\C-;" 'ee-nofun)
  911.   (define-key ee-com-map "\e\C-\"" 'ee-nofun)
  912.   (define-key ee-com-map "\e\C-~" 'ee-nofun)
  913.   (define-key ee-com-map "\e\C-'" 'ee-nofun)
  914.   (define-key ee-com-map "\e\C-`" 'ee-nofun)
  915.   (define-key ee-com-map "\e\C-\." 'ee-nofun)
  916.   (define-key ee-com-map "\e\C-\," 'ee-nofun)
  917.   (define-key ee-com-map "\e\C-?" 'ee-nofun)
  918.   (define-key ee-com-map "\e\C-/" 'ee-nofun)
  919.   (define-key ee-com-map "\e\C-|" 'ee-nofun)
  920.   (define-key ee-com-map "\e\C-\\" 'ee-nofun)
  921.  
  922.   (define-key minibuffer-local-map "\e\C-a" 'ee-nofun)
  923.   (define-key minibuffer-local-map "\e\C-b" 'ee-nofun)
  924.   (define-key minibuffer-local-map "\e\C-c" 'ee-nofun)
  925.   (define-key minibuffer-local-map "\e\C-d" 'ee-nofun)
  926.   (define-key minibuffer-local-map "\e\C-e" 'ee-nofun)
  927.   (define-key minibuffer-local-map "\e\C-f" 'ee-nofun)
  928.   (define-key minibuffer-local-map "\e\C-g" 'ee-nofun)
  929.   (define-key minibuffer-local-map "\e\C-h" 'ee-nofun)
  930.   (define-key minibuffer-local-map "\e\C-i" 'ee-nofun)
  931.   (define-key minibuffer-local-map "\e\C-j" 'ee-nofun)
  932.   (define-key minibuffer-local-map "\e\C-k" 'ee-nofun)
  933.   (define-key minibuffer-local-map "\e\C-l" 'ee-nofun)
  934.   (define-key minibuffer-local-map "\e\C-m" 'ee-nofun)
  935.   (define-key minibuffer-local-map "\e\C-n" 'ee-nofun)
  936.   (define-key minibuffer-local-map "\e\C-o" 'ee-nofun)
  937.   (define-key minibuffer-local-map "\e\C-p" 'ee-nofun)
  938.   (define-key minibuffer-local-map "\e\C-q" 'ee-nofun)
  939.   (define-key minibuffer-local-map "\e\C-r" 'ee-nofun)
  940.   (define-key minibuffer-local-map "\e\C-s" 'ee-nofun)
  941.   (define-key minibuffer-local-map "\e\C-t" 'ee-nofun)
  942.   (define-key minibuffer-local-map "\e\C-u" 'ee-nofun)
  943.   (define-key minibuffer-local-map "\e\C-v" 'ee-nofun)
  944.   (define-key minibuffer-local-map "\e\C-w" 'ee-nofun)
  945.   (define-key minibuffer-local-map "\e\C-x" 'ee-nofun)
  946.   (define-key minibuffer-local-map "\e\C-y" 'ee-nofun)
  947.   (define-key minibuffer-local-map "\e\C-z" 'ee-nofun)
  948.   (define-key minibuffer-local-map "\e\C-!" 'ee-nofun)
  949.   (define-key minibuffer-local-map "\e\C->" 'ee-nofun)
  950.   (define-key minibuffer-local-map "\e\C-<" 'ee-nofun)
  951.   (define-key minibuffer-local-map "\e\C-@" 'ee-nofun)
  952.   (define-key minibuffer-local-map "\e\C-#" 'ee-nofun)
  953.   (define-key minibuffer-local-map "\e\C-$" 'ee-nofun)
  954.   (define-key minibuffer-local-map "\e\C-%" 'ee-nofun)
  955.   (define-key minibuffer-local-map "\e\C-^" 'ee-nofun)
  956.   (define-key minibuffer-local-map "\e\C-&" 'ee-nofun)
  957.   (define-key minibuffer-local-map "\e\C-*" 'ee-nofun)
  958.   (define-key minibuffer-local-map "\e\C-(" 'ee-nofun)
  959.   (define-key minibuffer-local-map "\e\C-)" 'ee-nofun)
  960.   (define-key minibuffer-local-map "\e\C-_" 'ee-nofun)
  961.   (define-key minibuffer-local-map "\e\C-+" 'ee-nofun)
  962.   (define-key minibuffer-local-map "\e\C--" 'ee-nofun)
  963.   (define-key minibuffer-local-map "\e\C-=" 'ee-nofun)
  964.   (define-key minibuffer-local-map "\e\C-{" 'ee-nofun)
  965.   (define-key minibuffer-local-map "\e\C-}" 'ee-nofun)
  966.   (define-key minibuffer-local-map "\e\C-]" 'ee-nofun)
  967.   (define-key minibuffer-local-map "\e\C-:" 'ee-nofun)
  968.   (define-key minibuffer-local-map "\e\C-;" 'ee-nofun)
  969.   (define-key minibuffer-local-map "\e\C-\"" 'ee-nofun)
  970.   (define-key minibuffer-local-map "\e\C-~" 'ee-nofun)
  971.   (define-key minibuffer-local-map "\e\C-'" 'ee-nofun)
  972.   (define-key minibuffer-local-map "\e\C-`" 'ee-nofun)
  973.   (define-key minibuffer-local-map "\e\C-\." 'ee-nofun)
  974.   (define-key minibuffer-local-map "\e\C-\," 'ee-nofun)
  975.   (define-key minibuffer-local-map "\e\C-?" 'ee-nofun)
  976.   (define-key minibuffer-local-map "\e\C-/" 'ee-nofun)
  977.   (define-key minibuffer-local-map "\e\C-|" 'ee-nofun)
  978.   (define-key minibuffer-local-map "\e\C-\\" 'ee-nofun)
  979.  
  980.  
  981. ; various escape sequecnes for arrow keys in minibuffer
  982. ; Make Sun and RT arrow keys work 
  983.   (defconst esc-bracket-map (make-sparse-keymap)
  984.     "*Keymap for ESC-[ encoded keyboard")
  985.   (progn
  986.     (define-key esc-map "[" esc-bracket-map)   ; Install esc-bracket-map
  987.     (define-key esc-map "[A" 'previous-line)   ; R8
  988.     (define-key esc-map "[B" 'next-line)   ; R14
  989.     (define-key esc-map "[C" 'forward-char)   ; R12
  990.     (define-key esc-map "[D" 'backward-char)   ; R10
  991.     (define-key esc-map "[[" 'backward-paragraph))   ; the original esc-[
  992.   
  993.   (defconst esc-O-map (make-sparse-keymap)
  994.     "*Keymap for ESC-[ encoded keyboard")
  995.   (progn
  996.     (define-key esc-map "O" esc-O-map)   ; Install esc-O-map
  997.     (define-key esc-map "OA" 'previous-line)   ; R8
  998.     (define-key esc-map "OB" 'next-line)   ; R14
  999.     (define-key esc-map "OC" 'forward-char)   ; R12
  1000.     (define-key esc-map "OD" 'backward-char))   ; R10
  1001.  
  1002.   (define-key minibuffer-local-map "\C-a" 'beginning-of-line)
  1003.   (define-key minibuffer-local-map "\C-b" 'backward-char)
  1004.   (define-key minibuffer-local-map "\C-c" 'abort-recursive-edit)
  1005.   (define-key minibuffer-local-map "\C-d" 'ee-not-here)
  1006.   (define-key minibuffer-local-map "\C-e" 'end-of-line)
  1007.   (define-key minibuffer-local-map "\C-f" 'forward-char)
  1008.   (define-key minibuffer-local-map "\C-g" 'forward-word)
  1009.   (define-key minibuffer-local-map "\C-h" 'backward-delete-char-untabify)
  1010. ; i is the tab
  1011.   (define-key minibuffer-local-map "\C-j" 'ee-not-here)
  1012.   (define-key minibuffer-local-map "\C-k" 'ee-not-here)
  1013.   (define-key minibuffer-local-map "\C-l" 'ee-not-here)
  1014. ; m is carriage return
  1015.   (define-key minibuffer-local-map "\C-n" 'ee-not-here)
  1016.   (define-key minibuffer-local-map "\C-o" 'backward-word)
  1017.   (define-key minibuffer-local-map "\C-p" 'ee-not-here)
  1018.   (define-key minibuffer-local-map "\C-q" 'ee-not-here)
  1019.   (define-key minibuffer-local-map "\C-r" 'redraw-display)
  1020.   (define-key minibuffer-local-map "\C-s" 'ee-not-here)
  1021.   (define-key minibuffer-local-map "\C-t" 'ee-not-here)
  1022.   (define-key minibuffer-local-map "\C-u" 'ee-not-here)
  1023.   (define-key minibuffer-local-map "\C-v" 'ee-not-here)
  1024.   (define-key minibuffer-local-map "\C-w" 'kill-word)
  1025.   (define-key minibuffer-local-map "\C-x" 'delete-char)
  1026.   (define-key minibuffer-local-map "\C-y" 'yank)
  1027.   (define-key minibuffer-local-map "\C-z" 'ee-suspend-edit)
  1028.   (define-key minibuffer-local-map "\eA" 'ee-not-here)
  1029.   (define-key minibuffer-local-map "\eB" 'ee-not-here)
  1030.   (define-key minibuffer-local-map "\eC" 'ee-not-here)
  1031.   (define-key minibuffer-local-map "\eD" 'ee-list-dir)
  1032.   (define-key minibuffer-local-map "\eE" 'ee-not-here)
  1033.   (define-key minibuffer-local-map "\eF" 'ee-not-here)
  1034.   (define-key minibuffer-local-map "\eG" 'ee-not-here)
  1035.   (define-key minibuffer-local-map "\eH" 'ee-not-here)
  1036.   (define-key minibuffer-local-map "\eI" 'ee-not-here)
  1037.   (define-key minibuffer-local-map "\eJ" 'ee-not-here)
  1038.   (define-key minibuffer-local-map "\eK" 'ee-not-here)
  1039.   (define-key minibuffer-local-map "\eL" 'ee-kill-line)  
  1040.   (define-key minibuffer-local-map "\eM" 'ee-not-here)
  1041.   (define-key minibuffer-local-map "\eN" 'ee-toggle-insert)
  1042.   (define-key minibuffer-local-map "\eP" 'ee-not-here)
  1043.   (define-key minibuffer-local-map "\eQ" 'ee-not-here)
  1044.   (define-key minibuffer-local-map "\eR" 'ee-not-here)
  1045.   (define-key minibuffer-local-map "\eS" 'ee-not-here)
  1046.   (define-key minibuffer-local-map "\eT" 'ee-not-here)
  1047.   (define-key minibuffer-local-map "\eU" 'undo)
  1048.   (define-key minibuffer-local-map "\eV" 'ee-not-here)
  1049.   (define-key minibuffer-local-map "\eW" 'ee-not-here)
  1050.   (define-key minibuffer-local-map "\eX" 'kill-line)
  1051.   (define-key minibuffer-local-map "\eY" 'ee-not-here)
  1052.   (define-key minibuffer-local-map "\eZ" 'ee-not-here)
  1053.   (define-key minibuffer-local-map "\ea" 'ee-not-here)
  1054.   (define-key minibuffer-local-map "\eb" 'ee-not-here)
  1055.   (define-key minibuffer-local-map "\ec" 'ee-not-here)
  1056.   (define-key minibuffer-local-map "\ed" 'ee-not-here)
  1057.   (define-key minibuffer-local-map "\ee" 'ee-not-here)
  1058.   (define-key minibuffer-local-map "\ef" 'ee-not-here)
  1059.   (define-key minibuffer-local-map "\eg" 'ee-not-here)
  1060.   (define-key minibuffer-local-map "\eh" 'ee-not-here)
  1061.   (define-key minibuffer-local-map "\ei" 'ee-not-here)
  1062.   (define-key minibuffer-local-map "\ej" 'ee-not-here)
  1063.   (define-key minibuffer-local-map "\ek" 'ee-not-here)
  1064.   (define-key minibuffer-local-map "\el" 'ee-kill-line)  
  1065.   (define-key minibuffer-local-map "\em" 'ee-not-here)
  1066.   (define-key minibuffer-local-map "\en" 'ee-toggle-insert)
  1067.   (define-key minibuffer-local-map "\ep" 'ee-not-here)
  1068.   (define-key minibuffer-local-map "\eq" 'ee-not-here)
  1069.   (define-key minibuffer-local-map "\er" 'ee-not-here)
  1070.   (define-key minibuffer-local-map "\es" 'ee-not-here)
  1071.   (define-key minibuffer-local-map "\et" 'ee-not-here)
  1072.   (define-key minibuffer-local-map "\eu" 'undo)
  1073.   (define-key minibuffer-local-map "\ev" 'ee-not-here)
  1074.   (define-key minibuffer-local-map "\ew" 'ee-not-here)
  1075.   (define-key minibuffer-local-map "\ex" 'kill-line)
  1076.   (define-key minibuffer-local-map "\ey" 'ee-not-here)
  1077.   (define-key minibuffer-local-map "\ez" 'ee-not-here)
  1078.   
  1079.   (define-key minibuffer-local-map "\e!" 'ee-nofun)
  1080.   (define-key minibuffer-local-map "\e@" 'ee-nofun)
  1081.   (define-key minibuffer-local-map "\e#" 'ee-nofun)
  1082.   (define-key minibuffer-local-map "\e$" 'ee-nofun)
  1083.   (define-key minibuffer-local-map "\e%" 'ee-nofun)
  1084.   (define-key minibuffer-local-map "\e^" 'ee-nofun)
  1085.   (define-key minibuffer-local-map "\e&" 'ee-nofun)
  1086.   (define-key minibuffer-local-map "\e*" 'ee-nofun)
  1087.   (define-key minibuffer-local-map "\e(" 'ee-nofun)
  1088.   (define-key minibuffer-local-map "\e)" 'ee-nofun)
  1089.   (define-key minibuffer-local-map "\e_" 'ee-nofun)
  1090.   (define-key minibuffer-local-map "\e+" 'ee-nofun)
  1091.   (define-key minibuffer-local-map "\e-" 'ee-nofun)
  1092.   (define-key minibuffer-local-map "\e=" 'ee-nofun)
  1093.   (define-key minibuffer-local-map "\e{" 'ee-nofun)
  1094.   (define-key minibuffer-local-map "\e}" 'ee-nofun)
  1095.   (define-key minibuffer-local-map "\e]" 'ee-nofun)
  1096.   (define-key minibuffer-local-map "\e:" 'ee-nofun)
  1097.   (define-key minibuffer-local-map "\e;" 'ee-nofun)
  1098.   (define-key minibuffer-local-map "\e\"" 'ee-nofun)
  1099.   (define-key minibuffer-local-map "\e~" 'ee-nofun)
  1100.   (define-key minibuffer-local-map "\e'" 'ee-nofun)
  1101.   (define-key minibuffer-local-map "\e`" 'ee-nofun)
  1102.   (define-key minibuffer-local-map "\e\." 'ee-nofun)
  1103.   (define-key minibuffer-local-map "\e\," 'ee-nofun)
  1104.   (define-key minibuffer-local-map "\e?" 'ee-nofun)
  1105.   (define-key minibuffer-local-map "\e/" 'ee-nofun)
  1106.   (define-key minibuffer-local-map "\e|" 'ee-nofun)
  1107.   (define-key minibuffer-local-map "\e\\" 'ee-nofun)
  1108. )
  1109.  
  1110.  
  1111.  
  1112. (defun ee-list-dir ()
  1113.   "List a directory in another window"
  1114.   (interactive)
  1115.   (let ((default-directory "./"))
  1116.     (setq gamsg "\n\n\nType a filename, a directory name, or a wildcard 
  1117. (e.g. t*   lists all files starting with t)
  1118. to list particular files or an entire directory.\n
  1119. Type a carriage return alone to list the current working directory")
  1120. (setq ldir (ee-get-arg gamsg "Dir or file(s) to list: ")) 
  1121. (save-window-excursion
  1122.   (if (eq 0 (length ldir))
  1123.       (setq ldir "."))
  1124.   
  1125.   (setq lcomm (concat "ls -l " ldir))
  1126.   (setq command (concat "(set noglob; /bin/echo command executed: " lcomm ");" lcomm))
  1127.   (with-output-to-temp-buffer "*Directory*"
  1128.     (buffer-flush-undo standard-output)
  1129.     (message "Working...")
  1130.     (call-process "csh" nil standard-output nil "-c" command))
  1131.   (let ((cursor-in-echo-area t))
  1132.     (setq char ?b)
  1133.     (while (not (eq char ?r))
  1134.       (progn 
  1135.     (message "(f)orward  (b)ackwards  (r)esume editing: ")
  1136.     (setq char (downcase (read-char)))
  1137.     (other-window 1)
  1138.     (cond ((eq char ?f) 
  1139.            (if (not (pos-visible-in-window-p (point-max))) 
  1140.            (scroll-up)(ding)(message "At bottom")(sleep-for 2)))
  1141.           ((eq char ?b) 
  1142.            (if (not (pos-visible-in-window-p (point-min))) 
  1143.            (scroll-down)(ding)(message "At top")(sleep-for 2)))
  1144.           ((eq char ?r) nil)
  1145.           (t   (message "Type f, b, or r please: ")
  1146.            (sleep-for 2)
  1147.            t))
  1148.     (other-window 1))) )))
  1149. )
  1150.  
  1151. (defun ee-license ()
  1152.   "License info"
  1153.   (interactive)
  1154. (save-window-excursion
  1155.  
  1156.   (with-output-to-temp-buffer "*LICENSE*"
  1157.  
  1158.     (buffer-flush-undo standard-output)
  1159.     (princ " Easy-edit novice screen editor for Unix systems with GNU emacs\n")
  1160.     (princ "
  1161.      Easy-edit " ) (princ ee-VERSION)
  1162.     (princ "
  1163.  
  1164.      Copyright (C) 1992     Larry Broda
  1165.                             Department of Psychology
  1166.                             University of Illinois at Urbana-Champaign
  1167.  
  1168.     This program is distributed in the hope that it will be useful, 
  1169.     but WITHOUT ANY WARRANTY; without even the implied warranty of 
  1170.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This program  
  1171.     is an extension of GNU emacs; See the GNU General Public License  
  1172.     for more details. 
  1173.  
  1174.     This program is free software; you can redistribute it and/or modify
  1175.     it under the same terms as the GNU General Public License as published by
  1176.     the Free Software Foundation; either version 1, or (at your option)
  1177.     any later version.
  1178.  
  1179.  
  1180.        By Larry Broda  
  1181.        Department of Psychology
  1182.        University of Illinois at Urbana-Champaign
  1183.        Email: lbroda@s.psych.uiuc.edu
  1184.        4/13/92 
  1185.  
  1186.     for GNU emacs information contact:
  1187.     Free Software Foundation
  1188.     675 Massachusetts Avenu
  1189.     Cambridge, MA 02139
  1190.     USA
  1191. "))
  1192.   (let ((cursor-in-echo-area t))
  1193.     (setq char ?b)
  1194.     (while (not (eq char ?r))
  1195.       (progn 
  1196.     (message "(f)orward  (b)ackwards  (r)esume editing: ")
  1197.     (setq char (downcase (read-char)))
  1198.     (other-window 1)
  1199.     (cond ((eq char ?f) 
  1200.            (if (not (pos-visible-in-window-p (point-max))) 
  1201.            (scroll-up)(ding)(message "At bottom")(sleep-for 2)))
  1202.           ((eq char ?b) 
  1203.            (if (not (pos-visible-in-window-p (point-min))) 
  1204.            (scroll-down)(ding)(message "At top")(sleep-for 2)))
  1205.           ((eq char ?r) nil)
  1206.           (t   (message "Type f, b, or r please: ")
  1207.            (sleep-for 2)
  1208.            t))
  1209.     (other-window 1)))))
  1210. )
  1211.  
  1212. (defun ee-repeat-count ()
  1213.   "Begin a numeric argument for the following command.
  1214. Digits or minus sign following this command make up the numeric argument.
  1215. If no digits or minus sign follow, this command by itself provides 4 as argument.
  1216. Used more than once, this command multiplies the argument by 4 each time."
  1217.   (interactive nil)
  1218.   (message "Enter count followed by key or command to repeat: ")
  1219.   (let ((c-u 4) (argstartchar last-command-char)
  1220.     char)
  1221.     (setq char (read-char))
  1222.     (while (= char argstartchar)
  1223.       (setq c-u (* 4 c-u))
  1224.       (setq char (read-char)))
  1225.     (prefix-arg-internal char c-u nil)))
  1226.  
  1227. (defun ee-not-manual ()
  1228.   "Error for using manual commands outside manual"
  1229.   (interactive)
  1230.   (message "This command only valid if manual is displayed")
  1231.   (ding)
  1232.   (sleep-for 3)
  1233.   (ee-message HELP_HELP))
  1234.  
  1235. (defun ee-unix-command ()
  1236.   "execute a Unix command"
  1237.   (interactive)
  1238.   (setq gamsg "Type a unix command.  The output will be displayed in
  1239. a special window, where you may:
  1240. 1: Scroll the output listing forward and backward (f/b).
  1241. 2: Insert the command output listing into your edit file at the current 
  1242.    cursor location (i).
  1243. NOTE:  The command can *NOT* be a command that requires further input by you;
  1244. Use ^Z to escape to a Unix prompt to perform interactive commands.
  1245. EXAMPLES of valid commands: date; cat <filename>; who, etc.
  1246. EXAMPLES of *INVALID* commands: Elm; easyedit; Mail, etc.
  1247. ...or anything that requires additional input from you..")
  1248.   (let ((default-directory "./"))
  1249.     (setq command (ee-get-arg gamsg "Unix Command: ")) 
  1250.     (save-window-excursion
  1251.       (with-output-to-temp-buffer "*Unix*"
  1252.     (buffer-flush-undo standard-output)
  1253.     (message (concat "executing " (concat command "...")))
  1254.     (call-process "csh" nil standard-output nil "-c" command))
  1255.       (let ((cursor-in-echo-area t))
  1256.     (setq char ?b)
  1257.     (while (not (eq char ?r))
  1258.       (progn 
  1259.         (message "(f)orward  (b)ackwards  (i)nsert output into file  (r)esume editing: ")
  1260.         (setq char (downcase (read-char)))
  1261.         (other-window 1)
  1262.         (cond ((eq char ?f) 
  1263.            (if (not (pos-visible-in-window-p (point-max))) 
  1264.                (scroll-up)(ding)(message "At bottom")(sleep-for 2)))
  1265.           ((eq char ?b) 
  1266.            (if (not (pos-visible-in-window-p (point-min))) 
  1267.                (scroll-down)(ding)(message "At top")(sleep-for 2)))
  1268.           ((eq char ?r) nil)
  1269.           ((eq char ?i) (progn (copy-to-register ?v (point-min)(point-max) nil)
  1270.                        (other-window 1)
  1271.                        (insert-register ?v)
  1272.                        (other-window 1)))
  1273.           
  1274.           (t   (message "Type f, b, i, or r please: ")
  1275.                (sleep-for 2)
  1276.                t))
  1277.         (other-window 1))))))
  1278.   )
  1279.  
  1280.  
  1281. ;
  1282. ;
  1283. ;  create the separate windows
  1284. ;
  1285.  
  1286. (progn
  1287.   (setq EE_FILE_NAME (file-name-nondirectory buffer-file-name))
  1288.   (ee-check-recovery-file EE_FILE_NAME)
  1289.   (rename-buffer "EDIT")
  1290.   (setq ee-EWIN (selected-window))
  1291.   (setq ee-BLOCK-MARK 0)
  1292.   (setq ee-BLOCK-SAVED nil)
  1293.   (ee-create-help)
  1294.   (easyedit-mode)
  1295.   (if (getenv "EE_HELP_OFF")
  1296.         (progn (ee-zap-help) ))
  1297. )
  1298.