• This repository has been archived on 27/Mar/2022
  • Stars
    star
    397
  • Rank 108,547 (Top 3 %)
  • Language
    TypeScript
  • License
    Other
  • Created over 13 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

tiling window manager extension for gnome-shell

Note: no longer in active development

I am no longer using or actively developing shellshape. I have focused my efforts on slinger, which I created as a simpler window management utility with many of the same benefits as shellshape, but with a fraction of the code, complexity and bugs. If anyone wishes to maintain shellshape (and fix said bugs ;)), please get in touch.

shellshape

A tiling window manager extension for gnome-shell. Many tiling window managers are an all-or-nothing affair, shellshape allows you to tile your windows when it makes sense, and still provides powerful direct manipulation when you need it. You don't have to give up any of the gnome features you like, so it makes for a very smooth learning curve.

I must thank bluetile, for it was the inspiration for this extension and many features are lifted directly from it (although not code, JS and haskell are vastly different beasts).

Running it

You can install it from the official gnome shell extensions site. This may lag (sometimes months) behind the development release, as they perform manual approval of all updates.

Running a local version

To build the latest version, you'll need to install npm (the node.js package manager). You'll also need python. Then:

  1. clone this repo

  2. run tools/gup compile

  3. you can install the extension to a symlink in ~/.local/share/gnome-shell/extensions using:

    tools/gup dev-install
    

To compile stuff (after changing some source code), run tools/gup compile. You can add e.g -j3 to compile stuff in parallel.

Package manager

Important note about ongoing development

I love shellshape, and I love using it. But to be honest, I hate working in gnome-shell these days. It's poorly documented, breaks occasionally, and generally a pain in the ass to hack on (which I do in my spare time). So my main aim in ongoing development is to make sure shellshape keeps working for new gnome releases, and to fix bugs. I may not run the latest gnome version for a while after it's released, because I'm lazy, and being on the cutting edge is not as exciting as it used to be.

I will probably not implement your feature suggestion unless it's brilliant or simple (or both!). It's nothing personal. That's not to say that shellshape will see no new features - if you want to add a new feature, I'll do what I can to get it merged. Please file an issue with your idea first though, so I can let you know how likely it is to (a) be possible, and (b) get merged.

To reflect this, most issues will be tagged with wishlist - I am not planning to implement them, but I have no issue with others doing so. I'll try to fix non-wishlist issues myself (eventually), especially those tagged "bug". But please feel free to help fix those too, if you can!

Hacking

The source code is all TypeScript. This is mostly like JavaScript, but it has optional type annotations, a module system, and (sometimes) it yells at you when you do something that makes no sense. Which is a nicer experience than gnome-shell yelling at you, crashing, and disabling all of your extensions.

  • interactive/: run the core tiling code in the browser (without killing gnome shell when you break something ;))
  • src/tiling.ts: core tiling & layout stuff
  • src/gjs: gnome-shell specific stuff (mutter integration, extension system, indicator, etc)
  • src/node: nodejs shim, used for running tests
  • src/xbrowser: browser shim, used for interactive/index.html
  • src/stub: nodejs shim, used for running tests
  • shellshape/: third party libs, metadata.json, translations, gschemas, etc

Build targets with tools/gup. Targets exist wherever there is a corresponding *.gup file. You can find those with:

$ git ls-files | fgrep '.gup' | sed -e 's!/gup/!/!;s!\.gup$!!'

Not all of them will work, as some might depend on tools only I happen to have installed. Patches welcome if you find + fix that sort of thing.

Debugging

If you export SHELLSHAPE_DEBUG=all, you will get a debug log written to /tmp/shellshape.log. You can set values other than all if you want to debug on specific topics (available topics include extension, indicator, tiling, workspace and window) - they should be set as a comma-delimited string, e.g SHELLSHAPE_DEBUG=workspace,tiling.

"It doesn't work"

If you don't know why, here's some things to check:

  • Check the extension is enabled (you can see this in the "Shell Extensions" section of gnome-tweak-tool)
  • See if there are any errors in looking glass that mention shellshape (press alt-F2, type "lg" and then click the "Errors" tab)
  • Check the console output (if running in a console) for any messages that mention shellshape
  • Check /tmp/shellshape.log after launching with $SHELLSHAPE_DEBUG=all

To report a bug or crash, please see the github issues page.

Keyboard shortcuts

Are listed at http://gfxmonk.net/shellshape/

To modify the defaults point dconf-editor at org.gnome.shell.extensions.net.gfxmonk.shellshape.keybindings

Some helpful folk have created graphical (SVG) versions of the keyboard shortcuts, to serve as a handy reference:

Note: These are for versions prior to 0.12. Anyone want to update them?

Licence

GPLv3

Changelog

version 0.13

  • gnome-shell 3.18 compatibility
  • bug fixes, particularly around settings, startup and enable/disable

version 0.12

  • gnome-shell 3.16 compatibility
  • Changes to keyboard shortcuts
  • Next/Previous layout shortcuts (not bound by default)

