View Issue Details

IDProjectCategoryView StatusLast Update
0034825LazarusIDEpublic2019-01-06 21:35
ReporterDenis Golovan Assigned ToMartin Friebe  
Status closedResolutionfixed 
Target Version2.0Fixed in Version2.0 
Summary0034825: [Regression] Complex IDE shortcuts stopped working

Since upgrading to Lazarus 2.1.0 (rev. 59970), I noticed that my shortcuts like Ctrl+X followed Ctrl+S no longer work as before.
Lazarus configuration is ok, see screenshot.

So I assume something is broken.
TagsNo tags attached.
Fixed in Revision60019
WidgetsetGTK 2
Attached Files


Denis Golovan

2019-01-06 13:33


Shortcuts.png (100,957 bytes)   
Shortcuts.png (100,957 bytes)   

Martin Friebe

2019-01-06 14:06

manager   ~0113206

First of all:

                   Please make a backup of your config (this may be needed to reproduce the issue)

Copy the folder ./lazarus in your home folder. (or if you use a diff primary config path, then back that up)

Files of interest: editoroptions.xml, maybe environmentoptions.xml

Have you seen all the conflicts?
Are the none working shortcuts part of any of those conflicts?

Then of course they would not work. To be exact only one of 2 conflicting shortcuts can work. Which one that is may have changed, but then it was never guaranteed which one would work.

Did you have the same conflicts in (I assume) 1.8.6 ?

As for your config, does it still work with 1.8.6?
Or has it been changed by the update, so it is now broken in both versions?

(If it is broken, the backup is not needed.... A restored config would be required.)

What about 2.0.rc3?

About the issue:

If you had the conflicts before, then this is NOT a bug.

If you did not have them, then we need to reproduce this. For that we need:
- A configuration file, that we can load in 1.8.6, and get a conflict free, and working keymap
- That we can then use in 2.1, and get the conflicts.

Some conflicts may be due to new shortcuts in 2.1. But seeing the amount of conflicts, that would only be a tiny subset.

For newly added shortcuts conflicts can happen. That is not optimal, but currently that is how it works (afaik, need to double check)

Denis Golovan

2019-01-06 14:33

reporter   ~0113207

editoroptions.xml hasn't changed since my last upgrade (11 version is still there).
I've made a backup of my .lazarus and removed all the conflicts.
Checked, Ctrl+X and Ctrl+S shortcut still does not work.

Then I've removed .lazarus folder altogether, started Lazarus, attached Ctrl+X and Ctrl+S => still no luck. See screenshot.

Denis Golovan

2019-01-06 14:33


Shortcuts2.png (99,422 bytes)   
Shortcuts2.png (99,422 bytes)   

Martin Friebe

2019-01-06 16:05

manager   ~0113209

Can you attach your editoroptions.xml ?

(Unlikely,but) to make sure your OS is not "stealing" ctrl-x, what happens if you assign an action to only ctrl-x (and remove all other shortcuts that start with ctrl-x)

Denis Golovan

2019-01-06 16:53


