Changeset 10082


Ignore:
Timestamp:
10/06/05 12:29:06 (16 years ago)
Author:
piso
Message:

describe()

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

Legend:

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

    r9558 r10082  
    33 *
    44 * Copyright (C) 2002-2005 Peter Graves
    5  * $Id: LispShell.java,v 1.85 2005-06-30 16:07:23 piso Exp $
     5 * $Id: LispShell.java,v 1.86 2005-10-06 12:29:06 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    356356            send(resetCommand);
    357357        }
     358    }
     359
     360    public void describe(String s)
     361    {
     362        if (s.equals("*"))
     363            ;
     364        else if (s.startsWith("(") || s.startsWith("#p"))
     365            ;
     366        else
     367            s = "'" + s;
     368        String command = "(cl:describe " + s + ")\n";
     369        Position pos = getEnd();
     370        insertString(pos, command);
     371        if (needsRenumbering())
     372            renumber();
     373        enforceOutputLimit(Property.SHELL_OUTPUT_LIMIT);
     374        posEndOfInput = pos.copy();
     375        send(command);
    358376    }
    359377
  • trunk/j/src/org/armedbear/j/LispShellMode.java

    r8068 r10082  
    22 * LispShellMode.java
    33 *
    4  * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: LispShellMode.java,v 1.16 2004-10-25 01:44:19 piso Exp $
     4 * Copyright (C) 2002-2005 Peter Graves
     5 * $Id: LispShellMode.java,v 1.17 2005-10-06 12:28:37 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    6767        km.mapKey(KeyEvent.VK_M, CTRL_MASK, "lispFindMatchingChar");
    6868        km.mapKey(KeyEvent.VK_M, CTRL_MASK | SHIFT_MASK, "lispSelectSyntax");
     69        km.mapKey(KeyEvent.VK_D, CTRL_MASK | ALT_MASK, "describe");
    6970    }
    7071
     
    137138        if (buffer instanceof LispShell)
    138139            ((LispShell)buffer).resetLisp();
    139         else if (buffer instanceof JLisp)
    140             ;
    141140        else
    142141            Debug.bug();
    143142    }
     143
     144    public static void describe()
     145    {
     146        describe(null);
     147    }
     148
     149    public static void describe(String s)
     150    {
     151        final Editor editor = Editor.currentEditor();
     152
     153        final Buffer buffer = editor.getBuffer();
     154        if (buffer.getMode() != mode) {
     155            Debug.bug();
     156            return;
     157        }
     158        if (!(buffer instanceof LispShell)) {
     159            Debug.bug();
     160            return;
     161        }
     162        if (s == null) {
     163            if (editor.getDot() == null)
     164                return;
     165            s = editor.getSelectionOnCurrentLine();
     166            if (s == null) {
     167                s = getArgumentForDescribe(editor.getDot());
     168                if (s == null) {
     169                    if (editor.getDot().equals(buffer.getEnd()))
     170                        s = "*";
     171                }
     172            }
     173        }
     174        if (s == null || s.length() == 0)
     175            return;
     176        ((LispShell)buffer).describe(s);
     177    }
     178
     179    public static String getArgumentForDescribe(Position pos)
     180    {
     181        final Line line = pos.getLine();
     182        int offset = pos.getOffset();
     183        final int limit = line.length();
     184        if (limit == 0)
     185            return null;
     186        if (offset == limit)
     187            --offset;
     188        while (line.charAt(offset) == ' ') {
     189            if (offset > 0)
     190                --offset;
     191            else
     192                break;
     193        }
     194        char c = line.charAt(offset);
     195        if (c == '(' || c == ')')
     196            return null;
     197        if (c != ' ') {
     198            // Backtrack to find start of token.
     199            while (offset > 0) {
     200                --offset;
     201                c = line.charAt(offset);
     202                if (c == '(' || c == ')')
     203                    return null;
     204                if (c == ' ') {
     205                    ++offset;
     206                    break;
     207                }
     208            }
     209        }
     210        // Now we're looking at the first character of the token, if there
     211        // is one.
     212        c = line.charAt(offset);
     213        if (c == ' ')
     214            return null;
     215        FastStringBuffer sb = new FastStringBuffer(c);
     216        while (++offset < limit) {
     217            c = line.charAt(offset);
     218            if (c == '(' || c == ')')
     219                return null;
     220            if (c != ' ')
     221                sb.append(c);
     222            else
     223                break;
     224        }
     225        return sb.toString();
     226    }
    144227}
Note: See TracChangeset for help on using the changeset viewer.