Hello everybody.

  I install Lucid 19.2 on a DEC 3100 workstation since some weeks, and it's
work fine! It's clear that it's a fine and impressive work...

  Here I want to summarize my problems, modifications and (very little!)
improvements. I hope that this can be useful to somebody.


  1 - Installation on a DEC 3100 workstation (Ultrix 4.1) with DEC compiler :
      ---------------------------------------------------------------------

      I succeed to install Lucid 19.2, but I obtain three severe errors that I
must correct (I'm sure that I don't do that in the right way!). I dont' know
if these problems are already reported and corrected in 19.3.

    The problems are in screen.c, xterm.c and indent.c

cc -g -Demacs  -I./lwlib -DNEED_STRDUP -c screen.c
ccom: Error: ./extents.h, line 187: function declaration in bad context
       int from, int to, int maparg, int closed_end);
      ----------------------------------------------^
ccom: Error: ./extents.h, line 190: function declaration in bad context
      (int extent_obj, int flag);
      --------------------------^
ccom: Error: ./extents.h, line 192: function declaration in bad context
      (int extent_obj, int flag);
      --------------------------^
ccom: Error: ./extents.h, line 193: function declaration in bad context
      extern int Fextent_start_position (int extent_obj);
      --------------------------------------------------^
ccom: Error: ./extents.h, line 194: function declaration in bad context
      extern int Fextent_end_position (int extent_obj);
      ------------------------------------------------^
ccom: Error: ./extents.h, line 195: function declaration in bad context
      extern int Fextent_length (int extent_obj);
      ------------------------------------------^
ccom: Error: ./extents.h, line 196: function declaration in bad context
      extern int Fextent_buffer (int extent_obj);
      ------------------------------------------^
ccom: Error: ./extents.h, line 197: function declaration in bad context
      extern int Fextent_to_generic_id (int extent_obj);
      -------------------------------------------------^
*** Error code 1

Stop.

cc -g -Demacs  -I./lwlib -DNEED_STRDUP -c xterm.c
cpp: warning ./m/m-mips.h:119: DATA_START redefined
ccom: Error: xterm.c, line 2489: syntax error
        int (*prev_handler) (Display*, XErrorEvent*);
      -------------------------------------------^
ccom: Error: xterm.c, line 2491: illegal lhs of assignment operator
        (x_input_blocked++);
      -------------------^
(ccom): xterm.c, line 2491: cannot recover from earlier errors: goodbye!
        (x_input_blocked++);
      -------------------^
*** Error code 1

Stop.

cc -g -Demacs  -I./lwlib -DNEED_STRDUP -c indent.c
ccom: Error: indent.c, line 72: nonunique name demands struct/union or struct/union pointer
        thisbuf = buffer->display_table;
      --------------------------------^
*** Error code 1

Stop.

  2 - 8 bits characters :
      -----------------

      It's clear that it's a very important aspect for European people. And
there are still several problems with 8 bits characters in Lucid (in Epoch,
with the keriven contrib - patches and additions - I believe that the
different aspects of the 8 bits requirement are near solved). I believe that
some parts of this contrib are to report on Lucid.

    2.1 - Problem of delimiters :

      The 8 bits characters are falsely used as delimeters for functions
like forward-word, backward-word, kill-word, etc.

    2.2 - Problems with uppercase and downcase :

      The uppercase, lowercase and capitalize functions doesn't work with 8
bits characters.

    2.3 - Problem in isearch.el :

      The isearch function exit anormally when we input a character superior
to 128. I must do the following modifications :

