nrubin29

Terminal

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