Improve Matches documentation
This commit is contained in:
		
							parent
							
								
									875893498b
								
							
						
					
					
						commit
						bafb53299f
					
				|  | @ -73,7 +73,7 @@ By now you should know that we need to **define a Match**. | ||||||
| 
 | 
 | ||||||
| With your favourite text editor, open the `.espanso/default.yml` file, introduced previously in the [Configuration](#configuration) section. You should see something like: | With your favourite text editor, open the `.espanso/default.yml` file, introduced previously in the [Configuration](#configuration) section. You should see something like: | ||||||
| 
 | 
 | ||||||
| ``` | ```yml | ||||||
| # espanso configuration file | # espanso configuration file | ||||||
| 
 | 
 | ||||||
| # This is the default configuration file, change it as you like it | # This is the default configuration file, change it as you like it | ||||||
|  | @ -91,13 +91,13 @@ matches: | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| We need to define a new Match, so in the `matches:` section, add the following code: | We need to define a new Match, so in the `matches:` section, add the following code: | ||||||
| ``` | ```yml | ||||||
|   - trigger: ":br" |   - trigger: ":br" | ||||||
|     replace: "Best Regards,\nJon Snow" |     replace: "Best Regards,\nJon Snow" | ||||||
| ``` | ``` | ||||||
| **Make sure to include the indentation**, otherwise it won't be valid YAML syntax. You should get something like: | **Make sure to include the indentation**, otherwise it won't be valid YAML syntax. You should get something like: | ||||||
| 
 | 
 | ||||||
| ``` | ```yml | ||||||
| # espanso configuration file | # espanso configuration file | ||||||
| 
 | 
 | ||||||
| # This is the default configuration file, change it as you like it | # This is the default configuration file, change it as you like it | ||||||
|  |  | ||||||
							
								
								
									
										138
									
								
								docs/matches.md
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								docs/matches.md
									
									
									
									
									
								
							|  | @ -10,14 +10,14 @@ In their most basic form, **Matches are pairs that associate a *trigger* with a | ||||||
| 
 | 
 | ||||||
| For example, we can define a match that will expand every occurrence of `hello` with `world` while we are typing. Using the [YAML](https://en.wikipedia.org/wiki/YAML) syntax, it can be expressed as: | For example, we can define a match that will expand every occurrence of `hello` with `world` while we are typing. Using the [YAML](https://en.wikipedia.org/wiki/YAML) syntax, it can be expressed as: | ||||||
| 
 | 
 | ||||||
| ``` | ```yml | ||||||
| - trigger: "hello" | - trigger: "hello" | ||||||
|   replace: "world" |   replace: "world" | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| To replace the original text with a *multi-line* expansion, we can use the `\n` line terminator character, such as: | To replace the original text with a *multi-line* expansion, we can use the `\n` line terminator character, such as: | ||||||
| 
 | 
 | ||||||
| ``` | ```yml | ||||||
| - trigger: "hello" | - trigger: "hello" | ||||||
|   replace: "line1\nline2" |   replace: "line1\nline2" | ||||||
| ``` | ``` | ||||||
|  | @ -39,7 +39,7 @@ It's 11:29 | ||||||
| Let's add the following match to a configuration file, such as the `default.yml` config. | Let's add the following match to a configuration file, such as the `default.yml` config. | ||||||
| 
 | 
 | ||||||
| {% raw %} | {% raw %} | ||||||
| ``` | ```yaml | ||||||
| - trigger: ":now" | - trigger: ":now" | ||||||
|   replace: "It's {{mytime}}" |   replace: "It's {{mytime}}" | ||||||
|   vars: |   vars: | ||||||
|  | @ -60,10 +60,138 @@ At this point, everytime we type `:now`, we should see something like: `It's 09: | ||||||
| 
 | 
 | ||||||
| Let's analyze the match step by step: | Let's analyze the match step by step: | ||||||
| 
 | 
 | ||||||
| TODO | ```yml | ||||||
|  | - trigger: ":now" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In the first line we declare the trigger `:now`, that must be typed by the user to expand the match. | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yml | ||||||
|  |   replace: "It's {{mytime}}" | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
|  | 
 | ||||||
|  | In the second line, we declare the *replace text* as usual, but this time we include the `mytime` **variable**, | ||||||
|  | that will contain the output of the **extension** used below. | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yml | ||||||
|  |   vars: | ||||||
|  |     - name: mytime | ||||||
|  |       type: date | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
|  | 
 | ||||||
|  | In the next lines, we defined the `mytime` variable as type **date**. The type of a variable defines | ||||||
|  | the **extension** that will be executed to calculate its value. In this case, we use the [Date Extension](#date-extension). | ||||||
|  | 
 | ||||||
|  | ```yml | ||||||
|  |       params: | ||||||
|  |         format: "%H:%M" | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In the remaining lines we declared the **parameters** used by the extension, in this case the *date format*. | ||||||
| 
 | 
 | ||||||
| ### Script Extension | ### Script Extension | ||||||
| 
 | 
 | ||||||
|  | There will be tasks for which espanso was not designed for. For those cases, espanso offers the | ||||||
|  | **Script Extension**, that enables you to call an **external script**, written in **any language**, | ||||||
|  |  and use its output in a match. | ||||||
|  | 
 | ||||||
|  | To better understand this feature, let's dive into an example: | ||||||
|  | 
 | ||||||
|  | We want to expand a match into the output of a **Python** script. Let's create the `script.py` file, | ||||||
|  | place it anywhere you want and paste the following code: | ||||||
|  | 
 | ||||||
|  | ```python | ||||||
|  | print("Hello from python") | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Now take note of the **path** of the script, and add the following match to espanso configuration: | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yaml | ||||||
|  | - trigger: ":pyscript" | ||||||
|  |   replace: "{{output}}" | ||||||
|  |   vars: | ||||||
|  |     - name: output | ||||||
|  |       type: script | ||||||
|  |       params: | ||||||
|  |         args: | ||||||
|  |           - python | ||||||
|  |           - /path/to/your/script.py | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
|  | 
 | ||||||
|  | As always, restart espanso with `espanso restart` and you should have this match expand into the output | ||||||
|  | of the script! | ||||||
|  | 
 | ||||||
|  | You can do the same thing with any programming language, just change the `args` array accordingly. | ||||||
|  | 
 | ||||||
|  | #### A note on performance | ||||||
|  | 
 | ||||||
|  | Because of the execution time, you should limit yourself to fast-running scripts to avoid | ||||||
|  | any lag. | ||||||
|  | 
 | ||||||
| ### Shell Extension | ### Shell Extension | ||||||
| 
 | 
 | ||||||
| ### Date Extension | The **Shell Extension** is similar to the [Script Extension](#script-extension), but instead of executing | ||||||
|  | a script, it executes **shell commands**. This offers a lot of flexibility on Unix systems thanks to the | ||||||
|  | `bash` shell. | ||||||
|  | 
 | ||||||
|  | Let's say you regularly send your IP address to your coworkers. You can setup a match to fetch your public | ||||||
|  | IP from [ipify](https://www.ipify.org/). | ||||||
|  | 
 | ||||||
|  | > Note: this example uses the `curl` command, usually preinstalled in most Unix systems. | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yml | ||||||
|  | - trigger: ":ip" | ||||||
|  |   replace: "{{output}}" | ||||||
|  |   vars: | ||||||
|  |     - name: output | ||||||
|  |       type: shell | ||||||
|  |       params: | ||||||
|  |         cmd: "curl 'https://api.ipify.org'" | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
|  | 
 | ||||||
|  | As always, restart espanso with `espanso restart`. Now everytime you type `:ip`, it gets expanded to your public | ||||||
|  | IP address! | ||||||
|  | 
 | ||||||
|  | #### Bash pipes | ||||||
|  | 
 | ||||||
|  | This extension also supports bash **pipes** as you would do in your shell, such as: | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yml | ||||||
|  | - trigger: ":localip" | ||||||
|  |   replace: "{{output}}" | ||||||
|  |   vars: | ||||||
|  |     - name: output | ||||||
|  |       type: shell | ||||||
|  |       params: | ||||||
|  |         cmd: "ip a | grep 'inet 192' | awk '{ print $2 }'" | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
|  | 
 | ||||||
|  | ### Date Extension | ||||||
|  | 
 | ||||||
|  | The **Date Extension** can be used to include *date* and *time* information in a match.  | ||||||
|  | 
 | ||||||
|  | The most important aspect to consider when using this extension is the `format` parameter, | ||||||
|  | that specifies how the date will be rendered. A **list of all the possible options** can be | ||||||
|  | found in the [official chrono documentation](https://docs.rs/chrono/0.3.1/chrono/format/strftime/index.html). | ||||||
|  | 
 | ||||||
|  | {% raw %} | ||||||
|  | ```yaml | ||||||
|  | - trigger: ":now" | ||||||
|  |   replace: "It's {{mytime}}" | ||||||
|  |   vars: | ||||||
|  |     - name: mytime | ||||||
|  |       type: date | ||||||
|  |       params: | ||||||
|  |         format: "%H:%M" | ||||||
|  | ``` | ||||||
|  | {% endraw %} | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user