diff --git a/.vscode/settings.json b/.vscode/settings.json index e0f15db..317e419 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,10 @@ { - "java.configuration.updateBuildConfiguration": "automatic" + "java.configuration.updateBuildConfiguration": "automatic", + "java.completion.filteredTypes": [ + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*" + ] } \ No newline at end of file diff --git a/src/main/java/istlab/KisoJikken/JTAConsole.java b/src/main/java/istlab/KisoJikken/JTAConsole.java index 0f44aa7..b065945 100644 --- a/src/main/java/istlab/KisoJikken/JTAConsole.java +++ b/src/main/java/istlab/KisoJikken/JTAConsole.java @@ -2,6 +2,8 @@ import java.awt.Dimension; import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; @@ -14,6 +16,8 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.List; import java.util.Stack; import javax.swing.JFrame; @@ -21,7 +25,11 @@ import javax.swing.JTextArea; import javax.swing.text.BadLocationException; -public class JTAConsole extends JTextArea implements Runnable, WindowListener, KeyListener, MouseListener { +import com.github.difflib.text.DiffRow; +import com.github.difflib.text.DiffRowGenerator; + +public class JTAConsole extends JTextArea + implements Runnable, WindowListener, KeyListener, MouseListener, ActionListener { // static JTAConsole lastWindow; // static Point lastActivePoint; static Stack winStack = new Stack(); @@ -32,6 +40,8 @@ InputStreamReader isreader; BufferedReader reader; OutputStream outstream; + + StringBuilder originalContent; // ProcessBuilder pb; // public JTAConsole(ProcessBuilder prob) { @@ -69,10 +79,12 @@ // } // lastWindow = this; winStack.push(this); + originalContent = new StringBuilder(); } public void Systemoutprintln(String s) { append(s + "\n"); + originalContent.append(s + "\n"); int len = getDocument().getLength(); setCaretPosition(len); } @@ -101,9 +113,9 @@ } catch (IOException | InterruptedException e) { // e.printStackTrace(); - System.out.print(e.getClass().getCanonicalName()+" : "); + System.out.print(e.getClass().getCanonicalName() + " : "); System.out.println(e.getLocalizedMessage()); - } + } Systemoutprintln("=== end ==="); @@ -125,18 +137,18 @@ Systemoutprintln("=== end ==="); } - public static void main(String[] arg) { - ProcessBuilder processBuilder = new ProcessBuilder("ping", "localhost"); - Process process = null; - try { - process = processBuilder.start(); - } catch (IOException e) { - e.printStackTrace(); - } - JTAConsole con = new JTAConsole("Demo"); - con.startBR(process); + // public static void main(String[] arg) { + // ProcessBuilder processBuilder = new ProcessBuilder("ping", "localhost"); + // Process process = null; + // try { + // process = processBuilder.start(); + // } catch (IOException e) { + // e.printStackTrace(); + // } + // JTAConsole con = new JTAConsole("Demo"); + // con.startBR(process); - } + // } @Override public void windowOpened(WindowEvent e) { @@ -184,7 +196,6 @@ @Override public void windowActivated(WindowEvent e) { // JTAConsole.lastActivePoint = frame.getLocationOnScreen(); - } @Override @@ -241,9 +252,10 @@ byte[] sbyte = lastLineText.getBytes(); outstream.write(sbyte); outstream.flush(); + // originalContent.append("") } catch (BadLocationException | IOException e) { - e.printStackTrace(); + System.out.println(e.getLocalizedMessage()); } } @@ -283,4 +295,34 @@ // TODO Auto-generated method stub } + + /** + * PopupMenuの選択によるコマンド実行 + * + * @param e + */ + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("Show Diff")) { + String orig = originalContent.toString(); // 出力情報のみ + String buffer = getText(); // JTAの内容(入力と、コメント含む) ここでの入力とは、擬似ターミナル経由でプロセスに送信した内容を指す + List origList = Arrays.asList(orig.split("\n")); + List bufList = Arrays.asList(buffer.split("\n")); + DiffRowGenerator generator = DiffRowGenerator.create() + .showInlineDiffs(true) + .inlineDiffByWord(true) + .oldTag(f -> "~") // introduce markdown style for strikethrough + .newTag(f -> "**") // introduce markdown style for bold + .build(); + List rows = generator.generateDiffRows(origList, bufList); + + System.out.println("|original|new|"); + System.out.println("|--------|---|"); + for (DiffRow row : rows) { + System.out.println("|" + row.getOldLine() + "|" + row.getNewLine() + "|"); + } + + } else if (e.getActionCommand().equals("Submit")) { + } + } } diff --git a/src/main/java/istlab/KisoJikken/JTAConsolePopup.java b/src/main/java/istlab/KisoJikken/JTAConsolePopup.java index b679f39..157e655 100644 --- a/src/main/java/istlab/KisoJikken/JTAConsolePopup.java +++ b/src/main/java/istlab/KisoJikken/JTAConsolePopup.java @@ -19,9 +19,13 @@ add(mi); addSeparator(); + mi = new JMenuItem("Show Diff"); + add(mi); + mi.addActionListener(console); // コンソールに処理してもらう + mi = new JMenuItem("Submit"); add(mi); - mi.addActionListener(ae -> System.out.println(ae.getActionCommand())); + mi.addActionListener(console); }