home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / memacs32.zip / mdi.cmd < prev    next >
OS/2 REXX Batch file  |  1993-08-07  |  4KB  |  127 lines

  1. ; Screen juggling macros for MicroEMACS 3.12 for Windows
  2. ;
  3. ; Pierre Perret - April 1993
  4.  
  5. rename-screen $cbufname
  6. restore-screen
  7. set %scrwidth 75
  8. ; set %scrwidth 80  ; 80 is more appropriate above 640x480
  9. %scrwidth  change-screen-width
  10.  
  11. set %filename ""
  12. set %dropbuf "Dropped files"    ; special buffer used for drag'n drop
  13.  
  14. store-procedure open-file
  15. ; Reads files in separate screens, thus allowing efficient use of
  16. ; the MDI feature
  17.     set %prevscr $scrname
  18.     set %prevbuf $cbufname
  19.     find-screen "Relay screen"
  20.     select-buffer %prevbuf  ; to make sure we have the right working dir
  21.     delete-other-windows
  22.     !if &seq %filename ""
  23.         !force execute-named-command find-file
  24.     !else
  25.         !force find-file %filename &lower %filename
  26.         ; the second argument is there to supply an alternate buffer name
  27.     !endif
  28.     !if $status
  29. *FileFound
  30.         set %tmp $cbufname
  31.         set $scrname %tmp   ; switches screens only if named one exists
  32.         !if &seq $scrname %tmp
  33.             ; that screen already exists (we are now in it)
  34.             set $curwind 1
  35.             !while ¬ &seq $cbufname %tmp
  36.                 !if &equ $numwind $curwind
  37.                     ; we cannot find the desired buffer in any window!
  38.                     set $scrname "Relay screen"
  39.                     set %tmp &cat %tmp "."
  40.                     !force rename-screen %tmp
  41.                     !while ¬ $status
  42.                         set %tmp &cat %tmp "."
  43.                         !force rename-screen %tmp
  44.                     !endwhile
  45.                     clear-message-line
  46.                     !return
  47.                 !endif
  48.                 next-window
  49.             !endwhile
  50.             ; we found the right window within the existing screen
  51.             !force delete-screen "Relay screen"
  52.         !else
  53.             ; that screen does not exist yet
  54.             rename-screen $cbufname
  55.             %scrwidth change-screen-width
  56.         !endif
  57.     !else
  58.         ; find-file failed
  59.         !if &seq $cbufname %prevbuf
  60.             ; buf name did not change ==> file-find was canceled
  61.             find-screen %prevscr
  62.             !force delete-screen "Relay screen"
  63.         !else
  64.             ; buf name changed ==> it is a new file
  65.             !goto FileFound
  66.         !endif
  67.     !endif
  68.     set %filename ""
  69. !endm
  70. macro-to-key    open-file   ^X^F
  71. unbind-menu     ">&File>&Open..."
  72. macro-to-menu   open-file   "&Open...@0"
  73.  
  74. store-procedure rebuild-screens
  75. ; makes sure there is one screen per visible buffer
  76. ; does not affect screens whose name do not match an existing buffer
  77.     find-screen "Relay screen"
  78.     select-buffer "Relay screen"
  79.     delete-other-windows
  80.     minimize-screen
  81.     !goto BufLoop
  82.     !while ¬ &seq $cbufname "Relay screen"
  83. *BufLoop
  84.         find-screen "Relay screen"
  85.         next-buffer
  86.         !if ¬ &sin "Relay screenBinding listFunction listVariable list" $cbufname
  87.             find-screen $cbufname
  88.             select-buffer $scrname
  89.             delete-other-windows
  90.             restore-screen
  91.         !endif
  92.     !endwhile
  93.     cascade-screens
  94.     !if &seq $scrname "Relay screen"
  95.         cycle-screens
  96.     !endif
  97.     !force delete-screen "Relay screen"
  98. !endm
  99. macro-to-menu   rebuild-screens ">S&creen>&Rebuild@0"
  100.  
  101. store-procedure kill-screen
  102.     set %prevscr $scrname
  103.     set %prevbuf $cbufname
  104.     cycle-screens
  105.     !force delete-screen %prevscr
  106.     !if $status
  107.         !force delete-buffer %prevbuf
  108.     !endif
  109. !endm
  110. macro-to-key    kill-screen A-K
  111. macro-to-menu   kill-screen     ">S&creen>&Kill@6"
  112.  
  113. store-procedure drop-files
  114.     ; note that we pay no attention to the location of the drop
  115.     set %prevbuf $cbufname
  116.     select-buffer %dropbuf
  117.     goto-line 2
  118.     select-buffer %prevbuf
  119.     set %filename #%dropbuf
  120.     !while ¬ &seq %filename "<END>"
  121.         run open-file
  122.         set %filename #%dropbuf
  123.     !endwhile
  124.     set %filename ""
  125. !endm
  126. macro-to-key    drop-files  MS!
  127.