/**
* Copyright (c) 2009, 2010 Mark Feber, MulgaSoft
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package com.mulgasoft.emacsplus.commands;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.swt.SWT;
import org.eclipse.ui.texteditor.ITextEditor;
import com.mulgasoft.emacsplus.EmacsPlusActivator;
import com.mulgasoft.emacsplus.execute.EmacsPlusConsole;
import com.mulgasoft.emacsplus.execute.CommandHelp;
import com.mulgasoft.emacsplus.execute.ICommandResult;
import com.mulgasoft.emacsplus.minibuffer.MetaXMinibuffer;
/**
* Implements: where-is-command
*
* Reads a command name from the minibuffer and displays just key-binding information about it
*
* @author Mark Feber - initial API and implementation
*/
public class CommandWhereIsHandler extends MinibufferExecHandler implements INonEditingCommand {
private static String WI_PREFIX = EmacsPlusActivator.getResourceString("Cmd_WI_Prefix"); //$NON-NLS-1$
/**
* @see com.mulgasoft.emacsplus.minibuffer.IMinibufferExecutable#getMinibufferPrefix()
*/
public String getMinibufferPrefix() {
return WI_PREFIX;
}
/**
* @see com.mulgasoft.emacsplus.commands.AbstractCmdHandler#transform(org.eclipse.ui.texteditor.ITextEditor, org.eclipse.jface.text.IDocument, org.eclipse.jface.text.ITextSelection, org.eclipse.core.commands.ExecutionEvent)
*/
protected int transform(ITextEditor editor, IDocument document, ITextSelection currentSelection,
final ExecutionEvent event) throws BadLocationException {
return bufferTransform(new MetaXMinibuffer(this), editor, event);
}
/**
* @see com.mulgasoft.emacsplus.minibuffer.IMinibufferExecutable#executeResult(org.eclipse.ui.texteditor.ITextEditor, java.lang.Object)
*/
public boolean doExecuteResult(ITextEditor editor, Object minibufferResult) {
if (minibufferResult != null) {
EmacsPlusConsole console = EmacsPlusConsole.getInstance();
console.clear();
console.activate();
ICommandResult commandR = (ICommandResult) minibufferResult;
String name = commandR.getName();
String[] bindings = CommandHelp.getKeyBindingStrings(commandR.getCommand(), true);
if (bindings.length == 0) {
console.print(String.format(CMD_NO_RESULT,name));
console.printBinding(CMD_NO_BINDING);
} else {
console.print(String.format(CMD_RESULT,name) + CR);
for (int i = 0; i < bindings.length; i+=2) {
console.printBinding(SWT.TAB + bindings[i]);
console.printContext(A_MSG + bindings[i+1] + Z_MSG + CR);
}
}
}
return true;
}
}