⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mindterm.java

📁 一个非常好的ssh客户端实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	termProps.put(name, value);    }    param = getParameter("appletbg");    if(param != null) {	Color c;	try {	    c = TerminalWin.getTermColor(param);	} catch (IllegalArgumentException e) {	    try {		c = TerminalWin.getTermRGBColor(param);	    } catch (Throwable t) {		c = null;		// !!!	    }	}	if(c != null)	    this.setBackground(c);    }  }    public AppletContext getAppletContext() {	AppletContext ctx = null;	if(weAreAnApplet) {	    ctx = super.getAppletContext();	}	return ctx;    }  public void getApplicationParams() throws Exception {    String    name;    String    value;    int       numOfOpts;    int       i;    // First we check the MindTerm options (i.e. not the ssh/terminal-properties)    //    try {      for(i = 0; i < cmdLineArgs.length; i++) {	String arg = cmdLineArgs[i];	if(!arg.startsWith("--"))	  break;	switch(arg.charAt(2)) {	case 'h':	  sshHomeDir = cmdLineArgs[++i];	  break;	case 'f':	  propsFile = cmdLineArgs[++i];	  break;	case 'd':	  haveGUI = false;	  break;	case 'e':	  exitOnLogout = true;	  break;	case 'm': {	  String typ = cmdLineArgs[++i];	  if(typ.equals("no"))	    haveMenus = false;	  else if(typ.startsWith("pop")) {	    getPopupButtonNumber(typ);	    usePopMenu = true;	  } else	    throw new Exception("value of '--m' must be 'no', 'pop1', 'pop2', or 'pop3'");	  break;	}	case 'p': {	  String typ = cmdLineArgs[++i];	  if(typ.equals("save")) {	    autoSaveProps = true;	  } else if(typ.equals("load")) {	    autoLoadProps = true;	  } else if(typ.equals("both")) {	    autoSaveProps = true;	    autoLoadProps = true;	  } else if(typ.equals("none")) {	    autoSaveProps = false;	    autoLoadProps = false;	  } else	    throw new Exception("value of '--p' must be 'save', 'load', 'both', or 'none'");	  break;	}	case 'q':	    String val = cmdLineArgs[++i];	    if(val.equalsIgnoreCase("true") || val.equalsIgnoreCase("false")) {		quiet = Boolean.valueOf(val).booleanValue();	    } else {		throw new Exception("value of '--q' must be 'true' or 'false'");	    }	    break;	case 'r':	  recursiveSCP = true;	  break;	case 's':	  haveGUI = false;	  doSCP   = true;	  String direction = cmdLineArgs[++i];	  if(direction.equalsIgnoreCase("toremote")) {	      toRemote = true;	  } else if(direction.equalsIgnoreCase("tolocal")) {	      toRemote = false;	  } else {	      throw new Exception("value of '--s' must be 'toremote' or 'tolocal'");	  }	  break;	case 'v':	  System.out.println("verbose mode selected...");	  SSH.DEBUG = true;	  break;	case 'x':	  savePasswords = true;	  break;	case 'V':	  System.out.println(SSH.VER_MINDTERM);	  System.out.println("SSH protocol version " + SSH.SSH_VER_MAJOR + "." + SSH.SSH_VER_MINOR);	  System.exit(0);	  break;	case 'D':	  SSH.DEBUG     = true;	  SSH.DEBUGMORE = true;	  break;	case '?':	  printHelp();	  System.exit(0);	default:	  throw new Exception("unknown parameter '" + arg + "'");	}      }    } catch (Exception e) {      printHelp();      throw e;    }    getDefaultParams();    numOfOpts = i;    for(i = numOfOpts; i < cmdLineArgs.length; i += 2) {      name = cmdLineArgs[i];      if((name.charAt(0) != '-') || ((i + 1) == cmdLineArgs.length))	break;      name  = name.substring(1);      value = cmdLineArgs[i + 1];      if(SSHPropertyHandler.isProperty(name)) {	paramSSHProps.put(name, value);      } else if(TerminalDefProps.isProperty(name))	paramTermProps.put(name, value);      else	System.out.println("Unknown property '" + name + "'");    }    if(i < cmdLineArgs.length) {      firstArg = i;      commandLine = "";      for(; i < cmdLineArgs.length; i++) {	commandLine += cmdLineArgs[i] + " ";      }      commandLine = commandLine.trim();    }  }  void printHelp() {    System.out.println("usage: MindTerm [options] [properties] [commandline]");    System.out.println("Options:");    System.out.println("  --d            No terminal-window, only dumb command-line and port-forwarding.");    System.out.println("  --e            Exit MindTerm after logout (i.e. single session).");    System.out.println("  --f <file>     Use settings from the given file as default.");    System.out.println("  --h dir        Name of the MindTerm home-dir (default: ~/mindterm/).");    System.out.println("  --m <no | pop | popN>");    System.out.println("                 Use no menus or popup (on mouse-button N) menu.");    System.out.println("  --p <save | load | both | none>");    System.out.println("                 Sets automatic save/load flags for property-files.");    System.out.println("  --q <true | false>");    System.out.println("                 Quiet; don't query for server/username if given.");    System.out.println("  --v            Verbose; display verbose messages.");    System.out.println("  --x            Save passwords in encrypted property-files.");    System.out.println("  --D            Debug; display extra debug info.");    System.out.println("  --V            Version; display version number only.");    System.out.println("  --?            Help; display this help.");  }  void getPopupButtonNumber(String param) {    if(param.length() == 4) {      try {	popButtonNum = Integer.valueOf(param.substring(3)).intValue();	if(popButtonNum < 1 || popButtonNum > 3)	  popButtonNum = 3;      } catch (NumberFormatException e) {	// !!!      }    }  }  void getDefaultParams() {    try {      if(sshHomeDir == null) {	String hDir = System.getProperty("user.home");	if(hDir == null)	  hDir = System.getProperty("user.dir");	if(hDir == null)	  hDir = System.getProperty("java.home");	sshHomeDir = (hDir + File.separator + "mindterm" + File.separator);      }    } catch (Throwable t) {      // !!!    }    try {      javaVersion = System.getProperty("java.version");      javaVendor  = System.getProperty("java.vendor");      osName      = System.getProperty("os.name");      osArch      = System.getProperty("os.arch");      osVersion   = System.getProperty("os.version");    } catch (Throwable t) {      // !!!    }  }  public void initGUI() {    Container container;    MenuBar   menubar = null;    if(separateFrame) {      frame = new Frame();      frame.addWindowListener(this);      container = frame;      if(haveMenus && !usePopMenu) {	menubar = new MenuBar();	frame.setMenuBar(menubar);	frame.addNotify();	frame.validate();      }    } else {      Component comp = this;      do {	comp = comp.getParent();      } while(!(comp instanceof Frame));      frame = (Frame)comp;      container = this;    }    String fontName  = termProps.getProperty("font-name");    String fontSzStr = termProps.getProperty("font-size");    int    fontSize  = 12;    if(fontSzStr != null) {	fontSize = Integer.parseInt(fontSzStr);    }    if(fontName == null) {	fontName = TerminalDefProps.defaultFont();    }    container.setFont(new Font(fontName, Font.PLAIN, fontSize));    term = new TerminalWin(frame, new TerminalXTerm(), termProps,			   (sshClone == null));    if(mergedTermProps)      term.setPropsChanged(true);    if(haveMenus) {      SSHMenuHandler      menus;      TerminalMenuHandler tmenus;      try {	  Class c;	  c = Class.forName("com.mindbright.ssh.SSHMenuHandlerFull");	  menus = (SSHMenuHandler)c.newInstance();	  menus.init(this, client, frame, term);	  c = Class.forName("com.mindbright.terminal.TerminalMenuHandlerFull");	  tmenus = (TerminalMenuHandler)c.newInstance();	  tmenus.setTerminalWin(term);	  term.setMenus(tmenus);	  client.setMenus(menus);	  if(menubar == null) {	      PopupMenu popupmenu = term.getPopupMenu("MindTerm Menu");	      menus.preparePopupMenu(popupmenu);	      menus.setPopupButton(popButtonNum);	  } else {	      menus.prepareMenuBar(menubar);	  }	  tmenus.setTerminalMenuListener(menus);	  term.setClipboard(GlobalClipboard.getClipboardHandler(tmenus));      } catch (Throwable t) {	  t.printStackTrace();	  System.out.println("Full menus can't be enabled since classes are missing");	  term.setMenus(null);	  client.setMenus(null);	  term.setClipboard(GlobalClipboard.getClipboardHandler());      }    } else {	term.setClipboard(GlobalClipboard.getClipboardHandler());    }    SSH.randomSeed().addEntropyGenerator(term);    container.setLayout(new BorderLayout());    container.add(term.getPanelWithScrollbar(), BorderLayout.CENTER);    frame.pack();    frame.show();    term.requestFocus();  }  public void doExit() {      System.out.println("Thank you for using MindTerm...");      if(!separateFrame && term != null) {	  term.clearScreen();	  term.setAttribute(TerminalWin.ATTR_BOLD, true);	  term.write("Thank you for using MindTerm...");      }      if(!weAreAnApplet) {	System.exit(0);      }  }  boolean confirmedClose = false;  public boolean confirmClose() {    if(client != null && !confirmedClose) {      try {	client.getPropertyHandler().checkSave();      } catch(IOException ee) {	client.alert("Error saving settings: " + ee.getMessage());      }      if(client.isOpened() &&	 !client.askConfirmation("Do you really want to disconnect from " +				 client.getPropertyHandler().getProperty("server") + "?", false))	confirmedClose = false;      else	confirmedClose = true;    }    return confirmedClose;  }  void initParams(MindTerm mindterm) {    this.sshHomeDir     = mindterm.sshHomeDir;    this.propsFile      = mindterm.propsFile;    this.usePopMenu     = mindterm.usePopMenu;    this.haveMenus      = mindterm.haveMenus;    this.haveGUI        = mindterm.haveGUI;    this.exitOnLogout   = mindterm.exitOnLogout;    this.quiet          = mindterm.quiet;    this.separateFrame  = true;    this.weAreAnApplet  = mindterm.weAreAnApplet;    this.autoLoadProps  = mindterm.autoLoadProps;    this.popButtonNum   = mindterm.popButtonNum;  }  public void cloneWindow() {    MindTerm mindterm = new MindTerm(this.sshProps, this.termProps);    mindterm.initParams(this);    mindterm.sshClone = this.client;    (new Thread(mindterm, "MindTerm.clone")).start();  }  public void newWindow() {    MindTerm mindterm = new MindTerm(paramSSHProps, paramTermProps);    mindterm.initParams(this);    (new Thread(mindterm, "MindTerm.window")).start();  }  public void close() {    if(!confirmClose())      return;    if(client.isSSH2) {	client.transport.normalDisconnect("User closed connection");    }    if(clientThread != null)	clientThread.stop();  }  public void exit() {    if(!confirmClose())      return;    Enumeration enum = terminals.elements();    while(enum.hasMoreElements()) {      MindTerm mt = (MindTerm)enum.nextElement();      if(mt.client != null && mt.client.isSSH2) {	  mt.client.transport.normalDisconnect("User exited");      }      if(mt.clientThread != null) {	  mt.clientThread.stop();      }    }  }    public void windowOpened(WindowEvent e) {    }    public synchronized void windowClosing(WindowEvent e) {	if(isClosing)	    return;	isClosing = true;	if(!confirmClose()) {	    isClosing = false;	    return;	}	if(separateFrame && haveGUI && frame != null) {	    frame.dispose();	}	if(clientThread != null && clientThread.isAlive())	    clientThread.stop();	removeTerminal(this);    }    public void windowClosed(WindowEvent e) {    }    public void windowIconified(WindowEvent e) {    }    public void windowDeiconified(WindowEvent e) {	term.requestFocus();    }    public void windowActivated(WindowEvent e) {    }    public void windowDeactivated(WindowEvent e) {    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -