Quail is a Command Line Interface application built to help in project management. The idea is to create 'Alias' like commands that are stored within a project which can be then accessed with an ease.
- Use shortcuts
Execute a command specified in a config file by referring to a user-defined command name instead.
- Write even shorter
Said user-defined command does not have to be fully written to be matched. Be aware Quail will always take the 1st match.
- Be modular
Supports identifying subprojects and allows for command grouping.
- Define constants
Variable-like utility to store strings and use them with different Constants or Commands.
- Use command queues
Run multiple defined commands & queues as if they were a singular quail command.
- Easily display all subprojects, commands & queues
Simply run
Quailwith a selected project or a subproject to display it's contents.
For simplicity sake I'll refer to commands, queues, projects and subprojects here as aliases.
Names inside [] brackets refer to your own custom names that you create.
- To display aliases of main config
quail -o - To execute an alias
quail -o [project_name] [command] - To display project's aliases
quail -o [project_name] - To display subproject's aliases
quail -o [project_name] [subproject_name] - To execute subproject's alias
quail -o [project_name] [subproject_name] [command] - To execute subproject subsubproject's alias
quail -o [project_name] [subproject_name] [subsubproject_name] [command]
. . .
- Create a quail-file in your project directory. Name it, for example
.quail\quail.txt. - This file now represents your project. Link it to your top-level configuration file with the following:
- Add a project / module (absolute path)
^+project = C:\Projects\project\ .quail\quail.txt - Add a project / module (relative path)
^-subproject = subproject\ .quail\quail.txt
Note the space between
key,project_drectoryandquail-file. It is required as Quail predefines%_name%&%_path%constants for your use inside the quail-file of your project.
- Add the following command to your project configuration file:
!directory = explorer.exe "%_path%". - Now try executing it via
quail -o [project] directory.
- Includes for now are always relative. Create a
include.txtnext to your project-main-configuration-file. - At the top of your project-main-configuration-file, write the following:
&include.txt. - Now try to create an alias, or include another file or a project inside that file.
There are 2 different configuration files for Quail use:
config.txt-> your top-level configuration file.global.txt-> your top-level global configuration file.
Quail will first read the global file
global.txtand all of its includes and keep it for use later. Then Quail reads only the last project / module, and it's includes in a tree of all the modules from the top-level config fileconfig.txtdown to your project / subproject. Note that this makes referencing a variable from a parent project impossible if not via include! Thus, global files. Use them to define constants and aliases that you want to use in every module.
Where can I find some ready to use commands for software I might be using?
Look into the examples directory.
Why writing my own Wizard when WinApi provides a ready to use control with localization support?
Official Windows Wizard Sample
My reasoning: It's a good learning example and it provides more flexibility for future custom optimalizations like darkmode support or making the window dpi-aware. Additionally the Wizard executable created is compressed which then competes well with
.msifiles, that usually weigh less.