{"id":25432885,"url":"https://github.com/caalma/repl-mode","last_synced_at":"2025-05-14T17:36:33.901Z","repository":{"id":277916473,"uuid":"933903405","full_name":"caalma/repl-mode","owner":"caalma","description":"repl-mode es un modo interactivo para Emacs que simula un Read-Eval-Print-Loop utilizando un ejecutable externo.","archived":false,"fork":false,"pushed_at":"2025-02-17T00:11:47.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-17T01:20:12.303Z","etag":null,"topics":["emacs","emacs-lisp","emacs-package","productivity-tools","repl","tool"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/caalma.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-16T23:48:52.000Z","updated_at":"2025-02-17T00:48:42.000Z","dependencies_parsed_at":"2025-02-17T01:20:29.070Z","dependency_job_id":"dbd48c58-66e5-4f5c-824f-50a472a9c717","html_url":"https://github.com/caalma/repl-mode","commit_stats":null,"previous_names":["caalma/repl-mode"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caalma%2Frepl-mode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caalma%2Frepl-mode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caalma%2Frepl-mode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caalma%2Frepl-mode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/caalma","download_url":"https://codeload.github.com/caalma/repl-mode/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254195238,"owners_count":22030479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","emacs-lisp","emacs-package","productivity-tools","repl","tool"],"created_at":"2025-02-17T05:17:06.995Z","updated_at":"2025-05-14T17:36:33.889Z","avatar_url":"https://github.com/caalma.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# repl-mode\n\n`repl-mode` es un modo interactivo para Emacs que simula un REPL (Read-Eval-Print Loop) utilizando un ejecutable externo. Permite evaluar líneas de código o texto seleccionado, mostrar los resultados en el buffer actual y personalizar el comportamiento.\n\n\n## Características principales\n\n- **Evaluación flexible**: Evalúa líneas individuales o bloques de texto seleccionados.\n- **Soporte para múltiples ejecutables**: Funciona con cualquier ejecutable que pueda procesar entrada estándar o argumentos.\n- **Historial de evaluaciones**: Opcionalmente, duplica las líneas evaluadas para mantener un historial.\n- **Personalización avanzada**:\n  - Controla si el input se pasa por `stdin` o como argumentos.\n  - Decide si el input debe ser encomillado automáticamente.\n  - Elimina espacios innecesarios del resultado.\n- **Compatibilidad con comandos de shell**: Evalúa comandos como `ls`, `find`, etc., además de scripts personalizados.\n\n\n## Instalación\n\n1. Clonar este repositorio o descarga el archivo `repl-mode.el`:\n   ```bash\n   git clone https://github.com/caalma/repl-mode.git\n   ```\n\n2. Añadir el archivo `repl-mode.el` a la ruta de carga de Emacs. Por ejemplo, añadir lo siguiente al archivo de configuración (`~/.emacs` o `~/.emacs.d/init.el`):\n   ```elisp\n   (add-to-list 'load-path \"/ruta/al/repositorio/repl-mode\")\n   (require 'repl-mode)\n   ```\n\n3. Activar `repl-mode` en un buffer evaluando el comando:\n   ```elisp\n   (repl-mode-activate \"ruta/al/ejecutable\")\n   ```\n   o mediante `M-x` y `repl-mode-activate`.\n\n\n## Configuración\n\nPara personalizar el comportamiento de `repl-mode` se pueden ajustar las siguientes variables:\n\n- `repl-mode-result`: Prefijo para indicar el resultado de la evaluación (por defecto, `\\n-- `).\n- `repl-mode-strip-result`: Elimina espacios innecesarios del resultado (`t` por defecto).\n- `repl-mode-history-enabled`: Habilita/deshabilita el historial de líneas (`nil` por defecto).\n- `repl-mode-quote-input`: Encomilla automáticamente el input (`t` por defecto).\n- `repl-mode-use-stdin`: Pasa el input por `stdin` (`t` por defecto).\n\nEjemplo de configuración personalizada:\n```elisp\n(setq repl-mode-result \"\\n=\u003e \")\n(setq repl-mode-strip-result t)\n(setq repl-mode-history-enabled nil)\n(setq repl-mode-quote-input nil)\n(setq repl-mode-use-stdin nil)\n```\n\n\n## Uso\n\n### Comandos principales\n\n- **Evaluar línea actual**: Presiona `Alt+Enter` (`M-RET`).\n- **Evaluar con historial forzado**: Presiona `Alt+Shift+Enter` (`M-S-RET`).\n- **Evaluar texto seleccionado**: Selecciona un bloque de texto y presiona `Alt+Enter`.\n\n### Ejemplo 1: Script Python\n\n1. Activar el modo REPL con un script Python:\n   ```elisp\n   (repl-mode-activate \"./extras/eval-stdin.py\")\n   ;; personalizar\n   (setq repl-mode-quote-input t)\n   (setq repl-mode-use-stdin t)\n   ```\n\n2. Escribir una expresión Python:\n   ```\n   2 + 3\n   ```\n\n3. Presionar `Alt+Enter`:\n   ```\n   2 + 3\n   -- 5\n   ```\n\n### Ejemplo 2: Comando de shell (`ls`)\n\n1. Activar el modo REPL con el comando `ls`:\n   ```elisp\n   (repl-mode-activate \"ls\")\n   ;; personalizar\n   (setq repl-mode-quote-input nil)\n   (setq repl-mode-use-stdin nil)\n   ```\n\n2. Escribir un argumento para `ls`:\n   ```\n   -l -h *\n   ```\n\n3. Presionar `Alt+Enter`. Comprobar lista de archivos.\n\n### Ejemplo 3: Texto multilínea\n\n1. Activar el modo REPL con el comando `ls`:\n   ```elisp\n   (repl-mode-activate \"echo -e\")\n   ;; personalizar\n   (setq repl-mode-quote-input nil)\n   (setq repl-mode-use-stdin nil)\n   ```\n\n2. Seleccionar el siguiente texto multilínea:\n   ```\n   \"texto \\n \\\n   multilinea.\" \u003e archivo.txt\n   ```\n\n2. Presionar `Alt+Enter`. Comprobar que `archivo.txt` contenga:\n   ```\n   texto\n   multilinea.\n   ```\n\n## Comparación con otros paquetes disponibles en Emacs\n\n### Diferencias entre `repl-mode` y `comint`\n\n- **Propósito**:\n  - `repl-mode`: Simula un REPL ligero para evaluar rápidamente líneas o bloques de texto utilizando un ejecutable externo. Ideal para tareas simples como ejecutar comandos de shell o scripts.\n  - `comint`: Proporciona una sesión interactiva completa con procesos externos, como shells o intérpretes de lenguajes de programación. Mantén un estado persistente entre comandos.\n\n- **Sesión interactiva**:\n  - `repl-mode`: No mantiene una sesión activa. Cada evaluación es independiente y no guarda estado entre comandos.\n  - `comint`: Mantiene una conexión activa con el proceso externo, permitiendo interacciones continuas y estados persistentes.\n\n- **Personalización**:\n  - `repl-mode`: Ofrece opciones simples y enfocadas, como personalizar el prefijo del resultado, controlar si se duplican las líneas evaluadas o decidir si el input se pasa por `stdin` o como argumentos.\n  - `comint`: Altamente personalizable, con soporte para autocompletado, resaltado de errores y manejo avanzado de entradas/salidas.\n\n- **Evaluación de regiones seleccionadas**:\n  - `repl-mode`: Permite evaluar una región de texto seleccionada, lo que es útil para trabajar con bloques de código multilínea o comandos complejos sin necesidad de dividirlos en líneas individuales. Por ejemplo, puedes seleccionar un bloque de texto y enviarlo directamente al ejecutable para su evaluación.\n  - `comint`: Aunque puede manejar múltiples líneas, requiere que el usuario envíe los comandos manualmente dentro de la sesión interactiva, lo que puede ser menos conveniente para bloques de texto predefinidos.\n\n- **Casos de uso**:\n  - `repl-mode`: Perfecto para evaluar rápidamente código o comandos sin necesidad de iniciar una sesión interactiva completa. Es especialmente útil cuando trabajas con scripts, comandos de shell o fragmentos de código específicos.\n  - `comint`: Ideal para flujos de trabajo avanzados que requieren interacción continua con un proceso externo, como desarrollo iterativo en intérpretes de Python o shells.\n\n\n## Contribuciones\n\nSi encontrás algún error o tenés ideas para nuevas características abrí un issue o enviá un pull request.\n\n\n## Licencia\n\nEste proyecto está bajo la licencia [MIT](LICENSE). Consulta el archivo `LICENSE` para más detalles.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaalma%2Frepl-mode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaalma%2Frepl-mode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaalma%2Frepl-mode/lists"}