Mudlet: Hacer que commandSeparator se pueda configurar con una función

Creado en 25 abr. 2020  ·  26Comentarios  ·  Fuente: Mudlet/Mudlet

Ya tenemos la función getCommandSeparator(), necesitamos una forma de configurar el separador de comandos sin tener que saltar a las preferencias. Sugiero agregar una función setCommandSeparator().

Razones para agregar una función:

  1. Mudlet ha estado ganando terreno en mi MUD y los jugadores prefieren usar un solo separador de comando de punto y coma, pero, por supuesto, el problema con eso es que no puedes guiñar una cara sonriente y no puedes crear alias de barro del lado del servidor, que también usan un punto y coma para separar comandos.
  2. Con setCommandSeparator() los jugadores no tendrían que hacer ningún molesto menú saltando cuando quieren establecer un alias de barro del lado del servidor.
  3. setCommandSeparator() podría usarse junto con getCommandSeparator() para compartir scripts más fácilmente haciendo algo como:
local x = getCommandSeparator()
if x ~= ";" then setCommandSeparator(";")
send("com1;com2;com3;com4")
setCommandSeparator(x)
else
send("com1;com2;com3;com4")
end

Esto ( creo ) recuperará el separador de comando, verificará si no es un punto y coma, y ​​si no es un punto y coma, cámbielo a un punto y coma, luego ejecute el código y luego vuelva a cambiarlo a lo que sea. fue antes.

Comentario más útil

¿Tal vez una mejor función sería una nueva que ignore el análisis del separador de comandos por completo y envíe directamente lo que se ingresa en el código?

Me gusta esa idea. ¿Te lo solucionaría?

¿Qué piensan los demás en @Mudlet/lua-interface?

Todos 26 comentarios

o puede usar la forma adecuada, que es sendAll("com1", "com2", "com3", "com4")
o puede usar getCommandSeparator y luego usar la salida de eso para formar su cadena, IE

local cs = getCommandSeparator
local commands = {
  "com1",
  "com2",
  "com3",
  "com4",
}
send(table.concat(commands, cs))

No estoy seguro de que queramos animar a los autores de guiones a configurar o restablecer el separador de comandos en sus guiones. Terminaré con toneladas de personas preguntando por qué no pueden usar un punto y coma nuevamente, o por qué los dos puntos de repente dividen las cosas en dos comandos y todo lo que se necesita es que su función falle una vez antes de reiniciarla. Especialmente porque no haces nada con él si es ; y ahora el jugador se queda con una configuración inesperadamente rota.

Dicho esto, podría ser bueno tener setCommandSeparator solo para tener el conjunto completo de captadores/establecedores de preferencias, pero esto es exactamente para lo que no debería usarse.

Lo suficientemente justo. Dejando a un lado los posibles problemas, poder lua setCommandSeparator("somethingElseTemporarily") desde la consola principal sería un paso hacia la solución de problemas para los jugadores acostumbrados a ';' como separador de comandos. Si se implementara, podría necesitar un >>> Tenga cuidado ya que con el mal uso, sus scripts podrían romperse. <<< en el manual.

Estoy confundido por qué está ocurriendo todo este cambio temporal del separador de comandos. Si están acostumbrados a ; ¿por qué no lo cambiarían a ; como están acostumbrados? Eso es mucho para escribir dos veces para cambiarlo de un lado a otro cuando solo pueden ingresar a la configuración y cambiarlo una vez a lo que realmente quieren que sea.

Parece que quieres un alias que se incluya en sendAll siguiendo las líneas del primer comentario de Demonnic.

¿Qué es exactamente lo que la gente escribe entonces en sus otros clientes para enviar múltiples comandos, pero no interferir con los emoticonos parpadeantes y las travesuras del lado del servidor?

También pensé que la omisión de una función para configurar el separador de comandos fue una decisión consciente y deliberada a nivel ejecutivo :grin: para evitar la ruptura que podría surgir de un script/paquete cambiándolo mientras otro (posiblemente uno asincrónico se ejecuta desde un temporizador!) estaba activo.

Por lo que puedo decir, la discusión principal sobre esto fue en #1866.

Eso suena como algo que podríamos haber hecho, pero creo que la accesibilidad puede terminar requiriendo que creemos alguna forma de configurarlo desde la línea de comando al menos, incluso si es independiente de la propia API lua.

