diff --git a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java index 3504213..a852309 100644 --- a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java +++ b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java @@ -2,9 +2,9 @@ package io.github.linwancen.plugin.show; import com.intellij.json.JsonFileType; import com.intellij.json.json5.Json5FileType; -import com.intellij.openapi.editor.EditorLinePainter; -import com.intellij.openapi.editor.LineExtensionInfo; +import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; @@ -13,6 +13,7 @@ import io.github.linwancen.plugin.show.bean.LineInfo; import io.github.linwancen.plugin.show.ext.LineExt; import io.github.linwancen.plugin.show.lang.base.BaseLangDoc; import io.github.linwancen.plugin.show.settings.AppSettingsState; +import io.github.linwancen.plugin.show.settings.GlobalSettingsState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; @@ -44,6 +45,24 @@ public class LineEnd extends EditorLinePainter { if (!settings.showLineEndComment) { return null; } + @NotNull GlobalSettingsState globalSettingsState = GlobalSettingsState.getInstance(); + if (globalSettingsState.onlySelectLine) { + Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor(); + if (editor != null) { + SelectionModel select = editor.getSelectionModel(); + VisualPosition start = select.getSelectionStartPosition(); + int lineNum = lineNumber + 1; + if (start != null) { + if (lineNum < start.getLine()) { + return null; + } + } + VisualPosition end = select.getSelectionEndPosition(); + if (end != null && lineNum > end.getLine()) { + return null; + } + } + } if (DumbService.isDumb(project)) { return null; } diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java index d02c48c..7c2b309 100644 --- a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java +++ b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java @@ -14,6 +14,8 @@ public abstract class AbstractSettingsComponent { protected final JBTextField lineEndCount = new JBTextField(); + private final JBCheckBox onlySelectLine = new JBCheckBox(ShowBundle.message("only.select.line")); + private final JBTextField lineInclude = new JBTextField(); private final JBTextField lineExclude = new JBTextField(); @@ -36,6 +38,8 @@ public abstract class AbstractSettingsComponent { @NotNull protected JPanel lineEndPanel() { FormBuilder builder = FormBuilder.createFormBuilder() + // .addComponent(onlySelectLine) + // .addSeparator() .addComponent(new JBLabel(ShowBundle.message("regexp.tip"))) .addSeparator() .addLabeledComponent(new JBLabel(ShowBundle.message("sign.include.regexp")), lineInclude, 1, true) @@ -69,6 +73,14 @@ public abstract class AbstractSettingsComponent { lineEndCount.setText(newText); } + public boolean getOnlySelectLine() { + return onlySelectLine.isSelected(); + } + + public void setOnlySelectLine(boolean newStatus) { + onlySelectLine.setSelected(newStatus); + } + @NotNull public String getLineInclude() { return lineInclude.getText(); diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsConfigurable.java b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsConfigurable.java index 0ea8edd..09c99b2 100644 --- a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsConfigurable.java +++ b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsConfigurable.java @@ -9,6 +9,7 @@ public class AbstractSettingsConfigurable { static boolean isModified(@NotNull AbstractSettingsState settings, @NotNull AbstractSettingsComponent component, boolean modified) { modified |= !component.getLineEndCount().equals(String.valueOf(settings.lineEndCount)); + modified |= component.getOnlySelectLine() != settings.onlySelectLine; modified |= !component.getLineInclude().equals(settings.getLineInclude()); modified |= !component.getLineExclude().equals(settings.getLineExclude()); modified |= !component.getDocInclude().equals(settings.getDocInclude()); @@ -26,6 +27,7 @@ public class AbstractSettingsConfigurable { } catch (NumberFormatException e) { component.setLineEndCount(String.valueOf(settings.lineEndCount)); } + settings.onlySelectLine = component.getOnlySelectLine(); settings.setLineInclude(component.getLineInclude()); settings.setLineExclude(component.getLineExclude()); settings.setDocInclude(component.getDocInclude()); @@ -38,6 +40,7 @@ public class AbstractSettingsConfigurable { static void reset(@NotNull AbstractSettingsState settings, @NotNull AbstractSettingsComponent component) { component.setLineEndCount(String.valueOf(settings.lineEndCount)); + component.setOnlySelectLine(settings.onlySelectLine); component.setLineInclude(settings.getLineInclude()); component.setLineExclude(settings.getLineExclude()); component.setDocInclude(settings.getDocInclude()); diff --git a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsState.java b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsState.java index f736ef2..3c3d766 100644 --- a/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsState.java +++ b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsState.java @@ -11,6 +11,7 @@ public abstract class AbstractSettingsState { public int lineEndCount = 2; public int lineEndLen = 0; + public boolean onlySelectLine = false; @NotNull public transient Pattern lineInclude = Pattern.compile(""); @NotNull diff --git a/src/main/resources/messages/ShowCommentBundle.properties b/src/main/resources/messages/ShowCommentBundle.properties index f603a51..6d4bd66 100644 --- a/src/main/resources/messages/ShowCommentBundle.properties +++ b/src/main/resources/messages/ShowCommentBundle.properties @@ -3,6 +3,7 @@ reset.default=Reset default show=Show show.line.end.comment=Show line end comment +only.select.line=Only Select Line show.tree.comment=Show tree comment compact=support compact diff --git a/src/main/resources/messages/ShowCommentBundle_zh.properties b/src/main/resources/messages/ShowCommentBundle_zh.properties index eaba062..00a920a 100644 --- a/src/main/resources/messages/ShowCommentBundle_zh.properties +++ b/src/main/resources/messages/ShowCommentBundle_zh.properties @@ -3,6 +3,7 @@ reset.default=\u6062\u590D\u9ED8\u8BA4 show=\u663E\u793A show.tree.comment=\u663E\u793A\u6587\u4EF6\u6811\u6CE8\u91CA +only.select.line=\u53EA\u663E\u793A\u9009\u62E9\u884C show.line.end.comment=\u663E\u793A\u884C\u672B\u6CE8\u91CA compact=\u652F\u6301\u538B\u7F29\u7A7A\u7684\u4E2D\u95F4\u5305