version 0.10

  • Fairly large overhaul to codebase:
    • Removed coffeescript, now using typescript instead. This is a JavaScript superset (so for the most part it's just JavaScript), but with optional static typing. This has improved the quality of the code in a number of places (it uncovered a number of dumb type-related bugs), and removes the need for contributors to know CoffeeScript.
    • Lots of cleanup of state management. This improves a number of circumstances where shellshape and gnome-shell disagree about the state of windows / workspaces, etc.
    • Made "default layout" setting apply instantly, rather then require a restart.
    • Additional misc bugs fixed while going through the codebase.

version 0.9

  • Support for gnome-shell 3.12

version 0.8

  • Preliminary support for multiple monitors
  • Update screen bounds every time we do a layout

version 0.7

  • API changes for gnome-shell 3.10. This makes 0.7 incompatible with anything before 3.10.

version 0.6.1

  • Fixed "Shellshape settings" indicator menu in gnome-shell 3.8

version 0.6

  • Support for gnome-shell 3.8
  • Support for localisation (plus german translation) thanks to @jonnius

version 0.5.4

  • Support for gnome-shell 3.6

version 0.5.3

  • Fix error launching dconf-editor from the preferences panel

version 0.5.2

  • Updated manifest.json to declare compatibility with gnome-shell 3.4.2
  • Include LICENCE and README.md files in tarball

version 0.5.1

  • Added blacklist to prevent "Conky" windows from being tiled.
  • Fixed a number of bugs to do with tracking window movement and sizes.
  • Switched the "Horizontal" and "Vertical" layouts. You may need to adjust your keyboard shortcuts if you've set them to anything non-default, as the gsettings keys have swapped as well (if you haven't customised shortcuts, the defaults will still do the right thing)..

version 0.5:

  • Removed label from indicator icon.
  • Rework icons to be simpler and look/act like other symbolic icons in the panel.
  • Added a preferences panel (accessible from the gse website, or gnome-shell-extension-prefs).
  • Added a "max autotile windows" option.
  • Added the ability to customise keyboard shortcuts from the preferences panel.

version 0.4:

  • First release on extensions.gnome.org

More Repositories

1

python-readability

[abandoned] python port of arc90's readability bookmarklet
Python
527
star
2

slinger

gnome-shell extension for throwing windows around efficiently
TypeScript
135
star
3

opam2nix

Generate nix expressions from opam packages
OCaml
93
star
4

gnome-shell-impatience

speed up gnome-shell animations
JavaScript
78
star
5

gnome-shell-scroll-workspaces

Switch workspaces by scrolling in the top panel
Python
71
star
6

runix

Nix
59
star
7

autonose

autotest-like runner for nosetests
Python
58
star
8

pea

[abandoned] Tiny BDD framework for python
Python
58
star
9

gup

A better make, inspired by djb's redo.
Python
50
star
10

piep

Bringing the power of python to stream editing
Python
48
star
11

nix-wrangle

Wrangle your nix dependencies
Haskell
40
star
12

edit-server

an edit server compatible with TextAid and "Edit with Emacs" chrome extensions
Python
32
star
13

opam2nix-packages

nix expressions for the official opam repository, using opam2nix
Nix
27
star
14

supergenpass

[abandoned] reimplementation of supergenpass algorithm in python, with OS integration
Python
24
star
15

mocktest

powerful mock, expectation and unit test helpers for python
Python
22
star
16

nix-pin

nixpkgs development utility
Python
20
star
17

coffee-spec

[abandoned] spec runner for coffee-script
CoffeeScript
18
star
18

unfluff

[abandoned] statistical HTML content extraction in python
Python
18
star
19

dhall-render

Render multiple files from dhall expressions
Ruby
18
star
20

termstyle

a dirt-simple terminal-colour library for python
Python
15
star
21

stereoscoper

Bulk process stereoscopic (3d) images
Python
10
star
22

fetlock

Convert any lockfile to a nix expression
Rust
9
star
23

pyperclip

improved fork of coffeeghost's `pyperclip` module
Python
9
star
24

nix-update-source

Fetch and automatically update nix derivation sources
Python
9
star
25

gsel

Python
8
star
26

vdoml

virtual DOM + OCaml
OCaml
8
star
27

node-seccomp

C++
7
star
28

foperator

Functional k8s operator framework, in scala
Scala
7
star
29

app-customisations

Mostly dotfiles and whatnot.
Python
6
star
30

py-dataflow

[abandoned] a simple dataflow library for python
Python
5
star
31

vim-watch

run stuff whenever vim saves a file
Python
5
star
32

paragram

an erlang-style concurrency framework for python
Python
5
star
33

repr.js

better stringification for javascript
JavaScript
5
star
34

netproxrc

netrc-enabled https proxy for nix
Go
5
star
35

passe

SuperGenPass-compatible password utility
OCaml
5
star
36

appengine-auth

[abandoned] Google App Engine authorisation for non-web based python applications
Python
4
star
37

vim-stratifiedjs

vim support for sjs
Vim Script
4
star
38

python-irank

rate your music with whatever criteria you like
Python
4
star
39

vim-background-make