Estoy confundido por qué está ocurriendo todo este cambio temporal del separador de comandos. Si están acostumbrados a ; ¿por qué no lo cambiarían a ; como están acostumbrados? Eso es mucho para escribir dos veces para cambiarlo de un lado a otro cuando solo pueden ingresar a la configuración y cambiarlo una vez a lo que realmente quieren que sea.

El problema radica en los casos en que la MUD acepta ';' como entrada y no hay forma de ingresar un ';' sin saltos de menú si ';' es su separador de comandos. Ser capaz de hacer caras sonrientes es una cosa (uno podría crear un alias de mudlet que cambia el separador de comandos temporalmente a algo inocuo cuando se usa un canal de chat para evitar eso). Otra es que el MUD puede almacenar alias del lado del servidor, que generalmente serán más rápidos de procesar y más rápidos/más fáciles de crear que los alias del lado del cliente, pero estos usan ';' para separar el comando también.

todo esto me suena a razones para no usar ; como separador de comandos.

Desafortunadamente, no es una opción cuando ya tenemos cientos de disparadores y alias del lado del cliente que usan send("tens of commands separated by ;") que se rompen al cambiar el separador de comando. Creo que el hábito proviene de ZMud, que usa ; para separar los comandos, aunque el analizador de ZMud envía ; si está rodeado de espacios. ¿Qué tal si duplicar el separador de comando lo enviaría al Mud en su lugar? Por ejemplo, si su separador de comando, como en mi caso, fuera ; , enviar ;; enviaría un ; al lodo, por lo que, por ejemplo, escribir say hello everyone;;) enviaría say hello everyone;) . Si usó ;; como separador de comandos, entonces haría ;;;; para escapar del separador de comandos y enviar ;; . Podría tener una casilla de verificación en las preferencias que habilitaría / deshabilitaría esa opción, deshabilitada de manera predeterminada, también para evitar romper la funcionalidad de cualquier cosa que podría romperse duplicando el separador de comando, aunque no puedo pensar cuál sería el daño allí.

Si usaste ;; como separador de comandos, entonces harías ;;;; para escapar del separador de comandos

¿Crees que a la gente le hará bien escribir el punto y coma cuatro veces? :pensando: No creo que eso sea realista.

¿Crees que a la gente le hará bien escribir el punto y coma cuatro veces? 🤔 No creo que eso sea realista.

No creo que aquellos que han adoptado un separador de comando de 2 caracteres ya encuentren la necesidad de escapar de su separador de comando muy a menudo. ¿Con qué frecuencia necesitaría escapar de un separador de comando que ya está configurado en ;; ? La alternativa es simplemente no poder enviar nunca ;; al MUD de ninguna manera, ¿verdad? Estoy de acuerdo en que escapar sería tedioso para aquellos con 2 o más caracteres configurados para su separador de comandos, pero no era el punto de configurar 2 o más caracteres en su separador de comandos para que no tuviera problemas al enviar al lodo un carácter único del carácter escapado? Sería interesante ver una encuesta sobre lo que la gente usa como separador de comandos y si han adoptado o no ;; o algún otro carácter duplicado.

No creo que una encuesta ayude porque eso es decir "vamos a joder a la minoría", sea quien sea la minoría.

El guion original:

local x = getCommandSeparator()
if x ~= ";" then setCommandSeparator(";")
send("com1;com2;com3;com4")
setCommandSeparator(x)
else
send("com1;com2;com3;com4")
end

Esta es una cantidad increíble de trabajo, ¿por qué complicar tanto las cosas? Si tiene varias cosas para enviar, use sendAll() ?

No creo que una encuesta ayude porque eso es decir "vamos a joder a la minoría", sea quien sea la minoría.

No veo cómo alguien sería jodido por un método para escapar del separador de comandos. Una nueva opción o función de preferencias no debería interrumpir ninguna funcionalidad actual. Tengo curiosidad acerca de lo que la gente realmente usa para su separador de comandos, si las personas han adoptado un separador de comandos de 2 caracteres para que puedan enviar ese carácter al MUD o ​​no. Si su separador de comando es un solo ; , entonces ;;) enviaría ;) y omitiría el separador de comando. Si su separador de comando es un ;; doble, entonces ;) todavía enviaría ;) sin activar el separador de comando. Si quisiera enviar ;; por cualquier motivo, por ejemplo gossip Hey guys, I use Mudlet and my command separator is ;; , entonces podría escribir ;;;; para enviar ;; al MUD en el ejemplo anterior.

Esta es una cantidad increíble de trabajo, ¿por qué complicar tanto las cosas? Si tiene varias cosas para enviar, use sendAll() ?

