]> git.eshelyaron.com Git - emacs.git/commitdiff
Function to load GDB history
authorManuel Giraud <manuel@ledu-giraud.fr>
Wed, 20 Dec 2023 11:08:30 +0000 (12:08 +0100)
committerEli Zaretskii <eliz@gnu.org>
Thu, 21 Dec 2023 11:51:28 +0000 (13:51 +0200)
* lisp/progmodes/gdb-mi.el (gud-gdb-load-history): New function to
load GDB history, code factored out of 'gdb'.
(gdb): Call it.  (Bug#67928)

lisp/progmodes/gdb-mi.el

index 7ae4bcea1e1cfe43d0b818dad8d31a0b8fdf898e..cbb165a6a0c1cf501d7ac1e9f865113cffd54fee 100644 (file)
@@ -817,6 +817,39 @@ NOARG must be t when this macro is used outside `gud-def'."
 
 (defvar gdb-control-level 0)
 
+(defun gdb-load-history ()
+  (when (ring-empty-p comint-input-ring) ; cf shell-mode
+    (let ((hfile (expand-file-name (or (getenv "GDBHISTFILE")
+                                      (if (eq system-type 'ms-dos)
+                                          "_gdb_history"
+                                        ".gdb_history"))))
+         ;; gdb defaults to 256, but we'll default to comint-input-ring-size.
+         (hsize (getenv "HISTSIZE")))
+      (dolist (file (append '("~/.gdbinit")
+                           (unless (string-equal (expand-file-name ".")
+                                                  (expand-file-name "~"))
+                             '(".gdbinit"))))
+       (if (file-readable-p (setq file (expand-file-name file)))
+           (with-temp-buffer
+             (insert-file-contents file)
+             ;; TODO? check for "set history save\\(  *on\\)?" and do
+             ;; not use history otherwise?
+             (while (re-search-forward
+                     "^ *set history \\(filename\\|size\\)  *\\(.*\\)" nil t)
+               (cond ((string-equal (match-string 1) "filename")
+                      (setq hfile (expand-file-name
+                                   (match-string 2)
+                                   (file-name-directory file))))
+                     ((string-equal (match-string 1) "size")
+                      (setq hsize (match-string 2))))))))
+      (and (stringp hsize)
+          (integerp (setq hsize (string-to-number hsize)))
+          (> hsize 0)
+           (setq-local comint-input-ring-size hsize))
+      (if (stringp hfile)
+          (setq-local comint-input-ring-file-name hfile))
+      (comint-read-input-ring t))))
+
 ;;;###autoload
 (defun gdb (command-line)
   "Run gdb passing it COMMAND-LINE as arguments.
@@ -902,37 +935,8 @@ detailed description of this mode.
   (setq-local gud-minor-mode 'gdbmi)
   (setq-local gdb-control-level 0)
   (setq comint-input-sender 'gdb-send)
-  (when (ring-empty-p comint-input-ring) ; cf shell-mode
-    (let ((hfile (expand-file-name (or (getenv "GDBHISTFILE")
-                                      (if (eq system-type 'ms-dos)
-                                          "_gdb_history"
-                                        ".gdb_history"))))
-         ;; gdb defaults to 256, but we'll default to comint-input-ring-size.
-         (hsize (getenv "HISTSIZE")))
-      (dolist (file (append '("~/.gdbinit")
-                           (unless (string-equal (expand-file-name ".")
-                                                  (expand-file-name "~"))
-                             '(".gdbinit"))))
-       (if (file-readable-p (setq file (expand-file-name file)))
-           (with-temp-buffer
-             (insert-file-contents file)
-             ;; TODO? check for "set history save\\(  *on\\)?" and do
-             ;; not use history otherwise?
-             (while (re-search-forward
-                     "^ *set history \\(filename\\|size\\)  *\\(.*\\)" nil t)
-               (cond ((string-equal (match-string 1) "filename")
-                      (setq hfile (expand-file-name
-                                   (match-string 2)
-                                   (file-name-directory file))))
-                     ((string-equal (match-string 1) "size")
-                      (setq hsize (match-string 2))))))))
-      (and (stringp hsize)
-          (integerp (setq hsize (string-to-number hsize)))
-          (> hsize 0)
-           (setq-local comint-input-ring-size hsize))
-      (if (stringp hfile)
-          (setq-local comint-input-ring-file-name hfile))
-      (comint-read-input-ring t)))
+  (gdb-load-history)
+
   (gud-def gud-tbreak "tbreak %f:%l" "\C-t"
           "Set temporary breakpoint at current line." t)
   (gud-def gud-jump