Changeset 10155


Ignore:
Timestamp:
10/18/05 00:12:59 (16 years ago)
Author:
piso
Message:

Work in progress (Windows).

Location:
trunk/j/src/org/armedbear/j
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/j/CommandInterpreter.java

    r7989 r10155  
    22 * CommmandInterpreter.java
    33 *
    4  * Copyright (C) 1998-2004 Peter Graves
    5  * $Id: CommandInterpreter.java,v 1.27 2004-10-17 13:33:23 piso Exp $
     4 * Copyright (C) 1998-2005 Peter Graves
     5 * $Id: CommandInterpreter.java,v 1.28 2005-10-18 00:09:56 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    189189            editor.eob();
    190190            dotLine = editor.getDotLine();
    191 
    192191            // Keep the prompt, but throw away anything after it.
    193192            final REMatch match = promptRE.getMatch(dotLine.getText());
    194193            if (match != null)
    195194                dotLine.setText(dotLine.substring(0, match.getEndIndex()));
    196 
    197195            // Append s.
    198196            dotLine.setText(dotLine.getText() + s);
    199197        }
    200         int flags = dotLine.flags();
    201         if (flags == 0)
     198        if (dotLine.flags() == 0)
    202199            dotLine.setFlags(STATE_INPUT);
    203200        editor.eol();
     
    437434    protected String stdOutFilter(String s)
    438435    {
    439         return removeEcho(s);
     436        return s;
    440437    }
    441438
     
    455452    protected String stdErrFilter(String s)
    456453    {
    457         return removeEcho(s);
     454        return s;
    458455    }
    459456
     
    499496        public void update(String s)
    500497        {
    501             stdOutUpdate(s);
     498            if (s != null && s.length() > 0)
     499                stdOutUpdate(s);
    502500        }
    503501    }
     
    517515        public void update(String s)
    518516        {
    519             stdErrUpdate(s);
     517            if (s != null && s.length() > 0)
     518                stdErrUpdate(s);
    520519        }
    521520    }
  • trunk/j/src/org/armedbear/j/Shell.java

    r7739 r10155  
    22 * Shell.java
    33 *
    4  * Copyright (C) 1998-2004 Peter Graves
    5  * $Id: Shell.java,v 1.33 2004-09-19 14:13:59 piso Exp $
     4 * Copyright (C) 1998-2005 Peter Graves
     5 * $Id: Shell.java,v 1.34 2005-10-18 00:12:20 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    5555        this();
    5656        this.shellCommand = shellCommand;
    57         if (shellCommand != null && shellCommand.indexOf("tcsh") >= 0)
    58             promptIsStderr = false;
     57        if (shellCommand != null) {
     58            if (shellCommand.indexOf("tcsh") >= 0)
     59                promptIsStderr = false;
     60            else if (shellCommand.indexOf("cmd.exe") >= 0)
     61                promptIsStderr = false;
     62        }
    5963    }
    6064
     
    8488        if (s != null && s.length() > 0)
    8589            return s;
    86         return Platform.isPlatformWindows() ? "cmd.exe" : "bash -i";
     90        return Platform.isPlatformWindows() ? "cmd.exe /q" : "bash -i";
    8791    }
    8892
     
    162166        if (getProcess() == null)
    163167            return; // Process exited.
    164         setPromptRE(Editor.preferences().getStringProperty(
    165             Property.SHELL_PROMPT_PATTERN));
     168        if (Platform.isPlatformWindows() &&
     169            shellCommand.toLowerCase().indexOf("cmd.exe") >= 0)
     170            setPromptRE(DEFAULT_CMD_EXE_PROMPT_PATTERN);
     171        else
     172            setPromptRE(Editor.preferences().getStringProperty(Property.SHELL_PROMPT_PATTERN));
    166173        try {
    167174            stdin  = new OutputStreamWriter(p.getOutputStream());
    168175            stdoutThread = new StdoutThread(p.getInputStream());
    169176            stderrThread = new StderrThread(p.getErrorStream());
     177            stdoutThread.setTimeOut(0);
     178            stderrThread.setTimeOut(0);
    170179            stdoutThread.start();
    171180            stderrThread.start();
     
    225234            }
    226235            if (command.equals("cd")) {
    227                 if (arg == null)
    228                     changeDirectory(Utilities.getUserHome());
    229                 else if (arg.equals("-")) {
     236                if (arg == null) {
     237                    // for cmd.exe, "cd" == "pwd"
     238                    if (shellCommand.indexOf("cmd.exe") < 0)
     239                        changeDirectory(Utilities.getUserHome());
     240                } else if (arg.equals("-")) {
    230241                    if (oldDir != null)
    231242                        changeDirectory(oldDir.canonicalPath());
     
    385396                        s = s.substring(0, length-1);
    386397                }
    387             } else
    388                 s = Utilities.getUserHome();
     398            } else {
     399                // s.length() == 0
     400                if (shellCommand.indexOf("cmd.exe") < 0)
     401                    s = Utilities.getUserHome();
     402            }
    389403            if (cygnify) {
    390404                if (!s.startsWith(".."))
    391405                    s = Utilities.uncygnify(s);
    392406            }
    393             File dir = File.getInstance(currentDir, s);
    394             if (dir != null && dir.isDirectory()) {
    395                 oldDir = currentDir;
    396                 currentDir = dir;
    397                 for (EditorIterator it = new EditorIterator(); it.hasNext();) {
    398                     Editor ed = it.nextEditor();
    399                     if (ed.getBuffer() == this)
    400                         ed.updateLocation();
     407            if (s.length() > 0) {
     408                File dir = File.getInstance(currentDir, s);
     409                if (dir != null && dir.isDirectory()) {
     410                    if (shellCommand.indexOf("cmd.exe") < 0)
     411                        oldDir = currentDir;
     412                    currentDir = dir;
     413                    for (EditorIterator it = new EditorIterator(); it.hasNext();) {
     414                        Editor ed = it.nextEditor();
     415                        if (ed.getBuffer() == this)
     416                            ed.updateLocation();
     417                    }
    401418                }
    402419            }
     
    528545            return;
    529546        }
    530         if (last.flags() != STATE_INPUT)
     547        final int lastFlags = last.flags();
     548        if (lastFlags != STATE_INPUT && lastFlags != STATE_PROMPT)
    531549            last.setFlags(0);
    532550        // Look at the next-to-last line.
  • trunk/j/src/org/armedbear/j/ShellFormatter.java

    r4966 r10155  
    22 * ShellFormatter.java
    33 *
    4  * Copyright (C) 1998-2002 Peter Graves
    5  * $Id: ShellFormatter.java,v 1.5 2003-12-04 15:17:06 piso Exp $
     4 * Copyright (C) 1998-2005 Peter Graves
     5 * $Id: ShellFormatter.java,v 1.6 2005-10-18 00:12:59 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    3232    private static final byte SHELL_FORMAT_INPUT  = 2;
    3333
    34     private final RE promptRE;
    35 
    3634    public ShellFormatter(Buffer buffer)
    3735    {
    3836        this.buffer = buffer;
    39         promptRE = ((Shell)buffer).getPromptRE();
    4037    }
    4138
    42     public LineSegmentList formatLine(Line line)
     39    public LineSegmentList formatLine(final Line line)
    4340    {
    4441        clearSegmentList();
     
    4744            return segmentList;
    4845        }
     46        final RE promptRE = ((Shell)buffer).getPromptRE();
    4947        final String text = getDetabbedText(line);
    50         if (line.flags() == STATE_PROMPT) {
     48        final int flags = line.flags();
     49        if (flags == STATE_PROMPT) {
    5150            REMatch match = promptRE.getMatch(text);
    5251            if (match != null) {
     
    5857            return segmentList;
    5958        }
    60         if (line.flags() == STATE_PASSWORD_PROMPT) {
     59        if (flags == STATE_PASSWORD_PROMPT) {
    6160            addSegment(text, SHELL_FORMAT_TEXT);
    6261            return segmentList;
    6362        }
    64         if (line.flags() == STATE_OUTPUT) {
     63        if (flags == STATE_OUTPUT) {
    6564            addSegment(text, SHELL_FORMAT_TEXT);
    6665            return segmentList;
    6766        }
    6867        if (promptRE != null) {
    69             if (line.flags() == STATE_INPUT) {
     68            if (flags == STATE_INPUT) {
    7069                REMatch match = promptRE.getMatch(text);
    7170                if (match != null) {
Note: See TracChangeset for help on using the changeset viewer.