Article 15041 of comp.lang.perl: Path: netlabs!news.cerf.net!usc!sol.ctr.columbia.edu!news.kei.com!bloom-beacon.mit.edu!paperboy.osf.org!meissner From: meissner@osf.org (Michael Meissner) Newsgroups: comp.lang.perl Subject: Re: question on using perldb.el with emacs Date: 17 Oct 1993 21:10:21 GMT Organization: Open Software Foundation Lines: 297 Message-ID: References: NNTP-Posting-Host: pasta.osf.org In-reply-to: bshaw@bobasun.spdc.ti.com's message of Sun, 17 Oct 1993 19:35:24 GMT In article bshaw@bobasun.spdc.ti.com (Bob Shaw) writes: | Hi folks | | Say, I'm trying to use perldb with emacs. I can invoke perldb | within emacs ok and get the window *perldb-foo* but when it asks | for "additional command line arguments" , no matter what I give it | I get the error message Symbol's function definition is void: make- | shell. | | The debugger , by itself, works fine but wanted to try out perldb in | emacs. This is a symptom of using Emacs 19.xx with perldb.el which was originally made for emacs version 18.xx. You can either install the emacs19 replacement for perldb that hooks it in with GUD (grand unified debugger), or apply the patches that I picked off of the net (I use the perldb replacement that uses GUD myself): #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". # # made 10/17/1993 21:07 UTC by meissner@pasta.osf.org # Source directory /usr/users/meissner/elisp # # existing files will NOT be overwritten unless -c is specified # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 4761 -rw-r--r-- emacs19-perldb.el # 3845 -rw-rw-r-- emacs19-perldb.patches # # ============= emacs19-perldb.el ============== if test -f 'emacs19-perldb.el' -a X"$1" != X"-c"; then echo 'x - skipping emacs19-perldb.el (File already exists)' else echo 'x - extracting emacs19-perldb.el (Text)' sed 's/^X//' << 'SHAR_EOF' > 'emacs19-perldb.el' && X;; Author : Stephane Boucher X;; Note : This is an add on for gud (Part of GNU Emacs 19). It is X;; derived from the gdb section that is part of gud. X X;; Copyright (C) 1993 Stephane Boucher. X X;; Perldb is free software; you can redistribute it and/or modify X;; it under the terms of the GNU General Public License as published by X;; the Free Software Foundation; either version 2, or (at your option) X;; any later version. X X;; Perldb Emacs is distributed in the hope that it will be useful, X;; but WITHOUT ANY WARRANTY; without even the implied warranty of X;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the X;; GNU General Public License for more details. X X;; You should have received a copy of the GNU General Public License X;; along with GNU Emacs; see the file COPYING. If not, write to X;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. X X(require 'gud) X X;; ====================================================================== X;; perldb functions X X;;; History of argument lists passed to perldb. X(defvar gud-perldb-history nil) X X(defun gud-perldb-massage-args (file args) X (cons "-d" (cons file (cons "-emacs" args)))) X X;; There's no guarantee that Emacs will hand the filter the entire X;; marker at once; it could be broken up across several strings. We X;; might even receive a big chunk with several markers in it. If we X;; receive a chunk of text which looks like it might contain the X;; beginning of a marker, we save it here between calls to the X;; filter. X(defvar gud-perldb-marker-acc "") X X(defun gud-perldb-marker-filter (string) X (save-match-data X (setq gud-perldb-marker-acc (concat gud-perldb-marker-acc string)) X (let ((output "")) X X ;; Process all the complete markers in this chunk. X (while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n" X gud-perldb-marker-acc) X (setq X X ;; Extract the frame position from the marker. X gud-last-frame X (cons (substring gud-perldb-marker-acc (match-beginning 1) (match-end 1)) X (string-to-int (substring gud-perldb-marker-acc X (match-beginning 2) X (match-end 2)))) X X ;; Append any text before the marker to the output we're going X ;; to return - we don't include the marker in this text. X output (concat output X (substring gud-perldb-marker-acc 0 (match-beginning 0))) X X ;; Set the accumulator to the remaining text. X gud-perldb-marker-acc (substring gud-perldb-marker-acc (match-end 0)))) X X ;; Does the remaining text look like it might end with the X ;; beginning of another marker? If it does, then keep it in X ;; gud-perldb-marker-acc until we receive the rest of it. Since we X ;; know the full marker regexp above failed, it's pretty simple to X ;; test for marker starts. X (if (string-match "^\032.*\\'" gud-perldb-marker-acc) X (progn X ;; Everything before the potential marker start can be output. X (setq output (concat output (substring gud-perldb-marker-acc X 0 (match-beginning 0)))) X X ;; Everything after, we save, to combine with later input. X (setq gud-perldb-marker-acc X (substring gud-perldb-marker-acc (match-beginning 0)))) X X (setq output (concat output gud-perldb-marker-acc) X gud-perldb-marker-acc "")) X X output))) X X(defun gud-perldb-find-file (f) X (find-file-noselect f)) X X;;;###autoload X(defun perldb (command-line) X "Run perldb on program FILE in buffer *gud-FILE*. XThe directory containing FILE becomes the initial working directory Xand source-file directory for your debugger." X (interactive X (list (read-from-minibuffer "Run perldb (like this): " X (if (consp gud-perldb-history) X (car gud-perldb-history) X "perl ") X nil nil X '(gud-perldb-history . 1)))) X (gud-overload-functions '((gud-massage-args . gud-perldb-massage-args) X (gud-marker-filter . gud-perldb-marker-filter) X (gud-find-file . gud-perldb-find-file) X )) X X (gud-common-init command-line) X X (gud-def gud-break "b %l" "\C-b" "Set breakpoint at current line.") X (gud-def gud-remove "d %l" "\C-d" "Remove breakpoint at current line") X (gud-def gud-step "s" "\C-s" "Step one source line with display.") X (gud-def gud-next "n" "\C-n" "Step one line (skip functions).") X (gud-def gud-cont "c" "\C-r" "Continue with display.") X; (gud-def gud-finish "finish" "\C-f" "Finish executing current function.") X; (gud-def gud-up "up %p" "<" "Up N stack frames (numeric arg).") X; (gud-def gud-down "down %p" ">" "Down N stack frames (numeric arg).") X (gud-def gud-print "%e" "\C-p" "Evaluate perl expression at point.") X X (setq comint-prompt-regexp "^ DB<[0-9]+> ") X (run-hooks 'perldb-mode-hook) X ) SHAR_EOF chmod 0644 emacs19-perldb.el || echo 'restore of emacs19-perldb.el failed' Wc_c="`wc -c < 'emacs19-perldb.el'`" test 4761 -eq "$Wc_c" || echo 'emacs19-perldb.el: original size 4761, current size' "$Wc_c" fi # ============= emacs19-perldb.patches ============== if test -f 'emacs19-perldb.patches' -a X"$1" != X"-c"; then echo 'x - skipping emacs19-perldb.patches (File already exists)' else echo 'x - extracting emacs19-perldb.patches (Text)' sed 's/^X//' << 'SHAR_EOF' > 'emacs19-perldb.patches' && XFrom dmm0t@rincewind.mech.virginia.edu Fri Jul 16 23:17:10 1993 XPath: paperboy.osf.org!bloom-beacon.mit.edu!biosci!uwm.edu!ux1.cso.uiuc.edu!howland.reston.ans.net!darwin.sura.net!news-feed-2.peachnet.edu!concert!uvaarpa!murdoch!rincewind.mech.virginia.edu!dmm0t XFrom: dmm0t@rincewind.mech.virginia.edu (David Meyer) XNewsgroups: gnu.emacs.sources XSubject: patches to perldb.el for emacs-19 XMessage-ID: XDate: 15 Jul 93 17:18:07 GMT XSender: usenet@murdoch.acc.Virginia.EDU XOrganization: University of Virginia XLines: 97 X X XHere are my patches to perldb.el (the perl debugger mode that comes Xwith perl 4.0xx). Basically, all I've done is to hack perldb.el to Xuse comint.el stuff rather than the old shell.el stuff (i.e. change Xshell-mode-map to comint-mode-map). X XI've been using my patched version without problem, but if anyone sees Xsomething I've missed, please post or send e-mail. X X Thanks, X Dave X X X*** /Users/dmm0t/perldb.el Thu Jul 15 13:06:59 1993 X--- perldb.el Tue Jul 6 22:24:41 1993 X*************** X*** 65,71 **** X X (if perldb-mode-map X nil X! (setq perldb-mode-map (copy-keymap shell-mode-map)) X (define-key perldb-mode-map "\C-l" 'perldb-refresh)) X X (define-key ctl-x-map " " 'perldb-break) X--- 65,71 ---- X X (if perldb-mode-map X nil X! (setq perldb-mode-map (copy-keymap comint-mode-map)) X (define-key perldb-mode-map "\C-l" 'perldb-refresh)) X X (define-key ctl-x-map " " 'perldb-break) X*************** X*** 122,131 **** X (setq mode-name "Inferior Perl") X (setq mode-line-process '(": %s")) X (use-local-map perldb-mode-map) X! (make-local-variable 'last-input-start) X! (setq last-input-start (make-marker)) X! (make-local-variable 'last-input-end) X! (setq last-input-end (make-marker)) X (make-local-variable 'perldb-last-frame) X (setq perldb-last-frame nil) X (make-local-variable 'perldb-last-frame-displayed-p) X--- 122,131 ---- X (setq mode-name "Inferior Perl") X (setq mode-line-process '(": %s")) X (use-local-map perldb-mode-map) X! (make-local-variable 'comint-last-input-start) X! (setq comint-last-input-start (make-marker)) X! (make-local-variable 'comint-last-input-end) X! (setq comint-last-input-end (make-marker)) X (make-local-variable 'perldb-last-frame) X (setq perldb-last-frame nil) X (make-local-variable 'perldb-last-frame-displayed-p) X*************** X*** 134,142 **** X (setq perldb-delete-prompt-marker nil) X (make-local-variable 'perldb-filter-accumulator) X (setq perldb-filter-accumulator nil) X! (make-local-variable 'shell-prompt-pattern) X! (setq shell-prompt-pattern perldb-prompt-pattern) X! (run-hooks 'shell-mode-hook 'perldb-mode-hook)) X X (defvar current-perldb-buffer nil) X X--- 134,142 ---- X (setq perldb-delete-prompt-marker nil) X (make-local-variable 'perldb-filter-accumulator) X (setq perldb-filter-accumulator nil) X! (make-local-variable 'comint-prompt-regexp) X! (setq comint-prompt-regexp perldb-prompt-pattern) X! (run-hooks 'comint-mode-hook 'perldb-mode-hook)) X X (defvar current-perldb-buffer nil) X X*************** X*** 189,195 **** X (setq default-directory dir) X (or (bolp) (newline)) X (insert "Current directory is " default-directory "\n") X! (apply 'make-shell X (concat "perldb-" file) perldb-command-name nil "-d" path "-emacs" X (parse-args args)) X (perldb-mode) X--- 189,195 ---- X (setq default-directory dir) X (or (bolp) (newline)) X (insert "Current directory is " default-directory "\n") X! (apply 'make-comint X (concat "perldb-" file) perldb-command-name nil "-d" path "-emacs" X (parse-args args)) X (perldb-mode) X-- XDavid M. Meyer Mechanical & Aerospace Engineering Xdmm0t@rincewind.mech.virginia.edu University of Virginia XNeXTmail ok X SHAR_EOF chmod 0664 emacs19-perldb.patches || echo 'restore of emacs19-perldb.patches failed' Wc_c="`wc -c < 'emacs19-perldb.patches'`" test 3845 -eq "$Wc_c" || echo 'emacs19-perldb.patches: original size 3845, current size' "$Wc_c" fi exit 0 -- Michael Meissner email: meissner@osf.org phone: 617-621-8861 Open Software Foundation, 11 Cambridge Center, Cambridge, MA, 02142 Old hackers never die, their bugs just increase.