Version 2.0 of djh-imouse is now available for users of lemacs 19.3 and 19.4
The README is enclosed below.

If you wish a copy, please mail me.

A big THANK YOU to my beta testers for all your useful comments and feedback.

Note, it is *not* suitable for users of the ready-built versions of lemacs;
you must have the original source files as they require a small amount of
patching. Patch files are included in djh-imouse-2.0.

--
Regards, David

8< ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CUT HERE for file: README
Author : David Hughes <djh@cis.prime.com>
Date   : 24th January 1993

Package : djh-imouse-2.0

Preamble
========

Over a year ago, when I was still using Epoch, I came across a smart mouse
package called imouse by Martin Boyer <gamin@ireq-robot.hydro.qc.ca> which
I was very impressed with. I took this and customised it somewhat to be more
suitable for my needs and to add some of my own features.

Then along came Lucid Emacs19 which knocked Epoch flying... However I was not
happy with the mouse handling that comes as standard and decided to go through
the painful process of writing my own system based on what I had for Epoch.

Comments, feedback etc are very welcome.

Features of djh-imouse
======================

    * Dynamic line numbering in the modeline

    * The usual drag or double click select

    * Extending currently selected text

    * Selection of logical things (words, lines, strings, sexps etc)
      with a single mouse click - this where thing.el is used

    * Text cutting with the mouse

    * Paste or Move of selected text

    * Smart context specific mouse actions

    * Window splitting at arbitary positions with a single mouse click

    * Resizing a window by dragging the modeline up or down

    * Scrolling of arbitary windows by clicking on the modeline

    * Yanking the buffer or file-path-name by clicking on the modeline

    * Configurable mouse buttons - you choose which behave as "SELECT",
      "PASTE" and "MODIFY"

    * Prettify code with simple mouse clicks

Installation
============

1.  There are a number of patch files that need to applied first.

    For lemacs19.3 they are in
    djh-imouse-2.0/patch_files_19.3/{src.lisp}

    For lemacs19.4 they are in
    djh-imouse-2.0/patch_files_19.4/{src.lisp}

    For example you need to type :

    patch lemacs-19.4/src/data.c djh-imouse-2.0/patch_files_19.4/src/patch-data.c

2.  Copy the lisp directory djh-imouse-2.0/djh-imouse into the standard area

    cp -r djh-imouse-2.0/djh-imouse emacs/lisp/djh-imouse

    Note: lisp files in djh-imouse-2.0/djh-imouse are already byte-compiled. If
          you need to recompile anything, then use the following byte-compiler
          settings:

