termcourse: leer 'n publicar en instancias de Discourse desde la terminal

Esta es una aplicación de Terminal (TUI), ¡solo por diversión… y un poco experimental en esta etapa!

:information_source: Resumen Una interfaz de usuario de terminal para navegar y publicar en foros de Discourse con listas de temas, vistas completas de temas, respuestas, “me gusta”, búsqueda y un compositor integrado.
:hammer_and_wrench: Enlace al Repositorio GitHub - merefield/termcourse: A terminal based client to access Discourse instances, supporting API keys, username/password (and with MFA token)
:open_book: Guía de Instalación README.md en el repositorio (sección Inicio Rápido)
:heart: Patrocinio Por favor, considere convertirse en un patrocinador continuo de mi trabajo de código abierto (Sponsor @merefield on GitHub Sponsors · GitHub) en un nivel que se adapte a los recursos y necesidades suyos o de su organización para asegurar que este proyecto reciba el mantenimiento que merece y continúe funcionando para su sitio en el futuro.

¿Disfrutando de termcourse? Por favor, póngale una :star: en GitHub

Resumen

> termcourse es un cliente para Discourse basado en terminal. Se comporta como una sesión de navegador ligera con inicio de sesión basado en cookies (nombre de usuario/correo electrónico + contraseña) y admite TOTP/códigos de respaldo para MFA. También hay una opción de respaldo de clave API para sitios bloqueados o solo con SSO.

Características

  • Navegar por las listas de temas Más Recientes / Populares / Nuevos / No Leídos / Principales, con ciclo de período para Principales.
  • Abrir temas mediante las flechas + Enter, o las teclas de acceso rápido numéricas (1-0) para los primeros 10 temas visibles.
  • Ver temas completos con publicaciones que se pueden desplazar, encabezado/pie de página fijos y una barra de progreso/posición de publicación.
  • Expandir publicaciones seleccionadas a contenido completo; las publicaciones no seleccionadas muestran extractos compactos.
  • Responder a temas completos o publicaciones específicas.
  • Crear nuevos temas con título, selector de categoría y compositor de cuerpo en línea.
  • Dar/quitar “me gusta” a las publicaciones con estado visual de corazón por publicación.
  • Buscar publicaciones y saltar directamente al contexto de tema/publicación coincidente.
  • El compositor en línea admite movimiento del cursor, inserción, nuevas líneas, retroceso y contador de longitud mínima en vivo.
  • Renderizado consciente de Markdown, incluyendo enlaces envueltos y soporte para vista previa de imágenes en línea (chafa / viu).
  • Sustituciones de emoji para tokens comunes de :emoji: y emoticonos de estilo :-).
  • Soporte de credenciales multi-sitio a través de variables de entorno + credentials.yml por host (con solicitud de campos de inicio de sesión faltantes).
  • Inicio de sesión con nombre de usuario/contraseña de sesión de cookies con soporte MFA (TOTP + código de respaldo), además de respaldo de clave API.
  • Tematización impulsada por YAML con integradas (predeterminada, pizarra, feria) y anulaciones locales a través de theme.yml.
  • Redibujado de redimensionamiento reactivo con intervalo de sondeo configurable (TERMCOURSE_TICK_MS).
  • Registro de depuración opcional para diagnósticos de HTTP/autenticación y renderizado de UI.

Inicio Rápido

Consulte el último README para obtener más información

git clone https://github.com/merefield/termcourse
cd termcourse
bundle install

Nombre de usuario/contraseña (recomendado)

bundle exec bin/termcourse su.host.discourse

Respaldo de clave API

DISCOURSE_API_KEY=“su_clave” DISCOURSE_API_USERNAME=“su_nombre_de_usuario” 
bundle exec bin/termcourse su.host.discourse

Notas de Autenticación

  • El inicio de sesión con nombre de usuario/contraseña utiliza una sesión normal al estilo navegador.
  • MFA compatible con TOTP y códigos de respaldo.
  • Las claves API son compatibles como respaldo.

Seguridad

  • Las credenciales no se almacenan; las cookies son solo en memoria.
  • Las variables de entorno o responder a la solicitud proporcionada evitan que las contraseñas queden en el historial de la shell.
  • El registro es por selección y está deshabilitado por defecto.

Limitaciones

  • Algunos sitios no son compatibles con nombre de usuario/contraseña porque prohíben la solicitud remota
  • Vive en la terminal

Créditos

Parcialmente inspirado por Dumbcourse – Old-browser friendly UI at /dumb (D-pad + small screens) :clap:

16 Me gusta

Para que puedas iniciar sesión rápidamente en múltiples sitios (obviamente una sesión a la vez por pestaña), he realizado las siguientes mejoras:

Mejoras en la autenticación y configuración de termcourse

  • La ruta de inicio de sesión predeterminada ahora es nombre de usuario/contraseña.
  • Ya no es necesario incluir https:// - esto es opcional
  • Los campos de inicio de sesión faltantes se solicitan de forma interactiva (por ejemplo: nombre de usuario conocido, contraseña faltante).
  • La ayuda de la CLI incluye variables de entorno principales y ubicaciones de archivos de registro de depuración.

