Commits

Anonymous committed 0fb7a0e

Adding two register manipulation packages
Added Register Menu, an optional toplevel menu for access to registers
Added Register Toolbar, a minor mode which displays a toolbar for
1-click access to ten registers.

Comments (0)

Files changed (52)

+2013-1-1  Steve Mitchell   <smitchel@bnin.net> 
+	  Byrel Mitchell   <byrel.mitchell@gmail.com>
+         
+	* register-menu.el: Added new package
+	Allows easy access to register functionality,
+	including in-menu previews of register contents,
+	bookmarking, etc.
+	* register-toolbar.el: Added new package
+	Allows easy access to copy and pasting from 10
+	registers, including from columnar blocks.
+        * Makefile (ELCS,DATA_FILES): added new files
+	* rt: added icon files for register toolbar.
+	
 2013-06-17  Norbert Koch  <viteno@xemacs.org>
 
 	* Makefile (VERSION): XEmacs package 2.51 released.
 	winring.elc vertical-mode.elc power-macros.elc icon-themes.elc \
 	search-buffers.elc setnu.elc align.elc autorevert.elc allout.elc \
 	narrow-stack.elc highline.elc crm.elc wide-edit.elc buffer-colors.elc \
-	list-register.elc which-func.elc find-lisp.elc
+	list-register.elc which-func.elc find-lisp.elc register-menu.elc \
+	register-toolbar.elc
+
+
 
 EXPLICIT_DOCS = $(PACKAGE).texi tempo.texi
 
+DATA_FILES = rt/icon0-disabled_28_28_32.png rt/icon0-dn_28_28_32.png rt/icon0-up_28_28_32.png \
+	rt/icon1-disabled_28_28_32.png rt/icon1-dn_28_28_32.png rt/icon1-up_28_28_32.png \
+	rt/icon2-disabled_28_28_32.png rt/icon2-dn_28_28_32.png rt/icon2-up_28_28_32.png \
+	rt/icon3-disabled_28_28_32.png rt/icon3-dn_28_28_32.png rt/icon3-up_28_28_32.png \
+	rt/icon4-disabled_28_28_32.png rt/icon4-dn_28_28_32.png rt/icon4-up_28_28_32.png \
+	rt/icon5-disabled_28_28_32.png rt/icon5-dn_28_28_32.png rt/icon5-up_28_28_32.png \
+	rt/icon6-disabled_28_28_32.png rt/icon6-dn_28_28_32.png rt/icon6-up_28_28_32.png \
+	rt/icon7-disabled_28_28_32.png rt/icon7-dn_28_28_32.png rt/icon7-up_28_28_32.png \
+	rt/icon8-disabled_28_28_32.png rt/icon8-dn_28_28_32.png rt/icon8-up_28_28_32.png \
+	rt/icon9-disabled_28_28_32.png rt/icon9-dn_28_28_32.png rt/icon9-up_28_28_32.png \
+        rt/iconC-disabled_28_28_32.png rt/iconC-dn_28_28_32.png rt/iconC-up_28_28_32.png \
+	rt/iconM-disabled_28_28_32.png rt/iconM-dn_28_28_32.png rt/iconM-up_28_28_32.png \
+	rt/iconIns-disabled_28_28_32.png rt/iconIns-dn_28_28_32.png rt/iconIns-up_28_28_32.png \
+        rt/iconrectcopy-disabled_28_28_32.png rt/iconrectcopy-dn_28_28_32.png rt/iconrectcopy-up_28_28_32.png \
+        rt/iconrectmove-disabled_28_28_32.png rt/iconrectmove-dn_28_28_32.png rt/iconrectmove-up_28_28_32.png \
+	rt/LICENSE
+
+DATA_DEST = $(PACKAGE)/register-toolbar
+
 include ../../XEmacs.rules
 * align::                       Align Text to a Specific Column, By Regexp
 * allout::                      Extensive Outline Mode
 * narrow-stack::                Extending the built-in narrowing functions
+* register-menu::               Menu for easier register interaction
+* register-toolbar::            Toolbar for easier register interaction
 
 File Management
 * backup-dir::	                Specify Directories to be Used for Backup Files
 * paren::			Highlight (Un)matching Parens and Whole Expressions
 * shell-font::                  Decorate a Shell Buffer With Fonts
 * highline::                    Highlight the Current Line in the Buffer