editoroptions.xml (12,017 bytes)   
<?xml version="1.0" encoding="UTF-8"?>
  <EditorOptions Version="12">
    <Color Version="12">
      <LangObjectPascal Version="12">
        <ColorScheme Value="Ocean"/>
          <ahaRightMargin Foreground="clBtnFace" UseSchemeGlobals="False"/>
          <Symbol Foreground="clWhite" UseSchemeGlobals="False"/>
          <Identifier Foreground="16775424" UseSchemeGlobals="False"/>
          <Reserved_word Foreground="65356" UseSchemeGlobals="False"/>
      <default Count="72">
        <Version Value="6"/>
        <move_cursor_to_line_start Value="65,1,0,0,0,0,0,0"/>
        <move_cursor_to_line_end Value="69,1,0,0,0,0,0,0"/>
        <find_incremental Value="83,1,0,0,0,0,0,0"/>
        <cut_selection_to_clipboard Value="87,1,0,0,0,0,0,0"/>
        <save Value="88,1,83,1,0,0,0,0"/>
        <cut_selected_components_to_clipboard Value="46,2,0,0,0,0,0,0"/>
        <replace_text Value="81,1,65,0,0,0,0,0"/>
        <copy_selection_to_clipboard Value="87,4,0,0,45,1,0,0"/>
        <paste_clipboard_to_current_position Value="89,1,0,0,45,2,0,0"/>
        <delete_current_line Value="0,0,0,0,0,0,0,0"/>
        <indent_block Value="73,1,0,0,0,0,0,0"/>
        <unindent_block Value="85,1,0,0,0,0,0,0"/>
        <uppercase_selection Value="0,0,0,0,0,0,0,0"/>
        <lowercase_selection Value="0,0,0,0,0,0,0,0"/>
        <select_word Value="0,0,0,0,0,0,0,0"/>
        <select_line Value="0,0,0,0,0,0,0,0"/>
        <delete_to_beginning_of_line Value="3,0,0,0,0,0,0,0"/>
        <toggle_marker_0 Value="48,3,0,0,0,0,0,0"/>
        <toggle_marker_1 Value="49,3,0,0,0,0,0,0"/>
        <toggle_marker_2 Value="50,3,0,0,0,0,0,0"/>
        <toggle_marker_3 Value="51,3,0,0,0,0,0,0"/>
        <toggle_marker_4 Value="52,3,0,0,0,0,0,0"/>
        <toggle_marker_5 Value="53,3,0,0,0,0,0,0"/>
        <toggle_marker_6 Value="54,3,0,0,0,0,0,0"/>
        <toggle_marker_7 Value="55,3,0,0,0,0,0,0"/>
        <toggle_marker_8 Value="56,3,0,0,0,0,0,0"/>
        <toggle_marker_9 Value="57,3,0,0,0,0,0,0"/>
        <break_line__leave_cursor Value="0,0,0,0,0,0,0,0"/>
        <delete_to_end_of_line Value="75,1,0,0,81,1,89,0"/>
        <word_completion Value="0,0,0,0,0,0,0,0"/>
        <find_previous Value="82,1,0,0,0,0,0,0"/>
        <go_to_next_editor Value="39,4,0,0,0,0,0,0"/>
        <go_to_prior_editor Value="37,4,0,0,0,0,0,0"/>
        <move_cursor_up_one_page Value="86,4,0,0,0,0,0,0"/>
        <move_cursor_down_one_page Value="86,1,0,0,0,0,0,0"/>
        <move_cursor_word_left Value="66,4,0,0,0,0,0,0"/>
        <move_cursor_word_right Value="70,4,0,0,0,0,0,0"/>
        <delete_to_start_of_word Value="8,4,0,0,0,0,0,0"/>
        <move_cursor_to_absolute_beginning Value="188,6,0,0,0,0,0,0"/>
        <move_cursor_to_absolute_end Value="190,6,0,0,0,0,0,0"/>
        <move_cursor_to_text_start_in_line Value="77,4,0,0,0,0,0,0"/>
        <toggle_current_word_highlight Value="0,0,0,0,0,0,0,0"/>
        <Item1 Name="Close">
          <KeyB Default="False" Key1="88" Shift1="1" Key2="75"/>
          <KeyA Default="False" Key1="81" Shift1="1"/>
        <Item2 Name="Copy Block">
          <KeyA Default="False"/>
        <Item3 Name="Cut selected Components to clipboard">
          <KeyA Default="False" Key1="46" Shift1="2"/>
          <KeyB Default="False" Key1="46" Shift1="2"/>
        <Item4 Name="Cut selection to clipboard">
          <KeyB Default="False" Key1="46" Shift1="2"/>
          <KeyA Default="False" Key1="87" Shift1="1"/>
        <Item5 Name="Delete Block">
          <KeyA Default="False"/>
        <Item6 Name="Delete char at cursor">
          <KeyA Default="False" Key1="46"/>
          <KeyB Default="False" Key1="68" Shift1="1"/>
        <Item7 Name="Delete to beginning of line">
          <KeyA Default="False" Key1="3"/>
        <Item8 Name="Delete to end of line">
          <KeyA Default="False" Key1="75" Shift1="1"/>
        <Item9 Name="Delete to end of word">
          <KeyA Default="False" Key1="84" Shift1="1"/>
          <KeyB Default="False" Key1="68" Shift1="4"/>
        <Item10 Name="Delete to start of word">
          <KeyA Default="False" Key1="8" Shift1="4"/>
        <Item11 Name="Find block other end">
          <KeyA Default="False"/>
        <Item12 Name="Find block start">
          <KeyA Default="False"/>
        <Item13 Name="Find incremental">
          <KeyA Default="False" Key1="83" Shift1="1"/>
        <Item14 Name="Find previous">
          <KeyA Default="False" Key1="82" Shift1="1"/>
        <Item15 Name="Find text">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="70" Shift1="1"/>
        <Item16 Name="Fold to Level 5">
          <KeyA Default="False"/>
        <Item17 Name="Go to line number">
          <KeyA Default="False" Key1="71" Shift1="4"/>
        <Item18 Name="Go to marker 0">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="48" Shift1="1"/>
        <Item19 Name="Go to marker 1">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="49" Shift1="1"/>
        <Item20 Name="Go to marker 2">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="50" Shift1="1"/>
        <Item21 Name="Go to marker 3">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="51" Shift1="1"/>
        <Item22 Name="Go to marker 4">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="52" Shift1="1"/>
        <Item23 Name="Go to marker 5">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="53" Shift1="1"/>
        <Item24 Name="Go to marker 6">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="54" Shift1="1"/>
        <Item25 Name="Go to marker 7">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="55" Shift1="1"/>
        <Item26 Name="Go to marker 8">
          <KeyB Default="False"/>
          <KeyA Default="False" Key1="56" Shift1="1"/>
        <Item27 Name="Go to marker 9">
          <KeyA Default="False" Key1="57" Shift1="1"/>
          <KeyB Default="False"/>
        <Item28 Name="Go to next editor">
          <KeyA Default="False" Key1="39" Shift1="4"/>
        <Item29 Name="Go to prior editor">
          <KeyA Default="False" Key1="37" Shift1="4"/>
        <Item30 Name="Goto Block Begin">
          <KeyA Default="False"/>
        <Item31 Name="Goto Block End">
          <KeyA Default="False"/>
        <Item32 Name="Indent block">
          <KeyB Default="False"/>
        <Item33 Name="Jump back">
          <KeyA Default="False" Key1="72" Shift1="1"/>
          <KeyB Default="False"/>
        <Item34 Name="Jump forward">
          <KeyA Default="False" Key1="72" Shift1="3"/>
          <KeyB Default="False"/>
        <Item35 Name="Lowercase selection">
          <KeyA Default="False"/>
        <Item36 Name="Move Block">
          <KeyA Default="False"/>
        <Item37 Name="Move cursor down one page">
          <KeyA Default="False" Key1="86" Shift1="1"/>
        <Item38 Name="Move cursor to absolute beginning">
          <KeyA Default="False" Key1="188" Shift1="6"/>
        <Item39 Name="Move cursor to absolute end">
          <KeyA Default="False" Key1="190" Shift1="6"/>
        <Item40 Name="Move cursor to line end">
          <KeyA Default="False" Key1="69" Shift1="1"/>
        <Item41 Name="Move cursor to line start">
          <KeyA Default="False" Key1="65" Shift1="1"/>
        <Item42 Name="Move cursor to text start in line">
          <KeyA Default="False" Key1="77" Shift1="4"/>
        <Item43 Name="Move cursor up one page">
          <KeyA Default="False" Key1="86" Shift1="4"/>
        <Item44 Name="Move cursor word left">
          <KeyA Default="False" Key1="66" Shift1="4"/>
        <Item45 Name="Move cursor word right">
          <KeyA Default="False" Key1="70" Shift1="4"/>
        <Item46 Name="Paste clipboard to current position">
          <KeyA Default="False" Key1="89" Shift1="1"/>
          <KeyB Default="False" Key1="45" Shift1="2"/>
        <Item47 Name="Procedure List ...">
          <KeyA Default="False"/>
        <Item48 Name="Save">
          <KeyA Default="False" Key1="88" Shift1="1" Key2="83" Shift2="1"/>
        <Item49 Name="Select all">
          <KeyA Default="False"/>
        <Item50 Name="Select line">
          <KeyA Default="False"/>
        <Item51 Name="Select word">
          <KeyA Default="False"/>
        <Item52 Name="Set Block begin">
          <KeyA Default="False"/>
        <Item53 Name="Set Block End">
          <KeyA Default="False"/>
        <Item54 Name="Start sticky selecting">
          <KeyA Default="False"/>
        <Item55 Name="Start sticky selecting (Columns)">
          <KeyA Default="False"/>
        <Item56 Name="Stop program">
          <KeyA Default="False" Key1="113" Shift1="4"/>
        <Item57 Name="Stop sticky selecting">
          <KeyA Default="False"/>
        <Item58 Name="Swap case in selection">
          <KeyA Default="False"/>
        <Item59 Name="Toggle Block">
          <KeyA Default="False"/>
        <Item60 Name="Toggle Current-Word highlight">
          <KeyA Default="False"/>
        <Item61 Name="Toggle marker 0">
          <KeyB Default="False"/>
        <Item62 Name="Toggle marker 1">
          <KeyB Default="False"/>
        <Item63 Name="Toggle marker 2">
          <KeyB Default="False"/>
        <Item64 Name="Toggle marker 3">
          <KeyB Default="False"/>
        <Item65 Name="Toggle marker 4">
          <KeyB Default="False"/>
        <Item66 Name="Toggle marker 5">
          <KeyB Default="False"/>
        <Item67 Name="Toggle marker 6">
          <KeyB Default="False"/>
        <Item68 Name="Toggle marker 7">
          <KeyB Default="False"/>
        <Item69 Name="Toggle marker 8">
          <KeyB Default="False"/>
        <Item70 Name="Toggle marker 9">
          <KeyB Default="False"/>
        <Item71 Name="Unindent block">
          <KeyA Default="False"/>
          <KeyB Default="False"/>
        <Item72 Name="Uppercase selection">
          <KeyA Default="False"/>
    <CodeTools CodeTemplateFileName="/home/denis/.lazarus/lazarus.dci" AutoDelayInMSec="500" AutoRemoveEmptyMethods="True" CompletionLongLineHintTypeCompletionLongLineHintType="sclpExtendRightOnly"/>
    <Display ShowLineNumbers="False" ShowOnlyLineNumbersMultiplesOf="1" EditorFont="Monospace" EditorFontSize="-14" DoNotWarnForFont="Monospace" RightMargin="120"/>
      <Default Version="1" GutterLeft="moGLDownClick"/>
      <Editor EnhanceHomeKey="True" EnhanceEndKey="True" TabPosition="tpTop"/>
