Allow simple JSON configuration for site sessions
Different terminals need different hotkeys, but I want the kitty configuration to be shared. Add a blanket json file to allow creating more advanced configurations per site while keeping the rest of the config common.
This commit is contained in:
parent
42ce0bd066
commit
4cfeea363b
5 changed files with 75 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
*.swp
|
||||||
|
|
||||||
10
efx_site.default
Normal file
10
efx_site.default
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{ "sessions":
|
||||||
|
[
|
||||||
|
{ "title": "System Shell",
|
||||||
|
"cmd": "/bin/bash --login"
|
||||||
|
},
|
||||||
|
{ "title": "C Shell",
|
||||||
|
"cmd": "/bin/csh"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
- link:
|
- link:
|
||||||
~/.bashrc: bashrc
|
~/.bashrc: bashrc
|
||||||
~/.vimrc: vimrc
|
~/.vimrc: vimrc
|
||||||
|
~/.config/kitty/kitty.conf: kitty.conf
|
||||||
|
~/.scripts: scripts
|
||||||
|
|
||||||
- shell:
|
- shell:
|
||||||
- [git submodule update --init --recursive, Installing submodules]
|
- [git submodule update --init --recursive, Installing submodules]
|
||||||
|
|
|
||||||
12
kitty.conf
Normal file
12
kitty.conf
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
map ctrl+shift+1 new_tab efx_session 0
|
||||||
|
map ctrl+shift+2 new_tab efx_session 1
|
||||||
|
map ctrl+shift+3 new_tab efx_session 2
|
||||||
|
map ctrl+shift+4 new_tab efx_session 3
|
||||||
|
map ctrl+shift+5 new_tab efx_session 4
|
||||||
|
map ctrl+shift+6 new_tab efx_session 5
|
||||||
|
map ctrl+shift+7 new_tab efx_session 6
|
||||||
|
map ctrl+shift+8 new_tab efx_session 7
|
||||||
|
map ctrl+shift+9 new_tab efx_session 8
|
||||||
|
|
||||||
|
|
||||||
49
scripts/efx_session
Executable file
49
scripts/efx_session
Executable file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import shlex
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import List, Optional
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
|
||||||
|
class EfxSession:
|
||||||
|
def __init__(self, cfg):
|
||||||
|
self.cmd = cfg.get('cmd', '/bin/bash --login')
|
||||||
|
self.title = cfg.get('title', 'System Shell')
|
||||||
|
|
||||||
|
def execute(self):
|
||||||
|
cmd_val = shlex.split(self.cmd)
|
||||||
|
os.execvp(cmd_val[0], cmd_val)
|
||||||
|
|
||||||
|
class EfxConfig:
|
||||||
|
def __init__(self, cfg):
|
||||||
|
self._sessions = _attr_sessions(cfg)
|
||||||
|
|
||||||
|
def get_session(self, num: int) -> Optional[EfxSession]:
|
||||||
|
return self._sessions[num] if 0 <= num < len(self._sessions) else None
|
||||||
|
|
||||||
|
def _load_config() -> EfxConfig:
|
||||||
|
json_site = (Path.home() / '.efx_site.json')
|
||||||
|
if not json_site.exists():
|
||||||
|
raise RuntimeError('No available configuration')
|
||||||
|
cfg = json.loads(json_site.read_text())
|
||||||
|
return EfxConfig(cfg)
|
||||||
|
|
||||||
|
def _attr_sessions(cfg) -> List[EfxSession]:
|
||||||
|
return [EfxSession(x) for x in cfg.get('sessions', [])]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description='Site Information[Session]')
|
||||||
|
parser.add_argument('id', type=int, help='Session identifier')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
cfg = _load_config()
|
||||||
|
session = cfg.get_session(args.id)
|
||||||
|
if not session:
|
||||||
|
raise RuntimeError('Invalid session id')
|
||||||
|
session.execute()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue