(gud-find-class): Remove unused var `pos'.
(gdb-script-mode-syntax-table, gdb-script-font-lock-keywords) (gdb-script-font-lock-syntactic-keywords) (gdb-script-font-lock-syntactic-face, gdb-script-basic-indent) (gdb-script-skip-to-head, gdb-script-calculate-indentation) (gdb-script-indent-line, gdb-script-mode): New mode to edit .gdbinit-like scripts.
This commit is contained in:
97
lisp/gud.el
97
lisp/gud.el
@@ -4,7 +4,7 @@
|
||||
;; Maintainer: FSF
|
||||
;; Keywords: unix, tools
|
||||
|
||||
;; Copyright (C) 1992,93,94,95,96,1998,2000,2002 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 1992,93,94,95,96,1998,2000,02,2003 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
@@ -2831,8 +2831,7 @@ class of the file (using s to separate nested class ids)."
|
||||
(if (and fbuffer (equal (symbol-file 'java-mode) "cc-mode"))
|
||||
(save-excursion
|
||||
(set-buffer fbuffer)
|
||||
(let ((nclass) (syntax)
|
||||
(pos (point)))
|
||||
(let ((nclass) (syntax))
|
||||
;; While the c-syntactic information does not start
|
||||
;; with the 'topmost-intro symbol, there may be
|
||||
;; nested classes...
|
||||
@@ -2874,6 +2873,98 @@ class of the file (using s to separate nested class ids)."
|
||||
(message "gud-find-class: class for file %s not found in gud-jdb-class-source-alist!" f)
|
||||
nil))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; GDB script mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(defvar gdb-script-mode-syntax-table
|
||||
(let ((st (make-syntax-table)))
|
||||
(modify-syntax-entry ?' "\"" st)
|
||||
(modify-syntax-entry ?# "<" st)
|
||||
(modify-syntax-entry ?\n ">" st)
|
||||
st))
|
||||
|
||||
(defvar gdb-script-font-lock-keywords
|
||||
'(("^define\\s-+\\(\\w+\\)" (1 font-lock-function-name-face))
|
||||
("^\\s-*\\([a-z]+\\)" (1 font-lock-keyword-face))))
|
||||
|
||||
(defvar gdb-script-font-lock-syntactic-keywords
|
||||
'(("^document\\s-.*\\(\n\\)" (1 "< b"))
|
||||
;; It would be best to change the \n in front, but it's more difficult.
|
||||
("^en\\(d\\)\\>" (1 "> b"))))
|
||||
|
||||
(defun gdb-script-font-lock-syntactic-face (state)
|
||||
(cond
|
||||
((nth 3 state) font-lock-string-face)
|
||||
((nth 7 state) font-lock-doc-face)
|
||||
(t font-lock-comment-face)))
|
||||
|
||||
(defvar gdb-script-basic-indent 2)
|
||||
|
||||
(defun gdb-script-skip-to-head ()
|
||||
"We're just in front of an `end' and we need to go to its head."
|
||||
(while (and (re-search-backward "^\\s-*\\(\\(end\\)\\|define\\|document\\|if\\|while\\)\\>" nil 'move)
|
||||
(match-end 2))
|
||||
(gdb-script-skip-to-head)))
|
||||
|
||||
(defun gdb-script-calculate-indentation ()
|
||||
(cond
|
||||
((looking-at "end\\>")
|
||||
(gdb-script-skip-to-head)
|
||||
(current-indentation))
|
||||
((looking-at "else\\>")
|
||||
(while (and (re-search-backward "^\\s-*\\(if\\|\\(end\\)\\)\\>" nil 'move)
|
||||
(match-end 2))
|
||||
(gdb-script-skip-to-head))
|
||||
(current-indentation))
|
||||
(t
|
||||
(forward-comment (- (point-max)))
|
||||
(forward-line 0)
|
||||
(skip-chars-forward " \t")
|
||||
(+ (current-indentation)
|
||||
(if (looking-at "\\(if\\|while\\|define\\|else\\)\\>")
|
||||
gdb-script-basic-indent 0)))))
|
||||
|
||||
(defun gdb-script-indent-line ()
|
||||
"Indent current line of GDB script."
|
||||
(interactive)
|
||||
(if (and (eq (get-text-property (point) 'face) font-lock-doc-face)
|
||||
(save-excursion
|
||||
(forward-line 0)
|
||||
(skip-chars-forward " \t")
|
||||
(not (looking-at "end\\>"))))
|
||||
'noindent
|
||||
(let* ((savep (point))
|
||||
(indent (condition-case nil
|
||||
(save-excursion
|
||||
(forward-line 0)
|
||||
(skip-chars-forward " \t")
|
||||
(if (>= (point) savep) (setq savep nil))
|
||||
(max (gdb-script-calculate-indentation) 0))
|
||||
(error 0))))
|
||||
(if savep
|
||||
(save-excursion (indent-line-to indent))
|
||||
(indent-line-to indent)))))
|
||||
|
||||
;;;###autoload
|
||||
(add-to-list 'auto-mode-alist '("/\\.gdbinit" . gdb-script-mode))
|
||||
|
||||
;;;###autoload
|
||||
(define-derived-mode gdb-script-mode nil "GDB-Script"
|
||||
"Major mode for editing GDB scripts"
|
||||
(set (make-local-variable 'comment-start) "#")
|
||||
(set (make-local-variable 'comment-start-skip) "#+\\s-*")
|
||||
(set (make-local-variable 'outline-regexp) "[ \t]")
|
||||
(set (make-local-variable 'imenu-generic-expression)
|
||||
'((nil "^define[ \t]+\\(\\w+\\)" 1)))
|
||||
(set (make-local-variable 'indent-line-function) 'gdb-script-indent-line)
|
||||
(set (make-local-variable 'font-lock-defaults)
|
||||
'(gdb-script-font-lock-keywords nil nil ((?_ . "w")) nil
|
||||
(font-lock-syntactic-keywords
|
||||
. gdb-script-font-lock-syntactic-keywords)
|
||||
(font-lock-syntactic-face-function
|
||||
. gdb-script-font-lock-syntactic-face))))
|
||||
|
||||
(provide 'gud)
|
||||
|
||||
;;; gud.el ends here
|
||||
|
||||
Reference in New Issue
Block a user