From fefaa96a07ebbf065a6a20a0521ce7896a6e4b5f Mon Sep 17 00:00:00 2001 From: Federico Terzi Date: Thu, 6 Feb 2020 22:41:25 +0100 Subject: [PATCH] Update instructions --- _data/docs.yml | 8 +- assets/images/passivemode1.gif | Bin 0 -> 15562 bytes assets/images/passivemode2.gif | Bin 0 -> 17150 bytes assets/images/passivemode3.gif | Bin 0 -> 7796 bytes docs/configuration.md | 7 +- docs/matches.md | 45 +++++++++ docs/passive-mode.md | 174 +++++++++++++++++++++++++++++++++ docs/sync.md | 82 ++++++++++++++++ install/linux.md | 32 ++++++ 9 files changed, 345 insertions(+), 3 deletions(-) create mode 100644 assets/images/passivemode1.gif create mode 100644 assets/images/passivemode2.gif create mode 100644 assets/images/passivemode3.gif create mode 100644 docs/passive-mode.md create mode 100644 docs/sync.md diff --git a/_data/docs.yml b/_data/docs.yml index a2cfa5c..fd0c10d 100644 --- a/_data/docs.yml +++ b/_data/docs.yml @@ -12,4 +12,10 @@ desc: This section will cover the basics and the creation of espanso packages. - name: Configuration link: /docs/configuration/ - desc: This sections will cover the configuration options and behaviour. \ No newline at end of file + desc: This section will cover the configuration options and behaviour. +- name: Passive Mode + link: /docs/passive-mode/ + desc: An introduction to espanso's Passive Mode, one of its most powerful features. +- name: Synchronization + link: /docs/sync/ + desc: Keep espanso in sync using Dropbox, Google Drive or GitHub. \ No newline at end of file diff --git a/assets/images/passivemode1.gif b/assets/images/passivemode1.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb81bc854071ae1cd7579b12366cb8dc5dd73cc8 GIT binary patch literal 15562 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 VO53Eydcs4MtdP6X*4=`HjgdgxVp2_b-p^xi>H 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 Note: at the moment, passive mode is still experimental and has to be enabled manually. Please see the "Enabling passive mode" section below. + +In version 0.5.0, espanso introduced *Passive Mode*, a new feature which allows the user +to expand matches after typing them, instead of in realtime. The feature works as follows: + +* Type a message containing any number of matches (passive mode matches are more limited, see the *Limitations* paragraph below) +* Select the text you want to process (conveniently done with the CTRL+A shortcut) +* Double press the `CTRL` key (you can customize this key). + +As a result, espanso will copy the text, process it expanding all the matches, and then paste it back in the field. + +![Passive Mode Example](/assets/images/passivemode1.gif) + +### Enabling passive mode + +Passive mode is still in its experimental stage, so it must be enabled manually. Add the following lines in the +`default.yml` file: + +```yaml +enable_passive: true +passive_key: CTRL +``` + +Currently, the `passive_key` parameter accept the following alternatives: `CTRL`, `ALT`, `SHIFT` and `META` (Win key on Windows and Linux, CMD on macOS). If you'd like other possibilities, please open an issue. + +### Format + +Passive match triggers are a bit more limited than normal triggers. In particular, they have to start with a `:` prefix (though you can customize it, see below) +and should not contain spaces. + +The default format of passive matches is: + +``` +:trigger/arg1/arg2/ +``` + +But arguments are optional: + +``` +:trigger +``` + +> You can customize the default format by changing the configuration file, please take a look at the "Advanced Configuration" below. + +### Arguments +One of the most requested features has always been *match arguments*. Due to the realtime nature +of espanso, this problem was very difficult to solve in a solid way. The solution is to use +passive mode, so that espanso can analyze whole sentences and execute a more complex elaboration. + +![argument](/assets/images/passivemode2.gif) + +Which can be obtained with the following: + +```yaml +- trigger: ":greet" + replace: "Hey $0$, how are you?\nIt's been a while!" + passive_only: true +``` + +If you select `:greet/Jon/` and trigger the passive mode, the match will be expanded producing: + +``` +Hey Jon, how are you? +It's been a while! +``` + +The `$0$` keyword indicates where the argument should be placed, and you can also pass multiple arguments, so +that they becomes `$1$`, `$2$`, ecc. + +Notice the `passive_only` keyword, which makes espanso ignore the match when typing it (otherwise, espanso would +expand it right away). + +The really powerful thing is that you can **pass these arguments to the shell or custom scripts** as well: + +#### Integration with Shell + +![argumentshell](/assets/images/passivemode3.gif) + +This can be done by including `$0`, `$1` in the `cmd` parameter: + +```yaml +- trigger: ":rev" + replace: "{{output}}" + passive_only: true + vars: + - name: output + type: shell + params: + cmd: "echo $0 | rev" + trim: true +``` + +**For Windows users**: instead of `$0`, you must use `%0`. + +#### Integration with Scripts + +Using the `inject_args` parameter, arguments will be appended to the given list when launching a program. For example: + +```yaml +- trigger: ":pyscript" + replace: "{{output}}" + vars: + - name: output + type: script + params: + inject_args: true + args: + - python + - /path/to/your/script.py +``` + +At this point, if you expand `:pyscript/hello/`, your script will receive "hello" as the first argument. + +### Limitations + +* **Passive mode does not work in terminals**. Unfortunately, because this feature heavily uses selections +and copy/pasting to work, I still haven't figured out a way to reliably make them work in terminals. + +* **Matches have to start with a specific character**. The default character is `:`, but that can be customized +by changing the `passive_match_regex` parameter. This constraint has been added to improve the analysis efficiency. + +* **Passive matches do not support images**. + +### Advanced Customization + +If you don't like the `:trigger/arg1/arg2/` syntax, you can customize it by changing a few parameters in your `default.yml` config as follow: + +#### `passive_match_regex` + +With the `passive_match_regex` you can customize the main trait of the passive matches, such as the prefix character and the **external** argument separators. +By default, it has the following value (notice the `\\` escaping which is mandatory): + +```yaml +passive_match_regex: "(?P:\\p{L}+)(/(?P.*)/)?" +``` + +It may seem scary at first, but it's pretty easy to change. For example, let's say you want to start passive matches with `.` instead of `:`, you can write: + +```yaml +passive_match_regex: "(?P.\\p{L}+)(/(?P.*)/)?" +``` + +Notice the `.` after `` instead of the `:`. + +Another thing you may want to change are the external argument separators, let's say you want to use parenthesis `()` instead of the default `//`. A solution would be: + +```yaml +passive_match_regex: "(?P:\\p{L}+)(\\((?P.*)\\))?" +``` + +Notice the `\\(` and `\\)` difference before and after the `` cell. + +A thing to keep in mind here is that, although you changed the external argument char, you +didn't change the **argument delimiter**, and therefore you still need to write `:trigger(arg1/arg2)`. To solve the problem, you have to change the following parameter: + +#### `passive_arg_delimiter` + +Let's say you want to separate inner arguments by a comma `,`, such as `:trigger/arg1,arg2/`. You can do so by customizing the `passive_arg_delimiter` param: + +```yaml +passive_arg_delimiter: "," +``` + +An important thing to keep in mind here is **escaping**: what if one of the arguments contains the arg delimiter? + +By default, you can escape the character with `\`, such as `:trigger/Today is the 10\/12/`, but you can also change this escaping char by using the following parameter: + +#### `passive_arg_escape` + +This option regulates which character will act as an escape, by default is `\`. \ No newline at end of file diff --git a/docs/sync.md b/docs/sync.md new file mode 100644 index 0000000..226a157 --- /dev/null +++ b/docs/sync.md @@ -0,0 +1,82 @@ +--- +title: Synchronization +layout: docs +--- +After using espanso for a while, you may need to synchronize your configuration between devices. Luckly for you, the espanso +file-based configuration makes it pretty easy to accomplish using a Cloud Storage service (such as Dropbox, Google Drive, ecc) +or even GitHub! + +> From now on, I will only mention "Dropbox folder" for brevity, but you can apply the same procedure for every service. + +The general idea, which applies to all operating systems, is the following: + +* Move the espanso configuration folder inside your Dropbox folder (also a subdirectory is perfectly file) +* Create a **symbolic link** in the original position, pointing to the synched folder. + +The specific commands depend on you OS: + +### Windows + +By default, the espanso configuration folder resides in this folder (change "user" with your username): + +``` +C:\Users\user\AppData\Roaming\espanso +``` + +The first step is moving this folder in your Dropbox folder, for example in: + +``` +C:\Users\user\Dropbox\espanso +``` + +Now you need to create a **symbolic link**. Open the Command Prompt and type the following command, making sure you specify the correct paths: + +``` +mklink /J "C:\Users\user\AppData\Roaming\espanso" "C:\user\Freddy\Dropbox\espanso" +``` + +Now restart espanso and you should be ready to go! + +### macOS + +By default, the espanso configuration folder resides in this folder (change "user" with your username): + +``` +/Users/user/Library/Preferences/espanso +``` + +The first step is moving this folder in your Dropbox folder, for example in: + +``` +/Users/user/Dropbox/espanso +``` + +Now you need to create a **symbolic link**. Open the Terminal and type the following command, making sure you specify the correct paths: + +``` +ln -s "/Users/user/Dropbox/espanso" "/Users/user/Library/Preferences/espanso" +``` + +Now restart espanso and you should be ready to go! + +### Linux + +By default, the espanso configuration folder resides in this folder (change "user" with your username): + +``` +/home/user/.config/espanso +``` + +The first step is moving this folder in your Dropbox folder, for example in: + +``` +/home/user/Dropbox/espanso +``` + +Now you need to create a **symbolic link**. Open the Terminal and type the following command, making sure you specify the correct paths: + +``` +ln -s "/home/user/Dropbox/espanso" "/home/user/.config/espanso" +``` + +Now restart espanso and you should be ready to go! \ No newline at end of file diff --git a/install/linux.md b/install/linux.md index c4c4191..20324de 100644 --- a/install/linux.md +++ b/install/linux.md @@ -15,6 +15,38 @@ Currently espanso supports X11 systems only. ### Installing on Ubuntu / Debian +You can install espanso in various ways on Debian-based systems. As of now, the recommended way is to use the `DEB` package method. + +#### Installing using DEB package + +Espanso ships with a `.deb` package, which makes it pretty convenient to install on Debian-based systems. + +Start by downloading the latest release: + +``` +wget https://github.com/federico-terzi/espanso/releases/latest/download/espanso-debian-amd64.deb +``` + +> If you want to verify the correctness of the archive, in the [Github Releases](https://github.com/federico-terzi/espanso/releases/) page you will find the **SHA256** hash in the file `espanso-debian-amd64-sha256.txt`. + +You can now install the package using: + +``` +sudo apt install ./espanso-debian-amd64.deb +``` + +You should now have espanso installed in your system. To start it, type the following command: + +``` +espanso start +``` + +If you now type `:espanso` in any text field, you should see "Hi there!" appear! + +At this point, you are ready to read the [Getting Started](/docs/get-started/) tutorial. + +#### Manual installation + Espanso depends upon the `X11 Record Extension`, the `xdo library`, the `xclip` command and the `libnotify-bin` library, so you will need to install those first with the following commands: