home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / me34src.zip / me3 / mutt / builtin / alamode.mut next >
Lisp/Scheme  |  1995-01-14  |  4KB  |  147 lines

  1.   ;; alamode.mut - set buffer modes.
  2.   ;; This stuff is called when a buffer is created or file read in.
  3.   ;; C Durland  Public Domain
  4.  
  5. ;; Routines:
  6. ;;   (default-major-mode mode-name)
  7. ;;     Default is none.  Call change to whatever you like.
  8. ;;   (none-mode)
  9. ;;     A do nothing mode
  10. ;;   (auto-mode-list (bool append)(string mode-re mode-name ...)
  11. ;;     Append or Prepend to the list of modes.
  12.  
  13. (include me.mh)
  14.  
  15. (defun MAIN
  16. {
  17.   (register-hook IBUFFER-CREATED-HOOK    "set-buffer-mode")
  18.   (register-hook IREAD-FILE-HOOK    "context-mode")
  19.  
  20.   (default-major-mode "none")
  21.   (auto-mode-list TRUE
  22.     '.*\.c$'    "c"
  23.     '.*\.h$'    "c"
  24.     '.*\.mut$'    "mutt"
  25.     '.*\.mh$'    "mutt"
  26.     '.*\.doc$'    "text"
  27.     '.*\.txt$'    "text"
  28.   )
  29. })
  30.  
  31.     ;; Set a mode for a buffer based on the buffer name.
  32.     ;; Notes:
  33.     ;;   Call this from interactive-buffer-created-hook.  That way
  34.     ;;     switch-to-buffer can have modes.
  35.     ;;   I use buffer name because the file name doesn't exist when the
  36.     ;;     buffer is created.
  37.     ;;   It might be a better idea to just wait til a file is read, look
  38.     ;;     for a context mode and if none, use the file name to set a mode.
  39.     ;;   Remember to remove "<n>" from the end of the buffer name.
  40. (defun set-buffer-mode
  41. {
  42.   (set-mode 
  43.     (if (re-string '\(.+\)<[0-9]+>$' (buffer-name -1))
  44.       (get-matched '\1')
  45.       (buffer-name -1)))
  46. })
  47.  
  48.     ;; Set the buffer mode.
  49.     ;; If the environment variable "MEMODE" is set (eg to "mail"), append
  50.     ;;   "-mode" to it and set that mode.  This is very handy where I want
  51.     ;;   be in mail mode when ME runs (eg when answering my mail).
  52.     ;; Otherwise, look at the name and try to figure out a mode from that.
  53. (defun set-mode (string filename) HIDDEN
  54. {
  55.   (if (!= "" (getenv "MEMODE"))
  56.   { 
  57.     (run-mode (getenv "MEMODE"))
  58.     (done)
  59.   })
  60.   (look-up-mode-in-list filename)
  61. })
  62.  
  63.     ;; look for string that sets mode.  May override (set-mode)
  64.     ;; "-*-text-*-" => (text-mode)
  65.     ;; Notes:
  66.     ;;   Look at GNU Emacs Manual pg 108 for more to do.
  67.     ;;   A problem with this is when you edit a X11 resource database
  68.     ;;     (xrdb) file.  If the first line is something like
  69.     ;;     *Font:    -*-prestige-medium-r-normal-*-120-*
  70.     ;;     this will try to run prestige-medium-r-normal-mode.  Not likely.
  71.     ;;     GnuEmacs also has this problem.  run-mode has a check for this
  72.     ;;     case.
  73. (defun context-mode
  74. {
  75.   (if (looking-at '.*-\*-\(.+\)-\*-')
  76.     (run-mode (get-matched '\1')))
  77. })
  78.  
  79.  
  80.  
  81. (list mode-list)    ;; (mode-RE mode-name) pairs
  82. (string the-default-major-mode)
  83.  
  84.  
  85.  
  86. (defun
  87.   none-mode { (clear-modes) }        ;; a do-nothing mode
  88.   default-major-mode (string mode-name)
  89.     { (the-default-major-mode mode-name) }
  90.   auto-mode-list (bool append) ;; (string mode-re mode-name ...)
  91.   {
  92.     (int n z)
  93.  
  94.     (z (if append 10000 -1))
  95.     (n 1)
  96.     (while (< n (nargs))
  97.       {
  98.     (insert-object mode-list z       (arg n))
  99.     (insert-object mode-list (+ 1 z) (arg (+ 1 n)))
  100.     (+= n 2)
  101.       })
  102.   }
  103. )
  104.  
  105. (defun
  106.   run-mode (string mode) HIDDEN
  107.   {
  108.     (if (pgm-exists (concat mode "-mode"))
  109.       (floc (concat mode "-mode")())
  110.       (msg "Unknown mode: " mode))
  111.   }
  112.   look-up-mode-in-list (string name) HIDDEN
  113.   {
  114.     (int len n)
  115.  
  116.     (len (length-of mode-list))
  117.     (n 0)
  118.     (while (< n len)
  119.       {
  120.     (if (re-string (extract-element mode-list n) name)
  121.       {
  122.         (run-mode (extract-element mode-list (+ 1 n)))
  123.         (done)
  124.       })
  125.     (+= n 2)
  126.       })
  127.     (run-mode the-default-major-mode)
  128.   }
  129. )
  130.  
  131. ;(defun
  132. ;  dump-list
  133. ;  {
  134. ;    (int n z)
  135. ;
  136. ;    (n (length-of mode-list))
  137. ;    (z 0)
  138. ;    (while (< z n)
  139. ;      {
  140. ;    (msg (extract-element mode-list z) "   "
  141. ;         (extract-element mode-list (+ 1 z)))
  142. ;    (get-key)
  143. ;    (+= z 2)
  144. ;      })
  145. ;      (msg "done " n)
  146. ;  })
  147.