Comportamiento de las credenciales y las variables de entorno

  • Admite un archivo de credenciales mapeado por host con orden de búsqueda:
    1. TERMCOURSE_CREDENTIALS_FILE (si está configurado)
    2. ./credentials.yml
    3. ~/.config/termcourse/credentials.yml
  • Precedencia de autenticación:
    1. Indicadores (flags) de la CLI
    2. Credenciales de host desde YAML
    3. Variables de entorno DISCOURSE_* genéricas
    4. Solicitud interactiva
  • Para la autenticación: se solicitan los valores faltantes de nombre de usuario/contraseña para el inicio de sesión.
  • Para la autenticación de API, tanto el nombre de usuario de la API como la clave deben resolverse en valores no vacíos.

Depuración

  • Depuración HTTP/autenticación: TERMCOURSE_HTTP_DEBUG=1 → /tmp/termcourse_http_debug.txt
  • Depuración de renderizado de UI: TERMCOURSE_DEBUG=1 → /tmp/termcourse_debug.txt

Higiene del repositorio

  • Se añadieron credentials.example.yml y .env.example con ejemplos alineados.
  • Se añadieron entradas a .gitignore para archivos secretos locales:
    • .env
    • credentials.yml
2 Me gusta

Esto es bastante rudimentario, pero funciona.

Necesitas tener instalado viu o chafa, y eso ya puede ser un proyecto en sí mismo :slight_smile:

En el modo de alta calidad con chafa o con viu, Windows Terminal es superior a la terminal de MacOS porque soporta muchos más colores (¡gracias Microsoft!)

Notas de la versión: Renderizado de imágenes (¡en la terminal!)

Renderizado de imágenes

  • Se añadieron previsualizaciones de imágenes posteriores en línea con selección de backend:
    • intenta chafa primero automáticamente, luego viu.
    • TERMCOURSE_CHAFA_MODE=stable|quality
    • stable: salida conservadora para la estabilidad de la terminal.
    • quality: renderizado de símbolos de mayor detalle/color.
  • Se añadió control de altura de previsualización:
    • TERMCOURSE_IMAGE_LINES (predeterminado: 14)
    • Se aplica a la altura de la línea de previsualización; útil para ajustar la densidad visual.
  • Comportamiento de aspecto de viu mejorado:
    • Cambiado a renderizado dirigido por línea (-h) para preservar mejor la relación de aspecto.
  • Se añadieron controles de filtro de calidad de previsualización:
    • TERMCOURSE_IMAGE_QUALITY_FILTER=1 filtra las previsualizaciones ruidosas solo de bloques.
    • Establécelo en 0 para mostrar siempre la salida del renderizador.
  • Se añadió límite de seguridad de descarga de imágenes:
    • TERMCOURSE_IMAGE_MAX_BYTES (predeterminado: 5242880)
    • Evita que las descargas de imágenes de gran tamaño afecten el rendimiento.
  • Se añadió soporte para enlaces de imágenes Discourse upload://…:
    • Resuelve automáticamente a /uploads/short-url/…
  • Estabilización/sanitización de la terminal mejorada:
    • Mantiene los códigos de color SGR válidos donde sea necesario.
    • Elimina secuencias de control/gráficas desestabilizadoras.
    • Evita que los fragmentos de escape ANSI se muestren como texto sin procesar.

Una nota: He encontrado un sitio que bloquea el nombre de usuario/contraseña remotos, por lo que este cliente no funcionará en esa situación (¡a menos que sea suyo y pueda configurar una clave de API!) - se aceptan sugerencias, pero actualmente no hay soporte en esas instancias.

No estoy seguro de si usaré esto en el mundo real, no le veo la utilidad para mí, pero lo he probado y es delicioso. Me encanta poder interactuar con una plataforma de foro de próxima generación desde una interfaz primitiva y de metal desnudo.

De alguna manera, es muy estéticamente agradable.

1 me gusta

Sí, creo que podría ser útil cuando:

  • estás en una plataforma de baja fidelidad
  • estás jugando con una Raspberry Pi (aún no probado, para tu información)
  • desde un servidor para comprobar que estás activo… ¡o si el código del front-end está fallando! :smiley:
  • para un sitio de Discourse que se basa mucho en texto…
  • … y como curiosidad técnica :slight_smile:

He estado pensando en probarlo en mi teléfono con Terminus…

3 Me gusta

OK, probablemente la última actualización de hoy:

  • La interfaz ahora responde al redimensionamiento de la ventana :tada:
  • Mejoras en el contenido de las instrucciones de la barra superior
  • Las teclas del 1 al (1)0 ahora abren ese número de tema en la lista de temas

Recuerda hacer git pull para obtener las actualizaciones.

2 Me gusta

¡Hombre, ahora tengo que ponerme a trabajar en mi arte ASCII!
¯\_(ツ)_/¯

2 Me gusta

He añadido un sistema de temas totalmente personalizable, este es “fairground” (carrusel):

… y este es “slate” (pizarra):

Detalles en el README :graduation_cap:

4 Me gusta

Aquí vamos chicos, algunas jugosas :tangerine: actualizaciones:

  • Añadir soporte para Mensajes Privados - pulsa f dos veces :tada:
  • Añadir columnas adicionales para Categoría, Usuarios, Vistas, progresivamente a medida que se expande el ancho
  • Ajustar la tematización para los separadores verticales
  • README actualizado