[abandoned] a vim plugin to run :make in the background, unobtrusively.
Vim Script
4
star
40

pjkit

[abandoned] python-javascript bridge for webkit-gtk
Python
4
star
41

filepp

[abandoned] mirror of http://freecode.com/projects/filepp with minor changes for ZeroInstall
Perl
4
star
42

pagefeed-android

[abandoned] android app for pagefeed.appspot.com
Scala
3
star
43

pagefeed

[abandoned] the code behind pagefeed.appspot.com
Python
3
star
44

jquery-navim

[abandoned] vim-style keyboard navigation for page elements
JavaScript
3
star
45

bash-cached-completions

a configurable mecahnism for generating (and caching) bash completion words for arbitrary commands
Python
3
star
46

autorelease-tagger-action

Generate & tag versions based on git history
JavaScript
3
star
47

chored

Chores, sorted.
TypeScript
3
star
48

daglink

manage your symlinks
Python
3
star
49

zeroinstall-plugin-manager

plugin manager <runner> for zero-install applications
Python
3
star
50

0env

run a program or shell in the context of a ZeroInstall feed
Python
3
star
51

obligate.js

browser-side module implementation with Zero Install integration
Python
3
star
52

music-import

Pedantically set music filename, metadata and volume normalisation
Python
2
star
53

js-bakery

[abandoned]
JavaScript
2
star
54

0path

[abandoned] path manipulation for testing 0install packages
Python
2
star
55

net-sandbox

[abandoned] sandbox a process inside a new network namespace
Python
2
star
56

capsul

A minimal, type-safe alternative to (some of) akka.
Scala
2
star
57

htmlview

view html files (quickly)
Perl
2
star
58

simple_notify

[abandoned] a python inotify wrapper that's trivial to use
Python
2
star
59

savemytext.appspot.com

[abandoned] exactly what it says on the tin
JavaScript
2
star
60

self-update-action

Generic github action for self-updating codebases
TypeScript
2
star
61

simple-daemon

[abandoned] a simple wrapper around start-stop-daemon to do the right thing most of the time
Python
2
star
62

csharp-quote-argv

C#
2
star
63

version

view (and modify) your project version in multiple commonly-used places
Python
2
star
64

nix-pin-example-sed

A sample repository for demonstrating nix-pin
C
1
star
65

savemytext

[abandoned] programs / plugins to use with savemytext.appspot.com
Python
1
star
66

sbt-strict-scope

Scala
1
star
67

0local

make a local implementation of a 0install feed
Python
1
star
68

eog-rate

Set ratings and tags in Eye of Gnome
Python
1
star
69

mountmon

[abandoned] run a command whenever you attach your kindle via USB
1
star
70

0template-packages

zero install package-implementation feed generator
Python
1
star
71

indent-finder

Fork of http://www.freehackers.org/Indent_Finder
C
1
star
72

dconf-user-overrides

manage your important dconf overrides as text files
Python
1
star
73

0release

[abandoned] 0release (a fork of http://repo.or.cz/w/0release.git)
Python
1
star
74

snip.hs

manage text snippets on the command line
Haskell
1
star
75

0find

[abandoned] 0install utility to find an implementation directory
Python
1
star
76

tail-logs

tail multiple logs (with tmux)
Python
1
star
77

jenkins-indicator

[abandoned] Jenkins Gnome Applet
Python
1
star
78

bash-escape

escape strings for use in shell scripting
Python
1
star
79

zeroinstall-ocaml-0compile

[abandoned] 0compile feed for 0install's ocaml parts (and dependencies)
Python
1
star
80

0downstream

create & maintain zeroinstall feeds for upstream projects
Python
1
star
81

auditspec

Scala
1
star
82

0compile-cabal-build

[abandoned] cabal-build wrapper for use with 0compile
Python
1
star
83

nosetests-runner

[abandoned] nosetests runner using 0install for plugin resolution
Python
1
star
84

backpressure-sensor

Measure backpressure in reactive streams pipelines
Scala
1
star
85

iysr

simple service monitor for systemd
Rust
1
star
86

0readme

populate a zero install feed with README contents
Python
1
star
87

vim-autotab

[abandoned] pretend everyone else agrees with your tab-loving ways
Vim Script
1
star
88

dumbattr

resiliant xattr-based metadata
Python
1
star
89

zero2pypi

create a pypi package from a zero install feed
Python
1
star
90

pycasa

[abandoned] read picasa metadata
Python
1
star
91

importwatcher

[abandoned] module import watcher for python
Python
1
star
92

indicate-task

create a notification applet for the duration of a process (task)
Python
1
star
93

dhall-ci

Reusable CI abstractions with dhall
Dhall
1
star
94

mapnix

Simple NixOS deployment
Python
1
star
95

status-check

Dirt simple notifications when periodic tasks fail to run
OCaml
1
star
96

node-smock

straightforward mocking for commonJS runtimes
JavaScript
1
star
97

mkzero

zero-install feed publishing utility
Python
1
star
98

gedit-plugins

[abandoned] gedit plugins made or modified by me
Python
1
star