--- /usr/share/emacs/site-lisp/global/gtags.el 2009-01-05 15:17:28.000000000 +0530 +++ emacs/gtags.el 2009-03-07 01:51:31.000000000 +0530 @@ -93,12 +93,6 @@ :type 'boolean) ;; Variables -(defvar gtags-current-buffer nil - "Current buffer.") -(defvar gtags-buffer-stack nil - "Stack for tag browsing.") -(defvar gtags-point-stack nil - "Stack for tag browsing.") (defvar gtags-history-list nil "Gtags history list.") (defconst gtags-symbol-regexp "[A-Za-z_][A-Za-z_0-9]*" @@ -191,22 +185,34 @@ ;; push current context to stack (defun gtags-push-context () - (setq gtags-buffer-stack (cons (current-buffer) gtags-buffer-stack)) - (setq gtags-point-stack (cons (point) gtags-point-stack))) + (let (cur-frame (selected-frame)) + (setq gtags-buffer-stack (cons (current-buffer) (frame-parameter cur-frame 'buffer-stack))) + (modify-frame-parameters cur-frame `((buffer-stack . ,gtags-buffer-stack))) + (setq gtags-point-stack (cons (point) (frame-parameter cur-frame 'point-stack))) + (modify-frame-parameters cur-frame `((point-stack . ,gtags-point-stack))))) ;; pop context from stack (defun gtags-pop-context () - (if (not gtags-buffer-stack) nil - (let (buffer point) - (setq buffer (car gtags-buffer-stack)) - (setq gtags-buffer-stack (cdr gtags-buffer-stack)) - (setq point (car gtags-point-stack)) - (setq gtags-point-stack (cdr gtags-point-stack)) + (if (not (frame-parameter (selected-frame) 'buffer-stack)) nil + (let (buffer point (cur-frame (selected-frame))) + (setq buffer (car (frame-parameter cur-frame 'buffer-stack))) + (setq gtags-buffer-stack (cdr (frame-parameter cur-frame 'buffer-stack))) + (modify-frame-parameters cur-frame `((buffer-stack . ,gtags-buffer-stack))) + (setq point (car (frame-parameter cur-frame 'point-stack))) + (setq gtags-point-stack (cdr (frame-parameter cur-frame 'point-stack))) + (modify-frame-parameters cur-frame `((point-stack . ,gtags-point-stack))) (list buffer point)))) +(defun gtags-get-current-buffer () + (frame-parameter (selected-frame) 'g-current-buffer)) + +(defun gtags-set-current-buffer (buffer) + (modify-frame-parameters (selected-frame) `((g-current-buffer . ,buffer)))) + + ;; if the buffer exist in the stack (defun gtags-exist-in-stack (buffer) - (memq buffer gtags-buffer-stack)) + (memq buffer (frame-parameter (selected-frame) 'buffer-stack))) ;; get current line number (defun gtags-current-lineno () @@ -432,9 +438,9 @@ "Move to previous point on the stack." (interactive) (let (delete context buffer) - (if (and (not (equal gtags-current-buffer nil)) - (not (equal gtags-current-buffer (current-buffer)))) - (switch-to-buffer gtags-current-buffer) + (if (and (not (equal (gtags-get-current-buffer) nil)) + (not (equal (gtags-get-current-buffer) (current-buffer)))) + (switch-to-buffer (gtags-get-current-buffer)) ; By default, the buffer of the referred file is left. ; If gtags-pop-delete is set to t, the file is deleted. ; Gtags select mode buffer is always deleted. @@ -447,7 +453,7 @@ (if delete (kill-buffer (current-buffer))) (switch-to-buffer (nth 0 context)) - (setq gtags-current-buffer (current-buffer)) + (gtags-set-current-buffer (current-buffer)) (goto-char (nth 1 context)))))) ;; @@ -566,7 +572,7 @@ (if (null other-win) (find-file file) (find-file-other-window file))) (if delete (kill-buffer prev-buffer))) - (setq gtags-current-buffer (current-buffer)) + (gtags-set-current-buffer (current-buffer)) (goto-line line) (gtags-mode 1)))) @@ -640,7 +646,7 @@ truncate-lines t major-mode 'gtags-select-mode mode-name "Gtags-Select") - (setq gtags-current-buffer (current-buffer)) + (gtags-set-current-buffer (current-buffer)) (goto-char (point-min)) (message "[GTAGS SELECT MODE] %d lines" (count-lines (point-min) (point-max))) (run-hooks 'gtags-select-mode-hook))