[plt-scheme] drscheme extension to save an load a set of tabs

From: Stephen De Gabrielle (spdegabrielle at gmail.com)
Date: Mon Aug 25 17:53:20 EDT 2008

Provides Save Tabs and Reload Tabs buttons in DrScheme
your saved tabs are saved to;  'home-dir "saved-tabs-file.ss"

I am lazy I use pack.ss to make the planet package
Inspiration;
http://www.eclipse.org/mylyn/  (via
http://list.cs.brown.edu/pipermail/plt-scheme/2007-September/020755.html
)

loading
	(require (planet "project.scm" ("spdegabrielle" "projects-project.plt" 1 2)))

To do

* Add scribble documentation.
* Put the buttons on the left near the file chooser/browser. - I can't
work out how to do this (HELP)
* When loading a project, don't re-load files that are already open.
* Save more than 1 project - I need an open-project button that lets
me select a file (and save project)
* A menu in the menubar might be a better place rather than buttons.
* The button icons don't show up - I can't work out how to get them
working. (HELP)

Any help appreciated...

Stephen


On Mon, Aug 25, 2008 at 9:58 PM, Stephen De Gabrielle
<spdegabrielle at gmail.com> wrote:
> forgot to load;
>
> (require (planet "project.scm" ("spdegabrielle" "projects-project.plt" 1 1)))
>
> s.
>
> On Mon, Aug 25, 2008 at 8:47 PM, Stephen De Gabrielle
> <spdegabrielle at gmail.com> wrote:
>> Thanks,
>>
>> I owe you the double thanks because I used drsync to work out how to do this.
>>
>> Your feedback is much appreciated;
>>
>>> Your icon looks good, but it is the wrong size. It should be 32x32. My
>> haha! I just used a screen grabber to capture part of the screen that
>> had project written on it
>> new icon fixed to 32x32  (same technique - but capture from module browser)
>>
>>> I like your use of pack.ss. I had used shell scripts to package everything up.
>> I am lazy
>>
>>> You could:
>>> * Add scribble documentation.
>> I just don't have the time for scribble - of course this is an opinion
>> from ignorance of scribble  - I appear trapped...
>>
>>> * Put the buttons on the left near the file chooser/browser. Since you
>>> are performing file operations, this is the logical place to find it.
>> I can't work out how to do thid (HELP)
>>
>>> * Upper-case the icon labels and remove the dash.
>> I Assume You Mean Title Case
>>
>>> * When loading a project, don't re-load files that are already open.
>> (added to the to-do list)
>>
>>> * More clearly state your goals and vision of the plugin. Files
>>> grouped into a project using this plugin, and the ability to browse
>>> code dependencies using the module browser, seem to be complementary
>>> features.
>> Sorry, at this stage it has been about what I can achieve with the
>> mimimal effort
>>
>>> * Save more than 1 project
>> I need an open-project button that lets me select a file (and save project)
>>
>>> You could also:
>>> * Use a different extension that .psp. That is associated to PSP image
>>> files (on Windows atleast).
>> suggestions - I have changed to .ss for the moment.
>>
>>> * Put the project file in the users home dir, use (find-system-path 'home-dir).
>> done thanks for the tip :)
>>
>>> * I used the predicate for whether a tab has a file is to apply
>>> file-path to the tab, rather than asking a tab for its filename and
>>> checking if it exists.Tabs are created in a state where they aren't
>>> associated with a file, the only way to associate them with a file is
>>> by creating a new one or one that already exists (to the best of my
>>> knowledge at least).
>> Umm, could you elaborate?
>>
>>> * A menu in the menubar might be a better place rather than buttons.
>> yes
>>
>>> * The button icons don't show up for me, but I see them configured in
>>> the button.
>> I can't work out how to get them working. (HELP)
>>
>> Any help appreciated...
>>
>> Thanks again,
>>
>> Stephen
>>
>>
>> #lang scheme/base
>> (require (lib "tool.ss" "drscheme")
>>         mred
>>         mrlib/switchable-button
>>         mzlib/unit
>>         scheme/class)
>>
>> (provide tool@)
>>
>> (define tool@
>>  (unit
>>    (import drscheme:tool^)
>>    (export drscheme:tool-exports^)
>>    (define phase1 void)
>>    (define phase2 void)
>>
>>    (define project-icon "project.png")
>>    (define project-icon-sm "project-sm.png")
>>    (define home-dir (find-system-path 'home-dir))
>>    (define saved-tabs-file (string->path "saved-tabs-file.ss"))
>>    (define saved-tabs-file-path (build-path home-dir saved-tabs-file))
>>    (define (save x)
>>      (call-with-output-file saved-tabs-file-path
>>        (lambda (i) (write x i))
>>        #:exists 'replace
>>        ))
>>
>>    (define (load)
>>      (for-each (lambda (filename)
>>                  (drscheme:unit:open-drscheme-window filename))
>>                (if (file-exists?  saved-tabs-file-path)
>>                    (call-with-input-file  saved-tabs-file-path
>> (lambda (i) (read i)))
>>                    '()
>>                    )))
>>
>>
>>    (define (projects-unit-frame-mixin super%)
>>      (class super%
>>        (inherit get-button-panel)
>>
>>        ;; each-tab -> list of files
>>        (define (get-tab-files)
>>          (map
>>           (lambda (tab)
>>             (let ([editor (send tab get-defs)])
>>               (when (file-exists? (send editor get-filename))
>> (path->string (send editor get-filename)))))
>>           (send this get-tabs)))
>>
>>        (super-new)
>>
>>        (inherit register-toolbar-button)
>>
>>        (define project-icon-bitmap (make-object bitmap%
>> project-icon-sm 'png/mask))
>>
>>        (define save-project-button
>>          (new switchable-button%
>>               (label "save tabs")
>>               (parent (make-object vertical-pane% (get-button-panel)))
>>               (callback (lambda (button) (save (get-tab-files))))
>>               [bitmap project-icon-bitmap]
>>
>>               ))
>>        (register-toolbar-button save-project-button)
>>
>>        (send (get-button-panel) change-children
>>              (lambda (_)
>>                (cons (send save-project-button get-parent)
>>                      (remq (send save-project-button get-parent) _))))
>>
>>        (define load-project-button
>>          (new switchable-button%
>>               (label "reload tabs")
>>               (parent (make-object vertical-pane% (get-button-panel)))
>>               (callback (lambda (button) (load)))
>>               [bitmap project-icon-bitmap]
>>               ))
>>        (register-toolbar-button load-project-button)
>>
>>        (send (get-button-panel) change-children
>>              (lambda (_)
>>                (cons (send load-project-button get-parent)
>>                      (remq (send load-project-button get-parent) _))))
>>        ))
>>    (drscheme:get/extend:extend-unit-frame projects-unit-frame-mixin)
>>    ))
>>
>>
>> On Mon, Aug 25, 2008 at 4:59 PM, Grant Rettke <grettke at acm.org> wrote:
>>> Hi Stephen,
>>>
>>>> let me know what you think
>>>
>>> Your first run looks good. Here are some thoughts:
>>>
>>> Your icon looks good, but it is the wrong size. It should be 32x32. My
>>> icon in DrSync looks, ok, but not good. I used pov-ray. I wish I had
>>> an artist at my disposal.
>>>
>>> I like your use of pack.ss. I had used shell scripts to package everything up.
>>>
>>> I tested out the plugin, it works fine. Inevitably now people will
>>> tell you "You should...". Here is my contribution :).
>>>
>>> You could:
>>> * Add scribble documentation.
>>> * Put the buttons on the left near the file chooser/browser. Since you
>>> are performing file operations, this is the logical place to find it.
>>> * Upper-case the icon labels and remove the dash.
>>> * When loading a project, don't re-load files that are already open.
>>> * More clearly state your goals and vision of the plugin. Files
>>> grouped into a project using this plugin, and the ability to browse
>>> code dependencies using the module browser, seem to be complementary
>>> features.
>>> * Save more than 1 project
>>>
>>> You could also:
>>> * Use a different extension that .psp. That is associated to PSP image
>>> files (on Windows atleast).
>>> * Put the project file in the users home dir, use (find-system-path 'home-dir).
>>> * I used the predicate for whether a tab has a file is to apply
>>> file-path to the tab, rather than asking a tab for its filename and
>>> checking if it exists.Tabs are created in a state where they aren't
>>> associated with a file, the only way to associate them with a file is
>>> by creating a new one or one that already exists (to the best of my
>>> knowledge at least).
>>> * A menu in the menubar might be a better place rather than buttons.
>>> * The button icons don't show up for me, but I see them configured in
>>> the button.
>>>
>>> Best wishes,
>>>
>>> Grant
>>>
>>
>>
>>
>> --
>> Cheers,
>>
>> Stephen
>>
>
>
>
> --
> Cheers,
>
> Stephen
>
> --
> Stephen De Gabrielle
> s.degabrielle at cs.ucl.ac.uk
> Telephone +44 (0)20 7679 0693 (x30693)
> Mobile 079 851 890 45
> Project: Making Sense of Information (MaSI)
> Work:http://www.uclic.ucl.ac.uk/annb/MaSI.html
> Home:http://www.degabrielle.name/stephen
>
>
> UCL Interaction Centre
> MPEB 8th floor
> University College London
> Gower Street
> London WC1E 6BT
>



-- 
Cheers,

Stephen

--
Stephen De Gabrielle
s.degabrielle at cs.ucl.ac.uk
Telephone +44 (0)20 7679 0693 (x30693)
Mobile 079 851 890 45
Project: Making Sense of Information (MaSI)
Work:http://www.uclic.ucl.ac.uk/annb/MaSI.html
Home:http://www.degabrielle.name/stephen


UCL Interaction Centre
MPEB 8th floor
University College London
Gower Street
London WC1E 6BT


Posted on the users mailing list.