nrubin29

Untitled

Aug 27th, 2013
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.66 KB | None | 0 0
  1. package me.nrubin29.terminal;
  2.  
  3. import javax.swing.*;
  4. import javax.swing.filechooser.FileSystemView;
  5. import java.awt.*;
  6. import java.awt.event.KeyEvent;
  7. import java.awt.event.KeyListener;
  8. import java.io.*;
  9. import java.util.ArrayList;
  10.  
  11. public class Terminal extends JFrame {
  12.  
  13.     private JTextArea area;
  14.     private File workingFolder;
  15.  
  16.     public Terminal() throws IOException {
  17.         area = new JTextArea();
  18.         workingFolder = FileSystemView.getFileSystemView().getDefaultDirectory();
  19.         setTitle("Terminal (" + workingFolder.getPath() + ")");
  20.  
  21.         final Process bash = new ProcessBuilder("bash").start();
  22.  
  23.         area.addKeyListener(new KeyListener() {
  24.             public void keyPressed(KeyEvent e) {
  25.                 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
  26.                     try {
  27.                         String command = area.getText().split("\n")[area.getLineOfOffset(area.getCaretPosition())];
  28.                         if (command.equals("")) return;
  29.  
  30.                         //Process p = new ProcessBuilder("bash", "-c", command).directory(workingFolder).start();
  31.  
  32.                         area.setEditable(false);
  33.  
  34.                         OutputStreamWriter write = new OutputStreamWriter(bash.getOutputStream());
  35.                         write.write(command);
  36.  
  37.                         int code = bash.waitFor();
  38.  
  39.                         writeStream(bash.getErrorStream());
  40.                         writeStream(bash.getInputStream());
  41.  
  42.                         if (code == 0 && command.startsWith("cd") && command.split(" ").length >= 2) workingFolder = new File(command.split(" ")[1]);
  43.  
  44.                         Terminal.this.setTitle("Terminal (" + workingFolder.getPath() + ")");
  45.  
  46.                         area.setEditable(true);
  47.                     }
  48.                     catch (Exception ex) { error(ex); }
  49.                 }
  50.                 else if (e.getKeyCode() == KeyEvent.VK_DELETE) e.setSource(null);
  51.             }
  52.             public void keyTyped(KeyEvent e) { }
  53.             public void keyReleased(KeyEvent e) { }
  54.         });
  55.  
  56.         area.setBackground(Color.black);
  57.         area.setForeground(Color.green);
  58.         area.setCaretColor(Color.green);
  59.         area.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
  60.  
  61.         JScrollPane pane = new JScrollPane(area);
  62.         pane.setBorder(BorderFactory.createEmptyBorder());
  63.         pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  64.         pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
  65.  
  66.         add(pane);
  67.  
  68.         Dimension DIM = new Dimension(640, 480);
  69.         setPreferredSize(DIM);
  70.         setSize(DIM);
  71.         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  72.         setLocationRelativeTo(null);
  73.         setResizable(true);
  74.         pack();
  75.         setVisible(true);
  76.     }
  77.  
  78.     public static void main(String[] args) throws IOException {
  79.         new Terminal();
  80.     }
  81.  
  82.     private void write(String... lines) {
  83.         area.append("\n");
  84.         for (String line : lines) {
  85.             area.append("\n" + line);
  86.         }
  87.     }
  88.  
  89.     private void error(Exception e) {
  90.         write("An error has occured.", e.getMessage());
  91.         e.printStackTrace();
  92.     }
  93.  
  94.     private void writeStream(InputStream s) {
  95.         try {
  96.             BufferedReader reader = new BufferedReader(new InputStreamReader(s));
  97.  
  98.             ArrayList<String> strs = new ArrayList<String>();
  99.  
  100.             while(reader.ready()) strs.add(reader.readLine());
  101.  
  102.             write(strs.toArray(new String[strs.size()]));
  103.  
  104.             s.close();
  105.         }
  106.         catch (Exception e) { e.printStackTrace(); }
  107.     }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment