The idea here is to force commands to be run syncrhonously when
they are launched via "command-sequence" or "repeat". We do this
by using a new flag in FuncRequest.
There are more independent crashes occuring in this scenario and this
fix targets only one of them, in particular the one in which different
window's outliner sends outliner command to a wrong window. The fix
itself gives an option for lfun to know which window it belongs to.
https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg203619.html
This commit does a bulk fix of incorrect annotations (comments) at the
end of namespaces.
The commit was generated by initially running clang-format, and then
from the diff of the result extracting the hunks corresponding to
fixes of namespace comments. The changes being applied and all the
results have been manually reviewed. The source code successfully
builds on macOS.
Further details on the steps below, in case they're of interest to
someone else in the future.
1. Checkout a fresh and up to date version of src/
git pull && git checkout -- src && git status src
2. Ensure there's a suitable .clang-format in place, i.e. with options
to fix the comment at the end of namespaces, including:
FixNamespaceComments: true
SpacesBeforeTrailingComments: 1
and that clang-format is >= 5.0.0, by doing e.g.:
clang-format -dump-config | grep Comments:
clang-format --version
3. Apply clang-format to the source:
clang-format -i $(find src -name "*.cpp" -or -name "*.h")
4. Create and filter out hunks related to fixing the namespace
git diff -U0 src > tmp.patch
grepdiff '^} // namespace' --output-matching=hunk tmp.patch > fix_namespace.patch
5. Filter out hunks corresponding to simple fixes into to a separate patch:
pcregrep -M -e '^diff[^\n]+\nindex[^\n]+\n--- [^\n]+\n\+\+\+ [^\n]+\n' \
-e '^@@ -[0-9]+ \+[0-9]+ @@[^\n]*\n-\}[^\n]*\n\+\}[^\n]*\n' \
fix_namespace.patch > fix_namespace_simple.patch
6. Manually review the simple patch and then apply it, after first
restoring the source.
git checkout -- src
patch -p1 < fix_namespace_simple.path
7. Manually review the (simple) changes and then stage the changes
git diff src
git add src
8. Again apply clang-format and filter out hunks related to any
remaining fixes to the namespace, this time filter with more
context. There will be fewer hunks as all the simple cases have
already been handled:
clang-format -i $(find src -name "*.cpp" -or -name "*.h")
git diff src > tmp.patch
grepdiff '^} // namespace' --output-matching=hunk tmp.patch > fix_namespace2.patch
9. Manually review/edit the resulting patch file to remove hunks for files
which need to be dealt with manually, noting the file names and
line numbers. Then restore files to as before applying clang-format
and apply the patch:
git checkout src
patch -p1 < fix_namespace2.patch
10. Manually fix the files noted in the previous step. Stage files,
review changes and commit.
The main thing it does is integrate mouse-modifiers into the
FuncRequest machinery. Previously, these had to be passed
separately, which led to some ugly function signatures.
There was also an unnecessary form of the constructor, which
can now be removed.
No change of behavior is intended.
By the way, this is extremely inefficient. We have e.g. this code in
Buffer.cpp:
string target = func.getArg(0);
string target_name = func.getArg(1);
string command = func.getArg(2);
As a result, we parse the argument string three times! It seems to me
that we should either (a) expose a "getArgs" routine that returns a
vector<string> and let the caller extract them by position:
vector<string> args = func.getArgs();
string target = args[0];
etc;
or (b) cache the vector<string> in the FuncRequest object itself. The
latter wouldn't in fact require much memory, because these objects are
generally short-lived.
Opinions?
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32771 a592a061-630c-0410-9148-cb99ea01b6c8
max is supposed to be.
JMarc: I assume you are intending to use this new method, getLongArg()?
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@32770 a592a061-630c-0410-9148-cb99ea01b6c8
by default read from lib/commands/default.def
A .def file allows to define a command with
\define "Name" "lfun"
where Name is the name of the new command and lfun is the code
to be executed.
\def_file "FileName"
allows to include another .def file.
The implementation of CmdDef is similar to KeyMap, i.e. there is
one instance created in the LyX.cpp that reads the .def file, holds
a list containing all definitions, and supplies access methods.
LFUN_CALL: The new lfun is used to execute a command definition, e.g.
call Name
If a toolbar item has the associated action "call Name" then the image
lib/images/commands/Name.png is used for the button.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21093 a592a061-630c-0410-9148-cb99ea01b6c8