From: mmanti <mm...@ho...> - 2001-10-19 03:44:58
|
I'm having difficulty in getting the keybindings in ilisp 5.11 (XEmacs 21.1.14) to work with mzscheme. (My current .emacs is included at the bottom.) The keybindings work great in the process buffer window where mzscheme is running, but they don't appear to be mapped for the buffer where I'm editing my program. It doesn't matter whether I start ilisp by M-x run-ilisp mzscheme, M-x mzscheme, or by C-x C-f blah.scm. The only way that I get keybindings in the buffer where I edit my program is by using M-x scheme first, then C-x C-f blah.scm. It's moderately inconvenient and annoying, but it also strikes me as telling. Unfortunately, I'm such an (X)Emacs customization neophyte that I don't know *what* it's telling me. Any help on this would be greatly appreciated. Thank you. Michael mm...@ho... ;;; ilisp.emacs -- ;;; If you always want partial minibuffer completion (require 'completer) ;;; Autoload based on your Lisp. You only really need the one you ;;; use. If called with a prefix, you will be prompted for a ;;; buffer and program. (autoload 'run-ilisp "ilisp" "Select a new inferior Lisp." t) ;(autoload 'common-lisp "ilisp" "Inferior generic Common Lisp." t) (autoload 'cmulisp "ilisp" "Inferior CMU Common Lisp." t) ;(autoload 'scheme "ilisp" "Inferior generic Scheme." t) (autoload 'mzscheme "ilisp" "Inferior MzScheme." t) ;;; Define where Lisp programs are found. (This may already have ;;; been done at your site). (setq cmulisp-program "/usr/bin/lisp") (setq scheme-mit-dialect nil) ;(setq scheme-program ; "mzscheme") ;(setq scheme-program-name ; "mzscheme") ;;; This makes reading a Lisp or Scheme file load in ILISP. (set-default 'auto-mode-alist (append '(("\\.lisp$" . lisp-mode) ("\\.lsp$" . lisp-mode) ("\\.cl$" . lisp-mode)) auto-mode-alist)) (setq lisp-mode-hook '(lambda () (require 'ilisp))) (set-default 'auto-mode-alist (append '(("\\.scm$" . scheme-mode) ("\\.ss$" . scheme-mode) ("\\.stk$" . scheme-mode) ("\\.stklos$" . scheme-mode)) auto-mode-alist)) (setq scheme-mode-hook '(lambda () (require 'ilisp))) ;;; Configuration of Erik Naggum's HyperSpec access package. ;; If you have a local copy of the HyperSpec, set its path here. ; (setq common-lisp-hyperspec-root ; "file:/home/joe/HyperSpec/") ;;; Sample load hook (add-hook 'ilisp-load-hook '(lambda () ;; Change default key prefix to C-c (setq ilisp-*prefix* "\C-c") ;; Set a keybinding for the COMMON-LISP-HYPERSPEC command (defkey-ilisp "" 'common-lisp-hyperspec) ;; Make sure that you don't keep popping up the 'inferior ;; Lisp' buffer window when this is already visible in ;; another frame. Actually this variable has more impact ;; than that. Watch out. ; (setq pop-up-frames t) (message "Running ilisp-load-hook") ;; Define LispMachine-like key bindings, too. ; (ilisp-lispm-bindings) Sample initialization hook. ;; Set the inferior Lisp directory to the directory of ;; the buffer that spawned it on the first prompt. (add-hook 'ilisp-init-hook '(lambda () (default-directory-lisp ilisp-last-buffer))) )) ;;; end of file -- ilisp.emacs -- |
From: Hannu K. <az...@ik...> - 2001-10-19 08:40:47
|
mmanti <mm...@ho...> writes: | bottom.) The keybindings work great in the | process buffer window where mzscheme is running, but they don't appear | to be mapped for the buffer where I'm editing my program. It doesn't | matter whether I start ilisp by M-x run-ilisp mzscheme, M-x mzscheme, I can understand this... | or by C-x C-f blah.scm. ...but not this. Are you sure about this case? I'm assuming that there was some temporary weirdness going on when you tried this case. If this indeed doesn't work, then my fix below may not help either. | The only way that I get keybindings in the buffer where I edit my | program is by using M-x scheme first, then C-x C-f blah.scm. Right. The problem is that ILISP adds its keybindings to scheme-mode-map when it (ILISP) is loaded and only if scheme-mode-map exists. Unfortunately it doesn't exist when ILISP is loaded via M-x run-ilisp or M-x mzscheme but it _should_ exist when you do load it via C-x C-f blah.scm, because scheme-mode (and thus its map) is loaded at the point when your scheme-mode-hook, which loads ILISP, is called. I believe there is a similar (if not equivalent) problem with ILISP menu (if you enable it for Scheme), but I haven't checked that. I present a workaround to the problem below as a modification to your .emacs. This should obviously be fixed in ILISP but I'm currently not motivated to do that. | ;;; ilisp.emacs -- This example file is in a quite poor state :( | (setq lisp-mode-hook '(lambda () (require 'ilisp))) This does not affect your problem but this would be better written like this (actually, this still sucks but that's due to ILISP): (defun my-lisp-mode-hook () (require 'ilisp)) (add-hook 'lisp-mode-hook 'my-lisp-mode-hook) | (setq scheme-mode-hook '(lambda () (require 'ilisp))) This should fix your problem: (defun my-scheme-mode-hook () (require 'ilisp) (ilisp-bindings)) (add-hook 'scheme-mode-hook 'my-scheme-mode-hook) | (add-hook 'ilisp-load-hook | '(lambda () No quote needed in front of a (lambda ...) form | (add-hook 'ilisp-init-hook | '(lambda () Ditto. I didn't try evaluating these so I hope I didn't do any typos or similar. -- Hannu Please don't send copies of list mail |