diff --git a/src/ce_common.pas b/src/ce_common.pas index 1c92ea9b..c94f62df 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -222,6 +222,11 @@ type *) procedure ensureNoPipeIfWait(aProcess: TProcess); + (** + * Returns the length of the line ending in aFilename; + *) + function getLineEndingLength(const aFilename: string): byte; + implementation {$IFDEF LINUX} @@ -825,6 +830,35 @@ begin aProcess.Options := aProcess.Options + [poNewConsole]; end; +function getLineEndingLength(const aFilename: string): byte; +var + value: char; + le: string; +begin + value := #0; + le := LineEnding; + result := length(le); + if not fileExists(aFilename) then + exit; + with TMemoryStream.Create do + try + LoadFromFile(aFilename); + while true do + begin + if Position = Size then + exit; + read(value,1); + if value = #10 then + exit(1); + if value = #13 then + exit(2); + end; + finally + Free; + end; +end; + + initialization RegisterClasses([TMRUList, TMRUFileList]); dExtList := TStringList.Create; diff --git a/src/ce_dcd.pas b/src/ce_dcd.pas index 46e0d02d..aaaf12e7 100644 --- a/src/ce_dcd.pas +++ b/src/ce_dcd.pas @@ -250,7 +250,7 @@ begin fClient.Parameters.Clear; fClient.Parameters.Add('-d'); fClient.Parameters.Add('-c'); - fClient.Parameters.Add(intToStr(fDoc.SelStart-1)); + fClient.Parameters.Add(intToStr(fDoc.MouseStart -1)); fClient.Parameters.Add(fDoc.tempFilename); fClient.Execute; // diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 3152826b..51adaed2 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -76,6 +76,8 @@ type fMultiDocSubject: TCECustomSubject; fStoredFontSize: Integer; fPositions: TCESynMemoPositions; + fMousePos: TPoint; + function getMouseStart: Integer; procedure changeNotify(Sender: TObject); procedure identifierToD2Syn; procedure saveCache; @@ -108,6 +110,8 @@ type property isDSource: boolean read fIsDSource; property isProjectSource: boolean read fIsConfig; property TextView; + // + property MouseStart: Integer read getMouseStart; end; var @@ -510,11 +514,23 @@ begin StaticEditorMacro.Execute; end; +function TCESynMemo.getMouseStart: Integer; +var + i, le: Integer; +begin + result := 0; + le := getLineEndingLength(fFilename); + for i:= 0 to fMousePos.y-2 do + result += length(Lines.Strings[i]) + le; + result += fMousePos.x; +end; + procedure TCESynMemo.MouseMove(Shift: TShiftState; X, Y: Integer); begin inherited; if ssLeft in Shift then identifierToD2Syn; + fMousePos := PixelsToRowColumn(Point(X,Y)); end; procedure TCESynMemo.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y:Integer);