Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature request] move layout/session definitions into separate files with a dedicated extension in a dedicated directory #604

Closed
venteto opened this issue Jun 7, 2022 · 3 comments
Labels
enhancement New feature or request

Comments

@venteto
Copy link

venteto commented Jun 7, 2022

Is your feature request related to a problem? Please describe.
In particular I'd like to be able to define a layout for a specific programming project. So this layout may or may not be ephemeral, and has less to do with the configuration of terminator and more to do with my programming project. Moreover, I'd like to be able to store the layout file in or closer to my programming project's directory, akin to a vscode workspace file or Sublime Text project file. Then I would put a symlink to my programming project-specific layout (temporary or not temporary) in the new default directory terminator would look in for one or more layout/session files. If the programming project is ever considered permanently finished, all I have to do is delete a symlink in terminator's proposed layouts files subdirectory.

I'm not currently asking for any other changes to the concept of layouts, whether in the syntax, or in the graphical UI for saving new layouts in preferences, or invoking them for the layout launcher, or command line options.

Describe the solution you'd like
Just take the existing layout definition concept, but move it out of the config file. Allow one or more layout defintion files, including the default layout if none is explicitly specified. One file should only contain one layout. By default have terminator look for these files in .config/terminator/layouts (or maybe "sessions" instead of "layouts" ... I haven't read them but I noticed another issue where someone requests that layouts have additional functionality akin to saved session state, but at a minimum I just seek to have the existing layout functionality, only divided out into discreet files and a default subdirectory).

❯ tree .config/terminator
.config/terminator
├── config -> /home/me/.config/terminator/config.ini
├── config.ini
├── sessions
│   ├── default.ini
│   ├── multi-tab-layout-01.ini
│   ├── proj-specific-layout-in-version-control.ini -> /path/to/PROJECTS/example_project/proj-specific-layout-in-version-control.ini
│   └── some-other-layout.ini
└── themes

It seems like terminator configuration syntaxy is mostly like .ini files, is that correct? Then perhaps the new layout files (or symlinks to them, if they are stored outside of the proper layouts subdirectory) would have .ini extensions and would be ignored by terminator otherwise.

Describe alternatives you've considered
I like that Tilix has session definition files, but I don't like that by default it doesn't seem to look in a specific, predictable place for them. Moreover, creating a .desktop launcher to open Tilix with a specific session (layout) sometimes works and sometimes does not work. Terminator is more reliable and predictable in this regard. Moreover, I don't think JSON was ever intended to be used for configuration files (e.g., you cannot even put comments in JSON files), so I don't like that Tilix opted for this file type.

Additional context
Add any other context or screenshots about the feature request here.

@mattrose
Copy link
Member

mattrose commented Jun 7, 2022

This is already possible using the --config-json flag in 2.1.0. JSON may not be the best language, but it's there now. I can take a look at merging configobj objects from different file sources, but I don't have a lot of spare time right now. PRs are always welcome.

@mattrose mattrose added question Further information is requested enhancement New feature or request and removed question Further information is requested labels Jun 7, 2022
@venteto
Copy link
Author

venteto commented Jun 8, 2022

I'm trying to adapt some of these json layout file examples and I wondered, is there available syntax to give each pane its own title, working directory, and profile assignment from existing profile names in the global config file, as well as to give the application window a title and maximized state, and to define the last active pane?

For example, I'm trying to convert every attribue from the below snippet from my global config file into json:

  [[3-tab-generic]]
    [[[child0]]]
      type = Window
      parent = ""
      order = 0
      position = 58:29
      maximised = True
      fullscreen = False
      size = 1862, 1051
      title = Terminator: 3 tab generic layout window
      last_active_window = True
    [[[child1]]]
      type = Notebook
      parent = child0
      order = 0
      labels = 2 cols, 2 rows, one pane
      last_active_term = f8e2958e-273c-4016-86c9-c433c70c17e0, 2eb0ee62-b18c-45e7-8553-19ef79c08d5c, b5bcf7c1-e588-4ade-b723-bd7372d91a2f
      active_page = 2
    [[[child2]]]
      type = HPaned
      parent = child1
      order = 0
      position = 928
      ratio = 0.5002695417789758
    [[[terminal3]]]
      type = Terminal
      parent = child2
      order = 0
      profile = default
      title = left
      uuid = f8e2958e-273c-4016-86c9-c433c70c17e0
      directory = /usr/share
    [[[terminal4]]]
      type = Terminal
      parent = child2
      order = 1
      profile = ambience
      title = right
      uuid = ae934e50-069b-4d22-89d1-029c149b8fc0
      directory = /usr/share
    [[[child5]]]
      type = VPaned
      parent = child1
      order = 1
      position = 505
      ratio = 0.5009920634920635
    [[[terminal6]]]
      type = Terminal
      parent = child5
      order = 0
      profile = default
      title = top
      uuid = 2eb0ee62-b18c-45e7-8553-19ef79c08d5c
      directory = /usr/share
    [[[terminal7]]]
      type = Terminal
      parent = child5
      order = 1
      profile = ambience
      title = bottom
      uuid = 24bee835-2b63-4461-8094-5efce084cccb
      directory = /usr/share
    [[[terminal8]]]
      type = Terminal
      parent = child1
      order = 2
      profile = default
      title = single
      uuid = b5bcf7c1-e588-4ade-b723-bd7372d91a2f
      directory = /usr/share

@venteto
Copy link
Author

venteto commented Jun 12, 2022

Never mind on my last question, I'm just going to use complete and separate normal (INI) config files, rather than mess with JSON.

@venteto venteto closed this as completed Jun 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants