mirror of https://github.com/alibaba/arthas.git
keymap command usage more friendly. close #366
parent
c97730d2ca
commit
e03c3ee2b1
@ -1,40 +1,89 @@
|
|||||||
package com.taobao.arthas.core.command.basic1000;
|
package com.taobao.arthas.core.command.basic1000;
|
||||||
|
|
||||||
|
import com.taobao.arthas.common.IOUtils;
|
||||||
|
import com.taobao.arthas.core.command.Constants;
|
||||||
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
import com.taobao.arthas.core.shell.command.AnnotatedCommand;
|
||||||
import com.taobao.arthas.core.shell.command.CommandProcess;
|
import com.taobao.arthas.core.shell.command.CommandProcess;
|
||||||
import com.taobao.arthas.core.shell.term.impl.Helper;
|
import com.taobao.arthas.core.shell.term.impl.Helper;
|
||||||
|
import com.taobao.arthas.core.util.LogUtil;
|
||||||
|
import com.taobao.middleware.cli.annotations.Description;
|
||||||
import com.taobao.middleware.cli.annotations.Name;
|
import com.taobao.middleware.cli.annotations.Name;
|
||||||
import com.taobao.middleware.cli.annotations.Summary;
|
import com.taobao.middleware.cli.annotations.Summary;
|
||||||
|
import com.taobao.middleware.logger.Logger;
|
||||||
|
import com.taobao.text.Decoration;
|
||||||
|
import com.taobao.text.ui.TableElement;
|
||||||
|
import com.taobao.text.util.RenderUtil;
|
||||||
|
|
||||||
|
import static com.taobao.text.ui.Element.label;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A command to display all the keymap for the specified connection.
|
* A command to display all the keymap for the specified connection.
|
||||||
|
*
|
||||||
* @author ralf0131 2016-12-15 17:27.
|
* @author ralf0131 2016-12-15 17:27.
|
||||||
|
* @author hengyunabc 2019-01-18
|
||||||
*/
|
*/
|
||||||
@Name("keymap")
|
@Name("keymap")
|
||||||
@Summary("Display all the available keymap for the specified connection.")
|
@Summary("Display all the available keymap for the specified connection.")
|
||||||
|
@Description(Constants.WIKI + Constants.WIKI_HOME + "keymap")
|
||||||
public class KeymapCommand extends AnnotatedCommand {
|
public class KeymapCommand extends AnnotatedCommand {
|
||||||
|
private static final Logger logger = LogUtil.getArthasLogger();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(CommandProcess process) {
|
public void process(CommandProcess process) {
|
||||||
InputStream inputrc = Helper.loadInputRcFile();
|
InputStream inputrc = Helper.loadInputRcFile();
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(inputrc));
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
try {
|
try {
|
||||||
|
TableElement table = new TableElement(1, 1, 2).leftCellPadding(1).rightCellPadding(1);
|
||||||
|
table.row(true, label("Shortcut").style(Decoration.bold.bold()),
|
||||||
|
label("Description").style(Decoration.bold.bold()),
|
||||||
|
label("Name").style(Decoration.bold.bold()));
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(inputrc));
|
||||||
|
String line;
|
||||||
while ((line = br.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
if (line.startsWith("#") || "".equals(line.trim())) {
|
line = line.trim();
|
||||||
|
if (line.startsWith("#") || "".equals(line)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sb.append(line + "\n");
|
String[] strings = line.split(":");
|
||||||
|
if (strings != null && strings.length == 2) {
|
||||||
|
table.row(strings[0], translate(strings[0]), strings[1]);
|
||||||
|
} else {
|
||||||
|
table.row(line);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
process.write(RenderUtil.render(table, process.width()));
|
||||||
sb.append(e.getMessage());
|
} catch (IOException e) {
|
||||||
|
logger.error("keymap", "read inputrc file error.", e);
|
||||||
|
} finally {
|
||||||
|
IOUtils.close(inputrc);
|
||||||
|
process.end();
|
||||||
}
|
}
|
||||||
process.write(sb.toString());
|
}
|
||||||
process.end();
|
|
||||||
|
private String translate(String key) {
|
||||||
|
if (key.length() == 6 && key.startsWith("\"\\C-") && key.endsWith("\"")) {
|
||||||
|
char ch = key.charAt(4);
|
||||||
|
if ((ch >= 'a' && ch <= 'z') || ch == '?') {
|
||||||
|
return "Ctrl + " + ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.equals("\"\\e[D\"")) {
|
||||||
|
return "Left arrow";
|
||||||
|
} else if (key.equals("\"\\e[C\"")) {
|
||||||
|
return "Right arrow";
|
||||||
|
} else if (key.equals("\"\\e[B\"")) {
|
||||||
|
return "Down arrow";
|
||||||
|
} else if (key.equals("\"\\e[A\"")) {
|
||||||
|
return "Up arrow";
|
||||||
|
}
|
||||||
|
|
||||||
|
return key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue