Skip to content

Commit

Permalink
Merge pull request #124 from Fmstrat/develop
Browse files Browse the repository at this point in the history
Merge Develop into master for v11
  • Loading branch information
GrylledCheez authored Jun 6, 2023
2 parents 39259b5 + 795a191 commit 29f6761
Show file tree
Hide file tree
Showing 12 changed files with 1,604 additions and 1,144 deletions.
270 changes: 270 additions & 0 deletions .eslintrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,270 @@
---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
env:
es2021: true
extends: 'eslint:recommended'
plugins:
- jsdoc
rules:
array-bracket-newline:
- error
- consistent
array-bracket-spacing:
- error
- never
array-callback-return: error
arrow-parens:
- error
- as-needed
arrow-spacing: error
block-scoped-var: error
block-spacing: error
brace-style: error
# Waiting for this to have matured a bit in eslint
# camelcase:
# - error
# - properties: never
# allow: [^vfunc_, ^on_, _instance_init]
comma-dangle:
- error
- arrays: always-multiline
objects: always-multiline
functions: never
comma-spacing:
- error
- before: false
after: true
comma-style:
- error
- last
computed-property-spacing: error
curly:
- error
- multi-or-nest
- consistent
dot-location:
- error
- property
eol-last: error
eqeqeq: error
func-call-spacing: error
func-name-matching: error
func-style:
- error
- declaration
- allowArrowFunctions: true
indent:
- error
- 4
- ignoredNodes:
# Allow not indenting the body of GObject.registerClass, since in the
# future it's intended to be a decorator
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
# Allow dedenting chained member expressions
MemberExpression: 'off'
jsdoc/check-alignment: error
jsdoc/check-param-names: error
jsdoc/check-tag-names: error
jsdoc/check-types: error
jsdoc/implements-on-classes: error
jsdoc/newline-after-description: "off"
jsdoc/require-jsdoc: error
jsdoc/require-param: error
jsdoc/require-param-description: error
jsdoc/require-param-name: error
jsdoc/require-param-type: error
key-spacing:
- error
- beforeColon: false
afterColon: true
keyword-spacing:
- error
- before: true
after: true
linebreak-style:
- error
- unix
lines-between-class-members:
- error
- always
- exceptAfterSingleLine: true
max-nested-callbacks: error
max-statements-per-line: error
new-parens: error
no-array-constructor: error
no-await-in-loop: error
no-caller: error
no-constant-condition:
- error
- checkLoops: false
no-div-regex: error
no-empty:
- error
- allowEmptyCatch: true
no-extra-bind: error
no-extra-parens:
- error
- all
- conditionalAssign: false
nestedBinaryExpressions: false
returnAssign: false
no-implicit-coercion:
- error
- allow:
- '!!'
no-invalid-this: error
no-iterator: error
no-label-var: error
no-lonely-if: error
no-loop-func: error
no-nested-ternary: error
no-new-object: error
no-new-wrappers: error
no-octal-escape: error
no-proto: error
no-prototype-builtins: 'off'
no-restricted-globals: [error, window]
no-restricted-properties:
- error
- object: imports
property: format
message: Use template strings
- object: pkg
property: initFormat
message: Use template strings
- object: Lang
property: copyProperties
message: Use Object.assign()
- object: Lang
property: bind
message: Use arrow notation or Function.prototype.bind()
- object: Lang
property: Class
message: Use ES6 classes
no-restricted-syntax:
- error
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=1] >
BlockStatement[body.length=1]
CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] >
Identifier:first-child
message: _init() that only calls super._init() is unnecessary
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=0] >
BlockStatement[body.length=1]
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
message: _init() that only calls super._init() is unnecessary
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
message: Use Array.isArray()
no-return-assign: error
no-return-await: error
no-self-compare: error
no-shadow: error
no-shadow-restricted-names: error
no-spaced-func: error
no-tabs: error
no-template-curly-in-string: error
no-throw-literal: error
no-trailing-spaces: error
no-undef-init: error
no-unneeded-ternary: error
no-unused-expressions: error
no-unused-vars:
- error
# Vars use a suffix _ instead of a prefix because of file-scope private vars
- varsIgnorePattern: (^unused|Manager|buildPrefsWidget|enable|disable|init|_$)
argsIgnorePattern: ^(unused|_)
no-useless-call: error
no-useless-computed-key: error
no-useless-concat: error
no-useless-constructor: error
no-useless-rename: error
no-useless-return: error
no-whitespace-before-property: error
no-with: error
nonblock-statement-body-position:
- error
- below
object-curly-newline:
- error
- consistent: true
multiline: true
object-curly-spacing: error
object-shorthand: error
operator-assignment: error
operator-linebreak: error
padded-blocks:
- error
- never
# These may be a bit controversial, we can try them out and enable them later
# prefer-const: error
# prefer-destructuring: error
prefer-numeric-literals: error
prefer-promise-reject-errors: error
prefer-rest-params: error
prefer-spread: error
prefer-template: error
quotes:
- error
- single
- avoidEscape: true
require-await: error
rest-spread-spacing: error
semi:
- error
- always
semi-spacing:
- error
- before: false
after: true
semi-style: error
space-before-blocks: error
space-before-function-paren:
- error
- named: never
# for `function ()` and `async () =>`, preserve space around keywords
anonymous: always
asyncArrow: always
space-in-parens: error
space-infix-ops:
- error
- int32Hint: false
space-unary-ops: error
spaced-comment: error
switch-colon-spacing: error
symbol-description: error
template-curly-spacing: error
template-tag-spacing: error
unicode-bom: error
wrap-iife:
- error
- inside
yield-star-spacing: error
yoda: error
settings:
jsdoc:
mode: typescript
globals:
ARGV: readonly
Debugger: readonly
GIRepositoryGType: readonly
globalThis: readonly
imports: readonly
Intl: readonly
log: readonly
logError: readonly
print: readonly
printerr: readonly
window: readonly
TextEncoder: readonly
TextDecoder: readonly
console: readonly
setTimeout: readonly
setInterval: readonly
clearTimeout: readonly
clearInterval: readonly
parserOptions:
ecmaVersion: 2022
22 changes: 22 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: lint