+* buffer-colors::               System for Buffer-Local Color Schemes
 
 Low-Level Editing Hacks:
 * after-save-commands::	        Hooks Invoked After Saving a File
 be modified as desired, for example, @code{(copy-face 'italic
 'shell-prompt)}.
 
-@node highline, after-save-commands, shell-font, Top
+@node highline, highline-keys, shell-font, Top
 @chapter Highlight the Current Line in the Buffer
 
 This package is a minor mode to highlight the current line in buffer.
 
 @end table
 
-@node highline-options,  , highline-hooks, highline
+@node highline-options, buffer-colors, highline-hooks, highline
 @section Options
 
 This is a brief description of highline options.  Please see the options
   M-x highline-customize RET
 @end example
 
-@node after-save-commands, atomic-extents, highline, Top
+@node buffer-colors, after-save-commands, highline-options, Top
+
+Buffer colors provides an easy interface to implementing buffer-local
+default color schemes. This can be used automatically based on mode or
+filename extension (for instance, all .c-files could be lime green on
+black, and all .h files could be amber on black) or manually
+settable. An option is provided for defining additional custom color
+schemes, and defining the buffer-colors by window instead of
+buffer. All configuration can be done through the buffer-colors
+customize group.
+ 
+
+@node after-save-commands, atomic-extents, buffer-colors, Top
 @chapter Hooks Invoked After Saving a File
 
 Set up a list of file-name matching regular expressions associated with shell
   (add-hook 'outline-mode-hook 'rf-allout-font-lock-hook)
 @end example
 
-@node narrow-stack, flow-ctrl, allout, Top
+@node narrow-stack, register-menu, allout, Top
 @chapter Extending the built-in narrowing functions
 
 Narrowing, as implemented in Emacs has one limitation, namely that it is not
 
 To activate this extension type @code{M-x narrow-stack-mode} or add
 @code{(narrow-stack-mode)} to your initialization file.
+
+@node register-menu, register-toolbar, narrow-stack, Top
+
+Registers in XEmacs are limited in easy accessibility to a handful of
+functions in the default keyboard layout. This menu provides a
+top-level menu interface to most of the functionality provided by
+registers, including columnar copying, bookmarking, and real-time
+in-menu previews of the contents of registers.
+
+This menu can be configured through the register-menu configure group. Type @code{M-x 
+customize-group RET register-menu RET}
+
+@node register-toolbar, flow-ctrl, register-menu, Top
+
+The current XEmacs interface for registers is either deep in the
+menus, requiring multiple clicks for a single copy/paste command, or
+on a handful of keyboard bindings. The register toolbar minor mode
+provides a simple click interface for cut, copy and paste
+functionality to the digit registers (0-9). Modes are also available
+for columnar copy/cut operations.
+
+This minor mode can be enabled through button 3 on the modeline or the
+command: @code{M-x register-toolbar-mode}.
  
-@node flow-ctrl, makesum, narrow-stack, Top
+@node flow-ctrl, makesum, register-toolbar, Top
 @chapter Flow Control
 
 Terminals that use XON/XOFF flow control can cause problems with GNU Emacs
+;;;   register-menu.el
+;;;   1/1/2013 
+;;;   authors: 
+;;;      Steven Mitchell
+;;;      Byrel Mitchell
+;;;      Benson Mitchell
+;;;
+;;;   TIP: instead of clicking on each sub-menu
+;;;   hold the mouse button down on top menu and 
+;;;   slide down and sideways unto submenus for 
+;;;   speed, then release the mouse button to 
+;;;   select. Much faster than multiple clicking.
+;;;
+;;; This program creates a top-most level menu item "Register"
+;;; and dynamically populates it with commands to manipulate 
+;;; registers, such as copy,move,insert, etc. 
+;;; it also populates submenus for each menu item, to select from
+;;; the sub-menus by the mouse or cursor keys, or
+;;; based on a setting, interactively in the mini-buffer. 
+;;;
+;;; Using the sub-menu for designating which register to 
+;;; perfrom your operation on has one advantage over minibuffer
+;;; input, a preview of the register contents, next to the 
+;;; register name and a single character indicating contents type.
+;;;
+;;; A customize setting lets you change the width of the preview
+;;; and another, the height of the generated submenus.
+;;; 
+;;; There are approximately 255 allowed single char names for
+;;; registers, but to keep confusion down and avoid interference
+;;; with other functions, we elected to use lowercase alpha chars,
+;;; upper case alpha chars and single digit numbers, or any 
+;;; combination of the three sets, via a customize variable.
+;;; 
+;;; The preview of register contents is shown in each sub-menu, 
+;;; for each register that has something in it.
+;;; In the case of a few content types  not easily displayed,
+;;; such as frame comfiguration, we print a text string that 
+;;; tells the type of the item.
+;;; ex: "" is displayed as the empty string.
+;;;
+;;; regarding sub-menu length: there is a setting to change the height
+;;; for the sub-menus of register names, controlling when to generate 
+;;; additional sub-menus for extra register names, for your size screen.
+;;; 36 names will fit in a single menu height with a 2560 x 1600 pixel 
+;;; monitor. You may need to set a laptop screen for 15 or 20 lines high
+;;; to suit your screen.
+;;; See settings to change the # of menu items before continuing the
+;;; list of available registers before making sub-submenus. 
+;;;
+;;; Clear Register is new functionality to empty a register.
+;;;
+;;; Menu item "Clear All Registers" clears registers based on a setting
+;;; for which register names to work with (eg. from a-z, A-Z, 0-9)
+;;; It does not change registers that it does not work with (see settings).
+;;;
+;;; Note about greyed-out buffer names:
+;;; if there is no selection, the sub-menus will be greyed out for commands
+;;; that need a selection to work on.  This is for commands such as 
+;;; copy/move/append/prepend/Copy rect/Move rect, etc.
+;;;
+;;; Other commands that do not require a selection, such as 
+;;; function-to-register or copy point to register are never grayed-out.
+;;;
+;;; When inserting registers, registers that are empty are greyed-out since
+;;; you can only insert registers with something in them.
+;;;
+;;; Register-menu-settings calls a customize buffer for register-menu group.
+;;;
+;;; 
+;;; Requires:
+;;; Xemacs 21.5.35 for optimal functionality. Several issues in XEmacs
+;;; menu insertion/deletion code have been fixed in the preceding beta
+;;; versions. The register menu will be largely functional on 21.5.34,
+;;; with a few issues involving live menu config changes. On 21.5.32 and
+;;; earlier the submenu form of the register menu hides menus instead of 
+;;; disabling them (graying out) due to a limitation in older menu display code.
+;;; 
+;;; If running one of the older versions, applying the most recent patches
+;;; to menubar.el should improve your experience significantly.
+;;;
+;;; Specifically, installing patch number 44b0b4e to menubar.el and 
+;;; patch to menubar.el submitted by Byrel Mitchell on 12/28/2013.
+;;;
+;;; To try it out:
+;;; load register-menu.el and evaluate the whole buffer.
+;;; go into [Options->Menubars] and toggle on Register Menu.
+
+
+
+;-------------------------------------------------------------
+;------- defvars for register menu ---------------------------
+;-------------------------------------------------------------
+
+(require 'menubar)			;contains add-menu-button
+(defun char-list (begin end)
+  "Returns a list of chars in order from BEGIN to END"
+  (loop for ch from (char-to-int begin) to (char-to-int end)
+    collect (int-to-char ch)))
+
+(defconst rm-lc-az (char-list ?a ?z) "list of register names from a to z")
+(defconst rm-uc-az (char-list ?A ?Z) "list of register names from A to Z")
+(defconst rm-numbers-09 (char-list ?0 ?9) "list of register names from 0 to 9")
+(defconst rm-settings-item [ "Register Menu Settings" (customize 'register-menu) ]
+  "Settings option for register-menu, used in both submenu input and interactive modes.
+By default, a single menu item to customize the 'register-menu group.")
+
+;; each of these menubar-tag consts is a list so they can be (append)ed, and may
+;; reference the variable REGISTER which will be bound to a char when they get (eval)ed.
+(defconst rm-suffix-contents-preview
+  '(:suffix `(rm-contents-preview ,register))
+  ":suffix key with preview of register's contents")
+;(let ((register ?a)) (mapcar 'eval (append rm-suffix-contents-preview rm-suffix-contents-preview)))
+(defconst rm-active-text-or-numberp
+  '( :active `(let ((val (get-register ,register)))
+	       (or (stringp val)
+		   (numberp val)
+		   (and (consp val) 
+			(stringp (car val))))))
+  ":active key with test for register holding a linear or rectangle block, or a number")
+(defconst rm-active-string-or-numberp
+  '( :active `(let ((val (get-register ,register)))
+	       (or (stringp val)
+		   (numberp val))))
+  ":active key with test for register holding a linear block or a number")
+(defconst rm-active-markerp '( :active `(markerp (get-register ,register)))
+  ":active key with test for register holding a marker")
+(defconst rm-active-nonnilp '( :active `(get-register ,register))
+  ":active key with test for non-empty register")
+
+
+(defvar rm-current-reg-names (append rm-lc-az rm-uc-az rm-numbers-09 nil) "list of register names that register-menu will work with" )
+(defvar rm-reg-list-ok nil "flag to show list of reg names already made")
+(defvar rm-submenu-height 26)
+
+;the next line will be updated with patch number once it is assigned.
+(defvar rm-disable-menu-key (cond ((emacs-version>= 21 5 33) :active)
+				  (t :included)))
+
+
+;---------------------------------------------------------------------
+;---- functions for register menu ------------------------------------
+;---------------------------------------------------------------------
+
+(defun rm-contents-preview ( register )       
+"Register Menu func. to generate previews based on type of objects
+in the registers:
+integer or float     format with # and print it
+marker (point,etc)   format w/* buffer name and position in buffer
+window configuration output ' + window configuration'
+frame configuration  output ' + frame configuration'
+string of text       format ' - ' + first X letters of string
+file-query           format ' - ' + first X letters of string
+rectangle copy       format ' r ' + x,y size of rect. + 1st letters of rect.
+empty string         output string 'the empty string'
+unknown contents     output string 'unknown contents'
+uses rm-preview-field-width  for the number of characters in the preview."
+
+  (let ((val (get-register register)) (output "") ) ;val is contents of register + output set to empty string
+    (cond
+     ((integerp val)           ;if contents are an integer, print it
+      (setq output (format " # %d" val )))
+
+     ((floatp val)             ;if contents are a floating point, print it
+      (setq output (format " # %g" val )))
+
+     ((markerp val)          ; if a marker, print the assoc. buffer and pos in that buffer
+      (let ((buf (marker-buffer val)))
+	(if (null buf)
+	    (setq output " * marker in no buffer")  ;case if buffer was closed after point was put into register
+	  (setq output (format " * buf: %s, pos: %d" (buffer-name buf) (marker-position val))))))
+
+     ((and (consp val) (window-configuration-p (car val))) ;if a window configuration, print a string
+      (setq output " + window configuration"))
+
+     ((and (consp val) (frame-configuration-p (car val)))  ;if a frame configuration, print a string
+      (setq output " + frame configuration"))
+
+     ((and (consp val) (eq (car val) 'file))
+      (setq output (format " - %s" (cdr val)))) ;if a file, print the name.
+
+     ((and (consp val) (eq (car val) 'file-query))         ;if a file-query, print filename and position
+      (setq output (format " - %s, pos %d" (car (cdr val)) (car (cdr (cdr val))))))
+
+     ((consp val)                                          ;if a rectangle, print 1st line and size
+      (setq output (format (format " r %%dx%%d %%.%ds" 
+				   (- rm-preview-field-width 8)) 
+			   (length (car val)) (safe-length val) (car val))))
+     ((stringp val)                                        ;if a string, print it.
+      (remove-text-properties 0 (length val) nil val)
+	(cond
+	 ;Extract first 'rm-preview-field-width' number of characters, starting with first non-whitespace.
+	 ((string-match
+	   (format "\\S-.\\{0,%d\\}" (- rm-preview-field-width 4)) 
+	   (replace-in-string (replace-in-string val "\n" " - ") "\s-+" " "))
+	  (setq output (format " s %s" (match-string 0 val))))   ; a string, print it
+	 ((string-match "^\s-+$" val)
+	  (setq output " s whitespace"))                  ;if all whitespace, print "whitespace"
+	 (t
+	  (setq output " s the empty string"))))          ;case an empty string "", print the words empty string
+     ((null val)
+      (setq output ""))                                   ;case nil, print nothing.
+     (t
+      (setq output " Unknown Contents")))                 ;all other things, print "unknown contents"
+    output))
+
+
+(defmacro rm-copy-block-to-register (i end-cmd begin-cmd)
+  "Given functions for finding the end and start of any block, generates a menu item to copy to register `i'." 
+  `(save-excursion
+    (let (end)
+      (,end-cmd)
+      (setq end (point))
+      (,begin-cmd)
+      (copy-to-register ,i end (point)))))
+
+;;;###autoload
+(defun clear-register (reg-name)
+  "Function to clear the contents of a register."
+  (interactive "Clear register: ")
+  (set-register reg-name nil))
+
+;;;###autoload
+(defun clear-all-registers ()
+  "Clears the contents of all registers currently selected for display in the register menu.
+It does not touch other registers."
+  (loop
+    for i in rm-current-reg-names   ; clear all registers in assembled list
+    do (clear-register i)))
+
+
+(defun* rm-populate-submenu (menu submenu generator register-list max-menu-height &optional &key toplevel-keys &key leaf-keys)
+  "sub program for rm-create-register-menu-with-submenus, populates submenus"
+  (loop
+    with max-height = max-menu-height
+    with menutree = (copy-sequence menu)
+    for register in register-list
+    count 1 into menu-height
+    collect `[,(char-to-string register)   ;Collect menu items into temporary list 'menu-so-far'
+	      ,generator
+	      ,@(mapcar 'eval leaf-keys)] into menu-so-far
+    when (>= menu-height max-height)       ;When menu-so-far reaches the length of our menu
+    do
+    (add-submenu menutree                  ;Add menu-so-far as a new submenu
+		 `(,submenu
+		   ,@(mapcar 'eval toplevel-keys)
+		   ("More")
+		   ,@menu-so-far)
+		 nil (default-value 'current-menubar))
+    (nconc menutree (list submenu))        ;Add another step to our current menu path.
+    (setq toplevel-keys nil)               ;Reset all loop variables, ready to accumulate another submenu-ful of menu items.
+    (setq submenu "More")
+    (setq menu-height 0)
+    (setq menu-so-far '())
+    finally
+    (add-submenu menutree                  ;On exit, dump all remaining items into a last submenu.
+		 `(,submenu
+		   ,@(mapcar 'eval toplevel-keys)
+		   ,@menu-so-far)
+		 nil
+		 (default-value 'current-menubar))))
+
+
+(defmacro rm-toggle-and-update (var)
+"toggle customize setting on/off and update Register menu"
+    `(progn
+    (setq ,var (not ,var))
+    (rm-update)))
+
+;;;###autoload
+(defun rm-update ()
+  "function for register-menu to:
+reset the list of register names used,
+reset the OK flag from the customize buffer,
+and update the submenus on register-menu."
+  (message "Updating Register Menu...")
+  (if (and
+       (boundp 'rm-submenu-height))
+      (if rm-enable
+	  (if (and rm-use-submenus rm-current-reg-names)  ; if we are using submenus
+					; and we have the names list,
+	      (rm-create-register-menu-with-submenus)     ; call function to use the menu that has submenus,
+	    (rm-create-register-menu-with-cl-input))     ; else call funct to use menu with minibuffer input
+	(delete-menu-item '("Register") (default-value 'current-menubar))))
+  (message "Done."))
+
+
+
+;---------------------------------------------------
+;---- add "Register" top menu with submenus  -------
+;---- submenus are used for selecting the    ------- 
+;---- name of the register & showing preview -------
+;---------------------------------------------------
+
+
+(defmacro rm-make-submenu-1 (submenu generator &rest foo)
+  `(rm-populate-submenu '("Register") ,submenu ',generator rm-current-reg-names rm-submenu-height ,@foo))
+
+(defun rm-create-register-menu-with-submenus ()
+  "Create submenus for register-menu, and populate them using
+ `rm-make-submenu-1'. Submenus contain lists of registers.
+RM-SUBMENU-HEIGHT is the number of menu items before adding a new sub-sub-menu."
+  (interactive)
+  (add-submenu nil '("Register") rm-before-menu-pos (default-value 'current-menubar))
+  ;;Eliminate any existing Register menu contents. This shouldn't
+  ;;be necessary, but add-submenu tends to leave "---" dividers
+  ;;in allegedly clear menus. 
+  (when (assoc "Register" (default-value 'current-menubar))        
+    (setcdr (assoc "Register" (default-value 'current-menubar)) nil))
+  (rm-make-submenu-1	"Copy to Register"
+			`(copy-to-register ,register (mark) (point))
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Move to Register"
+			`(copy-to-register ,register (mark) (point) t)
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Insert Register"
+			`(insert-register ,register)
+			:leaf-keys (append rm-suffix-contents-preview
+					   rm-active-text-or-numberp))
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (rm-make-submenu-1	"Prepend to Register"
+			`(prepend-to-register ,register (mark) (point))
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys (append rm-suffix-contents-preview
+					   rm-active-string-or-numberp))
+  (rm-make-submenu-1	"Append to Register"
+			`(append-to-register ,register (mark) (point))
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys (append rm-suffix-contents-preview
+					   rm-active-string-or-numberp))
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (rm-make-submenu-1	"Copy Rect to Register"
+			`(copy-rectangle-to-register ,register (mark) (point))
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Move Rect to Register"
+			`(copy-rectangle-to-register ,register (mark) (point) t)
+			:toplevel-keys '(rm-disable-menu-key '(region-active-p))
+			:leaf-keys rm-suffix-contents-preview)
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (rm-make-submenu-1	"Function to Register"
+			`(rm-copy-block-to-register ,register end-of-defun backward-sexp)
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Word to Register"
+			`(rm-copy-block-to-register ,register forward-word backward-word)
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Sentence to Register"
+			`(rm-copy-block-to-register ,register forward-sentence backward-sentence)
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Paragraph to Register"
+			`(rm-copy-block-to-register ,register forward-paragraph backward-paragraph)
+			:leaf-keys rm-suffix-contents-preview)
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+ (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+   (rm-make-submenu-1	"Copy Point to Register"
+			`(point-to-register ,register)
+			:leaf-keys rm-suffix-contents-preview)
+  (rm-make-submenu-1	"Jump to Register"
+			`(jump-to-register ,register)
+			:leaf-keys (append rm-suffix-contents-preview
+					   rm-active-markerp))
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (rm-make-submenu-1	"Clear Register"
+			`(clear-register ,register)
+			:leaf-keys (append rm-suffix-contents-preview
+					   rm-active-nonnilp))
+  (add-menu-button	'("Register") ["Clear All Registers" (clear-all-registers)] nil (default-value 'current-menubar))
+  (add-menu-button	'("Register") "---" nil (default-value 'current-menubar))
+  (add-menu-button	'("Register") rm-settings-item nil (default-value 'current-menubar)))
+
+
+;;;;---------------------------------------------------------------------
+;;;;---- add "Register" top menu for interactive     --------------------
+;;;;---- minibuffer input, instead of submenu input  --------------------
+;;;;---------------------------------------------------------------------
+
+(defun rm-create-register-menu-with-cl-input ()
+  "Register Menu - create a menu for using interactive minibuffer input, 
+this is how commands work in the Cmds-->Other Rectangle/Register menu
+Register Menu settings calls a customize buffer for settings."
+  (let ((menu "Register"))
+    (add-submenu 
+     nil
+     `(,menu
+       ["Copy to Register..."    (call-interactively 'copy-to-register)
+	:active (region-active-p )]
+       ["Move to Register..."    (progn (setq current-prefix-arg 1) 
+					(call-interactively 'copy-to-register))]
+       ["Insert Register..."     (call-interactively 'insert-register)]
+       "---"
+       ["Prepend to Register..." (call-interactively 'prepend-to-register)]
+       ["Append to Register..."  (call-interactively 'append-to-register)]
+       "---"
+       ["Copy Rect to Register..." (call-interactively 'copy-rectangle-to-register)]
+       ["Move Rect to Register..." (progn (setq current-prefix-arg 1) 
+					  (call-interactively 'copy-rectangle-to-register))]
+       "---"
+       ["Function to Register"    (call-interactively 'rm-function-to-register)] 
+       ["C Func. to Register"     (call-interactively 'rm-c-function-to-register)] 
+       ["Word to Register"        (call-interactively 'rm-word-to-register)] 
+       ["Sentence to Register"    (call-interactively 'rm-sentence-to-register)] 
+       ["Paragraph to Register"   (call-interactively 'rm-paragraph-to-register)] 
+       "---"
+       ["Copy Point to Register..." (call-interactively 'point-to-register)]
+       ["Jump to Register..."       (call-interactively 'jump-to-register)]
+       "---"
+       ["Clear Register..."      (call-interactively 'clear-register)]
+       ["Clear All Registers"    (clear-all-registers)]
+       "---"
+       ,rm-settings-item)
+     rm-before-menu-pos (default-value 'current-menubar)))) 
+
+
+;;;;--------------------------------------------------------------------------
+;;;;--------------------Add a Customize Group --------------------------------
+;;;;--------------------------------------------------------------------------
+
+;;;###autoload
+(defgroup register-menu nil
+  "A Top-Level Menu for Register commands."
+  :version "21.5.B32 with patches to register.el and sequence.c")
+
+;;;###autoload
+(defcustom rm-enable nil
+  "Enable or disable Register-Menu.
+Enabling this adds the Register-Menu as a top level menu."
+  :tag "Register Menu Enable"
+  :group 'register-menu
+  :initialize 'custom-initialize-default
+  :set (lambda (symbol value)
+	 (set-default symbol value)
+	 (rm-update))
+  :type '(boolean))
+
+;;;###autoload
+(defcustom rm-use-submenus t 
+  "whether input for choosing the register name is in the minibuffer or on the menus."
+  :tag "Register Menu input method"
+  :group 'register-menu
+  :initialize 'custom-initialize-default
+  :set (lambda (symbol value)
+	 (set-default symbol value)
+	 (rm-update))
+  :type '(choice :tag "Input Method"
+ 	  (const :tag "Keyboard Input" nil)
+ 	  (const :tag "Menu Input" t)))
+
+;;;###autoload
+(defcustom rm-submenu-height 26
+  "Max number of lines for each submenu for choosing register names.
+sane values are 10 to 36 lines high.
+a 24-30 inch monitor can have up to 36; 
+choosing 13 yields 3 submenus for a list of 36 register names."
+  :tag "Register Menu Submenu Height"
+  :group 'register-menu
+  :initialize 'custom-initialize-default
+  :set (lambda (symbol value)
+	 (set-default symbol value)
+	 (rm-update))
+  :type '(integer :tag "submenu height in lines"))
+
+
+;;;###autoload
+(defcustom rm-register-set '(rm-lc-az rm-uc-az)
+  "Stores list of lisp variables to include in menu of registers.
+Each element should be a list of chars."
+  :tag "Registers to display in menu:"
+  :group 'register-menu
+  :initialize 'custom-initialize-default
+  :set (lambda (symbol value)
+	 (set-default symbol value)
+	 (setq rm-current-reg-names 
+	       (loop for variable in value
+		 append (eval variable)))
+	 (rm-update))
+  :type '(set
+	  (const :tag "Lower-case letters (a-z)" rm-lc-az)
+	  (const :tag "Upper-case letters (A-Z)" rm-uc-az)
+	  (const :tag "Numbers (0-9)" rm-numbers-09)))
+
+;;;###autoload
+(defcustom rm-before-menu-pos "Options"
+  "Menu item Register menu should be inserted directly before.
+Defaults to Options, to permit a significant preview of register contents."
+  :tag "Menu position"
+  :group 'register-menu
+  :initialize 'custom-initialize-default
+  :set (lambda (symbol value)
+	 (set-default symbol value)
+	 (rm-update))
+  :type 'string)
+
+
+;;;###autoload
+(defcustom rm-preview-field-width 40
+   "Width (in characters) of the preview field 
+ next to the register name in the register-menu submenus."
+   :tag "Register Menu preview field width"
+   :group 'register-menu
+   :initialize 'custom-initialize-default
+   :set (lambda (symbol value)
+ 	 (set-default symbol value)
+ 	 (rm-update))
+   :type '(choice :tag "Preview Field Width"
+ 	  (const :tag "10 chars" 10)
+ 	  (const :tag "15 chars" 15)
+ 	  (const :tag "20 chars" 20)
+ 	  (const :tag "25 chars" 25)
+ 	  (const :tag "30 chars" 30)
+ 	  (const :tag "35 chars" 35)
+ 	  (const :tag "40 chars" 40)
+ 	  (const :tag "45 chars" 45)))
+
+
+
+
+;;;;---------------------------------------------------------------------
+;;;;------- start up code -----------------------------------------------
+;;;;---------------------------------------------------------------------
+
+;;;###autoload
+(unless (featurep 'register-menu)
+  (when (boundp 'current-menubar) 
+    (add-menu-button '("Options" "Menubars")
+		     "---"))) ;add a separator only first time loaded
+
+;;;###autoload
+(when (boundp 'current-menubar) 
+  (add-menu-button '("Options" "Menubars")
+		   [ "Register Menu" (progn (set-default 'rm-enable (not rm-enable)) (rm-update)) 
+		     :style toggle 
+		     :selected rm-enable]))
+
+(provide 'register-menu)
+
+;end register-menu.el
+
+
+

register-toolbar.el

+;;; register-toolbar
+;;;   12/25/2012
+;;; authors
+:;;   Benson Mitchell
+;;;   Byrel Mitchell
+;;;   Steven Mitchell
+;;; 
+;;; This is a minor mode that adds a set of icons to the default 
+;;; toolbar to make using registers for copy, move, insert 
+;;; operations easier.
+;;;
+;;; There are 11 icons total:
+;;; The first one has five states, cycling between 5 icons to 
+;;; show the current operation.  
+;;; The other 10 icons represent register names 0 thru 9.
+;;;
+;;; Purpose: Is to give users a quick way to use registers
+;;; as a multiple copy and paste feature, up to 10 registers
+;;; can be copied/pasted by the toolbar, instead of a 
+;;; system-wide clipboard that holds only one selection at a time.
+;;;
+;;; To install:
+;;; This is installed as part of edit utils, nothing beyond that is 
+;;; required for installing.
+;;;
+;;; Requirements:
+;;; 1. XEmacs needs to be compiled with the --with-toolbars option set
+;;; during the ./configure step.
+;;; 2. Toolbars need to be turned on to see the toolbar. this is 
+;;; automatically handled by this minor-mode.
+;;; 3. Toolbar height should be set to 30 pixels or higher.
+;;; 4. Requires a patch to simple.el by Byrel on 12/31/2012, or a
+;;; version later than 21.5.33 for best funcionality.
+;;;
+;;;
+;;; To use:
+;;; -mark a selection in the buffer 
+;;; -click the operation icon once or twice to get the operation you
+;;;    want to perform, say, copy-to-register
+;;; -click on one of the 0-9 icons and your marked block will be
+;;;    copied to that register.
+;;;
+;;; for subsequent copy-to-register operations, since the copy function is 
+;;; already selected, just mark a block, and click a register-name icon.
+;;; 
+;;; To insert the contents of a register, click on the operation icon
+;;; till it displays INS, then click on the register name 0-9, and your
+;;; text is copied into the buffer at the current cursor position.
+;;;
+;;; Note: if there is no marked block, and copy or move is set, all
+;;; register names are grayed-out.  Also, when Insert is the selected
+;;; operation, registers that have nothing in them are greyed-out.
+;;; 
+;;; To test this minor mode:
+;;; 1. load this file into a buffer and store the icons in a directory.
+;;; 2. set register-toolbar-icon-path to wherever the icon files are stored
+;;;     for the test.
+;;; 3. evaluate the entire file in the buffer
+;;; 4. enable the register-toolbar minor mode by opposite clicking on
+;;;    the emacs-lisp area of the modeline to bring up the minor modes menu
+;;;    and toggle register-toolbar mode.
+;;; 5. the register-toolbar icons look good with the background set to black
+;;;    You may want to at least temporarily set the toolbar background to black
+;;;     command is:
+;;;    (set-face-background 'toolbar "black")  
+;;; Or simply install the xemacs package, and follow steps 4-5.
+
+(require 'wid-edit)
+
+;;;;-------------------------------------------------------------
+;;;;--- defvars -------------------------------------------------
+;;;;-------------------------------------------------------------
+
+(defvar register-toolbar-current-operation 'copy 
+  "Register-Toolbar: keeps track of which operation to perform 
+on selected register. valid values are:
+'copy
+'move
+'insert
+'rect-copy
+'rect-move")
+
+(defvar register-toolbar-mousing-rectangle-p nil
+  "Stores former tool bar mousing mode.
+Non-nil for rectangle mode.")
+
+(defvar register-toolbar-mousing-stored-p nil
+  "Stores whether former mousing status is stored.
+See `register-toolbar-mousing-rectangle-p'.")
+
+(define-specifier-tag 'register-toolbar-toolbar)
+
+(defvar register-toolbar-mode nil 
+  "Enables the Register Toolbar mode.")
+
+(defvar register-toolbar-icon-path 
+  nil
+  "Custom installation location for register-toolbar icons.
+nil by default")
+
+;if it is not already there, add to path for icon directory
+(when register-toolbar-icon-path
+  (unless (member register-toolbar-icon-path data-directory-list)
+    (push register-toolbar-icon-path data-directory-list)))
+
+(defvar register-toolbar-0-icon nil
+  "register-toolbar:  icon representing register 0")
+
+(defvar register-toolbar-1-icon nil
+  "register-toolbar:  icon representing register 1")
+
+(defvar register-toolbar-2-icon nil
+  "register-toolbar:  icon representing register 2")
+
+(defvar register-toolbar-3-icon nil
+  "register-toolbar:  icon representing register 3")
+
+(defvar register-toolbar-4-icon nil
+  "register-toolbar:  icon representing register 4")
+
+(defvar register-toolbar-5-icon nil
+  "register-toolbar:  icon representing register 5")
+
+(defvar register-toolbar-6-icon nil
+  "register-toolbar:  icon representing register 6")
+
+(defvar register-toolbar-7-icon nil
+  "register-toolbar:  icon representing register 7")
+
+(defvar register-toolbar-8-icon nil
+  "register-toolbar:  icon representing register 8")
+
+(defvar register-toolbar-9-icon nil
+  "register-toolbar:  icon representing register 9")
+
+(defvar register-toolbar-op-icons nil
+  "Circular alist of symbols and corresponding glyph-lists.")
+
+(defvar register-toolbar-current-op-icon nil
+  "register-toolbar: holds icon for current operation." )
+
+
+;;;;-------------------------------------------------------------
+;;;;--- icon definitions ----------------------------------------
+;;;;-------------------------------------------------------------
+
+(defun register-toolbar-initialize-subfun (arg)
+  "internal to register-toolbar
+assembles list of glyphs for register ARG"
+  (let ((num (number-to-string arg)))
+    `(,(widget-glyph-find (concat "register-toolbar/icon" num "-up_28_28_32") (concat "Register " num))
+      ,(widget-glyph-find (concat "register-toolbar/icon" num "-dn_28_28_32") (concat "Register " num))
+      ,(widget-glyph-find (concat "register-toolbar/icon" num "-disabled_28_28_32") (concat "Register " num)))))
+
+(defun register-toolbar-initialize-icons ()
+  "Initializes all register-toolbar-foo-icon variables."
+  (setq register-toolbar-op-icons
+	`((copy .	(,( widget-glyph-find "register-toolbar/iconC-up_28_28_32" "Copy")))
+	  (move .	(,( widget-glyph-find "register-toolbar/iconM-up_28_28_32" "Move")))
+	  (insert .	(,( widget-glyph-find "register-toolbar/iconIns-up_28_28_32" "Insert")))
+	  (rect-copy .	(,( widget-glyph-find "register-toolbar/iconrectcopy-up_28_28_32" "Copy Rect")))
+	  (rect-move .	(,( widget-glyph-find "register-toolbar/iconrectmove-up_28_28_32" "Move Rect")))))
+  (setf (cdr (last register-toolbar-op-icons)) register-toolbar-op-icons)	;circularize into bottomless stack of pancakes.
+  (setq register-toolbar-current-op-icon (cdr (pop register-toolbar-op-icons)))
+  (loop
+    for register from 0 to 9							; set all register icons to their glyph values.
+    do
+    (set (intern (concat "register-toolbar-" (number-to-string register) "-icon"))
+	 (register-toolbar-initialize-subfun register))))
+
+(defun register-toolbar-toolbar-button-active-p (reg)
+"sets whether a toolbar button is active instead of disabled."
+  (case register-toolbar-current-operation
+    (insert
+     (get-register reg))
+    ((copy move rect-copy rect-move)
+     (region-active-p))))
+
+(defconst register-toolbar-toolbar
+ `([register-toolbar-current-op-icon   ;var containing icon list
+     register-toolbar-toggle-operation ;callback
+     t                                 ;enabled-p
+     "Choose Operation"]               ;help text
+    [register-toolbar-0-icon 
+     (register-toolbar-perform-operation 0) 
+     (register-toolbar-toolbar-button-active-p 0) "Register 0"]
+    [register-toolbar-1-icon 
+     (register-toolbar-perform-operation 1) 
+     (register-toolbar-toolbar-button-active-p 1) "Register 1"]
+    [register-toolbar-2-icon 
+     (register-toolbar-perform-operation 2) 
+     (register-toolbar-toolbar-button-active-p 2) "Register 2"]
+    [register-toolbar-3-icon 
+     (register-toolbar-perform-operation 3) 
+     (register-toolbar-toolbar-button-active-p 3) "Register 3"]
+    [register-toolbar-4-icon 
+     (register-toolbar-perform-operation 4) 
+     (register-toolbar-toolbar-button-active-p 4) "Register 4"]
+    [register-toolbar-5-icon 
+     (register-toolbar-perform-operation 5) 
+     (register-toolbar-toolbar-button-active-p 5) "Register 5"]
+    [register-toolbar-6-icon 
+     (register-toolbar-perform-operation 6) 
+     (register-toolbar-toolbar-button-active-p 6) "Register 6"]
+    [register-toolbar-7-icon 
+     (register-toolbar-perform-operation 7) 
+     (register-toolbar-toolbar-button-active-p 7) "Register 7"]
+    [register-toolbar-8-icon 
+     (register-toolbar-perform-operation 8) 
+     (register-toolbar-toolbar-button-active-p 8) "Register 8"]
+    [register-toolbar-9-icon 
+     (register-toolbar-perform-operation 9) 
+     (register-toolbar-toolbar-button-active-p 9) "Register 9"])
+  "register-toolbar: toolbar definition for list of buttons")
+
+;;;;----------------------------------------------------------------------
+;;;;----- callback functions for each button -----------------------------
+;;;;----------------------------------------------------------------------
+
+(defun register-toolbar-perform-operation ( reg-name )
+  "Perform the currently selected operation on this register."
+  (if (and (not (region-active-p)) ;if no selection & copy or move is cur.op.
+	   (or (eq register-toolbar-current-operation 1)   
+	       (eq register-toolbar-current-operation 2)))
+      (print "no selection.")                   ;just print message 
+    (case register-toolbar-current-operation    ;otherwise get the operation
+      ('copy (copy-to-register reg-name (mark) (point) ))   ;and perform it.
+      ('move (copy-to-register reg-name (mark) (point) t ))
+      ('insert (case (type-of (get-register reg-name))
+		 ('string (insert-register reg-name ))
+		 ('cons (if (stringp (car (get-register reg-name)))
+			    (insert-register reg-name)))
+		 (t (error "Uninsertable register contents"))))
+      ('rect-copy (copy-rectangle-to-register reg-name (mark) (point)))
+      ('rect-move (copy-rectangle-to-register reg-name (mark) (point) t)))))
+
+(defun register-toolbar-toggle-operation ()
+  "Toggles between 5 operations (and icons): 
+copy to register
+move to register
+insert register
+copy rect. to register
+move rect. to register
+-clicking on a register icon (0-9) performs whichever
+operation is selected by this icon."
+  (interactive)
+  (let ((next-op-icon (pop register-toolbar-op-icons))
+	(active-selection (region-active-p)))
+    (setq register-toolbar-current-op-icon (cdr next-op-icon))
+    (setq register-toolbar-current-operation (car next-op-icon))
+  ;;;
+    (case register-toolbar-current-operation
+      ((rect-move rect-copy)
+       (unless register-toolbar-mousing-stored-p
+	 (setq register-toolbar-mousing-rectangle-p mouse-track-rectangle-p)
+	 (setq register-toolbar-mousing-stored-p t))
+       (customize-set-variable 'mouse-track-rectangle-p t))
+      ((move copy)
+       (unless register-toolbar-mousing-stored-p
+	 (setq register-toolbar-mousing-rectangle-p mouse-track-rectangle-p)
+	 (setq register-toolbar-mousing-stored-p t))
+       (customize-set-variable 'mouse-track-rectangle-p nil))
+      (otherwise (when register-toolbar-mousing-stored-p
+		   (customize-set-variable 'mouse-track-rectangle-p
+					   register-toolbar-mousing-rectangle-p))
+		 (setq register-toolbar-mousing-stored-p nil)))
+    (register-toolbar-set-toolbar)
+    (zmacs-deactivate-region)
+    (redisplay-frame)  ;this line needed for xwindows, not needed for MS windows
+    (when active-selection 
+      (zmacs-activate-region))))
+  
+
+(defun register-toolbar-set-toolbar ()
+"inserts the toolbar or refresh it after changes"
+  (remove-specifier default-toolbar nil 'register-toolbar-toolbar)
+  (sit-for 0)   ;-----------------needed for windows, xemacs 21.4 or 21.5
+  (add-spec-to-specifier 
+   default-toolbar-visible-p t nil 'register-toolbar-toolbar)
+  (add-spec-to-specifier
+   default-toolbar
+   (append
+    (specifier-instance default-toolbar)
+    register-toolbar-toolbar)
+   nil
+   'register-toolbar-toolbar))
+
+
+(defun register-toolbar-remove-toolbar ()
+"register-icons: remove icons from the toolbar"
+  (remove-specifier default-toolbar nil 'register-toolbar-toolbar)
+  (remove-specifier default-toolbar-visible-p nil 'register-toolbar-toolbar))
+
+;;;###autoload
+(defun register-toolbar-mode (&optional turn-on)
+  "Adds icons for easy access to registers to the toolbar.
+The first button sets the operation used on the registers. 
+Three operations are currently defined: 
+copy to register, 
+move to register,
+insert from register. 
+Clicking this button toggles between the operations. 
+The remaining ten icons represent the registers from 0-9, 
+& when selected perfrom the current operation on that register."
+  (interactive "P")
+  (unless (featurep 'toolbar)
+    (error "Must have toolbar support to use this mode!"))
+  (setq register-toolbar-mode
+	(if (null turn-on) (not register-toolbar-mode)
+	  (> (prefix-numeric-value turn-on) 0)))
+  (if register-toolbar-mode
+      (progn  ;;enabling the minor mode
+	(unless default-toolbar-visible-p
+	  (message "Toolbar disabled; check toolbar-enabled-p"))
+	(unless (> (max
+		    (specifier-instance default-toolbar-height)
+		    (specifier-instance default-toolbar-width)) 29)
+	  (message 
+	   "Toolbar too short for register icons. Set default-toolbar-height to 30 or more."))
+	(register-toolbar-initialize-icons)
+	(register-toolbar-set-toolbar)
+	(add-hook 'zmacs-activate-region-hook 'register-toolbar-set-toolbar)
+	(add-hook 'zmacs-deactivate-region-hook 'register-toolbar-set-toolbar)
+	(register-toolbar-toggle-operation))
+    ;; clean up when leaving the minor mode
+    (when register-toolbar-mousing-stored-p		; Restore mousing setting
+		 (customize-set-variable 'mouse-track-rectangle-p
+					 register-toolbar-mousing-rectangle-p))
+    (zmacs-update-region)
+    (remove-hook 'zmacs-activate-region-hook 'register-toolbar-set-toolbar)
+    (remove-hook 'zmacs-deactivate-region-hook 'register-toolbar-set-toolbar)
+    (register-toolbar-remove-toolbar)))
+
+
+;;;;-----------------------------------------------------------
+;;;;---- Initialize minor mode --------------------------------
+;;;;-----------------------------------------------------------
+;;;###autoload
+(unless (assq 'register-toolbar-mode minor-mode-alist)
+  (setq minor-mode-alist
+	(cons '(register-toolbar-mode "") minor-mode-alist)))
+
+(unless register-toolbar-op-icons
+  (register-toolbar-initialize-icons))
+
+(provide 'register-toolbar)
+
+;--- end of register-toolbar.el
+[Dolphin]
+Timestamp=2013,12,31,17,50,28
+ViewMode=1
+These images copyright Steven Mitchell and Benson Mitchell (2013)
+
+and are released to the Public Domain.
Add a comment to this file

rt/icon0-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon0-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon0-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon1-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon1-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon1-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon2-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon2-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon2-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon3-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon3-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon3-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon4-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon4-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon4-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon5-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon5-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon5-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon6-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon6-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon6-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon7-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon7-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon7-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon8-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon8-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon8-up_28_28_32.png

Added
New image
Add a comment to this file

rt/icon9-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/icon9-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/icon9-up_28_28_32.png

Added
New image
Add a comment to this file

rt/iconC-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/iconC-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/iconC-up_28_28_32.png

Added
New image
Add a comment to this file

rt/iconIns-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/iconIns-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/iconIns-up_28_28_32.png

Added
New image
Add a comment to this file

rt/iconM-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/iconM-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/iconM-up_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectcopy-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectcopy-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectcopy-up_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectmove-disabled_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectmove-dn_28_28_32.png

Added
New image
Add a comment to this file

rt/iconrectmove-up_28_28_32.png

Added
New image
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.