EntryCommand.java
/*
* Copyright 2024 Terminal Utils Authors
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package net.morimekta.terminal.selection;
import net.morimekta.strings.chr.Char;
import net.morimekta.strings.chr.Unicode;
import static java.util.Objects.requireNonNull;
/**
* Command. The command works on an entry.
*
* @param <E> Value type.
*/
public class EntryCommand<E> {
/**
* Make an entry command.
*
* @param key The key to make the action on.
* @param name Name of action.
* @param action Action to make.
*/
public EntryCommand(char key, String name, EntryAction<E> action) {
this(new Unicode(key), name, action, false);
}
/**
* Make a hidden entry command.
*
* @param key The key to make the action on.
* @param action Action to make.
*/
public EntryCommand(char key, EntryAction<E> action) {
this(new Unicode(key), "", action, true);
}
/**
* Make an entry command.
*
* @param key The key to make the action on.
* @param name Name of action.
* @param action Action to make.
*/
public EntryCommand(Char key, String name, EntryAction<E> action) {
this(key, name, action, false);
}
/**
* Make a hidden entry command.
*
* @param key The key to make the action on.
* @param action Action to make.
*/
public EntryCommand(Char key, EntryAction<E> action) {
this(key, "", action, true);
}
private EntryCommand(Char key, String name, EntryAction<E> action, boolean hidden) {
// Since '\r' and 'n' are basically interchangeable.
this.key = key.codepoint() == '\r' ? new Unicode('\n') : key;
this.name = name;
this.action = requireNonNull(action, "action == null");
this.hidden = hidden;
}
/**
* Key to react to.
*/
public final Char key;
/**
* Name of action or empty string.
*/
public final String name;
/**
* Action callback.
*/
public final EntryAction<E> action;
/**
* If the entry action is hidden.
*/
public final boolean hidden;
}