Personal emacs config
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
7.3 KiB

  1. ; Copyright (C) 2010, 2014, 2019 Free Software Foundation, Inc
  2. ;; Author: Rocky Bernstein <rocky@gnu.org>
  3. ;; This program is free software; you can redistribute it and/or modify
  4. ;; it under the terms of the GNU General Public License as published by
  5. ;; the Free Software Foundation, either version 3 of the License, or
  6. ;; (at your option) any later version.
  7. ;; This program is distributed in the hope that it will be useful,
  8. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. ;; GNU General Public License for more details.
  11. (require 'load-relative)
  12. (require-relative-list '("../fringe" "../helper" "../lochist")
  13. "realgud-")
  14. (require-relative-list '("command" "source" "backtrace" "breakpoint") "realgud-buffer-")
  15. (declare-function realgud-backtrace? 'realgud-buffer-backtace)
  16. (declare-function realgud-breakpoint? 'realgud-buffer-breakpoint)
  17. (declare-function realgud-cmdbuf? 'realgud-buffer-command)
  18. (declare-function realgud:loc-hist-describe 'realgud-lochist)
  19. (declare-function realgud-loc-hist-item 'realgud-lochist)
  20. (declare-function realgud-srcbuf? 'realgud-buffer-command)
  21. (declare-function buffer-killed? 'realgud-helper)
  22. (defvar realgud-cmdbuf-info)
  23. (defun realgud-get-cmdbuf-from-backtrace ( &optional opt-buffer)
  24. "Return the command buffer associated with source
  25. OPT-BUFFER or if that is ommited `current-buffer' which is
  26. assumed to be a source-code buffer."
  27. (let ((buffer (or opt-buffer (current-buffer))))
  28. (if (realgud-backtrace? buffer)
  29. (with-current-buffer-safe buffer
  30. (realgud-sget 'backtrace-info 'cmdbuf))
  31. nil)))
  32. (defun realgud-get-cmdbuf-from-breakpoint ( &optional opt-buffer)
  33. "Return the command buffer associated with source
  34. OPT-BUFFER or if that is ommited `current-buffer' which is
  35. assumed to be a source-code buffer."
  36. (let ((buffer (or opt-buffer (current-buffer))))
  37. (if (realgud-breakpoint? buffer)
  38. (with-current-buffer-safe buffer
  39. (realgud-sget 'breakpoint-info 'cmdbuf))
  40. nil)))
  41. (defun realgud-get-cmdbuf-from-srcbuf ( &optional opt-buffer)
  42. "Return the command buffer associated with source
  43. OPT-BUFFER or if that is ommited `current-buffer' which is
  44. assumed to be a source-code buffer."
  45. (let ((buffer (or opt-buffer (current-buffer))))
  46. (if (realgud-srcbuf? buffer)
  47. (with-current-buffer-safe buffer
  48. (realgud-sget 'srcbuf-info 'cmdproc))
  49. nil)))
  50. (defun realgud-get-srcbuf-from-cmdbuf ( &optional opt-buffer opt-loc)
  51. "Return the source-code buffer associated with command
  52. OPT-BUFFER or if that is ommited `current-buffer' which is
  53. assumed to be a process-command buffer."
  54. (let ((buffer (or opt-buffer (current-buffer))))
  55. (if (realgud-cmdbuf? buffer)
  56. (with-current-buffer-safe buffer
  57. (let ((loc
  58. (or opt-loc
  59. (realgud-loc-hist-item
  60. (realgud-cmdbuf-info-loc-hist realgud-cmdbuf-info)))))
  61. (if loc
  62. (marker-buffer (realgud-loc-marker loc))
  63. nil)
  64. ))
  65. nil)))
  66. (defun realgud-get-srcbuf( &optional opt-buffer opt-loc)
  67. "Return source-code buffer associated with OPT-BUFFER or
  68. `current-buffer' if that is omitted. nil is returned if we don't
  69. find anything. If we started out with a buffer that is set up to
  70. be a source-code buffer we will use that even though it might not
  71. be the source code buffer for the frame that the debugger is
  72. using. See also `realgud-get-current-srcbuf'."
  73. (let ((buffer (or opt-buffer (current-buffer))))
  74. (with-current-buffer-safe buffer
  75. (cond
  76. ;; Perhaps buffer is a source source-code buffer?
  77. ((realgud-srcbuf? buffer) buffer)
  78. ;; Perhaps buffer is a process-command buffer.
  79. ((realgud-cmdbuf? buffer)
  80. (realgud-get-srcbuf-from-cmdbuf buffer opt-loc))
  81. (t nil)))))
  82. (defun realgud-get-current-srcbuf( &optional opt-buffer)
  83. "Return the source-code buffer associated with OPT-BUFFER
  84. or `current-buffer' if that is omitted. nil is returned
  85. if we don't find anything."
  86. (let ((buffer (or opt-buffer (current-buffer))))
  87. (with-current-buffer-safe buffer
  88. (let ((cmdbuf
  89. (cond
  90. ((realgud-srcbuf? buffer)
  91. (realgud-get-cmdbuf-from-srcbuf buffer))
  92. ((realgud-cmdbuf? buffer)
  93. buffer)
  94. (t nil))))
  95. (if cmdbuf
  96. (realgud-get-srcbuf-from-cmdbuf cmdbuf)
  97. nil)))))
  98. (defun realgud-get-cmdbuf( &optional opt-buffer)
  99. "Return the command buffer associated with OPT-BUFFER
  100. or `current-buffer' if that is omitted. nil is returned
  101. if we don't find anything."
  102. (let ((buffer (or opt-buffer (current-buffer))))
  103. (with-current-buffer-safe buffer
  104. (cond
  105. ;; Perhaps buffer is a process-command buffer?
  106. ((realgud-cmdbuf? buffer) buffer)
  107. ;; Perhaps buffer is a source-code buffer?
  108. ((realgud-srcbuf? buffer)
  109. (realgud-get-cmdbuf-from-srcbuf buffer))
  110. ;; Perhaps buffer is a backtrace buffer?
  111. ((realgud-backtrace? buffer)
  112. (realgud-get-cmdbuf-from-backtrace buffer))
  113. ((realgud-breakpoint? buffer)
  114. (realgud-get-cmdbuf-from-breakpoint buffer))
  115. (t nil)))))
  116. (defun realgud-get-backtrace-buf( &optional opt-buffer)
  117. "Return the backtrace buffer associated with
  118. OPT-BUFFER or if that is ommited `current-buffer'."
  119. (let* ((buffer (or opt-buffer (current-buffer)))
  120. (cmdbuf (realgud-get-cmdbuf buffer)))
  121. (with-current-buffer-safe cmdbuf
  122. (realgud-sget 'cmdbuf-info 'bt-buf)
  123. ))
  124. )
  125. (defun realgud-get-breakpoint-buf( &optional opt-buffer)
  126. "Return the backtrace buffer associated with
  127. OPT-BUFFER or if that is ommited `current-buffer'."
  128. (let* ((buffer (or opt-buffer (current-buffer)))
  129. (cmdbuf (realgud-get-cmdbuf buffer)))
  130. (with-current-buffer-safe cmdbuf
  131. (realgud-sget 'cmdbuf-info 'brkpt-buf)
  132. ))
  133. )
  134. (defun realgud-get-process (&optional opt-buffer)
  135. "Return the process buffer associated with OPT-BUFFER or
  136. `current-buffer' if that is omitted. nil is returned if
  137. we don't find anything."
  138. (let* ((buffer (or opt-buffer (current-buffer)))
  139. (cmdbuf (realgud-get-cmdbuf buffer)))
  140. (if cmdbuf
  141. (get-buffer-process cmdbuf)
  142. nil)
  143. )
  144. )
  145. (defun realgud:srcbuf-info-describe (&optional buffer)
  146. "Provide descriptive information of the buffer-local variable
  147. `realgud-srcbuf-info', a defstruct. BUFFER if given is the buffer to
  148. use to get the information from.
  149. "
  150. (interactive "")
  151. (setq buffer (realgud-get-srcbuf buffer))
  152. (if buffer
  153. (with-current-buffer buffer
  154. (let ((info realgud-srcbuf-info)
  155. (srcbuf-name (buffer-name))
  156. (a1 realgud-overlay-arrow1)
  157. (a2 realgud-overlay-arrow2)
  158. (a3 realgud-overlay-arrow3)
  159. )
  160. (switch-to-buffer (get-buffer-create "*Describe Debugger Session*"))
  161. (delete-region (point-min) (point-max))
  162. (mapc 'insert
  163. (list
  164. (format "srcbuf-info for %s\n" srcbuf-name)
  165. (format "Was previously read only?: %s\n"
  166. (realgud-srcbuf-info-was-read-only? info))
  167. (format "Command Process buffer: %s\n"
  168. (realgud-srcbuf-info-cmdproc info))
  169. ;; FIXME This info isn't part of the src info structure.
  170. (format "Overlay arrow 1: %s\n" a1)
  171. (format "Overlay arrow 2: %s\n" a2)
  172. (format "Overlay arrow 3: %s\n" a3)
  173. (format "Location history:\n")
  174. ))
  175. (realgud:loc-hist-describe (realgud-srcbuf-info-loc-hist info))
  176. )
  177. )
  178. (message "Buffer %s is not a debugger source buffer; nothing done."
  179. (or buffer (current-buffer)))
  180. )
  181. )
  182. (provide-me "realgud-buffer-")