home *** CD-ROM | disk | FTP | other *** search
- Date: Wed, 12 Aug 1992 22:16:34 +0200
- From: girou%circe.fr@lucid.com (Denis GIROU)
- Message-ID: <9208122016.AA10980@lumiere.circe.fr>
- Subject: lemacs 19.2
- Newsgroups: alt.lucid-emacs.help
- Path: sparky!uunet!wendy-fate.uu.net!help-lucid-emacs
- Sender: help-lucid-emacs-request@lucid.com
- Lines: 431
-
-
- 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 |
- ------------------------------------------------------
-