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.
|
|
;; Copyright (C) 2010, 2014-2016, 2019 Free Software Foundation, Inc
;; Author: Rocky Bernstein <rocky@gnu.org>
;; This program is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation, either version 3 of the License, or;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;; GNU General Public License for more details.
(require 'load-relative)(require-relative-list '("helper") "realgud-")(require-relative-list '("buffer/helper") "realgud-buffer-")
(declare-function realgud:backtrace-init 'realgud-buffer-helper)(declare-function realgud:breakpoint-init 'realgud-buffer-helper)(declare-function realgud-get-backtrace-buf 'realgud-buffer-helper)(declare-function realgud-get-breakpoint-buf 'realgud-buffer-helper)(declare-function realgud-get-cmdbuf 'realgud-buffer-helper)(declare-function realgud-get-srcbuf 'realgud-buffer-helper)(declare-function buffer-killed? 'realgud-helper)
(declare-function one-window-p(bool))
(defun realgud-window-update-position (buffer marker) "Update BUFFER to position specified with MARKER.
We assume MARKER points inside BUFFER"
(with-current-buffer buffer (goto-char marker) (let ((window (get-buffer-window buffer))) (if window (set-window-point window marker)) )))
(defun realgud-window-src ( &optional opt-buffer ) "Make sure the source buffer is displayed in a window
We don't care if the command buffer is also displayed.See also `realgud-window-src-undisturb-cmd'"
(let* ((buffer (or opt-buffer (current-buffer))) (src-buffer (realgud-get-srcbuf buffer)) (src-window (get-buffer-window src-buffer 'visible)) (window (selected-window))) (if src-buffer (unless (and src-window (not (window-minibuffer-p))) (set-window-buffer window src-buffer)) ) ))
(defun realgud-window-src-undisturb-cmd ( &optional opt-buffer ) "Make sure the source buffers is displayed in windows without
disturbing the command window if it is also displayed. Returnsthe command windowSee also `realgud-window-src'."
(interactive) (let* ((buffer (or opt-buffer (current-buffer))) (src-buffer (realgud-get-srcbuf buffer)) (src-window (get-buffer-window src-buffer)) (cmd-buffer (realgud-get-cmdbuf buffer)) (cmd-window (get-buffer-window cmd-buffer)) (window (selected-window)) ) (if src-buffer (unless src-window (setq src-window (if (eq window cmd-window) ;; FIXME: generalize what to do here. (if (one-window-p 't) (split-window) (next-window window 'no-minibuf)) window)) (set-window-buffer src-window src-buffer)) ) (select-window src-window) cmd-window) )
(defun realgud-window-cmd-undisturb-src ( &optional opt-buffer switch?) "Make sure the command buffer is displayed in windows without
disturbing the command window if it is also displayed. Returnsthe source window."
(interactive) (let* ((buffer (or opt-buffer (current-buffer))) (src-buffer (realgud-get-srcbuf buffer)) (src-window (get-buffer-window src-buffer)) (cmd-buffer (realgud-get-cmdbuf buffer)) (cmd-window (get-buffer-window cmd-buffer)) (window (selected-window)) ) (when cmd-buffer (unless cmd-window (setq cmd-window (if (eq window src-window) ;; FIXME: generalize what to do here. (if (one-window-p 't) (split-window) (next-window window 'no-minibuf)) window)) (set-window-buffer cmd-window cmd-buffer) ) (if switch? (and (select-window cmd-window) (switch-to-buffer cmd-buffer)))
) (select-window cmd-window) src-window) )
(defun realgud:window-bt-undisturb-src ( &optional opt-buffer switch?) "Make sure the backtrace buffer is displayed in windows without
disturbing the source window if it is also displayed. Returnsthe source windowSee also `realgud-window-src'"
(interactive) (let* ((buffer (or opt-buffer (current-buffer))) (src-buffer (realgud-get-srcbuf buffer)) (src-window (get-buffer-window src-buffer)) (cmd-buffer (realgud-get-cmdbuf buffer)) (cmd-window (get-buffer-window cmd-buffer)) (bt-buffer (realgud-get-backtrace-buf cmd-buffer)) (bt-window (get-buffer-window bt-buffer)) (window (selected-window)) ) (when cmd-buffer (unless bt-window (setq bt-window (if (eq window src-window) ;; FIXME: generalize what to do here. (if (one-window-p 't) (split-window) (next-window window 'no-minibuf)) window)) (set-window-buffer bt-window bt-buffer) ) (if switch? (and (select-window bt-window) (switch-to-buffer bt-buffer)))
) src-window) )
(defun realgud:window-brkpt-undisturb-src ( &optional opt-buffer switch?) "Make sure the backtrace buffer is displayed in windows without
disturbing the source window if it is also displayed. Returnsthe source windowSee also `realgud-window-src'"
(interactive) (let* ((buffer (or opt-buffer (current-buffer))) (src-buffer (realgud-get-srcbuf buffer)) (src-window (get-buffer-window src-buffer)) (cmd-buffer (realgud-get-cmdbuf buffer)) (cmd-window (get-buffer-window cmd-buffer)) (brkpt-buffer (realgud-get-breakpoint-buf cmd-buffer)) (brkpt-window (get-buffer-window brkpt-buffer)) (window (selected-window)) ) (when cmd-buffer (unless brkpt-window (setq brkpt-window (if (eq window src-window) ;; FIXME: generalize what to do here. (if (one-window-p 't) (split-window) (next-window window 'no-minibuf)) window)) (set-window-buffer brkpt-window brkpt-buffer) ) (if switch? (and (select-window brkpt-window) (switch-to-buffer brkpt-buffer)))
) src-window) )
(defun realgud:window-bt() "Refresh backtrace information and display that in a buffer" (interactive) (with-current-buffer-safe (realgud-get-cmdbuf) (realgud:backtrace-init) (realgud:window-bt-undisturb-src) ) )
(defun realgud:window-brkpt() "Refresh breakpoint information and display that in a buffer" (interactive) (with-current-buffer-safe (realgud-get-cmdbuf) (realgud:breakpoint-init) (realgud:window-brkpt-undisturb-src) ) )
;; (defun realgud-window-src-and-cmd ( &optional opt-buffer );; "Make sure the source buffers is displayed in windows without;; disturbing the command window if it is also displayed. Returns;; the command window;; See also `realgud-window-src-window'";; (interactive);; (let* ((buffer (or opt-buffer (current-buffer)));; (src-buffer (realgud-get-srcbuf buffer));; (src-window (get-buffer-window src-buffer));; (cmd-buffer (realgud-get-cmdbuf buffer));; (cmd-window (get-buffer-window cmd-buffer));; (window (selected-window));; );; (if src-buffer;; (unless src-window;; (setq src-window;; (if (eq window cmd-window);; (if (one-window-p 't) (split-window) (next-window window));; window));; (set-window-buffer src-window src-buffer));; );; cmd-window);; )
(provide-me "realgud-")
|