Giter Club home page Giter Club logo

stack's Introduction

stack's People

Contributors

lostmsu avatar

Stargazers

 avatar Aric Crosson Bouwers avatar Rory Hayes avatar

Watchers

 avatar James Cloos avatar  avatar

stack's Issues

Feature request: window groups

Disclaimers

  • The title is not descriptive, please read on.
  • I do understand that this feature request may not fit StackWM well. I still hope it will encourage LostTech to conisder implementing it, either as a side feature or as a separate app.

Review of existing solutions

Before I proceed, let's review all tiling options available.

  • Workspaces. Most OSes have the concept of workspaces: each window is assigned to a workspace, and switching to another workspace means hiding windows associated with one workspace and revealing ones associated with the other. Can be used together with OS-native tiling options to create several multi-window layouts and switch between them.
  • Quick resizing tools. Most tiling window managers offer simply resizing and positioning a window to a certain tile. After a window is positioned, the position is not enforced: the window can be moved or overlayed by another window.
  • Global layout tools. Some tools enforce a single global layout. The idea is that the user can't (or shouldn't) have any free-floating windows not embedded into the layout.

Problem definition

Consider this use case:

  1. I'm working with a maximized browser.

  2. I need to work with two notepad windows: assemble some text in notepad 2 by copying fragments of text from notepad 1.

  3. Naturally, I tile the two notepads, so that each uses 50% of available space.

  4. I need to look up something on the web, so I switch to the browser.

  5. I want to go back to working with the two notepads.

    BAM! ๐Ÿ’ฅ There is no simple way to bring back both notepads at once!

  6. I switch to one of the notepads, either with Alt+Tab of via taskbar. The notepad appears on top of the browser, half of the browser being still visible -- and useless.

  7. I now have to find the other notepad by hand and bring it up manually. This is a PITA, especially when there are multiple notepads opened and I need only one.

This may seem as a minor issue. It is minor indeed, but it's still a huge nuisance. Note that this issue happens dozens of time per day, each day, to almost every computer user.

It's also not limited to notepads, of course. This use case is very wide, involving numerous situations and apps in countless combinations.

Assumptions

  • From time to time, almost everyone wants to work with a maximized app, even when they have other apps tiled.
  • I believe, few users are ready to commit to a single, globally enforced layout. Most users want a different layout for each immediate situation.
  • I believe, few users enjoy Workspaces either, because not seeing all apps in the taskbar is a huge bummer. You can't simply switch to another window: first you have to remember which workspace it belongs to.

The idea

  • The most common (extremely common, I believe, even though the absolute majority don't realize it) use case is to tile two-three windows together and have them behave as a single maximized app, a group.
  • A power user would typically have multiple groups at once, switching between them quickly as they work on their stuff.
  • Each group can have its own layout. E. g. it's reasonable to tile two notepads as 50/50, but when you work with Excel and Calculator, you'd want Excel to occupy some 80% of available space. (And when you switch from Excel to a browser, you no longer need the calculator, so it makes no sense to keep it tiled globally.)

A possible implementation

  1. Each window is either grouped (belongs to a group) or non-grouped (standalone).
  2. Each group can have its own layout. Layouts are composed of tiles (window slots). Tiles can't overlap and there can be no empty space between tiles.
  3. When you focus on a grouped window, all windows in the same group are automatically brought to front.
  4. You should be able to adjust a layout (resize tiles of the layout) by resizing a grouped window.
    1. When you resize a window that belongs to group by dragging its border that is adjacent to another window in the same group, then the other window must resize as well. This prevents overlaps and holes in layouts.
  5. Each window should have a Group button in its taskbar. By the look of the button, you should be able to tell whether a given window is standalone or grouped.
  6. When you click the Group button on a window, a dialog appears:
    mockup
    In the dialog:
    1. Existing groups are presented visually, you can see their layouts and which app occupy which tiles.
    2. On the side, there is a list of standalone windows.
    3. The current window (the one that owns the Group button that you clicked to present the dialog) is highlighted.
    4. You can move a window into a tile via drag-and-drop.
    5. You can drop a window into an empty tile.
    6. You can drop a window into an occupied tile. This will swap the two tiles.
    7. You can drop a window into an occupied tile. This will replace one tile with the other, the other tile being made standalone. While dragging, a hint about the modifier should be visible.
    8. You can drag a window out of a tile and into the list of standalone tiles. This will make the window standalone.
    9. When you hover over a group, group control buttons appear: Change Layout and Remove.
    10. Change Layout button:
      1. Clicking on the Change Layout button will bring up a list of available layouts.
      2. Layouts are simple, non-overlapping. Complex overlapping layouts aren't needed here because multiple non-overlapping layouts are displayed.
      3. Clicking a layout in the list changes the group's layout.
      4. It also lets you change the number of tiles in the group. If the number of tiles is decreased, excessive windows in the group become standalone.
    11. Remove button: It removes the groups, all its windows become standalone.
    12. There should be a Create Group button in the dialog. It presents a list of layouts (same as in Change Layout), letting you create a new group.
      1. After you create a group, you can drag some windows into it.
    13. When the dialog is closed (either with an X button or by clicking outside), all empty groups are destroyed.
  7. Under the hood, layouts are composed of regions. Regions can be horizontal or vertical. Each region can contain tiles and/or other regions.
    1. For example, a simple 2x2 layout does not have simply have four tiles. It has two regions (either two horizontal or two vertical), and each region has two tiles.
    2. This approach simplifies the layout adjustment implementation.
  8. There should be a GUI layout editor.

Potential integration with Stack WM

Slack could treat groups as individual windows: when you put a grouped window into a Stack tile, the whole group goes into the tile, maintaining the group layout.

Final thoughts

I believe, this feature idea has huge commercial potential. It solves a problem that affects the absolute majority of users, even though most users don't realize it yet.

missing telegram?

hey! a while back, telegram moved to phone-only and I lost access to my telegram account. I signed up for telegram again, but can't seem to find the stack community anywhere.

Is there a new community somewhere? Or is the telegram just very well hidden?

Thanks!

Switch windows with directional keyboard shortcuts

Use some hotkey (Ctrl+Alt+Arrow) to move focus to another window in the specified direction. E.g. when there's a window open to the left from the active Ctrl+Alt+Left Arrow should activate it.

Feature exists in XMonad.

OOB Horizontal layout equivalent for VERTICAL(Portrait) monitors

I tried my best to edit a copy of the layout file for the OOB Horizontal to make one that would work with my Vertical monitor, but was unable to make it work. I believe the issue was that there is some code I'm not aware of for the "Stack Panels" that didn't like being in that orientation. The tabs themselves weren't rotated, and messed up the layout.

Documentation?

I've installed Stack WM trial and I don't have a slightest idea how to use it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.