lumiere (13:49) [1643]> diff isearch.el isearch.el~
134,143c134,140
< ; Modification Denis GIROU - 31 Jul. 1992
< 	   (cond
<   	   ;; Meta character no longer means exit search.
< ;;; 	    ((and (or (not (integerp char))
< ;;; 			   (and (>= char 128)
< ;;; 				(not (= char search-ring-advance-char))
< ;;; 				(not (= char search-ring-retreat-char))))
< ;;; 		       search-exit-option)
< ;;; 		  (setq unread-command-event event)
< ;;; 		  (throw 'search-done t))
---
> 	   (cond ((and (or (not (integerp char))
> 			   (and (>= char 128)
> 				(not (= char search-ring-advance-char))
> 				(not (= char search-ring-retreat-char))))
> 		       search-exit-option)
> 		  (setq unread-command-event event)
> 		  (throw 'search-done t))
286,289c283
< ;;; Modification Denis GIROU - 31 Jul. 1992
< 			       (or
< ;;; 				   (>= char ?\177)
< 				   (= char ?\177)
---
> 			       (or (>= char ?\177)
305,308c299
< ;;; Modification Denis GIROU - 31 Jul. 1992
< ;;;						       (text-char-description char)
< 						       (char-to-string char)
< 						       ))))
---
> 						       (text-char-description char)))))

    2.4 - Input of composed characters :

      I look an eye to the proposed solution in lisp/X11/x-compose.el for
input of accentued characters not accessible by the keyboard. In fact, like
most of people, I haven't a compose key on my keyboard, so the proposed
solution is not satisfaying for me. Nevertheless, those proposed in the 8 bits
contrib of Epoch (iso-latin-1.el from Matthieu Herrb inside the Keriven
contrib) work well with only one modification to reflect the change in the
this-command-keys function :
        (substring (this-command-keys) -1 nil)
    ==> (substring (format "%s" (aref (this-command-keys) 0)) 17 18)

      I found that this solution for compose characters is transparent and
very satisfaying.

  3 - Problem with dired-nstd.el
      --------------------------

      In fact, there is no connection with Lucid (I had the same problem with
Emacs and Epoch since my first use of dired-nstd), but it's Jamie Zawinski who
write it!

    I also believe that it's "the Right Thing" to do (and cannot understand why
it's not the default). But I have a dangerous bug : when I put an u, m, d (!!)
for the first file off a subdirectory, all the files of this subdirectory are
marked. It's clear that it's specially dangerous with the delete subcommand...
- I have (setq dired-listing-switches "-Alt")

    To avoid that, I introduce the following modification in dired-get-subdir
(I believe that it's not the right way, but it's work... In fact, there are
still sometimes some problems : the screen is not updated correctly after some
commands on the first file of a subdirectory) :

;;; Modification Denis GIROU -  3 Aug. 1992
;;; Problem whith d, u, m, w, etc. when it's the first file of a directory
(defun dired-get-subdir ()
  ;;"Return the subdir name on this line, or nil if not on a headerline."
  ;; Look up in the alist whether this is a headerline.
  (save-excursion
    (let ((cur-dir (dired-current-directory)))
      (beginning-of-line)		; alist stores b-o-l positions
      (and
;;;    (zerop (- (point)
;;; 		     (dired-get-subdir-min (assoc cur-dir
;;; 						  dired-subdir-alist))))
       (zerop (1+ (- (point)
		     (dired-get-subdir-min (assoc cur-dir
						  dired-subdir-alist)))))
	   cur-dir))))


  4 - LaTeX mode on Nelson Beebe :
      --------------------------

      The Mon, 8 Jun 92 08:30:32 EDT, Fritz Zaucker
<fritzz@lamont.ldgo.columbia.edu> writes :

>  3) latex.el from Nelson Beebe doesn't work with lemacs. It complains
>  about TeX-mode-map being undefined. Neither epoch nor GNU Emacs 18.58
>  have a problem there.

  I only comment the following lines (for GNU Emacs), and everything seems
working well (I suppose that the problem of Fritz is a problem in the way he
load his different TeX mode) :