Sería una solución si tuviéramos una función setCommandSeparator() para aquellos a los que les gusta usar ; como separador de comandos, pero en ocasiones necesitan enviar ; a su MUD. sendAll() funciona muy bien si son solo 2 o 3 comandos, pero cuando llega a 30 o 40 comandos seguidos, se vuelve tedioso escribirlos bastante rápido en lugar de separar los comandos con el comando ya existente ; separador.

Supongo que esto se ha convertido en 2 sugerencias ahora, una para la función setCommandSeparator() y la otra una opción de casilla de verificación de preferencias para Double command separator to bypass the command separator . No estoy seguro de la etiqueta para Github en este caso, ¡así que mis disculpas!

No creo que estés siendo realista cuando le dices a alguien que tiene que escribir ;;;; ... ¡lo siento! La respuesta que probablemente obtendrá es "¿estás bromeando?"

Para empezar, no incluimos la función por una razón específica: permite malos hábitos. Entiendo la fricción que tienen los jugadores en su juego con este mal hábito y lo difícil que es, y les gustaría hacer más trabajo poniendo alias de secuencias de comandos realmente grandes que cambian, editan, etc., interfieren con el separador en lugar de cambiar el hábitos... pero tal vez es mejor cambiar el hábito a algo mejor en su lugar?

Si desea enviar varias cosas, no use send() con el separador de comandos. Esa es una mala práctica. Tenemos sendAll() por este motivo que evita estos líos por completo. Vea el código demoníaco pegado un poco en la parte superior antes.

Entiendo perfectamente que te gustaría hacer la transición a Mudlet más suave. Pero permitir malos hábitos probablemente no sea una buena manera de hacerlo, porque al final Mudlet se volverá tan malo como los otros clientes, ¿no es así?

No creo que estés siendo realista cuando le dices a alguien que tiene que escribir ;;;; ... ¡lo siento! La respuesta que probablemente obtendrá es "¿estás bromeando?"

Por supuesto, no tienen que hacerlo, solo si quieren escapar del separador de comandos para cualquier propósito. Si usaron un solo ; como separador de comando, solo necesitarían escribirlo dos veces para escapar y enviar un solo ; . ;)

Si desea enviar varias cosas, no use send() con el separador de comando. Esa es una mala práctica. Tenemos sendAll() por este motivo que evita estos líos por completo. Vea el código demoníaco pegado un poco en la parte superior antes.

Desafortunadamente, no me di cuenta de que sendAll() era la opción preferida para esto cuando escribí muchos de los alias y disparadores, ni sabía sobre los speedwalk() para ingresar muchas direcciones.
Así que terminé con muchos alias que se parecen a esto "brief;compact;s;s;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;w;s;w;w;s;s;w;s;s;s;s;s;e;s;s;e;e;s;e;e;n;e;e;n;e;n;d;d;n;n;n;d;e;e;s;s;s;u;u;u;n;u;u;n;n;w;n;n;u;u;u;n;n;enter lift;u;s;s;s;s;s;s;s;d;d;d;e;e;e;s;s;s;e;e;e;s;s;e;s;e;s;e;e;s;u;u;u;u;u;e;n;n;n;e;n;n;n;e;n;n;n;n;e;e;s;e;s;e;n;n;e;n;e;n;e;s;e;s;e;e;s;s;s;e;e;e;s;brief;compact"

Sin embargo, volviendo al tema, no creo que tener que saltar de menú para intercambiar separadores de comando cuando surge la necesidad de enviar cualquier carácter que el usuario haya elegido para el separador de comando al MUD, luego saltar de menú nuevamente para volver a cambiarlo, es un mejora el diseño sobre otros clientes en este sentido y creo que Mudlet puede hacerlo mejor.

Abra un editor que pueda realizar búsquedas y reemplazos de expresiones regulares, coloque este patrón en: (.+?); y reemplácelo con "\1", y obtendrá el 95 % del camino para cada alias.

Desafortunadamente, no me di cuenta de que sendAll() era la opción preferida para esto cuando escribí muchos de los alias y disparadores, ni sabía sobre el speedwalk() para ingresar muchas direcciones.

Muy bien, mejoraremos los documentos aquí para que ayude en el futuro.

Editar: eso se hace en todos los lugares relevantes.

Mi pregunta sigue sin respuesta:

¿Qué es exactamente lo que la gente escribe entonces en sus otros clientes para enviar múltiples comandos, pero no interferir con los emoticonos parpadeantes y las travesuras del lado del servidor?

