private bool Update() { var currentPath = StringUtils.NormalizePath(_gateway.GetFullCurrentPath()); var firstVisibleLine = _gateway.GetFirstVisibleLine(); // здесь не учитваются заколлапшенные строки var startLineIndex = _gateway.DocLineFromVisible(firstVisibleLine); var linesOnScreen = _gateway.LinesOnScreen(); var endLineIndex = _gateway.DocLineFromVisible(firstVisibleLine + linesOnScreen); var endPosition = _gateway.GetLineEndPosition(endLineIndex).Value; bool changed = currentPath != _currentPath; if (changed) { _expectedWords = _settingsMapping .Select(item => item.Src) .Where(src => src.MatchesWithPath(currentPath)) .Select(src => src.Word) .ToList(); } changed = changed || startLineIndex != _startLineIndex || endPosition != _endPosition; _currentPath = currentPath; _startLineIndex = startLineIndex; _endPosition = endPosition; return(changed); }
public void OnNotification(ScNotification notification) { if (isPanelVisible) { if (notification.Header.Code == (uint)SciMsg.SCN_UPDATEUI) { if (!(ValidateMkdnExtension() || ValidateHtmlExtension())) { return; } var firstVisible = scintillaGateway.GetFirstVisibleLine(); var buffer = scintillaGateway.LinesOnScreen() / 2; var lastLine = scintillaGateway.GetLineCount(); if (syncViewWithCaretPosition && lastCaretPosition != scintillaGateway.GetCurrentPos().Value) { lastCaretPosition = scintillaGateway.GetCurrentPos().Value; if ((scintillaGateway.GetCurrentLineNumber() - buffer) < 0) { ScrollToElementAtLineNo(0); } else { ScrollToElementAtLineNo(scintillaGateway.GetCurrentLineNumber() - buffer); } } else if (syncViewWithScrollPosition && lastCaretPosition != scintillaGateway.GetFirstVisibleLine()) { lastCaretPosition = scintillaGateway.GetFirstVisibleLine(); var middleLine = lastCaretPosition + buffer; if (scintillaGateway.GetFirstVisibleLine() == 0) { ScrollToElementAtLineNo(0); } else if ((lastCaretPosition + scintillaGateway.LinesOnScreen()) >= lastLine) { ScrollToElementAtLineNo(lastLine); } else { ScrollToElementAtLineNo(middleLine - buffer); } } } else if (notification.Header.Code == (uint)NppMsg.NPPN_BUFFERACTIVATED) { UpdateEditorInformation(); RenderMarkdown(); } else if (notification.Header.Code == (uint)SciMsg.SCN_MODIFIED) { // bool isInsert = (notification.ModificationType & (uint)SciMsg.SC_MOD_INSERTTEXT) != 0; // bool isDelete = (notification.ModificationType & (uint)SciMsg.SC_MOD_DELETETEXT) != 0; // // Any modifications made ? // if (isInsert || isDelete) // { if (ValidateMkdnExtension() || ValidateHtmlExtension()) { lastTickCount = Environment.TickCount; RenderMarkdown(); } // } } else if (notification.Header.Code == (uint)NppMsg.NPPN_FILESAVED) { RenderMarkdown(); } } }