mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-03 23:02:34 +01:00 
			
		
		
		
	* CLI: Add 'cd' subcommand Go to your qmk_firmware dir with ease. * Fix for Windows and do not run if already under QMK Home * Make flake8 happy * Fix prompt for Windows * Make flake8 happy once again * I'll get it right eventually * Apply suggestions from code review Co-authored-by: Ryan <fauxpark@gmail.com> * Add subcommand to __init__.py and fixup after rebase * Update Windows code to use milc's run * Unify the subshell starting with os.execl * Exit with error msg when output is redirected to non-TTY. * Revert Windows-specific code Co-authored-by: Ryan <fauxpark@gmail.com>
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
"""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.")
 |