help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Navigating Lisp data structures


From: Eric Abrahamsen
Subject: Re: Navigating Lisp data structures
Date: Sun, 04 Dec 2022 18:05:13 -0800
User-agent: Gnus/5.13 (Gnus v5.13)

Matt <matt@excalamus.com> writes:

> I'm writing an Emacs package and struggling to figure out how to represent 
> the data in a Lisp data structure.  I'm getting lost in whether it should be 
> an alist of alists, a plist of plists, an alist of plists, etc.  Or maybe it 
> would be better to use a cl-struct or a hash or a class or a vector or a 
> record.  Should I use keywords or not, etc.  
>
> Here is a detailed explanation of my issue:
>
> My Emacs package manages my project workflows (e.g. Python or C).  Each 
> project has a name, associated files, one or more shell processes (comints), 
> as well as commands for a specific shell and commands used across the shells. 
>  It also sets my window layout.
>
> In Python, I might structure the data something like this:
>
> projects = {
>     "my_c_project": {
>         'shells': {
>             "*build*": {"root": "/path/to/build/directory/", "setup": 
> ("export MYBUILDVAR1=1", "export MYBUILDVAR2=0")},
>             "*run*": {"root": "/path/to/run/directory/", "setup": ("export 
> MYRUNVAR=1")}
>         },
>         'commands': ("./build_my_project.sh", "./run_my_build"),
>         'files': ("/path/to/entrypoint.c", 
> "/path/to/other/file/I/care/about.c"),
>         'window_split': ("quad", ),  # C-x 3 C-x 2 other-window other-window 
> C-x 2
>     },
>     "my_python_project": {
>         'shells': {"*my_python_project*":  {"root": 
> "/path/to/my/python/project", "setup": ("source venv/bin/activate")}},
>         'commands': ("python3 -m my_python_project",
>                      "python3 -m unittest discover tests/ --failfast 
> --quiet", ),
>         'files': ("/path/to/my_python_project/entry_point.py", ),
>         'window_split': ("half", ), # C-x 3
>     }
> }

Wow, it looks like you're recreating complete project management
facilities from scratch! That's impressive, and also a bit terrifying.

Your adventurous spirit is to be commended, but you might _also_ look
into making use of more of Emacs' built-in facilities for this stuff.
Emacs has projects, and projects have `project-compile', which calls
`compile', and a bunch of the config above looks like it could be worked
into existing facilities.

There are/have been some truly monster discussion threads recently in
emacs.devel and the bug tracker about how to expand and make use of
projects, so that's very much in the process of evolution. I haven't
seen anyone suggest incorporating window layout into projects, and I'll
bet that some people would find that interesting.

You might not want to wade into the midst of a firefight, but now is the
right time to be asking these questions, and showing people how you use
projects, and would like to use them.

Just a suggestion!

Eric



reply via email to

[Prev in Thread] Current Thread [Next in Thread]