- this reduces the number of functions and allows lazy loading of
completion options, which makes it easy to quickly add any other
OpenFOAM application in completion.
The generic '_of_complete_' function handles (bash) completion for
any OpenFOAM application. On the first call for any particular
application, it retrieves the available options from the application
help output and adds this information to its environmental cache for
subsequent use.
- Tcsh completion uses the same function via a bash wrapper.
But since its wrapper is transient, the on-the-fly generation would
be less efficient. For this case, a pre-generated completion_cache
can be used, which is generated with
bin/tools/foamCreateCompletionCache
- handles the case where we are currently completing something that
does not appear to be an option. For example,
foamDictionary -expanded someD[TAB]
should complete the filename, not present more options.
- The logic for switching input-mode was previously completely
encapsulated within the #inputMode directive, but without any
programming equivalent. Furthermore, the encapsulation in inputMode
made the logic less clear in other places.
Exposing the inputMode as an enum with direct access from entry
simplifies things a fair bit.
- eliminate one level of else/if nesting in entryIO.C for clearer logic
- for dictionary function entries, simply use
addNamedToMemberFunctionSelectionTable() and avoid defining a type()
as a static. For most function entries the information is only used
to get a name for the selection table lookup anyhow.
- although this has been supported for many years, the tutorials
continued to use "convertToMeters" entry, which is specific to blockMesh.
The "scale" is more consistent with other dictionaries.
ENH:
- ignore "scale 0;" (treat as no scaling) for blockMeshDict,
consistent with use elsewhere.
- currently no cleanup of completions when deactivating an OpenFOAM
tcsh environment
- tab completion with directories adds a space after the slash, which
makes navigation a bit annoying.
- useful operations for other string representations of fileName types.
The return type is in general a std::string with any narrowing
being done by the caller on the return value.
- consolidate word::validated() into word::validate() and also allow
as short form for string::validate<word>(). Also less confusing than
having similarly named methods that essentially do the same thing.
- more consistent const access when iterating over strings
- add valid(char) for keyType and wordRe
- use complete -o filenames, dropped -o nospace to make it more responsive.
- restructure completion code to use a unified backend, which makes it easier
understand, maintain and re-use.
- foamCreateBashCompletions now simply outputs to a stdout, and allows
quick generation of completion of single applications.
- add -fileHandler completion in anticipation of future changes there.
- relocated as etc/config.s/bash_completion to prevent inadvertently
having two versions (.com, .org) installed at the same time.
- Instead of relying on #inputMode to effect a global change it is now
possible (and recommended) to a temporary change in the inputMode
for the following entry.
#default : provide default value if entry is not already defined
#overwrite : silently remove a previously existing entry
#warn : warn about duplicate entries
#error : error if any duplicate entries occur
#merge : merge sub-dictionaries when possible (the default mode)
This is generally less cumbersome than the switching the global
inputMode. For example to provide a set of fallback values.
#includeIfPresent "user-files"
...
#default value uniform 10;
vs.
#includeIfPresent "user-files"
#inputMode protect
...
value uniform 10;
#inputMode merge // _Assuming_ we actually had this before
These directives can also be used to suppress the normal dictionary
merge semantics:
#overwrite dict { entry val; ... }
- With special-purpose templating it is possible to have file contents
that almost look like an OpenFOAM file, but which are not.
The contents do not need to be deliberately tricky, even the simplest
README:
FoamFile is the first word parsed in OpenFOAM files
will trigger problems.
We now trap any IOerror on these and reject this type of file as invalid.
- error::throwExceptions(bool) returning the previous state makes it
easier to set and restore states.
- throwing() method to query the current handling (if required).
- the normal error::throwExceptions() and error::dontThrowExceptions()
also return the previous state, to make it easier to restore later.
- installed under /usr/include/scotch/scotch.h
ENH: obtain fallback value for SCOTCH_VERSION from the header
COMP: add support for metis, scotch static libraries (eg, EasyBuild)
- patterns only supported for the final element.
To create an element as a pattern instead of a word, an embedded
string quote (single or double) is used for that element.
Any of the following examples:
"/top/sub/dict/'(p|U).*" 100;
"/top/sub/dict/'(p|U).*'" 100;
"/top/sub/dict/\"(p|U).*" 100;
"/top/sub/dict/\"(p|U).*\"" 100;
are equivalent to the longer form:
top
{
sub
{
dict
{
"(p|U).*" 100;
}
}
}
It is not currently possible to auto-vivify intermediate
dictionaries with patterns.
NOK "/nonexistent.*/value" 100;
OK "/existing.*/value" 100;
- full scoping also works for the #remove directive
#remove "/dict1/subdict2/entry1"
- Resolve ambiguity by using the following rules:
1) starts with '/' => absolute file-system path
2) starts with './' or '../' => file-system path relative to CWD
3) otherwise treat as relative to the case
STYLE: allow write access to headerClassName