|
|
@ -0,0 +1,46 @@ |
|
|
|
"""Open a shell in the QMK Home directory |
|
|
|
""" |
|
|
|
import sys |
|
|
|
import os |
|
|
|
|
|
|
|
from milc import cli |
|
|
|
|
|
|
|
from qmk.path import under_qmk_firmware |
|
|
|
|
|
|
|
|
|
|
|
@cli.subcommand('Go to QMK Home') |
|
|
|
def cd(cli): |
|
|
|
"""Go to QMK Home |
|
|
|
""" |
|
|
|
if not sys.stdout.isatty(): |
|
|
|
cli.log.error("This command is for interactive usage only. For non-interactive usage, 'cd $(qmk env QMK_HOME)' is more robust.") |
|
|
|
sys.exit(1) |
|
|
|
|
|
|
|
if not under_qmk_firmware(): |
|
|
|
# Only do anything if the user is not under qmk_firmware already |
|
|
|
# in order to reduce the possibility of starting multiple shells |
|
|
|
cli.log.info("Spawning a subshell in your QMK_HOME directory.") |
|
|
|
cli.log.info("Type 'exit' to get back to the parent shell.") |
|
|
|
if not cli.platform.lower().startswith('windows'): |
|
|
|
# For Linux/Mac/etc |
|
|
|
# Check the user's login shell from 'passwd' |
|
|
|
# alternatively fall back to $SHELL env var |
|
|
|
# and finally to '/bin/bash'. |
|
|
|
import getpass |
|
|
|
import pwd |
|
|
|
shell = pwd.getpwnam(getpass.getuser()).pw_shell |
|
|
|
if not shell: |
|
|
|
shell = os.environ.get('SHELL', '/bin/bash') |
|
|
|
# Start the new subshell |
|
|
|
os.execl(shell, shell) |
|
|
|
else: |
|
|
|
# For Windows |
|
|
|
# Check the $SHELL env var |
|
|
|
# and fall back to '/usr/bin/bash'. |
|
|
|
qmk_env = os.environ.copy() |
|
|
|
# Set the prompt for the new shell |
|
|
|
qmk_env['MSYS2_PS1'] = qmk_env['PS1'] |
|
|
|
# Start the new subshell |
|
|
|
cli.run([os.environ.get('SHELL', '/usr/bin/bash')], env=qmk_env) |
|
|
|
else: |
|
|
|
cli.log.info("Already within qmk_firmware directory.") |