Namespaces
Shortcuts are stored in YAML files, organized by namespaces. They are part of the /data subdirectory.
Every shortcut belongs to exactly one namespace. Namespaces allow the same keyword to be used for different shortcuts according to the user's language, location, or personal setup. This comes in handy, for example, for multi-country websites like Amazon:
a shakespeareshall search Amazon for books by Shakespeare, but Amazon from which country?
Thanks to namespaces, we can have the keyword a both
- in the US country namespace
.us, - and also in the Germany namespace
.de
Depending on the country in your settings, and thus the namespaces you use, the correct shortcut for Amazon will be picked.
But even more: You can also override shortcuts. For instance, while all other users use the keyword g for Google, you might use it for something else with your user namespace.
Namespaces work well together with Includes, especially for dictionaries.
Namespace types
| Namespace type | Example namespaces | Naming convention | Contains | Example shortcuts |
|---|---|---|---|---|
| language | de, en | 2 characters, by ISO 639-1 | shortcuts related to a particular language | Merriam-Webster dictionary: en.mw tree (from en) |
| country | .de, .us | dot and 2 characters, by ISO 3166-1 alpha2 | shortcuts related to a particular country | Deutsche Bahn Fahrplanauskunft: .de.db berlin, hamburg (from .de) |
| dictionary | dcm (dict.com), lge (Linguee) | 3 characters, by their abbreviated name | shortcuts from a dictionary website | German-English: dcm.de-en tree, dcm.en-de tree, dcm.en-<$language> tree (using the language variable from settings) |
| user | georgjaehnig | a GitHub username (can be overridden with a custom name) | custom shortcuts created by a user in their repo | Trains from my home station: db> hamburg |
| planet | o | the shape of the planet | shortcuts unrelated to a language or country | Google web search: g berlin |
language, country, dictionary, and o (planet) are site namespaces. They are curated and found here. Pull requests are welcome.
Dictionary namespaces
Currently, the following dictionary namespaces are defined:
| Namespace | Dictionary |
|---|---|
alm | Online Latein Wörterbuch |
ard | arabdict |
bab | bab.la |
beo | BEOLINGUS |
crd | croDict |
dcc | dict.cc |
dcm | Dictionary.com |
deo | Dans-Esperanto ordbog |
dtn | Deutsch-Tuerkisch.net |
esd | SpanishDictionary.com |
flx | Folkets lexikon |
hzn | Heinzelnisse |
irs | Irishionary.com |
leo | leo.org |
lge | Linguee |
lgs | Langenscheidt |
mdb | MDBG Chinese Dictionary |
pka | pauker.at |
pns | PONS dictionary |
rvs | Reverso |
umt | uitmuntend |
wdk | Wadoku |
zrg | Zargan |
Uniqueness in a namespace
In a namespace, there can be only one shortcut with the same keyword and the same number of arguments. So in o, there is only one shortcut g with one argument: the Google web search.
Using namespaces
Basic
The namespaces you use are derived from your settings (language code and flag next to the burger menu). For instance, having set
- language: English
- country: United States
your namespaces will be:
o(planetnamespace)en(English language).us(USA)
Advanced (with your GitHub account)
Your namespaces are derived from your config.yml. With your personal configuration, you can use more than 3 namespaces. This can be useful when you like to use shortcuts from multiple languages and countries, e.g. dictionaries or public transport while travelling.
Priority of namespaces
The lower a namespace is in the namespaces list, the higher its precedence. This is similar to object-oriented programming, when a method needs to be picked from inheriting classes.
So in the example above, shortcuts from .us override those from en, and both override those from o. Overridden shortcuts become not reachable.
Per-call namespace, also overrides language or country
Let's say you have configured language=en, but this time you want to search the German Wikipedia. In this case, call
So for a single call, you can prefix your query with NAMESPACE.. This namespace will then have the highest priority.
If that prefixed namespace happens to be a language or country namespace, it will also override the current language or country.
Example in detail
Settings
Let's assume we use Trovu with these settings:
Query
Now we call this query:
de.w berlin
Here, we add the namespace de. This means that for this very query
- the de namespace is added to the
namespaceslist, with the highest priority. - Also, since
deis a language, the language setting is changed tode.
So this query is now processed as if the settings were:
Result
Instead of the English Wikipedia (which would have been used with language: en), the German Wikipedia is used, because language is now set to de, and the Wikipedia shortcut's URL is defined as url: https://<$language>.wikipedia.org/....
If another shortcut w 1 had existed in namespace de, then this shortcut would have been called, because we had added this namespace to the configured namespaces with the highest priority.
Default language and country
Calling the homepage URL without any namespaces will set the default language and country based on navigator.language.