home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
CMDS
/
memacs400_cmds.lzh
/
MEMACS400
/
CMD
/
cua.cmd
< prev
next >
Wrap
OS/2 REXX Batch file
|
1996-04-25
|
10KB
|
392 lines
; CUA-feel macros for MicroEMACS 4.0
;
; Pierre Perret - April 1993
; Uses mark 12 as CUA anchor and mark14 as a temporary (for mark swapping).
; Uses mark 13 as the other end of the CUA selection (usually shadows the point).
; Uses the Clipboard for CUA copy/cut/paste in MS-Windows version,
; uses the kill buffer for same in other implementations.
; NOTE:
; - some key sequences are not supported by MicroEMACS-DOS:
; Shift+Arrow, Ctrl+Ins/Del and Shift+Ins/Del/Home/End/PageUp/PageDown.
; - Shift+Ctrl+Arrow/Home/End not supported by MicroEMACS-DOS
store-procedure CUA-cmdhook
; NOTE: unfortunately, %keepanchor is always set to FALSE for
; M- and ^X prefixed keystrokes, regardless of the binding
set %discmd $discmd
set $discmd FALSE
!if %keepanchor
set %keepanchor FALSE
!else
; previous command was not an anchor-preserving one
!force 12 remove-mark
set $hilight 255
!endif
set $discmd %discmd
!endm
set $cmdhook CUA-cmdhook
store-procedure CUA-load
; Loads the anchor (mark12) into the mark0, saving
; the previous mark0 into mark14.
; Loads the selection end (mark13) into the point
; (not saving the previous point is intentionnal, to avoid
; user confusion when the selection has moved out of the
; window, due to abuse of the scroll bars)
; The flag %anchor is set if there is a non-empty selection
; Used by most deletion/copying actions
set %discmd $discmd
set $discmd FALSE
!force 0 exchange-point-and-mark
!if $status
14 set-mark
0 exchange-point-and-mark
!else
!force 14 remove-mark
!endif
!force 12 exchange-point-and-mark
!if $status
0 set-mark
12 exchange-point-and-mark
!if &seq $region ""
set %anchor FALSE
!else
set %anchor TRUE
13 goto-mark
!endif
!else
!force 0 remove-mark
set %anchor FALSE
!endif
set $discmd %discmd
!endm
store-procedure CUA-restore
; restores mark0 from mark14 after a CUA-load call
set %discmd $discmd
set $discmd FALSE
!force 14 exchange-point-and-mark
!if $status
0 set-mark
14 exchange-point-and-mark
!else
!force 0 remove-mark
!endif
set $discmd %discmd
!endm
store-procedure CUA-Del
run CUA-load
!if %anchor
kill-region
!else
!force 1 delete-next-character
!endif
run CUA-restore
!endm
macro-to-key CUA-Del FND
store-procedure CUA-C-Ins
run CUA-load
!if %anchor
set %keepanchor TRUE
!if &seq $os MSWIN
clip-region
!else
copy-region
!endif
!endif
run CUA-restore
!endm
macro-to-key CUA-C-Ins FN^C
!if &seq $os MSWIN
unbind-menu ">&Edit>&Clipboard>&Copy region"
macro-to-menu CUA-C-Ins "&Copy@1"
!endif
store-procedure CUA-S-Del
run CUA-load
!if %anchor
!if &seq $os MSWIN
cut-region
!else
kill-region
!endif
!endif
run CUA-restore
!endm
macro-to-key CUA-S-Del S-FND
!if &seq $os MSWIN
unbind-menu ">&Edit>&Clipboard>Cu&t region"
macro-to-menu CUA-S-Del "Cu&t@0"
!else
bind-to-key yank S-FNC ; Shift+Ins
!endif
store-procedure CUA-case-upper
run CUA-load
!if %anchor
set %keepanchor TRUE
case-region-upper
!endif
run CUA-restore
!endm
macro-to-key CUA-case-upper A-U ; Alt+U
!if &seq $os MSWIN
macro-to-menu CUA-case-upper ">&Edit>&Selection@4>&Upper case"
!endif
store-procedure CUA-case-lower
run CUA-load
!if %anchor
set %keepanchor TRUE
case-region-lower
!endif
run CUA-restore
!endm
macro-to-key CUA-case-lower A-L ; Alt+L
!if &seq $os MSWIN
macro-to-menu CUA-case-lower "&Lower case"
!endif
store-procedure CUA-count-words
; this procedure is not really necessary but it demonstrates
; how to add CUA-based functionality
run CUA-load
!if %anchor
set %keepanchor TRUE
count-words
!endif
run CUA-restore
!endm
macro-to-key CUA-count-words A-W ; Alt+W
!if &seq $os MSWIN
macro-to-menu CUA-count-words "Count &words"
!endif
store-procedure CUA-flip-selection
; a sort of exchange-point-and-anchor, could be used to
; visualize the selection by going back and forth to its
; boundaries
set %discmd $discmd
set $discmd FALSE
!force 13 goto-mark
!force 12 exchange-point-and-mark
!if $status
13 set-mark
set %keepanchor TRUE
!endif
set $discmd %discmd
!endm
macro-to-key CUA-flip-selection A-=
!if &seq $os MSWIN
bind-to-menu nop "-"
macro-to-menu CUA-flip-selection "&Flip"
!endif
store-procedure CUA-select-region
; makes the anchor equal to the mark
; (useful to build very large selections)
set %discmd $discmd
set $discmd FALSE
13 set-mark
!force 0 exchange-point-and-mark
!if $status
12 set-mark
0 exchange-point-and-mark
set $hilight 12
set %keepanchor TRUE
!else
12 remove-mark
set $hilight 255
!endif
update-screen
set $discmd %discmd
!endm
macro-to-key CUA-select-region A-^M ; Alt+Enter
!if &seq $os MSWIN
macro-to-menu CUA-select-region "Select ®ion"
!endif
store-procedure CUA-anchor
; makes sure we have a CUA anchor point (i.e. a mark12)
; used internally by extended selection keys before command processing
set %discmd $discmd
set $discmd FALSE
!force 12 exchange-point-and-mark
!if $status
12 exchange-point-and-mark
!else
12 set-mark
13 set-mark
!endif
set $discmd %discmd
!endm
store-procedure CUA-select
; sets hilighting of the selection
; used internally by extended selection keys after command processing
; always sets %keepanchor to TRUE and makes sure mark13 shadows the point
set %discmd $discmd
set $discmd FALSE
set %keepanchor TRUE
13 set-mark
set $hilight 12
update-screen
set $discmd %discmd
!endm
store-procedure CUA-S-home
run CUA-anchor
beginning-of-line
run CUA-select
!endm
macro-to-key CUA-S-home S-FN<
store-procedure CUA-S-end
run CUA-anchor
end-of-line
run CUA-select
!endm
macro-to-key CUA-S-end S-FN>
store-procedure CUA-SC-home
run CUA-anchor
beginning-of-file
run CUA-select
!endm
macro-to-key CUA-SC-home S-FN^<
store-procedure CUA-SC-end
run CUA-anchor
end-of-file
run CUA-select
!endm
macro-to-key CUA-SC-end S-FN^>
store-procedure CUA-S-pageup
run CUA-anchor
previous-page
run CUA-select
!endm
macro-to-key CUA-S-pageup S-FNZ
store-procedure CUA-S-pagedown
run CUA-anchor
next-page
run CUA-select
!endm
macro-to-key CUA-S-pagedown S-FNV
store-procedure CUA-S-up
run CUA-anchor
!force previous-line
run CUA-select
!endm
macro-to-key CUA-S-up S-FNP
store-procedure CUA-S-down
run CUA-anchor
!force next-line
run CUA-select
!endm
macro-to-key CUA-S-down S-FNN
store-procedure CUA-S-left
run CUA-anchor
!force backward-character
run CUA-select
!endm
macro-to-key CUA-S-left S-FNB
store-procedure CUA-S-right
run CUA-anchor
!force forward-character
run CUA-select
!endm
macro-to-key CUA-S-right S-FNF
store-procedure CUA-SC-left
run CUA-anchor
!force previous-word
run CUA-select
!endm
macro-to-key CUA-SC-left S-FN^B
store-procedure CUA-SC-right
run CUA-anchor
!force next-word
run CUA-select
!endm
macro-to-key CUA-SC-right S-FN^F
bind-to-key beginning-of-file FN^<
bind-to-key end-of-file FN^>
bind-to-key beginning-of-line FN<
bind-to-key end-of-line FN>
; Transfer the standard MicroEMACS left mouse button commands onto the
; right button (text scrolling, window resizing, screen move/resize...)
; and the old right button commands to Shift + right button
!force unbind-key MS1 ; should have been MS^a anyway!
bind-to-key mouse-move-down MSe ; right_button_down
bind-to-key mouse-move-up MSf ; right_button_up
bind-to-key mouse-resize-screen MS^e ; Ctrl + right_button_down
bind-to-key mouse-region-down S-MSe ; Shift + right_button_down
bind-to-key mouse-region-up S-MSf ; Shift + right_button_up
store-procedure MSleft-down
set %discmd $discmd
set $discmd FALSE
!force mouse-move-down
!if $status
set %keepanchor TRUE
12 set-mark
13 set-mark
set $hilight 12
set %msbuf $cbufname
!else
set %msbuf ""
!force 12 remove-mark
!endif
set $discmd %discmd
!endm
macro-to-key MSleft-down MSa
store-procedure MSdrag
!if &equ $hilight 12
; the LEFT button is down
run CUA-anchor
!force mouse-move-down
run CUA-select
!else
!force mouse-move
!endif
!endm
macro-to-key MSdrag MSm
store-procedure MSleft-up
set %discmd $discmd
set $discmd FALSE
!force mouse-move-down
!if &and $status &seq %msbuf $cbufname
set %keepanchor TRUE
!else
!force 12 remove-mark
!endif
set $discmd %discmd
!endm
macro-to-key MSleft-up MSb
store-procedure S-MSleft
run CUA-anchor
!force mouse-move-down
run CUA-select
!endm
macro-to-key S-MSleft S-MSa
macro-to-key S-MSleft S-MSb