(if (and (boundp 'window-system)
	 (equal window-system 'x)
	 (load "x-mouse" t t nil)) ;needed for following mouse-map bindings
	(progn
	  (define-key mouse-map x-button-right    'x-LaTeX-index-start)
	  (define-key mouse-map x-button-right-up 'x-LaTeX-index-end))
  )

  5 - Highlighting support for emerge.el :
      ----------------------------------

      I like emerge, but it's infinitely better if highlighting is use in
place of insertion of lines of characters. It's seems very easy to do :

;;; Denis GIROU -  3 Aug. 1992
;;; emerge : these functions redefined for Lucid highlighting support
(defun emerge-place-flags-in-buffer1 (buffer before after)
  (set-extent-face (make-extent (goto-char before) (goto-char after)) 'bold-italic))
(defun emerge-remove-flags-in-buffer (buffer before after)
  (map-extents (function (lambda (x y) (delete-extent x)))
               (current-buffer) (goto-char before) (goto-char after) nil))

  6 - Mouse support in Dired mode :
      ---------------------------

      It's easy to add some very useful capabilities of editing a file or
expanding/deexpanding a subdirectory with a single click in Dired mode :

;;; Denis GIROU - 30 Jul. 1992
;;; From an idea of Russell Ritchie, Scottish HCI Centre,
;;;      <russell@uk.ac.strath.hci> (July 88) 
(defun x-mouse-inspect-file (arg)
  "Inspect the file or the subdirectory the mouse is pointing at."
  (interactive "@e")
  (mouse-set-point arg)
  (let ((filename (dired-get-filename)))
       (if (save-excursion
           (beginning-of-line)
	   (looking-at " *d"))	; If it's a directory use dired on it.
       (dired-insert-subdir-inline filename)
       (find-file filename))))

(defun x-mouse-dired-kill-subdir (event)
  "Kill the sub-directory pointed."
  (interactive "@e")
  (mouse-set-point event)
  (dired-kill-subdir))

;;; And we just have to add (in dired-mode-hook by example) 
(define-key dired-mode-map 'button2 'x-mouse-dired-kill-subdir)
(define-key dired-mode-map 'button3 'x-mouse-inspect-file)


  7 - Mouse functions in modelines and minibuffer :
      -------------------------------------------

      I haven't found the possibility to define some mouse button functions
when the mouse is in the minibuffer or one of the modelines of the screen.
It's seem that the location returned is always nil in that cases. How to do
that?

  8 - Dynamic menus for Kill Ring, History and Shell Commands :
      ------------------------------------------------------- 

      Obviously it's a good thing to have the possibility to choice the buffer
with the "Buffers" option in the menubar. But I found useful to have the same
thing in other cases, so I modify the functions which are used for the
"Buffers" option for the case of the yank function in the kill ring, the
repetition of emacs-lisp function in the command history, and the repetition
of a previous function in the shell and telnet modes. I'm sure that we can
easily do better (I'm not a lisp expert...), but I found it useful like
that...

      N.B. : - In build-history-menu-hook the 'edit-and-eval-command function
will be better, but I didn't succeed to use it...
             - The display of occurrences of the kill ring is not perfect
because the control characters are visualize in a rather strange way... How to
correct that?

     (setq default-menubar
           ...
	     ("Buffers"	"")
	     ("KillRing" "")
	     ("History" "")
	     ("ShellCmds" "")
           ...)
     (set-screen-menubar default-menubar)

;;; For the Kill Ring ("KillRing" entry in the menubar)
(defun build-killring-menu-hook (menubar)
  "For use as a value of activate-menubar-hook.
This function changes the contents of the \"KillRing\" menu to correspond
to the current set of killring.  You can control how the text of the menu
items are generated by redefining the function `format-killring-menu-line'."
  (let ((killring-menu (car (find-menu-item menubar '("KillRing"))))
	name
	killring)
    (if (not killring-menu)
	nil
      (setq killring kill-ring)
      (if (> (length killring) 0)
	  (progn (if (> (length killring) kill-ring-max)
		     (setcdr (nthcdr kill-ring-max killring) nil))
		 (setq killring
		       (mapcar (function
				(lambda (entry)
				  (if (setq name (format-killring-menu-line entry))
				      (vector name (list 'insert entry) t))))
			       killring)))
	  (setq killring '("Empty Kill Ring!")))
      ;; slightly (only slightly) more efficient to not install the menubar
      ;; if it hasn't visibly changed.
      (if (equal killring (cdr killring-menu))
	  t  ; return t meaning "no change"
	(setcdr killring-menu killring)
	;; return the now-modified menubar to install.
	menubar)
      )))

(defun format-killring-menu-line (entry)
  (substring entry 0 (min (length entry) 30)))

(or (memq 'build-killring-menu-hook activate-menubar-hook)
    (setq activate-menubar-hook
	  (cons 'build-killring-menu-hook activate-menubar-hook)))

;;; For the History ("History" entry in the menubar)
(defun build-history-menu-hook (menubar)
  "For use as a value of activate-menubar-hook.
This function changes the contents of the \"History\" menu to correspond
to the current set of history.  You can control how the text of the menu
items are generated by redefining the function `format-history-menu-line'."
  (let ((history-menu (car (find-menu-item menubar '("History"))))
	name
	history
	(command-history-max 30))
    (if (not history-menu)
	nil
      (setq history command-history)
      (if (> (length history) 0)
	  (progn (if (> (length history) command-history-max)
		     (setcdr (nthcdr command-history-max history) nil))
		 (setq history
		       (mapcar (function
				(lambda (entry)
				  (if
				      (setq name (format-history-menu-line entry))
				      (vector name
;;; edit-and-eval-command will be better, but I didn't succeed to use it
					      (list 'eval-expression entry)
					      t))))
			       history)))
	(setq history '("Empty history list!")))
      ;; slightly (only slightly) more efficient to not install the menubar
      ;; if it hasn't visibly changed.
      (if (equal history (cdr history-menu))
	  t  ; return t meaning "no change"
	(setcdr history-menu history)
	;; return the now-modified menubar to install.
	menubar)
      )))

(defun format-history-menu-line (entry)
  (let ((entry (format "%s" entry)))
    (substring entry 0 (min (length entry) 40))))

(or (memq 'build-history-menu-hook activate-menubar-hook)
    (setq activate-menubar-hook
	  (cons 'build-history-menu-hook activate-menubar-hook)))

;;; For the Shell Commands ("ShellCmds" entry in the menubar)
(defun build-shellcmds-menu-hook (menubar)
  "For use as a value of activate-menubar-hook.
This function changes the contents of the \"ShellCmds\" menu to correspond
to the current set of shellcmds.  You can control how the text of the menu
items are generated by redefining the function `format-shellcmds-menu-line'."
  (let ((shellcmds-menu (car (find-menu-item menubar '("ShellCmds"))))
	name
	shellcmds
	(shellcmds-max 30))
    (if (not shellcmds-menu)
	nil
      (setq shellcmds
	     (let* ((ring (get-input-ring))
        	    (len (ring-length ring))
	            (i (1+ len))
		    rep)
	       (if (= len 0)
		 nil
		 (while (> i 1)
		   (setq rep (cons (format "%s" (ring-ref ring (- i 2))) rep))
		   (setq i (1- i)))
		 rep)))
      (if shellcmds
	  (progn
            (if (> (length shellcmds) shellcmds-max)
	        (setcdr (nthcdr shellcmds-max shellcmds) nil))
                (setq shellcmds
	               (mapcar (function
		         (lambda (entry)
                                 (if
			           (setq name (format-shellcmds-menu-line entry))
			           (vector name (list 'insert entry) t))))
			       shellcmds)))
	(setq shellcmds '("Not in shell mode!")))
      ;; slightly (only slightly) more efficient to not install the menubar
      ;; if it hasn't visibly changed.
      (if (equal shellcmds (cdr shellcmds-menu))
	  t  ; return t meaning "no change"
	(setcdr shellcmds-menu shellcmds)
	;; return the now-modified menubar to install.
	menubar)
      )))

(defun format-shellcmds-menu-line (entry)
  (format "%s" (substring entry 0 (min (length entry) 40))))

(or (memq 'build-shellcmds-menu-hook activate-menubar-hook)
    (setq activate-menubar-hook
	  (cons 'build-shellcmds-menu-hook activate-menubar-hook)))



  Thanks for attention.

  And many thanks to Lucid team for his work...

  Best regards,

--

------------------------------------------------------
Denis Girou (C.N.R.S./C.I.R.C.E.)                    |
Batiment 506 - B.P. 167 - 91403 Orsay Cedex - France |
E-mail : girou@circe.fr - Tel.  : 33. 1. 69.82.41.52 |
------------------------------------------------------
From: danny@amil.co.il (Danny Bar-Dov)
Subject: emacs load path
Date: Thu, 13 Aug 1992 10:28:29 GMT
Newsgroups: alt.lucid-emacs.help