editoroptions.xml (12,017 bytes)   

Denis Golovan

2019-01-06 16:57

reporter   ~0113213

OS does not steal Ctrl+X as other applications work fine.
Single Ctrl+X works fine as well (no conflicting keys).

Martin Friebe

2019-01-06 18:57

manager   ~0113217

Is it only shortcuts starting with ctrl-x?
Or are there others? Do you have a list?

The strange think is that (for me) it works, *IF* there is text selected.
But if no text is selected then it does not work.

Denis Golovan

2019-01-06 19:08

reporter   ~0113218

Yes, the only one.
And yes, it works when selection exists.

Martin Friebe

2019-01-06 21:18

manager   ~0113222

Please test and close if ok.

revision 60019

To patch it yourself for testing:
Open components\synedit\synpluginmulticaret.pp
Find TSynCustomPluginMultiCaret.TranslateKey (around line 1908)

At the very end of the function insert 2 new lines:

  Handled := (Command <> ecNone) or IsStartOfCombo; // <<<<<<<<< EXISTING LINE
  if IsStartOfCombo then
    ComboKeyStrokes := FKeyStrokes;
end; // <<<<<<<<< EXISTING LINE


Denis Golovan

2019-01-06 21:35

reporter   ~0113223

Works as expected.
Thanks a lot.