Por ejemplo, puedo suponer que la mayoría de los jugadores ni siquiera quieren sumergirse demasiado en la creación de secuencias de comandos de alias, solo quieren escribir algo como, por ejemplo speedy s;s;w;w;w;s;s;s;e;s;s;e;e;u;u;u;n;n;enter lift;u;s;s;d;e;e y así sucesivamente.

Si es así, puede crear y distribuir fácilmente un alias que reconozca el comando speedy y dividir el resto en elementos individuales que luego se pueden enviar por separado con sendAll como se explicó anteriormente.

Voilá, los jugadores están felices, no hay necesidad de usar o cambiar ningún separador, en absoluto.

De ninguna manera recomiendo el salto de menú para seguir configurando y restableciendo su separador de comandos favorito frente al que alguien usó en sus scripts (recuerde, también podría haber autores en conflicto).
Tampoco aprobaría que un autor pueda cambiar el separador sin el aviso del jugador y que todos los demás autores de guiones y el propio jugador se vean afectados por ello.

Mi pregunta sigue sin respuesta:

¿Qué es exactamente lo que la gente escribe entonces en sus otros clientes para enviar múltiples comandos, pero no interferir con los emoticonos parpadeantes y las travesuras del lado del servidor?

De los jugadores a los que les pregunté, escuché cuatro métodos diferentes para deshabilitar/pasar por alto el separador de comandos fuera del salto de menú.

  1. ~ antes del separador de comandos, por lo que ~; enviaría ;
  2. Duplicar el separador de comando para que ;; envíe ;
  3. Tecla de acceso directo ctrl+r para deshabilitar, entre otras cosas, el separador de comandos
  4. Un icono al final de la barra de entrada de la consola que desactiva el separador de comandos

Por lo que puedo decir, el separador de comandos preferido es ; entre nuestros usuarios, pero otros clientes ofrecen varias formas de escapar del separador de comandos, por lo que enviar caras sonrientes o emitir comandos al lodo que requieren ; no son un problema.

Escapar suena bien para mí. ¿Alguien sabe qué hacen zmud/mush?

ZMUD dice :

el texto se analiza como una serie de comandos separados por el carácter separador de comandos (el valor predeterminado es ;). Cada comando consta del nombre del comando como primera palabra, precedido por el carácter de comando (el valor predeterminado es #). Los separadores de comandos que se usan entre comillas ("" o '') o corchetes ([] <> o {}) se ignoran al dividir los comandos individuales. Por ejemplo
#SAY {a;b}
es un solo comando, donde como
#SAY a;b
son dos comandos.

Consejos de la comunidad MUSHCLIENTE:

En MUSHclient, si comienza una línea con un punto y coma, los puntos y coma posteriores ya no se tratan como separadores de línea.

El enfoque de Mushclient parece más razonable... pero aún así, ¿quieres ayudar a tolerar el mal comportamiento? Arreglar los alias existentes no es difícil, consulte https://github.com/Mudlet/Mudlet/issues/3677#issuecomment -620511178, y con mejores documentos, menos personas comenzarían a cometer el error.

@KitchenMUD, ¿puedes reparar tus alias con él?

@KitchenMUD , ¿puedes reparar tus alias con él?

Es tedioso, pero puedo convertir aquellos que usan send a sendAll usando el método que sugieres.

Esperemos que no haya mucho más trabajo que incrustar el uso de setCommandSeparator()

Esperemos que no haya mucho más trabajo que incrustar el uso de setCommandSeparator()

@ vadi2 Quizás ese fue un mal ejemplo de mi parte. Supuse que dado que ya tenemos getCommandSeparator() , entonces una función equivalente setCommandSeparator() sería una solución fácil. El problema principal , creo, es que Mudlet debería tener un método para escapar del separador de comando elegido además de requerir que el usuario salte de menú.

¿Tal vez una mejor función sería una nueva que ignore el análisis del separador de comandos por completo y envíe directamente lo que se ingresa en el código? Eso es más seguro para evitar que los usuarios finales arruinen algo, fuera de una solución de interfaz de usuario.

¿Tal vez una mejor función sería una nueva que ignore el análisis del separador de comandos por completo y envíe directamente lo que se ingresa en el código?

Me gusta esa idea. ¿Te lo solucionaría?

¿Qué piensan los demás en @Mudlet/lua-interface?

¿Fue útil esta página
0 / 5 - 0 calificaciones