Skip to content

Commit bdce2da

Browse files
committed
Add ability to toggle breakpoints on current line
1 parent fe59b77 commit bdce2da

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

CHANGELOG.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22

33
This document lists new features, improvements, changes, and bug fixes in each release of the package.
44

5-
## GDScript mode 1.4.2
5+
## GDScript mode 1.5.0
66

7-
- Added keybindings matching Godot to run the project (<kbd>f5</kbd>), current scene (<kbd>f6</kbd>), continue execution (<kbd>f7</kbd>), and add breakpoints <kbd>F9</kbd>.
7+
- Added the ability to toggle breakpoint on the current line instead of either adding or removing them.
8+
- Added keybindings matching Godot to run the project (<kbd>f5</kbd>), current scene (<kbd>f6</kbd>), continue execution (<kbd>f7</kbd>), and toggle breakpoints <kbd>F9</kbd>.
89

910
## GDScript mode 1.4.1
1011

gdscript-debug.el

+32-10
Original file line numberDiff line numberDiff line change
@@ -1868,13 +1868,35 @@ calling `gdscript-debug--table-string'."
18681868
(setq buffer-read-only t)
18691869
(buffer-disable-undo))
18701870

1871-
(defun gdscript-debug-add-breakpoint ()
1871+
(defun gdscript-debug-toggle-breakpoint ()
1872+
"Add or remove a breakpoint on the line at POINT."
18721873
(interactive)
1874+
(let* ((breakpoint (gdscript-debug--construct-breakpoint-at-point)))
1875+
(if (gdscript-debug--is-existing-breakpoint-p breakpoint)
1876+
(gdscript-debug--remove-breakpoint breakpoint)
1877+
(gdscript-debug--add-breakpoint-to-line breakpoint))))
1878+
1879+
(defun gdscript-debug--construct-breakpoint-at-point ()
1880+
"Construct a breakpoint object for the line at POINT and return it.
1881+
May match an existing breakpoint."
18731882
(gdscript-debug--with-gdscript-file file-info
1874-
(let* ((line (line-number-at-pos))
1883+
(let* ((start (line-beginning-position))
1884+
(end (line-end-position))
1885+
(line (line-number-at-pos))
18751886
(file (car file-info))
18761887
(file-absolute (cdr file-info))
18771888
(breakpoint (gdscript-breakpoint-create :file file :file-absolute file-absolute :line line)))
1889+
breakpoint)))
1890+
1891+
(defun gdscript-debug--is-existing-breakpoint-p (breakpoint)
1892+
"Return t if `BREAKPOINT' is an existing breakpoint in the project."
1893+
(member breakpoint gdscript-debug--breakpoints))
1894+
1895+
(defun gdscript-debug--add-breakpoint-to-line (breakpoint)
1896+
"Register `BREAKPOINT' to the current line in a GDScript buffer."
1897+
(gdscript-debug--with-gdscript-file file-info
1898+
(let* ((line (line-number-at-pos))
1899+
(file (car file-info)))
18781900
(if (member breakpoint gdscript-debug--breakpoints)
18791901
(message "Breakpoint already present at %s:%s" file line)
18801902
(gdscript-debug--add-fringe (line-beginning-position) (not gdscript-debug--skip-breakpoints) 'gdb-bptno 1)
@@ -1884,15 +1906,13 @@ calling `gdscript-debug--table-string'."
18841906
(gdscript-debug--send-command
18851907
(gdscript-debug--breakpoint-command file line t)))))))
18861908

1887-
(defun gdscript-debug-remove-breakpoint ()
1888-
(interactive)
1909+
(defun gdscript-debug--remove-breakpoint (breakpoint)
1910+
"Remove `BREAKPOINT' to the current line in a GDScript buffer."
18891911
(gdscript-debug--with-gdscript-file file-info
18901912
(let* ((start (line-beginning-position))
18911913
(end (line-end-position))
18921914
(line (line-number-at-pos))
1893-
(file (car file-info))
1894-
(file-absolute (cdr file-info))
1895-
(breakpoint (gdscript-breakpoint-create :file file :file-absolute file-absolute :line line)))
1915+
(file (car file-info)))
18961916
(if (not (member breakpoint gdscript-debug--breakpoints))
18971917
(message "No breakpoint at %s:%s" file line)
18981918
(gdscript-debug--remove-strings start end)
@@ -1920,7 +1940,9 @@ calling `gdscript-debug--table-string'."
19201940
(prop `(left-fringe breakpoint ,(if (not enabled) 'breakpoint-enabled 'breakpoint-disabled))))
19211941
(put-text-property 0 1 'display prop string))))))))))))
19221942

1923-
(defun gdscript-debug-toggle-breakpoint ()
1943+
(defun gdscript-debug-toggle-skip-breakpoints ()
1944+
"Toggle the execution of all breakpoints without removing them.
1945+
Like Godot's Skip Breakpoints button."
19241946
(interactive)
19251947
(setq gdscript-debug--skip-breakpoints (not gdscript-debug--skip-breakpoints))
19261948
(gdscript-debug--set-left-fringe-breakpoints gdscript-debug--skip-breakpoints)
@@ -1937,7 +1959,7 @@ calling `gdscript-debug--table-string'."
19371959
(with-current-buffer buffer
19381960
(goto-char (point-min))
19391961
(forward-line (1- line))
1940-
(gdscript-debug-remove-breakpoint)))))
1962+
(gdscript-debug--remove-breakpoint breakpoint)))))
19411963
(message "Not recognized as breakpoint line")))
19421964

19431965
(defun gdscript-debug-goto-breakpoint ()
@@ -2048,7 +2070,7 @@ calling `gdscript-debug--table-string'."
20482070
(defvar gdscript-debug--breakpoints-mode-map
20492071
(let ((map (make-sparse-keymap)))
20502072
(suppress-keymap map)
2051-
(define-key map " " 'gdscript-debug-toggle-breakpoint)
2073+
(define-key map " " 'gdscript-debug-toggle-skip-breakpoints)
20522074
(define-key map "q" 'kill-current-buffer)
20532075
(define-key map "D" 'gdscript-debug-delete-breakpoint)
20542076
(define-key map "\r" 'gdscript-debug-goto-breakpoint)

gdscript-mode.el

+1-3
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,7 @@
8787
(define-key map (kbd "C-c C-d C-d d") 'gdscript-debug-display-stack-dump-buffer)
8888
(define-key map (kbd "C-c C-d C-d b") 'gdscript-debug-display-breakpoint-buffer)
8989
(define-key map (kbd "C-c C-d C-d i") 'gdscript-debug-display-inspector-buffer)
90-
(define-key map (kbd "C-c C-d b") 'gdscript-debug-add-breakpoint)
91-
(define-key map (kbd "<f9>") 'gdscript-debug-add-breakpoint)
92-
(define-key map (kbd "C-c C-d r") 'gdscript-debug-remove-breakpoint)
90+
(define-key map (kbd "<f9>") 'gdscript-debug-toggle-breakpoint)
9391
(define-key map (kbd "C-c C-d q") 'gdscript-debug-make-server)
9492
(define-key map (kbd "C-c C-d n") 'gdscript-debug-next)
9593
(define-key map (kbd "C-c C-d c") 'gdscript-debug-continue)

0 commit comments

Comments
 (0)