Add support for ctrl+c/d/z.
This commit is contained in:
@@ -138,8 +138,8 @@ public final class RISCVTestScreen extends Screen {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (TerminalInput.KEYCODE_SEQUENCES.containsKey(keyCode)) {
|
||||
final byte[] sequence = TerminalInput.KEYCODE_SEQUENCES.get(keyCode);
|
||||
final byte[] sequence = TerminalInput.getSequence(modifiers, keyCode);
|
||||
if (sequence != null) {
|
||||
for (int i = 0; i < sequence.length; i++) {
|
||||
terminal.putInput(sequence[i]);
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import li.cil.oc2.api.API;
|
||||
import li.cil.oc2.client.gui.terminal.Terminal;
|
||||
import li.cil.oc2.client.gui.terminal.TerminalInput;
|
||||
import li.cil.oc2.common.network.TerminalBlockInputMessage;
|
||||
import li.cil.oc2.common.network.Network;
|
||||
import li.cil.oc2.common.network.TerminalBlockInputMessage;
|
||||
import li.cil.oc2.common.tile.ComputerTileEntity;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
@@ -98,8 +98,8 @@ public final class TerminalScreen extends Screen {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (TerminalInput.KEYCODE_SEQUENCES.containsKey(keyCode)) {
|
||||
final byte[] sequence = TerminalInput.KEYCODE_SEQUENCES.get(keyCode);
|
||||
final byte[] sequence = TerminalInput.getSequence(modifiers, keyCode);
|
||||
if (sequence != null) {
|
||||
for (int i = 0; i < sequence.length; i++) {
|
||||
terminal.putInput(sequence[i]);
|
||||
}
|
||||
|
||||
@@ -3,8 +3,10 @@ package li.cil.oc2.client.gui.terminal;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public final class TerminalInput {
|
||||
public static final Int2ObjectArrayMap<byte[]> KEYCODE_SEQUENCES = new Int2ObjectArrayMap<>();
|
||||
private static final Int2ObjectArrayMap<Int2ObjectArrayMap<byte[]>> KEYCODE_SEQUENCES = new Int2ObjectArrayMap<>();
|
||||
|
||||
static {
|
||||
addSequence(GLFW.GLFW_KEY_ENTER, '\n');
|
||||
@@ -22,23 +24,50 @@ public final class TerminalInput {
|
||||
addSequence(GLFW.GLFW_KEY_DOWN, "[B");
|
||||
addSequence(GLFW.GLFW_KEY_RIGHT, "[C");
|
||||
addSequence(GLFW.GLFW_KEY_LEFT, "[D");
|
||||
|
||||
addSequence(GLFW.GLFW_MOD_CONTROL, GLFW.GLFW_KEY_C, (char) 3);
|
||||
addSequence(GLFW.GLFW_MOD_CONTROL, GLFW.GLFW_KEY_D, (char) 4);
|
||||
addSequence(GLFW.GLFW_MOD_CONTROL, GLFW.GLFW_KEY_Z, (char) 0x1A);
|
||||
}
|
||||
|
||||
public static byte[] getSequence(final int keyCode) {
|
||||
return getSequence(0, keyCode);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static byte[] getSequence(final int modifiers, final int keyCode) {
|
||||
final Int2ObjectArrayMap<byte[]> map = KEYCODE_SEQUENCES.get(modifiers);
|
||||
if (map == null) {
|
||||
return null;
|
||||
}
|
||||
return map.get(keyCode);
|
||||
}
|
||||
|
||||
private static void addSequence(final int keyCode, final char ch) {
|
||||
addSequence(keyCode, (byte) ch);
|
||||
addSequence(0, keyCode, ch);
|
||||
}
|
||||
|
||||
private static void addSequence(final int modifiers, final int keyCode, final char ch) {
|
||||
addSequence(modifiers, keyCode, (byte) ch);
|
||||
}
|
||||
|
||||
private static void addSequence(final int keyCode, final String sequence) {
|
||||
addSequence(0, keyCode, sequence);
|
||||
}
|
||||
|
||||
private static void addSequence(final int modifiers, final int keyCode, final String sequence) {
|
||||
final byte[] bytes = new byte[1 + sequence.length()];
|
||||
bytes[0] = 27;
|
||||
final char[] chars = sequence.toCharArray();
|
||||
for (int i = 0; i < chars.length; i++) {
|
||||
bytes[i + 1] = (byte) chars[i];
|
||||
}
|
||||
addSequence(keyCode, bytes);
|
||||
addSequence(modifiers, keyCode, bytes);
|
||||
}
|
||||
|
||||
private static void addSequence(final int keyCode, final byte... sequence) {
|
||||
KEYCODE_SEQUENCES.put(keyCode, sequence);
|
||||
private static void addSequence(final int modifiers, final int keyCode, final byte... sequence) {
|
||||
KEYCODE_SEQUENCES
|
||||
.computeIfAbsent(modifiers, i -> new Int2ObjectArrayMap<>())
|
||||
.put(keyCode, sequence);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user