Changeset - 8e1e3739b1b3
[Not reviewed]
0 1 0
Sergey Pashinin - 11 years ago 2014-08-23 16:13:12
sergey@pashinin.com
Use dash function
1 file changed with 8 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/workgroups-variables.el
Show inline comments
 
;;; workgroups-variables --- Workgroups vars and consts
 
;;; Commentary:
 
;;; Code:
 

	
 
(require 'dash)
 

	
 
(defconst wg-version "1.2.0" "Current version of Workgroups.")
 

	
 
;;; customization
 

	
 
(defcustom wg-session-load-on-start (not (daemonp))
 
  "Load a session file on Workgroups start.
 
But only if Emacs is not started as daemon.  You don't want any
 
promts while Emacs is being started as daemon."
 
  :type 'boolean
 
  :group 'workgroups)
 
(defvaralias 'wg-use-default-session-file 'wg-session-load-on-start)
 

	
 
(defgroup workgroups nil
 
  "Workgroups for Emacs -- Emacs session manager"
 
  :group 'convenience)
 

	
 
(defcustom workgroups-mode nil
 
  "Non-nil if Workgroups mode is enabled."
 
  :set 'custom-set-minor-mode
 
  :initialize 'custom-initialize-default
 
  :group 'workgroups
 
  :type 'boolean)
 

	
 
(defcustom wg-first-wg-name "First workgroup"
 
  "Title of the first workgroup created."
 
  :type 'string
 
  :group 'workgroups)
 

	
 
(defcustom wg-modeline-string " wg"
 
  "Appears in modeline."
 
  :type 'string
 
  :group 'workgroups)
 

	
 
(defcustom wg-load-last-workgroup t
 
  "Load last active (not first) workgroup from all your workgroups if it exists."
 
  :group 'workgroups
 
  :type 'boolean)
 

	
 
(defcustom wg-control-frames t
 
  "Save/restore frames."
 
  :group 'workgroups
 
  :type 'boolean)
 

	
 

	
 
;; hooks
 

	
 
(defcustom workgroups-mode-hook nil
 
  "Hook run when `workgroups-mode' is turned on."
 
  :type 'hook
 
  :group 'workgroups)
 

	
 
(defcustom workgroups-mode-exit-hook nil
 
  "Hook run when `workgroups-mode' is turned off."
 
  :type 'hook
 
  :group 'workgroups)
 

	
 
(defcustom wg-switch-to-workgroup-hook nil
 
  "Hook run by `wg-switch-to-workgroup'."
 
  :type 'hook
 
  :group 'workgroups)
 

	
 
(defcustom wg-pre-window-configuration-change-hook nil
 
  "Hook run before any function that triggers
 
`window-configuration-change-hook'."
 
  :type 'hook
 
  :group 'workgroups)
 

	
 

	
 
(defcustom wg-open-this-wg nil
 
  "Try to open this workgroup on start.
 
If nil - nothing happens."
 
  :type 'string
 
  :group 'workgroups)
 

	
 

	
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;;
 
;; FIXME:
 
;;
 
;; Only set `wg-workgroup-base-wconfig' on `wg-write-session-file' or
 
;; `delete-frame' and only with the most recently changed working-wconfig.
 
;; Then, since it's not overwritten on every call to
 
;; `wg-workgroup-working-wconfig', its restoration can be retried after manually
 
;; recreating buffers that couldn't be restored.  So it takes over the
 
;; 'incorrect restoration' portion of the base wconfig's duty.  All that leaves
 
;; to base wconfigs is that they're a saved wconfig the user felt was important.
 
;; So why not allow more of of them?  A workgroup could stash an unlimited
 
;; number of wconfigs.
 
;;
 
;; TODO:
 
;;
 
;;   * Write new commands for restoring stashed wconfigs
 
;;
 
;;   * Add this message on improper restoration of `base-wconfig':
 
;;
 
;;       "Unable to restore 'buf1', 'buf2'... Hit C-whatever to retry after
 
@@ -293,130 +295,127 @@ it doesn't look right if the buffer list display is long enough
 
to wrap in the miniwindow."
 
  :type 'boolean
 
  :group 'workgroups)
 

	
 

	
 
;;; vars
 

	
 
(defvar wg-workgroups-mode-minor-mode-map-entry nil
 
  "Workgroups' minor-mode-map entry.")
 

	
 
(defvar wg-wconfig-kill-ring nil
 
  "Ring of killed or kill-ring-saved wconfigs.")
 

	
 
(defvar wg-last-message nil
 
  "Holds the last message Workgroups sent to the echo area.")
 

	
 
(defvar wg-buffer-uid nil
 
  "Symbol for the current buffer's wg-buf's uid.
 
Every Workgroups buffer object (wg-buf) has a uid.  When
 
Workgroups creates or encounters an Emacs buffer object
 
corresponding to a wg-buf, it tags it with the wg-buf's uid to
 
unambiguously pair the two.")
 
(make-variable-buffer-local 'wg-buffer-uid)
 

	
 

	
 
;; file and modified flag vars
 

	
 
(defvar wg-flag-modified t
 
  "Dynamically bound to nil around destructive operations to
 
temporarily disable flagging `modified'.")
 

	
 

	
 
;; undo vars
 

	
 
(defvar wg-window-configuration-changed nil
 
  "Flag set by `window-configuration-change-hook'.")
 

	
 
(defvar wg-already-updated-working-wconfig nil
 
  "Flag set by `wg-update-working-wconfig-hook'.")
 

	
 
(defvar wg-undoify-window-configuration-change t
 
  "Flag unset when changes to the window config shouldn't cause
 
workgroups' undo info to be updated.")
 

	
 
(defvar wg-current-workgroup nil "Bound to the current workgroup.")
 

	
 
;; wconfig restoration
 

	
 
(defvar wg-window-min-width 2
 
  "Bound to `window-min-width' when restoring wtrees.")
 

	
 
(defvar wg-window-min-height 1
 
  "Bound to `window-min-height' when restoring wtrees.")
 

	
 
(defvar wg-window-min-pad 2
 
  "Added to `wg-window-min-foo' to produce the actual minimum window size.")
 

	
 
(defvar wg-actual-min-width (+ wg-window-min-width wg-window-min-pad)
 
  "Actual minimum window width when creating windows.")
 

	
 
(defvar wg-actual-min-height (+ wg-window-min-height wg-window-min-pad)
 
  "Actual minimum window height when creating windows.")
 

	
 
(defvar wg-min-edges `(0 0 ,wg-actual-min-width ,wg-actual-min-height)
 
  "Smallest allowable edge list of windows created by Workgroups.")
 

	
 
(defvar wg-null-edges '(0 0 0 0) "Null edge list.")
 

	
 
(defvar wg-window-tree-selected-window nil
 
  "Used during wconfig restoration to hold the selected window.")
 

	
 
(defvar wg-update-current-workgroup-working-wconfig-on-select-frame t
 
  "Non-nil means update `selected-frame's current workgroup's
 
working wconfig before `select-frame' selects a new frame.
 
let-bind this to nil around forms in which you don't want this to
 
happen.")
 

	
 
;; Remove after some time
 
(defalias 'wg-switch-to-buffer 'switch-to-buffer)
 

	
 

	
 
;;
 
;; Crazy stuff...
 
;;
 
(defcustom wg-associate-blacklist (list "*helm mini*" "*Messages*" "*scratch*"
 
                                        "*helm action*")
 
  "Do not autoassociate these buffers."
 
  :type 'list
 
  :group 'workgroups)
 

	
 
(defconst wg-buffer-list-original (symbol-function 'buffer-list))
 

	
 
(defun buffer-list (&optional frame)
 
  "Redefinition of `buffer-list'.
 
Pass FRAME to it.
 
Remove file and dired buffers that are not associated with workgroup."
 
  (let ((lst (list))
 
        (res (wg-buffer-list-emacs frame))
 
  (let ((res (wg-buffer-list-emacs frame))
 
        ;;(wg-buffers (wg-workgroup-associated-buffers (wg-current-workgroup)))
 
        (wg-buf-uids (wg-workgroup-associated-buf-uids (wg-current-workgroup))))
 

	
 
    (dolist (b res res)
 
      (when (and (or (buffer-file-name b)
 
                     (eq (buffer-local-value 'major-mode b) 'dired-mode))
 
                 ;;(not (member b wg-buffers))
 
                 (not (member (wg-buffer-uid-or-add b) wg-buf-uids)))
 
        (delq b res)))))
 
    (--remove (and (or (buffer-file-name it)
 
                       (eq (buffer-local-value 'major-mode it) 'dired-mode))
 
                   ;;(not (member b wg-buffers))
 
                   (not (member (wg-buffer-uid-or-add it) wg-buf-uids)))
 
              res)))
 

	
 
(defconst wg-buffer-list-function (symbol-function 'buffer-list))
 
(fset 'buffer-list wg-buffer-list-original)
 
(fset 'wg-buffer-list-emacs wg-buffer-list-original)
 

	
 

	
 
;; locate-dominating-file
 
(defcustom wg-mess-with-buffer-list nil
 
  "Redefine `buffer-list' to show buffers for each workgroup.
 

	
 
Crazy stuff that allows to reduce amount of code, gives new
 
features but is fucking unstable, so disabled by default"
 
  :type 'boolean
 
  :group 'workgroups
 
  :set (lambda (sym val)
 
         (custom-set-default sym val)
 
         (if (and workgroups-mode val)
 
             (fset 'buffer-list wg-buffer-list-function)
 
           (fset 'buffer-list wg-buffer-list-original))))
 
(fset 'buffer-list wg-buffer-list-original)
 

	
 
(provide 'workgroups-variables)
 
;;; workgroups-variables.el ends here
0 comments (0 inline, 0 general)