[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/realgud 0a3befb 079/140: File remap is session specific
From: |
Rocky Bernstein |
Subject: |
[elpa] externals/realgud 0a3befb 079/140: File remap is session specific... |
Date: |
Sat, 25 May 2019 19:35:37 -0400 (EDT) |
branch: externals/realgud
commit 0a3befb6e26504e7274c750fe3b4cbd7823350c7
Author: rocky <address@hidden>
Commit: rocky <address@hidden>
File remap is session specific...
finish session file-map ignore re's
---
realgud/common/buffer/command.el | 48 ++++++++++++++++--
realgud/common/file.el | 107 +++++++++++++++++++++++----------------
2 files changed, 107 insertions(+), 48 deletions(-)
diff --git a/realgud/common/buffer/command.el b/realgud/common/buffer/command.el
index 9745948..eed0333 100644
--- a/realgud/common/buffer/command.el
+++ b/realgud/common/buffer/command.el
@@ -33,6 +33,11 @@
)
(require 'cl-lib)
+(when (< emacs-major-version 26)
+ (defun make-mutex(&rest name)
+ ;; Stub for Emacs that doesn't have mutex
+ ))
+
(defface debugger-running
'((((class color) (min-colors 16) (background light))
(:foreground "Green4" :weight bold))
@@ -111,11 +116,24 @@
;; - in C ../sysdeps/x86_64/multiarch/strchr-avx2.S or or more generally
.*/sysdeps/.*
;; and so on.
;;
- ;; Each debug session which has a command buffer, then should have
- ;; its own ignore list which is seeded from the kind debugger it
- ;; services.
+ ;; A list of regular expression. When one in the list matches a source
+ ;; location, we ignore that file. Of course, the regular expression could
+ ;; be a specific file name. Various programming languages have names
+ ;; that might not be real. For example, in Python or Ruby when you compile
+ ;; a or evaluate string you provide a name in the call, and often times
+ ;; this isn't the real name of a file. It is often something like "exec" or
+ ;; "<string>", or "<eval>". Each of the debuggers has the opportunity to
seed the
+ ;; the ignore list.
ignore-re-file-list
+ ;; A property list which maps the name as seen in the location to a path
that we
+ ;; can do a "find-file" on
+ filename-remap-alist
+
+ ;; A mutex to ensure that two threads doing things in the same debug
+ ;; session simultaneously
+ mutex
+
loc-hist ;; ring of locations seen in the course of execution
;; see realgud-lochist
starting-directory ;; directory where initial debug command was issued.
@@ -142,6 +160,10 @@
(realgud-struct-field-setter "realgud-cmdbuf-info" "callback-eval-filter")
(realgud-struct-field-setter "realgud-cmdbuf-info" "starting-directory")
(realgud-struct-field-setter "realgud-cmdbuf-info" "ignore-re-file-list")
+;; (realgud-struct-field-setter "realgud-cmdbuf-info" "filename-remap-alist")
+
+(defun realgud-cmdbuf-filename-remap-alist= (value)
+ (setf (realgud-cmdbuf-info-filename-remap-alist realgud-cmdbuf-info)
value))
(defun realgud:cmdbuf-follow-buffer(event)
(interactive "e")
@@ -267,6 +289,8 @@ This is based on an org-mode buffer. Hit tab to
expand/contract sections.
(realgud-cmdbuf-info-in-debugger? info))
(format " - Ignore file regexps ::\t%s\n"
(realgud-cmdbuf-info-ignore-re-file-list info))
+ (format " - remapped file names ::\t%s\n"
+ (realgud-cmdbuf-info-filename-remap-alist info))
(realgud:org-mode-encode "\n*** Remap table for debugger
commands\n"
(realgud-cmdbuf-info-cmd-hash info))
@@ -426,6 +450,8 @@ values set in the debugger's init.el."
:alt-line-group (realgud-sget 'loc-pat 'alt-line-group)
:text-group (realgud-sget 'loc-pat 'text-group)
:ignore-re-file-list (gethash "ignore-re-file-list" regexp-hash)
+ :filename-remap-alist nil
+ :mutex (make-mutex (buffer-name))
:loc-hist (make-realgud-loc-hist)
:starting-directory starting-directory
))
@@ -453,6 +479,22 @@ values set in the debugger's init.el."
nil))
)
+(defun realgud-cmdbuf-mutex (&optional cmd-buf)
+ "Return the mutex for the current command buffer"
+ (with-current-buffer-safe (or cmd-buf (current-buffer))
+ (if (realgud-cmdbuf?)
+ (realgud-sget 'cmdbuf-info 'mutex)
+ nil))
+ )
+
+(defun realgud-cmdbuf-filename-remap-alist (&optional cmd-buf)
+ "Return the file-remap alist the current command buffer"
+ (with-current-buffer-safe (or cmd-buf (current-buffer))
+ (if (realgud-cmdbuf?)
+ (realgud-sget 'cmdbuf-info 'filename-remap-alist)
+ nil))
+ )
+
(defun realgud-cmdbuf-pat(key)
"Extract regexp stored under KEY in a realgud-cmdbuf via realgud-cmdbuf-info"
(if (realgud-cmdbuf?)
diff --git a/realgud/common/file.el b/realgud/common/file.el
index c50395a..1758188 100644
--- a/realgud/common/file.el
+++ b/realgud/common/file.el
@@ -19,13 +19,6 @@
(require-relative-list '("helper" "loc") "realgud-")
(require-relative-list '("buffer/command") "realgud-buffer-")
-(defvar realgud-file-remap (make-hash-table :test 'equal)
- "How to remap files we otherwise can't find in the
- filesystem. The hash key is the file string we saw, and the
- value is associated filesystem string presumably in the
- filesystem")
-
-
(declare-function realgud:strip 'realgud)
(declare-function realgud-loc-goto 'realgud-loc)
(declare-function realgud-get-cmdbuf 'realgud-buffer-helper)
@@ -33,11 +26,17 @@
(declare-function compilation-find-file 'compile)
(declare-function realgud-cmdbuf-info-ignore-re-file-list=
'realgud-buffer-command)
+;; (defcustom realgud-file-find-function 'realgud:find-file
(defcustom realgud-file-find-function 'compilation-find-file
"Function to call when we can't easily find file"
:type 'function
:group 'realgud)
+;; (defun realgud:find-file (marker filename directory &rest formats)
+;; "A wrapper around compilation find-file."
+;; (let ((compilation-error "source-code file"))
+;; (compilation-find-file marker filename directory formats)))
+
(defun realgud:file-line-count(filename)
"Return the number of lines in file FILENAME, or nil FILENAME can't be
found"
@@ -85,44 +84,62 @@ blanks, or deliberately ignoring 'pseudo-file patterns like
(eval
If we're unable find the source code we return a string describing the
problem as best as we can determine."
- (unless (and filename (file-readable-p filename))
- (let* ((cmdbuf (realgud-get-cmdbuf))
- (ignore-re-file-list (realgud-sget 'cmdbuf-info
'ignore-re-file-list))
- (remapped-filename (gethash filename realgud-file-remap))
- )
- (cond
- ;; Is file already listed for ignore?
- ((realgud:file-ignore filename ignore-re-file-list)
- (message "tracking ignored for %s" filename))
-
- ;; Do we want to black-list this?
- ((y-or-n-p (format "Black-list file %s for location tracking?"
filename))
- ;; FIXME: there has to be a simpler way to set ignore-file-list
- (with-current-buffer cmdbuf
- (push filename ignore-re-file-list)
- (realgud-cmdbuf-info-ignore-re-file-list= ignore-re-file-list))
- (setq filename nil))
-
- ;; Do we have a custom find-file function?
- (find-file-fn
- (setq filename (funcall find-file-fn cmd-marker filename directory)))
-
- (t (setq filename nil)
- (if remapped-filename
- (if (file-exists-p remapped-filename)
- (setq filename remapped-filename)
- ;; else remove from map since no find
- (remhash filename realgud-file-remap)))
- ;; else - try find-file-function
- (let ((found-file (funcall realgud-file-find-function
(point-marker) filename directory)))
- (when found-file
- (setq remapped-filename (buffer-file-name found-file))
- (when (and remapped-filename (file-exists-p remapped-filename))
- (puthash filename remapped-filename realgud-file-remap)
- (setq filename remapped-filename)
- ))
- )))
- ))
+ (let* ((cmdbuf (realgud-get-cmdbuf))
+ (ignore-re-file-list (realgud-cmdbuf-ignore-re-file-list cmdbuf))
+ (filename-remap-alist (realgud-cmdbuf-filename-remap-alist cmdbuf))
+ (remapped-filename
+ (assoc filename filename-remap-alist))
+ (mutex (realgud-cmdbuf-mutex cmdbuf))
+ )
+
+ ;;(with-mutex
+ ;; mutex
+ (when remapped-filename
+ (if (file-readable-p (cdr remapped-filename))
+ (setq filename (cdr remapped-filename))
+ ;; else remove from map since no find
+ (realgud-cmdbuf-filename-remap-alist=
+ (delq (assoc remapped-filename filename-remap-alist)
+ filename-remap-alist))))
+
+ (unless (and filename (file-readable-p filename))
+
+ (cond
+ ;; Is file already listed for ignore?
+ ((realgud:file-ignore filename ignore-re-file-list)
+ (message "tracking ignored for %s" filename))
+
+ ;; Do we want to black-list this?
+ ((y-or-n-p (format "Black-list file %s for location tracking?"
filename))
+ ;; FIXME: there has to be a simpler way to set ignore-file-list
+ (with-current-buffer cmdbuf
+ (push filename ignore-re-file-list)
+ (realgud-cmdbuf-info-ignore-re-file-list= ignore-re-file-list))
+ (setq filename nil)
+ )
+
+ ;; Do we have a custom find-file function?
+ (find-file-fn
+ (setq filename (funcall find-file-fn cmd-marker filename directory)))
+
+ (t
+ (let ((found-file (funcall realgud-file-find-function (point-marker)
filename directory)))
+ (if found-file
+ (progn
+ (setq remapped-filename (buffer-file-name found-file))
+ (when (and remapped-filename (file-exists-p remapped-filename))
+ (realgud-cmdbuf-filename-remap-alist=
+ (cons
+ (cons filename remapped-filename)
+ filename-remap-alist))
+ (setq filename remapped-filename)
+ ))
+ ;; else
+ (setq filename nil)
+ )))
+ )))
+ ;;)
+
(if filename
(if (file-readable-p filename)
(if (integerp line-number)
- [elpa] externals/realgud 2c8caa5 068/140: Merge pull request #208 from dangirsh/patch-1, (continued)
- [elpa] externals/realgud 2c8caa5 068/140: Merge pull request #208 from dangirsh/patch-1, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 5e07d91 062/140: Use boxed attributes in breakpoint enable/disable faces, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 937bea0 059/140: Add realgud-populate-common-fn-keys-none to not set function keys..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 8258521 071/140: Small typo, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 2bf62ee 086/140: Better Emacs compatibility, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 0c3592b 078/140: Merge branch 'master' into filter-lists, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 4c66076 072/140: Start nodejs -> node debug rename..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud b4ff2c3 092/140: Check major mode with derived-mode-p, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud b78f3b9 091/140: Merge pull request #214 from xuchunyang/master, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud d25fd0e 090/140: Remove pdb alias, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 0a3befb 079/140: File remap is session specific...,
Rocky Bernstein <=
- [elpa] externals/realgud da2a74b 101/140: Merge branch 'master' of github.com:realgud/realgud, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud ad64b70 081/140: Correct testing for API change..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud dc349f8 075/140: Make calls consistent in light of changes, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud f966711 093/140: Merge pull request #217 from muffinmad/patch-1, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 251eb8c 070/140: Small changes, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 09431a4 076/140: Commit stable version before a minor upheaval, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 6d521e9 080/140: Customize compilation-find-file..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud d24996a 082/140: Administrivia Add seq to el-get..., Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud 388a650 077/140: Sync with savanah ELPA, Rocky Bernstein, 2019/05/25
- [elpa] externals/realgud f851166 089/140: Bug in kshdb initialization, Rocky Bernstein, 2019/05/25