on:
pull_request:
branches:
- master
- develop
push:
branches:
- master
- develop

jobs:
Linting:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- name: Install eslint
run: npm install --save-dev eslint
- name: Run ESLint
run: npx eslint . --ext .js --ignore-pattern node_modules/
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
wintile@nowsci.com.zip
node_modules/
package-lock.json
69 changes: 60 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,70 @@
WinTile: Windows 10 window tiling for GNOME
===========================================
WinTile is a hotkey driven window tiling system for GNOME that imitates the standard `Win-Arrow` keys of Windows 10, allowing you to maximize, maximize to sides, or 1/4 sized to corner a window using just `<Super>`+`<Arrows>`.
# WinTile: Windows 10 window tiling for GNOME
WinTile is a hotkey driven window tiling system for GNOME that imitates the
standard `Win-Arrow` keys of Windows 10, allowing you to maximize, maximize
to sides, or 1/4 sized to corner a window using just `<Super>`+`<Arrows>`.

WinTile also supports:
- 2, 3, or 4 columns for standard or ultrawide monitors
- Mouse preview and snapping for placing windows
- Toggling of "maximize" mode, which adds/removes GNOME animations
- Mouse preview and snapping for placing tiles
- "Maximize" mode, which adds/removes GNOME animations
- Ultrawide-only mode limits 16:9 screens to a 2x2 grid

WinTile can be found on the GNOME Extension site:
<img src='demo.gif'>

https://extensions.gnome.org/extension/1723/wintile-windows-10-window-tiling-for-gnome/
# Usage:
### Moving with arrow key:
Pressing `<Super>`+`<Arrows>` will move tile around the screen.
- `<Super>`+`<Up>` will maximize your tile with a few different levels
- Maximized vertically in the current column
- Maximized horizontally in the top row
- If you're using 4 col mode, it will maximize in the center at double-width first

<img src='demo.gif'>
- `<Super>`+`<Left>` or `<Super>`+`<Right>`
- Move a tile in that direction. If it's at the edge of a screen, it will go full-height
- If a tile is more than 1 column wide and on the edge in that direction
it will shrink by 1 column

- `<Super>`+`<Down>` will maximize your tile with a few different levels
- If you're already maximized in 4 col mode, it will downsize in the center at double-width
- If maximized vertically, it will shrink to the bottom row
- If minimizing is enabled, the tile will disappear to the task bar

### Moving with the mouse:
Dragging a window around the edge of the screen will create a preview of
where that tile will snap.

There are a few zones to be aware of
- Top Center maximizes a window
- Bottom Center maximizes horizontally in the bottom row
- In the center of any column on the bottom row will maximize vertically in that column
- Right or left center will maximize vertically in a column
- If using 4 columns and double-width is enabled, it will maximize on that half of the screen

- Any other zone along the edge will create a 1x1 tile

# Configuration
### Browser
1. Visit https://extensions.gnome.org/local/
1. Click on the "Configure this extension" button.
1. Alternatively, open the `Extension` settings in [Gnome Tweaks](https://gitlab.gnome.org/GNOME/gnome-tweaks), locate `Wintile` and click on the cogwheel button to bring up the configuration dialog.

### Gnome-tweaks
1. Open `Extension` settings in [Gnome Tweaks](https://gitlab.gnome.org/GNOME/gnome-tweaks)
1. locate `Wintile` and click on the cogwheel button to bring up the configuration dialog.


# Installation
### GNOME Extension site:
https://extensions.gnome.org/extension/1723/wintile-windows-10-window-tiling-for-gnome/

### Building from source
1. Download source code from the [Master](https://github.com/Fmstrat/wintile/archive/refs/heads/master.zip) or [develop](https://github.com/Fmstrat/wintile/archive/refs/heads/develop.zip) branches.
1. unzip the file
1. cd into the directory it creates
1. run `./build.sh`
1. run `unzip wintile@nowsci.com.zip`
1. run `cp -r wintile@nowsci.com ~/.local/share/gnome-shell/extensions/`
1. restart your session

Wayland users need to reboot to enable the extension.

Gnome users can press `<Alt>`+`<F2>` and run `r` from the prompt. **(IT WILL NOT WORK from a terminal)**
3 changes: 2 additions & 1 deletion build.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/bin/bash

rm wintile@nowsci.com.zip
glib-compile-schemas schemas/
zip -r -xdemo.gif -xREADME.md -xbuild.sh wintile@nowsci.com.zip *
zip -r9 wintile@nowsci.com.zip . -x '.git*' build.sh demo.gif .eslintrc.yml 'node_modules/*' package.json README.md
Loading

0 comments on commit 29f6761

Please sign in to comment.