(setq byte-optimize t
      byte-optimize-log nil
      byte-compile-verbose nil
      byte-compile-delete-errors t
      byte-compile-error-on-warn nil
      byte-compile-emacs18-compatibility t
      byte-compile-warnings (list 'callargs)
      byte-compile-generate-emacs19-bytecodes nil)

3.  Rebuild lemacs19

4.  Add the following lines to your .emacs file :

;;;;;;;;;;;;;;;;;; Start for djh-imouse stuff ;;;;;;;;;;;;;;;;;;;;;;;;;

(defconst have-x-windows (eq window-system 'x))
(defconst running-epoch (and have-x-windows
                           (boundp 'epoch::version)))
(defconst running-emacs19 (and have-x-windows
                             (not running-epoch)
                             (fboundp 'compiled-function-p)))
(defconst running-dumb-emacs (not (or running-epoch running-emacs19)))

(cond (running-emacs19
       (require 'djh-imouse)

       ;; By default djh-imouse turns OFF zmacs regions
       ;; If you want zmacs then uncomment the following line
       ;;(setq zmacs-region t)

       ;; Some suggested djh-imouse key bindings 
       (define-key global-map "\C-hp"  'mouse-summary)

       ;; these are for Sun keyboard; modify as necessary
       (define-key global-map 'f19 'kill-ring-save)
       (define-key global-map 'f18 'insert-selection)
       (define-key global-map 'SunF36 'clear-X-selection)))


;; djh-imouse supports automatic line-numbering in the modeline
(defconst mode-line-line-numbering-p (not running-dumb-emacs))
(make-variable-buffer-local 'mode-line-line-numbering-p)

(defconst mode-line-buffer-info
  (if running-dumb-emacs
      '(buffer-file-name "%f " "%b  [%p%]]")
    '(buffer-file-name "%f  %l/%t" "%b  [%p%]]")))
(make-variable-buffer-local 'mode-line-buffer-info)

;; Refresh the mode line to set up automatic line numbering
(refresh-mode-line t)

;; Byte Compiler Flags
(setq byte-optimize t
      byte-optimize-log nil
      byte-compile-verbose nil
      byte-compile-delete-errors t
      byte-compile-error-on-warn nil
      byte-compile-emacs18-compatibility t
      byte-compile-warnings (list 'callargs)
      byte-compile-generate-emacs19-bytecodes nil)

;;;;;;;;;;;;;;;;;; End for djh-imouse stuff ;;;;;;;;;;;;;;;;;;;;;;;;;;;

Sample stuff for .Xdefaults
===========================

!
! Emacs19
!
Emacs*menubar.background:                    LightSeaGreen
Emacs*menubar.foreground:                    black
Emacs*modeline.attributeFont:                lucidasanstypewriter-bold-12
Emacs*modeline.attributeForeground:          black
Emacs*modeline.attributeBackground:          LightSeaGreen
Emacs*primary-selection.attributeBackground: MediumSeaGreen
Emacs*primary-selection.attributeForeground: black
Emacs*primary-selection.attributeFont:       lucidasanstypewriter-bold-12
Emacs*bold.attributeFont:                    lucidasanstypewriter-bold-12
Emacs*isearch.attributeBackground:           gold
Emacs*isearch.attributeForeground:           black
Emacs*bold-italic.attributeFont:             courBO-12
#ifdef COLOR
Emacs*cursorColor:                           black
Emacs*default.attributeBackground:           DarkSeaGreen
Emacs*default.attributeForeground:           black
Emacs*highlight.attributeForeground:         black
Emacs*highlight.attributeBackground:         gold
#else
Emacs*cursorColor:                           white
Emacs*default.attributeBackground:           black
Emacs*default.attributeForeground:           white
#endif
Emacs*default.attributeFont:                 lucidasanstypewriter-12
Emacs*italic.attributeFont:                  courO-12
Emacs*iconic:                                False
Emacs*interline:                             5
Emacs*menubar*font:   -adobe-times-bold-r-normal--14-140-75-75-p-77-iso8859-1


Usage
=====

Note - unlike the standard lemacs system, I prefer mouse selections to
       remain selected even when moving the cursor using the mouse. This
       allows you to extend the selection later and also gives you total
       control over when the selection dies. For this reason, I recommend
       hot-wiring a function key to 'clear-X-selection, a function in
       djh-imouse.el. Above, I bind F11 (SunF36) to this as an example.

A reasonably intelligent user should be able to work out how to use my
package by using the on-screen help. The package adds "Help on Mouse"
to the Help menu on the menubar. If you use the above suggested key
bindings you will be able to get the same help using C-h p.

Your comments on the wording of this mouse help summary are invited.

Briefly [using the default mouse button settings - these ARE configurable] :

Mouse Buttons
Left   = SELECT
Middle = PASTE
Right  = MODIFY

Modifiers
Control = THING
Shift   = WINDOW
Meta    = DELETE  (By Meta I mean the diamond key on a sparc keyboard)

                  SELECT (Left)          PASTE (Middle)         MODIFY (Right)

Normal           Set point or drag      Paste selection        Extend drag

THING  (Ctrl)    Select thing           Copy thing at point    Select big thing
WINDOW (Shft)    Smart context action   Return to last point   Drag scroll
DELETE (Meta)    Delete character       Move selection         Kill region

DELETE+THING     Kill thing             Move thing at point    Kill big thing
WINDOW+DELETE    Prettify selection     Split vertically       Prettify func
WINDOW+THING     Line to top            Line to center         Line to bottom

MODELINE         Scroll window up       Recenter window        Scroll window dn
MODELINE+THING   Cut function name      Paste function name    Move modeline
MODELINE+WINDOW  Cut buffer pathname    Paste buffer pathname  Move modeline
MODELINE+DELETE  Toggle line numbering  Split horizontally     Toggle abbrev
MODE+DEL+THING   Delete window
MODE+DEL+WINDOW  Delete other windows

C+S+Meta         This summary           This summary           This summary