diff --git a/src/lib/menu.el b/src/lib/menu.el index 0b525f5..407b15d 100644 --- a/src/lib/menu.el +++ b/src/lib/menu.el @@ -14,6 +14,16 @@ ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . +;; --------------------------------------------------------------------- +;; Variables +;; --------------------------------------------------------------------- +(defvar my-desktop-session-dir + (concat (getenv "HOME") "/.tmp/sessions/") + "*Directory to save desktop sessions in") + +(defvar my-desktop-session-name-hist nil + "Desktop session name history") + ;; --------------------------------------------------------------------- ;; Functions ;; --------------------------------------------------------------------- @@ -40,12 +50,39 @@ (desktop-save-in-desktop-dir) ) ) + +(defun my-desktop-save (&optional name) + "Save desktop with a name." + (interactive) + (unless name + (setq name (my-desktop-get-session-name "Save session as: "))) + (make-directory (concat my-desktop-session-dir name) t) + (desktop-save (concat my-desktop-session-dir name) t) + ) + +(defun my-desktop-read (&optional name) + "Read desktop with a name." + (interactive) + (unless name + (setq name (my-desktop-get-session-name "Load session: "))) + (desktop-read (concat my-desktop-session-dir name)) + ) + +(defun my-desktop-get-session-name (prompt) + (completing-read prompt (and (file-exists-p my-desktop-session-dir) + (directory-files my-desktop-session-dir)) + nil nil nil my-desktop-session-name-hist) + ) + (defun menu/init-menu () "Initializing Kuso IDE menu" ;; New Project Menu (interactive) (define-key-after global-map [menu-bar file new-proj] (cons "New Project" (make-sparse-keymap "new project")) 'new-file) - (define-key-after global-map [menu-bar file load-session] '("Load Session" . desktop-change-dir) 'new-proj) - (define-key-after global-map [menu-bar file save-session] '("Save Session" . save-session) 'load-session) + (define-key-after global-map [menu-bar file load-session] '("Load Session" . my-desktop-read) 'new-proj) + (define-key-after global-map [menu-bar file save-session] '("Save Session" . my-desktop-save) 'load-session) + + (define-key global-map (kbd "") 'my-desktop-read) + (define-key global-map (kbd "") 'my-desktop-save) ;; New Project sub menus (define-key-after global-map [menu-bar file new-proj cproj] (cons "C/C++" (make-sparse-keymap "c-cpp-proj")))