Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
230243cfec | ||
|
|
4381c24a82 | ||
|
|
57b3328ebe | ||
|
|
280436f050 | ||
|
|
7b7d371332 | ||
|
|
0a44792155 | ||
|
|
2659ec1d9e | ||
|
|
d6b8aa7dce | ||
|
|
4ae10eb8dd | ||
|
|
f4ec4385b2 | ||
|
|
184832d805 | ||
|
|
d6015c5576 | ||
|
|
4646f1c230 |
31
.github/workflows/python-publish.yml
vendored
Normal file
31
.github/workflows/python-publish.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# This workflows will upload a Python Package using Twine when a release is created
|
||||||
|
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
|
||||||
|
|
||||||
|
name: Upload Python Package
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [created]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel twine
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
|
||||||
|
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
python setup.py sdist bdist_wheel
|
||||||
|
twine upload --repository pypi dist/*
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,3 +1,6 @@
|
|||||||
**__pycache__/
|
**__pycache__/
|
||||||
.idea
|
.idea
|
||||||
**.egg-info/
|
**.egg-info/
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
.pypirc
|
||||||
10
README.rst
10
README.rst
@@ -16,6 +16,14 @@ Usage
|
|||||||
|
|
||||||
requred arguments:
|
requred arguments:
|
||||||
-i, --index the number index of the workspace that should be openend. 1 = first workspace in config etc.
|
-i, --index the number index of the workspace that should be openend. 1 = first workspace in config etc.
|
||||||
|
|
||||||
|
Current limitations
|
||||||
|
--------------------
|
||||||
|
The way this script is set up, it is sending commands in strings. and thus we cannot keep track of each workspace other than by its name. This is a limmitiaion as there is no way for us to know if the workspace "1" is reffering to the workspace 1 assigned to output DS-1 or output HDMI-2..
|
||||||
|
|
||||||
|
So in order to differentiate between these, you need to name your workspaces new names for each output. See example configuration under #Installation.
|
||||||
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -34,7 +42,7 @@ Example config to be inserted into your i3 config.
|
|||||||
set $left HDMI-0
|
set $left HDMI-0
|
||||||
set $right HDMI-1
|
set $right HDMI-1
|
||||||
|
|
||||||
# WOrkspaces
|
# Workspaces
|
||||||
set $ws1 1:1:Code
|
set $ws1 1:1:Code
|
||||||
set $ws2 2:2:Code
|
set $ws2 2:2:Code
|
||||||
set $ws3 3:3:Code
|
set $ws3 3:3:Code
|
||||||
|
|||||||
32
build.py
Normal file
32
build.py
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import argparse
|
||||||
|
import subprocess
|
||||||
|
import pathlib
|
||||||
|
import os
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser("Build script for pypi and pypi test")
|
||||||
|
|
||||||
|
group = parser.add_mutually_exclusive_group(required=True)
|
||||||
|
|
||||||
|
group.add_argument('--test', action='store_true', help='Build to test.pypi.org')
|
||||||
|
group.add_argument('--pypi', action='store_true', help='Build to pypi.org')
|
||||||
|
group.add_argument('--check', action='store_true', help='Displays the twine check for dist')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
for path in pathlib.Path('dist').iterdir():
|
||||||
|
os.remove(path)
|
||||||
|
|
||||||
|
subprocess.call(['python3', 'setup.py', 'sdist', 'bdist_wheel'], stdout=subprocess.PIPE)
|
||||||
|
|
||||||
|
if args.test:
|
||||||
|
subprocess.call(['twine', 'upload', '--config-file', '.pypirc', '--repository', 'testpypi', 'dist/*'])
|
||||||
|
|
||||||
|
elif args.pypi:
|
||||||
|
subprocess.call(['twine', 'upload', '--config-file', '.pypirc', '--repository', 'pypi', 'dist/*'])
|
||||||
|
|
||||||
|
else:
|
||||||
|
subprocess.call(['twine', 'check', 'dist/*'])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@@ -3,6 +3,7 @@ import sys
|
|||||||
import pynput
|
import pynput
|
||||||
import re
|
import re
|
||||||
import argparse
|
import argparse
|
||||||
|
import pprint
|
||||||
|
|
||||||
|
|
||||||
class WorkSpacer:
|
class WorkSpacer:
|
||||||
@@ -24,7 +25,7 @@ class WorkSpacer:
|
|||||||
self.config = self.i3.get_config().__dict__['config']
|
self.config = self.i3.get_config().__dict__['config']
|
||||||
config_outputs = {}
|
config_outputs = {}
|
||||||
for matchNo, match in enumerate(
|
for matchNo, match in enumerate(
|
||||||
re.finditer(r'set (\$[a-zA-Z]+) ((HDMI|DP|VGA)-\d)', self.config, re.MULTILINE), start=1
|
re.finditer(r'set (\$[a-zA-Z]+) ((HDMI|DP|VGA|eDP)(-|)\d)', self.config, re.MULTILINE), start=1
|
||||||
):
|
):
|
||||||
config_outputs[match.group(1)] = match.group(2)
|
config_outputs[match.group(1)] = match.group(2)
|
||||||
config_workspace_names = {}
|
config_workspace_names = {}
|
||||||
@@ -38,8 +39,11 @@ class WorkSpacer:
|
|||||||
if not self.workspaces_on_outputs.keys().__contains__(config_outputs[match.group(2)]):
|
if not self.workspaces_on_outputs.keys().__contains__(config_outputs[match.group(2)]):
|
||||||
self.workspaces_on_outputs[config_outputs[match.group(2)]] = []
|
self.workspaces_on_outputs[config_outputs[match.group(2)]] = []
|
||||||
self.workspaces_on_outputs[config_outputs[match.group(2)]].append(config_workspace_names[match.group(1)])
|
self.workspaces_on_outputs[config_outputs[match.group(2)]].append(config_workspace_names[match.group(1)])
|
||||||
|
self.print_if_debug("All workspaces with outputs")
|
||||||
|
self.print_if_debug(self.workspaces_on_outputs)
|
||||||
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
|
self.print_if_debug(exc)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
self.workspaces = [workspaces for workspaces in self.i3.get_workspaces()]
|
self.workspaces = [workspaces for workspaces in self.i3.get_workspaces()]
|
||||||
outputs = self.i3.get_outputs()
|
outputs = self.i3.get_outputs()
|
||||||
@@ -79,11 +83,17 @@ class WorkSpacer:
|
|||||||
def _get_workspaces_for_output(self, output):
|
def _get_workspaces_for_output(self, output):
|
||||||
return [workspace for workspace in self.workspaces if workspace.__dict__['output'] == output]
|
return [workspace for workspace in self.workspaces if workspace.__dict__['output'] == output]
|
||||||
|
|
||||||
|
def print_if_debug(self, to_print):
|
||||||
|
if self.args.debug:
|
||||||
|
pprint.pprint(to_print)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description="Dynamic changes the workspace, based on what output your cursoer is on."
|
description="Dynamic changes the workspace, based on what output your cursoer is on."
|
||||||
)
|
)
|
||||||
|
parser.add_argument('-d', '--debug', action='store_true',
|
||||||
|
help='Turn on debug mode.')
|
||||||
|
|
||||||
required_group = parser.add_argument_group('Required', '')
|
required_group = parser.add_argument_group('Required', '')
|
||||||
required_group.add_argument("-i", "--index", type=int, required=True,
|
required_group.add_argument("-i", "--index", type=int, required=True,
|
||||||
@@ -94,7 +104,7 @@ def main():
|
|||||||
help="if present, moves the current active window to target workspace")
|
help="if present, moves the current active window to target workspace")
|
||||||
shift_group.add_argument('-k', '--keep-with-it', action='store_true',
|
shift_group.add_argument('-k', '--keep-with-it', action='store_true',
|
||||||
help='if present, moves with the ')
|
help='if present, moves with the ')
|
||||||
|
# pprint.pprint(parser.parse_args().__dict__)
|
||||||
WorkSpacer(parser.parse_args()).run()
|
WorkSpacer(parser.parse_args()).run()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
3
setup.py
3
setup.py
@@ -4,7 +4,7 @@ with open('README.rst', 'r') as fh:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='pi3-smart-workspace',
|
name='pi3-smart-workspace',
|
||||||
version='0.1.0',
|
version='0.1.5',
|
||||||
packages=['pi3'],
|
packages=['pi3'],
|
||||||
url='https://github.com/GeneralDenmark/PyOutputHandler',
|
url='https://github.com/GeneralDenmark/PyOutputHandler',
|
||||||
license='Apache-2.0 License ',
|
license='Apache-2.0 License ',
|
||||||
@@ -18,6 +18,7 @@ setup(
|
|||||||
entry_points={"console_scripts": ["pi3-smart-workspace=pi3.smart_workspace:main"]},
|
entry_points={"console_scripts": ["pi3-smart-workspace=pi3.smart_workspace:main"]},
|
||||||
scripts=["pi3/smart_workspace.py"],
|
scripts=["pi3/smart_workspace.py"],
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
|
long_description_content_type='text/x-rst',
|
||||||
author='Asger Geel Weirsøe',
|
author='Asger Geel Weirsøe',
|
||||||
author_email='asger@weirsoe.dk',
|
author_email='asger@weirsoe.dk',
|
||||||
description='Simple program that looks through the i3 config and finds the bound workspaces for each output, and then opening that workspace on the output, that the mouse is currently on.',
|
description='Simple program that looks through the i3 config and finds the bound workspaces for each output, and then opening that workspace on the output, that the mouse is currently on.',
|
||||||
|
|||||||
Reference in New Issue
Block a user