Issue History

Date Modified Username Field Change
2019-01-06 13:33 Denis Golovan New Issue
2019-01-06 13:33 Denis Golovan File Added: Shortcuts.png
2019-01-06 14:06 Martin Friebe LazTarget => -
2019-01-06 14:06 Martin Friebe Note Added: 0113206
2019-01-06 14:06 Martin Friebe Status new => feedback
2019-01-06 14:33 Denis Golovan Note Added: 0113207
2019-01-06 14:33 Denis Golovan Status feedback => new
2019-01-06 14:33 Denis Golovan File Added: Shortcuts2.png
2019-01-06 16:05 Martin Friebe Note Added: 0113209
2019-01-06 16:53 Denis Golovan File Added: editoroptions.xml
2019-01-06 16:57 Denis Golovan Note Added: 0113213
2019-01-06 18:57 Martin Friebe Note Added: 0113217
2019-01-06 19:08 Denis Golovan Note Added: 0113218
2019-01-06 21:14 Martin Friebe Assigned To => Martin Friebe
2019-01-06 21:14 Martin Friebe Status new => assigned
2019-01-06 21:18 Martin Friebe Fixed in Revision => 60019
2019-01-06 21:18 Martin Friebe LazTarget - => 2.0
2019-01-06 21:18 Martin Friebe Note Added: 0113222
2019-01-06 21:18 Martin Friebe Status assigned => resolved
2019-01-06 21:18 Martin Friebe Fixed in Version => 2.0
2019-01-06 21:18 Martin Friebe Resolution open => fixed
2019-01-06 21:18 Martin Friebe Target Version => 2.0
2019-01-06 21:35 Denis Golovan Note Added: 0113223
2019-01-06 21:35 Denis Golovan Status resolved => closed