Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.nrubin29.terminal;
- import javax.swing.*;
- import javax.swing.filechooser.FileSystemView;
- import java.awt.*;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.io.*;
- import java.util.ArrayList;
- public class Terminal extends JFrame {
- private JTextArea area;
- private File workingFolder;
- public Terminal() throws IOException {
- area = new JTextArea();
- workingFolder = FileSystemView.getFileSystemView().getDefaultDirectory();
- setTitle("Terminal (" + workingFolder.getPath() + ")");
- final Process bash = new ProcessBuilder("bash").start();
- area.addKeyListener(new KeyListener() {
- public void keyPressed(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {
- try {
- String command = area.getText().split("\n")[area.getLineOfOffset(area.getCaretPosition())];
- if (command.equals("")) return;
- //Process p = new ProcessBuilder("bash", "-c", command).directory(workingFolder).start();
- area.setEditable(false);
- OutputStreamWriter write = new OutputStreamWriter(bash.getOutputStream());
- write.write(command);
- int code = bash.waitFor();
- writeStream(bash.getErrorStream());
- writeStream(bash.getInputStream());
- if (code == 0 && command.startsWith("cd") && command.split(" ").length >= 2) workingFolder = new File(command.split(" ")[1]);
- Terminal.this.setTitle("Terminal (" + workingFolder.getPath() + ")");
- area.setEditable(true);
- }
- catch (Exception ex) { error(ex); }
- }
- else if (e.getKeyCode() == KeyEvent.VK_DELETE) e.setSource(null);
- }
- public void keyTyped(KeyEvent e) { }
- public void keyReleased(KeyEvent e) { }
- });
- area.setBackground(Color.black);
- area.setForeground(Color.green);
- area.setCaretColor(Color.green);
- area.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
- JScrollPane pane = new JScrollPane(area);
- pane.setBorder(BorderFactory.createEmptyBorder());
- pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
- pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
- add(pane);
- Dimension DIM = new Dimension(640, 480);
- setPreferredSize(DIM);
- setSize(DIM);
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setLocationRelativeTo(null);
- setResizable(true);
- pack();
- setVisible(true);
- }
- public static void main(String[] args) throws IOException {
- new Terminal();
- }
- private void write(String... lines) {
- area.append("\n");
- for (String line : lines) {
- area.append("\n" + line);
- }
- }
- private void error(Exception e) {
- write("An error has occured.", e.getMessage());
- e.printStackTrace();
- }
- private void writeStream(InputStream s) {
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(s));
- ArrayList<String> strs = new ArrayList<String>();
- while(reader.ready()) strs.add(reader.readLine());
- write(strs.toArray(new String[strs.size()]));
- s.close();
- }
- catch (Exception e) { e.printStackTrace(); }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment