mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	CLI: Add 'cd' subcommand (#12584)
* 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>
This commit is contained in:
		
							parent
							
								
									fefd7fdc51
								
							
						
					
					
						commit
						c8b09d0d4a
					
				| @ -118,6 +118,20 @@ This command lets you configure the behavior of QMK. For the full `qmk config` d | ||||
| qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN] | ||||
| ``` | ||||
| 
 | ||||
| ## `qmk cd` | ||||
| 
 | ||||
| This command opens a new shell in your `qmk_firmware` directory. | ||||
| 
 | ||||
| Note that if you are already somewhere within `QMK_HOME` (for example, the `keyboards/` folder), nothing will happen. | ||||
| 
 | ||||
| To exit out into the parent shell, simply type `exit`. | ||||
| 
 | ||||
| **Usage**: | ||||
| 
 | ||||
| ``` | ||||
| qmk cd | ||||
| ``` | ||||
| 
 | ||||
| ## `qmk console` | ||||
| 
 | ||||
| This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLE=yes`. | ||||
|  | ||||
| @ -31,6 +31,7 @@ safe_commands = [ | ||||
| subcommands = [ | ||||
|     'qmk.cli.bux', | ||||
|     'qmk.cli.c2json', | ||||
|     'qmk.cli.cd', | ||||
|     'qmk.cli.cformat', | ||||
|     'qmk.cli.chibios.confmigrate', | ||||
|     'qmk.cli.clean', | ||||
|  | ||||
							
								
								
									
										46
									
								
								lib/python/qmk/cli/cd.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								lib/python/qmk/cli/cd.py
									
									
									
									
									
										Executable file
									
								
							| @ -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.") | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Erovia
						Erovia