Problemas de Emacs por solucionar
Emacs es un editor de textos que forma parte del sistema operativo GNU, por tanto está libre de restricciones. Es tan extensible que se han desarrollado programas muy complejos y útiles que funcionan dentro; cada uno de ellos un mundo. Yo uso
org-mode,
CEDET,
JDEE,
Icicles,
Helm,
emacs-jabber,
gnus,
nxhtml,
wanderlust,
rcirc,
vc,
slime,
…
Y además he publicado mi configuración de Emacs (mi .emacs).
Después de más de 30 años de vida, GNU Emacs aún tiene muchas cosas que me gustaría mejorar. Aquí las describo. Ver también mi EmacsWiki para documentación que he escrito.
Esta página es parte de mi lista de cosas por hacer e incluye muchas notas personales e información irrelevante o anticuada. Se puede ver de forma estructurada con org-mode (es como mantengo ésta y otras listas de tareas; lo explico aquí).
10.m10.2024 (desde 2009), en 2017 esta página necesita ligeras actualizaciones, y un mejor sistema de hipertexto. Daniel Clemente Laboreo (web, correo). Este fichero .html se ve mejor abriendo el .org con org-mode (Emacs)
Otras listas: Índice (varias tareas) Temas de investigación (tareas mayores) Emacs Bazaar Conkeror Sobre este sistema (y org-mode)
Índice
- 1. muchos arreglos varios en funcionalidad básica de Emacs
- 1.1. nuevas funcionalidades que quiero
- 1.1.1. BONUS quiero función para transliteración (traducir unos caracteres en otros). Equivalente al y de Perl
- 1.1.2. BONUS quiero y-or-n-p no modal (que no bloquee)
- 1.1.3. BONUS modo especial para que ficheros muy grandes se abran consumiendo pocos recursos
- 1.1.4. BONUS quiero poder restringirme al búfer actual; limitar búfer a fichero
- 1.1.5. IS modo xmodmap. #2065
- 1.1.6. comentarios en modo x-resources
- 1.1.7. BONUS modo xkb (xkb-mode)
- 1.1.8. indicador de rcirc podría ser clicable
- 1.1.9. IS M-& para ejecutar comandos en segundo plano
- 1.1.10. IS después de M-/, permitir seguir enganchando palabras desde la fuente encontrada
- 1.1.11. BONUS investigar una cosa que me gustaría: acciones interactivas para después de un M-/
- 1.1.12. BONUS deshacer en kmacro-step-edit-macro
- 1.1.13. IS en dired-do-shell-command, permitir completado por TAB
- 1.1.14. BONUS en dired, sugerir mejores nombres al copiar (C) y mover (R)
- 1.1.15. BONUS „vista de pájaro“ de un fichero: gráfico a escala del tamaño de cada sección
- 1.1.16. BONUS pequeña función para sublista
- 1.1.17. „bajar hasta la 1ª letra distinta“
- 1.1.18. varias cosas para „zone“
- 1.1.19. renombrar fichero, ahora es muy complejo
- 1.1.20. se cuelga poco de vez en cuando por algo de jit o de org-mode, y no se deja matar
- 1.1.21. moverme en las 4 direcciones (izquierda, derecha, arriba, abajo) hasta encontrar el 1r carácter distinto al actual. „Disparar“ cursor hasta que choque contra algo distinto
- 1.2. fallos molestos
- 1.2.1. MALFAR fallo al buscar, debido a global-hl-line-mode
- 1.2.2. IS al depurar, al evaluar y hacer un error se para el depurado
- 1.2.3. BONUS al grabar tendría que crear un directorio
- 1.2.4. BONUS mejorar mensaje molesto "A command is running. Kill it?"
- 1.2.5. BONUS el modo batch no debería hacer preguntas interactivas
- 1.2.6. BONUS avisar antes de imprimir. #2250
- 1.2.7. BONUS C-M-x no va siempre
- 1.2.8. BONUS no puedo copiar más de 4000 caracteres mediante mi función usuaria de xsel
- 1.2.9. BONUS no va menú (F10) ¡debido a rcirc!
- 1.2.10. BONUS js-mode colorea mal los comentarios (quizás los confunde con expresiones regulares)
- 1.2.11. el demonio muere cada vez que cierro X
- 1.2.12. BONUS me queda un proceso hijo openssl bloqueado que consume el 100% de CPU
- 1.2.13. BONUS python-mode se lía con ciertos comentarios de tipo "raro""" y colorea mal el resto del fichero
- 1.2.14. IS no detecta bien cdv cuando tengo uno dentro de otro
- 1.2.15. quiero desactivar automáticamente el coloreado cuando detecte líneas muy largas, pues lo petan todo
- 1.2.16. el minibúfer está usado (veo cursor remanente), y puedo colocarme ahí, y un M-x abre un 2º („[2]“)
- 1.2.17. „zone“ no combina bien con helm → ver abajo en „helm“
- 1.2.18. colorea mal el modo HTML cuando hay una plantilla jinja
- 1.2.19. me está tomando ciertos caracteres de otra fuente
- 1.2.20. tramp falla a menudo (ẽ al revertir búfers) con
(wrong-type-argument "integer-or-marker-p nil")
y hay que repetir orden - 1.2.21. en modo gráfico, algunos caracteres de otras fuentes (ej. en vietnamita) salen muy pequeños
- 1.3. pequeños arreglos quizás de configuración
- 1.4. cuelgues, petadas y cosas que han dejado de ir sin motivo
- 1.4.1. MALFAR bloqueo aleatorio en llamadas a XftGlyphExtents, fallo viejo
- 1.4.2. IS peta en overlay-put-ov 'after-string, #9738
- 1.4.3. MALFAR me ha cambiado indentación de todo
- 1.4.4. se cuelga en delete_frame a veces cuando intento cerrar ventana
- 1.4.5. MALFAR se cuelga solo al abrir ciertos ficheros, creo que por Unicode raro
- 1.4.6. MALFAR se cuelga con uso al 100% tras matar X (el demonio sobrevive)
- 1.4.7. el cuelgue de xcb creo que lo puedo reproducir, me pasó al buscar (C-s), es excesivamente lento (se queda parado un rato), y cuando cambié a otra ventana mientras esperaba esos segundos, se quedó colgado ahí
- 1.4.8. IS líneas muy altas, con márgenes muy grandes, si contienen símbolos como ∀ (algo pasa con las fuentes)
- 1.4.9. IS condition-case lo peta
- 1.4.10. IS error raro al compilar, por async
- 1.4.11. IS no lee socket de $XDG_RUNTIME_DIR, y le tengo que pasar yo la ruta. Tras cambio de m12.2018. No se abre emacsclient
- 1.4.12. error extraño con uniquify y org, lo cuelga
- 1.4.13. tengo una función que no consigo sobreescribir durante el arranque pero sí a mano. helm-git-grep-get-input-symbol. Es para que vaya helm-git-grep-at-point. Con el demonio no va, con emacs suelto sí
- 1.4.14. por cierto, el helm-git-grep me peta, quizás tras redefinición rara que he hecho, ẽ
- 1.4.15. se cuelga en garbage-collect, tras un rato. ¿O es que es muy lento? ~
sweep_conses
en alloc.c. Algo que ver con kill-ring, y quizás con otras cosas- 1.4.15.1. busco revisión que falla
- 1.4.15.2. ¿es gradual o súbito? Busco cuándo pasa. Parece que tiene que ver con kill-ring (no con helm)
- 1.4.15.3. añadir algo para ver cómo está usando la memoria
- 1.4.15.4. IS reducir la incidencia de los problemas de kill-ring
- 1.4.15.5. ATENDAS otra fuga, por caché de helm
- 1.4.16. IS magit, no entra
- 1.4.17. IS ya no puedo teclear el número siete (7)
- 1.4.18. se cuelga seriamente al añadir una función Python a un fichero largo. Por font-lock. Creo que es por abrir """ y no haberlo cerrado aún
- 1.4.19. show-paren-mode se queja más que antes: „Error running timer ‘show-paren-function’: (error "Marker does not point anywhere") [10 times]“
- 1.4.20. magit ya no va en remoto. Creía que era por tramp, pero era más bien por uniquify (probablement por uniquify ∩ tramp, y además visible sólo en magit)
- 1.4.21. IS peta con SIGSEGV la versión terminal (sin X) por algo de faz a nulo. Es por GC
- 1.4.22. MALFAR peta con SIGPIPE por abrir y cerrar frames TTY rápidamente
- 1.4.23. algo nuevo por abrir y cerrar muchas ventanas: máxima recursión
- 1.4.24. BONUS algo nuevo por abrir y cerrar muchas ventanas: SIGSEGV. Difícil de reproducir.
w->desired_matrix->rows
. No hay „glyph matrix“ - 1.4.25. IS tras 71224 (glyph_matrix), algo parecido pero en adjust_frame_glyphs (delete_frame)
- 1.4.26. MALFAR tras 71224 (glyph_matrix), otro, en restore_kboard_configuration, por pop_kboard
- 1.4.27. IS encontré otro SIGSEGV con realize_face, por realize_basic_faces
- 1.4.28. IS petada aleatoria mientras depuro glifos, y sale "Folder" (eso es wanderlust), w->window_end_valid. Creo que por init_to_row_end
- 1.4.29. BONUS algo pasa por no actualizarse bien: tarda, no se entera. Al cambiar tamaña de ventana. Pasa en wmii al menos. Y en urxvt. Lo he reproducido con icewm también. 71343
- 1.4.30. ATENDAS otro fallo parecido a 71343, pero con xterm en vez de urxvt, por FRAME_TTY(sf)
- 1.4.31. ATENDAS otro fallo parecido a 71343, encontrado con -fsanitize. heap-use-after-free
- 1.4.32. IS otro fallo suelto que encontré, esta vez también en icewm, cmcheckmagic, tty_write_glyphs, creo que por GC mientras se redimensiona terminal
- 1.4.33. BONUS en build_frame_matrix_from_leaf_window (a veces en cmcheckmagic como 71289), pero al apretar C-x 2, y no tiene que ver con GC. Lo llamo 71289v2 temporalmente. Luego es fallo 73022
- 1.4.33.1. parche de Martin
- 1.4.33.2. depuro
- 1.4.33.3. sobre el primer error, el de cmcheckmagic
- 1.4.33.4. sobre el segundo error, build_frame_matrix_from_leaf_window
- 1.4.33.5. no digo, verborreico
- 1.4.33.6. me preocupa ver el -1 en cmcheckmagic pero no verlo (el -1) en el código añadido recientemente por Eli
- 1.4.33.7. hipótesis: justo antes de llamada a write_glyphs está bien (ẽ 3<5), pero cuando llega a cmcheckmagic ya está mal. v2: Y es distinto porque compara otra cosa (no es vpos)
- 1.4.33.8. ¿quién ha pedido circular por todas las líneas escritas? ¿Y ese alguien está pidiendo una línea incorrecta? (fuera de la pantalla)
- 1.4.34. ATENDAS un fallo al abrir menú (F10) mientras abuso de redisplay y de otras cosas
- 1.4.35. ATENDAS fallo al abrir menú (F10) mientras abro/cierro marcos en bucle
- 1.4.36. otro en handle_switch_frame, parecido a 71475. Algo por acumular minibúfers
- 1.4.37. otro fallo en verify_interval_modification, quizás porque he compilado emacs con tantas funciones de depuración (-fsanitize) que es tan lento que no puede procesar los eventos de teclado
- 1.5. cosas que voy aprendiendo
- 1.6. sobre velocidad y arranque rápido; rendimiento
- 1.6.1. DumpEmacs
- 1.6.2. es demasiado lento, me tarda mucho en mover el cursor, abrir ficheros, hacer búsquedas, etc.
- 1.6.3. con líneas largas se hace muy lento
- 1.6.4. al deshibernar, se cuelga un rato en una pila muy alta (>20k niveles de llamadas)
- 1.6.5. ibuffer es lento
- 1.6.6. tras usarlo un rato, C-f C-n etc. van muy lentos. Creo que tiene que ver con dired o tramp (tramp hacia otro usuario)
- 1.6.7. ¿por qué la búsqueda es tan lenta? (isearch). Cada pulsación llega con retardo. Es por estar llamando a font-info continuamente
- 1.6.8. IS algo de mailcap es mucho más lento que antes (unos 20s más al arrancar)
- 1.7. cosas raras que necesitan investigación
- 1.7.1. BONUS indeterminismo en salida devuelta por emacsclient
- 1.7.2. IS mensaje
Invalid face reference: quote
registrado de vez en cuando - 1.7.3. IS me toma la categoría mala de un fichero (Lisp.org)
- 1.7.4. mensajes continuos sobre errores en ficheros que no estoy usando
- 1.7.5. el recover-session, me muestra y sugiere siempre un fichero que no tiene cambios
- 1.7.6. MALFAR emacs me pierde un fichero org importante con cambios sin grabar, tras haberlo matado a la fuerza
- 1.7.7. el [#A] de una prioridad en org-mode se expande una letra más que lo que quiero (o sea, incluye el espacio posterior)
- 1.7.8. BONUS el helm-git-grep no va cuando estoy usando tramp para acceder a otro usuario. Se equivoca de usuario y no reconoce el de tramp
- 1.8. que Emacs participe en Summer of code 2009
- 1.8.1. mensaje que envié el
- 1.8.2. también lo mandé a CEDET
- 1.8.3. IS ver respuesta
- 1.8.4. IS escribir en wiki
- 1.8.5. IS para lista de correo
- 1.8.6. IS mandé el enlace también a CEDET
- 1.8.7. IS y a JDEE
- 1.8.8. IS revisar respuestas en Emacs, CEDET y JDEE
- 1.8.9. IS seguir ideas para SOC2009 en EmacsWiki
- 1.8.10. IS pedir estudiantes con proyectos (y que busquen mentores)
- 1.1. nuevas funcionalidades que quiero
- 2. EmacsWiki
- 3. org-mode y relacionado
- 3.1. cosas que no funcionan como deberían. «Fallos»
- 3.1.1. algunos problemas al colorizar
- 3.1.1.1. hay estos dos fallos relacionados
- 3.1.1.2. IS se coloriza mal (la faz pasa a la siguiente línea)
- 3.1.1.3. también se malcoloriza (la faz cruza una cabecera inferior)
- 3.1.1.4. también pasa en tabla y en comentario… en realidad el fallo es genérico, no sólo para esos dos casos
- 3.1.1.5. ¿no se pueden solucionar ambos fallos a la vez?
- 3.1.1.6. siguen pasando cosas raras. La faz se extiende
- 3.1.2. IS Subject: Bug in clocking in: the list becomes corrupted by the CLOCK drawer
- 3.1.3. MALFAR fallo al empezar reloj
- 3.1.4. ATENDAS otro fallo al empezar reloj en la misma tarea: no cierra el reloj anterior
- 3.1.5. fallos en la exportación a HTML y LaTeX
- 3.1.5.1. una lista en pie de página se exporta mal a HTML
- 3.1.5.2. BONUS que se puedan exportar tablas con bordes, incluso los externos
- 3.1.5.3. IS se descontrolan los números en la tabla de contenidos si un ejemplo tiene líneas que empiezan por asterisco
- 3.1.5.4. IS algunos IDs no los encuentra y por eso me crea enlaces como #22j2h2h cuando debería ser emacs.html#22j2h2h
- 3.1.5.5. BONUS algunos IDs se exportan con doble #, como emacs.html##wikipedia
- 3.1.5.6. IS los enlaces como file:algo.org están saliendo como http:algo.html
- 3.1.5.7. IS no exporta fragmentos en C
- 3.1.5.8. IS exporta <li><p>elemento </p></li>
- 3.1.5.9. IS se pierden palabras de enlaces radio cuando están definidas fuera de la cabecera exportada
- 3.1.6. al buscar IDs, detecta como distinto el mismo fichero porque en uno ha codificado mal el nombre
- 3.1.7. no abre algunos IDs
- 3.1.8. no encuentra IDs, porque org-id-update-id-locations se cuelga mucho y no acaba; es lentísimo y hace GC
- 3.1.9. IS no encuentra IDs cuando uso org-capture desde cierto(s) fichero(s)
- 3.1.10. IS algunos enlaces a ID los exporta como
ID-id:aquívaelcódigo
- 3.1.11. BONUS no reconoce algunos nombres de constantes en tablas
- 3.1.12. BONUS no reconoce algunos nombres de tablas al hacer referencias
- 3.1.13. BONUS no funcionan algunos nombres de etiquetas
- 3.1.13.1. ejemplo sin „∀i“ uno dos tres
- 3.1.13.2. ejemplo con „∀i“, no va :uno:dos:∀i tres
- 3.1.13.3. ejemplo con „útil“, sí que va interesante útil bonito
- 3.1.13.4. uno que no va por tener una barra :a/b:
- 3.1.13.5. intento poner dos puntos a b
- 3.1.13.6. con letras no latinas, menos mal que funciona прекрасное
- 3.1.13.7. paréntesis :(abc):
- 3.1.13.8. con coma a b
- 3.1.13.9. con punto :a.b:
- 3.1.13.10. con más a b
- 3.1.13.11. con arroba yo@aquí
- 3.1.14. BONUS al grabar enlace, es preferible que deje la ruta relativa
- 3.1.15. BONUS cuando exporta un proyecto, se lía si tiene varias entradas con el mismo ID y puede dar enlaces a las de otro directorio
- 3.1.16. BONUS los enlaces a fichero local se exportan usando una URL que no es válida ni útil
- 3.1.17. ATENDAS error al mostrar historial de búfer si hay una fecha al principio
- 3.1.18. la actualización de ficheros de agenda es excesivamente lenta debido al vc-mode de Emacs
- 3.1.19. IS la vista de agenda se carga cada vez en vez de estar en caché
- 3.1.20. MALFAR la exportación a taskjuggler falla con ciertas estructuras
- 3.1.21. BONUS la exportación a taskjuggler ha de evitar generar propiedades de esfuerzo en contenedores
- 3.1.22. IS al publicar no siempre detecta el proyecto del fichero pasado
- 3.1.23. problemillas de org-mode que vienen y van (cosas que antes iban bien y se rompen)
- 3.1.24. ATENDAS org-adapt-indentation ha cambiado, ahora mete espacios en 1ª columna.
- 3.1.24.1. solución propuesta: indentar todo hasta la 1ª línea que tiene indentación 0
- 3.1.24.2. otra solución: indentar hasta el punto dicho por
(org-log-beginning)saltándose varias cosas - 3.1.24.3. lo que sea pero tiene que haber 3ª opción en org-adapt-indentation
- 3.1.24.4. opción para initial-only, como nil
- 3.1.24.5. MALFAR a medias…
- 3.1.24.6. ¿algo alternativo para hacerlo a mano?
- 3.1.24.7. luego vi que mete 3 espacios en vez de 2, en algunos casos
- 3.1.25. el tabulador me pone muchos espacios y me deja el cursor en sitio muy alejado de donde quiero estar (la 1ª columna)
- 3.1.26. el tabulador está activado en modos que no toca (ej. HTML)
- 3.1.27. IS babel ya no exporta bloques python ni los colorea, es por tramp-cache, por cambios recientes en Emacs
- 3.1.28. IS no van los formatos de tiempos personalizados cita
- 3.1.29. IS me quita los IDs de los enlaces (CUSTOM_ID)
- 3.1.30. MALFAR error al tomar categorías; lleva ya muchos meses
- 3.1.31. al cronometrar, se queja de ¬dbus (y es cierto, no lo tengo); es por notifications
- 3.1.32. IS ahora que está ox-publish en vez de org-publish, cambió mucho y hay que reprobarlo y reescribir pritas y configuraciones
- 3.1.33. IS con exportador nuevo (ox), no me coge algunos IDs porque no son de tipo uuidgen
- 3.1.34. IS la agenda se puede hacer más rápida si evito org-refresh-properties (desactivo „propiedades“)
- 3.1.35. me pone „nilIS“ in vez de „IS“, etc.
- 3.1.36. no exporta bien enlaces nntp://…, me quita el „nntp“
- 3.1.37. „Unknown cross-reference“ al exportar, y luego algunos
- 3.1.38. IS Invalid search bound (wrong side of point), lo dice al exportar (HTML)
- 3.1.39. salen cadenas UTF-8 raras en las fechas
- 3.1.40. IS tras un C-' para editar bloque y matar búfer temporal, luego no puedo cambiar texto, y queda en azul („overlay“)
- 3.1.41. C-ucxi (org-clock-select-task) peta por „read-only "Type ‘e’ to edit property"“
- 3.1.42. al pegar (ẽ desde urxvt), no toma bien utf-8 y lo cambia por „?“
- 3.1.43. IS me toma todos los
#+HTML_HEAD:
de todo el fichero, no sólo los de la sección que estoy exportando. Yo quiero aplicar un estilo local (sólo para una cabecera). „htmlheadlocal1“ - 3.1.44. es lento (ẽ 3 segundos) al ofrecer lista de tareas a cronometrar (C-u C-c C-x C-i)
- 3.1.45. MALFAR org-decrypt-entry se cuelga, excepto si mato
gpg-agent
. Es porpinentry
, creo, pues lo forcé a ser modo texto - 3.1.46. MALFAR org-encrypt falla (quizás relacionado con punto anterior), „org-encrypt-entry: Encrypt failed“ y nada más
- 3.1.47. IS peta al exportar a latex
- 3.1.48. por algo de org-element se cuelga, y a veces me invierte la lista de cronómetros en una cabecera. Reordena todos los CLOCK de viejo a nuevo (en vez de de nuevo a viejo) cuando empiezo a cronometar en cierta sección. Muy raro
- 3.1.49. IS al crear enlace está tomando texto de cabecera en vez de su ID
- 3.1.50. org-encrypt-entries es lento (porque hace org-scan-tags) y a veces me bloquea todo durante unos 5 segundos
- 3.1.51. errores por caché; la agenda se queda colgada muchos minutos y no acaba
- 3.1.52. se hace muy lento al moverse por celdas de tabla, org org-table-align
- 3.1.53. muy lento ¡al salir! Por org-persist
- 3.1.54. se ha hecho muy lento, incluso al empezar a cronometrar (tarda más de 40 segundos). Sobre todo cuando hay muchas entradas en una cabecera. Otra vez es por lo típico: org-element–cache-verify-element
- 3.1.55. ATENDAS sólo el teclear ya se ha vuelto ridículamente lento: latencia de más de un cuarto de segundo (quizás medio segundo) al teclear cada letra. Es por
org-element--cache-after-change
- 3.1.56. muy lento al teclear en búfer grande; tardo casi un segundo en ver el texto tecleado. Parece que es por
redisplay_internal
directamente; por código C - 3.1.57. org-clock-in, lentísimo (puede tardar unos cinco minutos) en fichero algo grande. Cuando desactivo la caché
- 3.1.58. IS al cambiar el momento final de cronómetro, me mueve el cursor a la derecha y no puedo seguir usando S-arriba/S-abajo
- 3.1.59. error al cargar con org-reload
- 3.1.60. los enlaces radio no van, porque crean una expresión regular demasiado larga
- 3.1.61. IS petada por
(org-tags-expand "+cable")
- 3.1.62. no exporta
- 3.1.63. peta al exportar fichero grande (>90 Mb),
org-export--annotate-info: Invalid regexp: "Regular expression too big"
- 3.1.64. se cuelga por líneas largas visibles en pantalla, por ejemplo mientras intenta fontificar un bloque Python visible en la misma pantalla
- 3.1.65. IS org-table-eval-formula ya no reconoce los porcientos
- 3.1.66. al moverme por tabla con C-v/M-v se pierde la columna; el cursor se mueve unas 87 columnas a la derecha
- 3.1.1. algunos problemas al colorizar
- 3.2. cosas nuevas que quiero. «Nuevo»
- 3.2.1. IS función para pasar de lista a lista con casillas
- 3.2.2. IS exportar agenda a fichero; quizás con cron
- 3.2.3. BONUS el cronómetro en la barra de modo podría ser más útil
- 3.2.4. BONUS en la agenda, me gustaría ver reflejadas las estimaciones de esfuerzo
- 3.2.5. BONUS en la agenda, quiero ver en la cuadrícula de las horas de hoy una línea que represente „ahora“
- 3.2.6. BONUS buscar comando para pegar dentro de un bloque, y hacerlo si no está
- 3.2.7. IS una macro no puede contener otras macros
- 3.2.8. IS selector de tareas comunes (para cambiar rápidamente a tareas predefinidas)
- 3.2.9. BONUS quiero una columna (en vista de columnas) tipo CLOCKSUM pero que diga el tiempo que me queda (no de vida; sino de una tarea)
- 3.2.10. BONUS en vista de columnas (C-c C-x C-c), poder mover cabeceras arriba y abajo con M-arriba, M-abajo
- 3.2.11. BONUS org-mouse ha de permitir redimensionar tablas arrastrando
- 3.2.12. BONUS en una tabla quiero diferenciar los campos calculados y los campos manuales, ej. con colores
- 3.2.13. BONUS hacer gráficos a partir de tabla de tiempos, mediante R y org-babel
- 3.2.14. BONUS poder ver cómo de grande es cada sección (cuántas líneas de contenido hay bajo cada cabecera)
- 3.2.14.1. tipo de información que necesito, y cómo verla
- 3.2.14.2. podría hacerlo creando estructura de directorios y usando filelight
- 3.2.14.3. BONUS podría hacerlo superponiendo información, como hace C-c C-x C-d ahora
- 3.2.14.4. podría hacerlo a partir del HTML/LaTeX ya exportado
- 3.2.14.5. podría hacerlo si Emacs me ayudara
- 3.2.14.6. funciones para org que ya sacan una estimación de tamaño (en palabras, bytes, párrafos, subsecciones, …)
- 3.2.15. BONUS no hay modo de poner un pie de página que vaya desasociado a toda entrada
- 3.2.16. BONUS protección antiespam (aunque sea mínima)
- 3.2.17. MALFAR necesito un buen sistema para expresar dependencias en org-mode, pues los correos las tienen
- 3.2.18. BONUS poder buscar todos los enlazantes a la sección actual (org-find-backlinks o similar)
- 3.2.19. ATENDAS la función org-revert-all-org-buffers podría revertir sólo los búfers que lo necesitan
- 3.2.20. BONUS ayudar a visualizar una lista larga mientras te mueves por ella
- 3.2.21. IS simplemente quiero un calendario con el número de tareas para cada día
- 3.2.22. ATENDAS ver „la última tarea abierta en que he cronometrado trabajo“ (de un fichero)
- 3.2.23. ¿revertir todos los búfers?
- 3.3. proyectos grandes sobre org-mode. «Proyectos»
- 3.1. cosas que no funcionan como deberían. «Fallos»
- 4. CEDET
- 5. JDE (¿JDEE?)
- 6. gnus
- 6.1. MALFAR error al entrar en carpeta
- 6.2. MALFAR descubrir cómo ver hilo entero
- 6.3. MALFAR nnimap+agent=caos. Solucionar
- 6.4. MALFAR quiero que ofrezca crear directorios
- 6.5. gnus es lento
- 6.6. las teclas del búfer Sumario son inconsistentes
- 6.7. poder leer mensajes sin marcarlos como leídos
- 6.8. error raro, quizás por cambios en configuración
- 7. wanderlust
- 7.1. IS wl-beta cargado está corrompiendo los colores ANSI en eshell
- 7.2. BONUS el cambio 100605 hace que product.el (apel) no cargue bien por tener comillas anticuadas
- 7.3. IS otro fallo de comillas anticuadas en wl/utils/ssl.el que me impide ver el correo
- 7.4. IS ya no conecta bien; no muestra correos nuevos; es por elmo
- 7.5. quiero que el mime-view-mode me resalte en otro color las citas (lo que empieza por „>“)
- 7.6. „Operation aborted by user“, me sale a veces en wanderlust mientras leo mensajes largos
- 8. eshell
- 9. emms
- 10. emacs-jabber
- 10.1. IS cuando se cierra conexión Jabber y se reabre, no va
- 10.2. recibir ficheros
- 10.3. IS ¡no va cifrado! Con wireshark se ve todo (con cuenta de jabberes.org)
- 10.4. IS no conecta m4.2017, por parámetros de TLS/SSL otra vez
- 10.5. error raro
- 10.6.
∴ da tantos problemas… que mejor usar psi (va perfecto)∴ ya vuelve a ir, así que lo puedo usar - 10.7. borrar los registros de mensajes cuando los espámers me escriben. espam
- 11. anything/helm
- 11.1. ¿gestor de tareas o de fallos?
- 11.2. cosas que le faltan (o no sé hacer). Y fuentes nuevas que quiero
- 11.2.1. BONUS grep por todos los búfers abiertos
- 11.2.2. grep de las líneas de un fichero concreto
- 11.2.3. quiero que me muestre los ficheros en los que he pasado más tiempo recientemente
- 11.2.4. quiero que me muestre lista de ficheros abiertos dentro del „frame“ actual (serán 1 ó 2 ó 3…)
- 11.2.5. como find-name-dired, para filtrar ficheros colocados en árbol radicado en directorio actual
- 11.3. IS no sale lista de comandos cuando la combino con la de ficheros
- 11.4. IS coincidencias puras antes que aproximadas (quiero favorecer los resultados más parecidos a mi entrada)
- 11.5. BONUS al ver la lista de acciones para el elemento elegido, quiero que me muestre cuál es ese elemento elegido
- 11.6. MALFAR que no haga pings al abrir anything
- 11.7. en anything, la lista de cabeceras de org debería darme la cabecera coincidente 1º y luego sus ancestros (en vez de ancestros+hija)
- 11.8. IS con auditd veo algo muy raro mientras uso helm con locate; mlocate muere
- 11.9. MALFAR al salir (C-g) se bloquea un poco y no cierra el minibúfer, a veces me hace falta repetir C-g
- 11.10. IS me puedo colocar en su ventana y cambiarla
- 11.11. IS me salen mensajes de error mezclados con resultados
- 11.12. helm me abre varias veces el mismo proceso locate
- 11.13. helm-other-buffer: No buffer named helm, y no puedo abrirlo más
- 11.14. no me abre un fichero nuevo dentro de un directorio
.git
, me da:helm-read-file-name: Wrong type argument: stringp, nil
- 11.15. helm-git-grep-at-point no toma siempre lo del cursor
- 11.16. debería ser más predecible al darle al „enter“. Si tecleo rápido, a veces no va. Hace esperar
- 11.17. „zone“ no combina bien con „helm“
- 11.18. me muestra códigos raros en letras ¬ASCII, de golpe, supongo que por algo puntual
- 11.19. IS falla, „helm–completing-read-default: Symbol’s function definition is void: helm-subr-native-elisp-p“
- 11.20. ATENDAS se estropeó el grep, me lleva a un búfer „mouse-2: execute action^Jmouse-3: menu actions“, tras actualizar helm
- 11.21. IS el C-n ya no circula entre fuentes, tras actualizar helm. Se limita a los candidatos de la fuente actual
- 11.22. no compila bien, por algo de clear-image-cache
- 11.23. algo se cuelga (no sé si es por helm u otra cosa) al abrir búfer desde emacsclient y moverme
- 12. muchas ideas más gordas que dan trabajo para varios meses
- 13. otras cosas de Emacs
1. muchos arreglos varios en funcionalidad básica de Emacs
1.1. nuevas funcionalidades que quiero
1.1.1. BONUS quiero función para transliteración (traducir unos caracteres en otros). Equivalente al y de Perl
Ej: abc → def. Eso cambia la frase „cosa de prueba“ a „fosd de prueed“
1.1.1.1. Igual que en Perl:
De man perlop:
y/SEARCHLIST/REPLACEMENTLIST/cds Transliterates all occurrences of the characters found in the search list with the corresponding character in
1.1.1.2. ¿tiene algo así Emacs?
Esto ya lo investigué un poco; creo que no tiene
1.1.1.3. IS me hice una
(defun transliterate (from to string) (let (transliteration-table) (setq transliteration-table (make-hash-table)) (loop for 1from in (string-to-list from) for 1to in (string-to-list to) do (puthash 1from 1to transliteration-table)) (char-list-to-string (mapcar (lambda (ch) (or (gethash ch transliteration-table) ch)) (string-to-list string))) ) ) (transliterate "abc" "ABC" "the string to be changed")
1.1.2. BONUS quiero y-or-n-p no modal (que no bloquee)
(yes-or-no-p "¿? ") (y-or-n-p "¿? ")
No puedo cambiar de ventana en y-or-n-p y es muy molesto (ej: para C-x v u). Al menos tendría que poderse usar la rueda del ratón, o deslizarse por teclado, para poder ver el búfer Diff que crea C-x v u.
1.1.3. BONUS modo especial para que ficheros muy grandes se abran consumiendo pocos recursos
O sea: si abro un fichero de 4 Gb, que no intente poner esos 4 Gb en memoria, sino sólo unas cuantas páginas, y a medida que me muevo, que descarte lo que ya no se ve y cargue de disco lo que se quiere ver.
Ha habido muchos intentos de hacer esto, bajo el nombre de „very large files“. Ejemplo: http://www.emacswiki.org/emacs/vlf.el
Puntos difíciles: la colorización se ha de hacer basándose en sólo el trocito visible.
1.1.3.1. ha habido mejoras grandes (ẽ „abrir fichero de 8 Gb necesita 24 Gb“→„necesita ~8“)
1.1.3.2. pruebas
Para probar:
base64 vídeo.flv >muchabasura
Veo que ahora (23.1) lo carga entero: el uso de memoria residente sube tanto como el tamaño del fichero.
1.1.3.3. vlf.el
vlf.el va bien: enseña el gran fichero por páginas, y hay que moverse con AvPág/RePág. Pero quedaría mejor que se viera de forma continua. (Y que estuviera integrado en Emacs).
1.1.4. BONUS quiero poder restringirme al búfer actual; limitar búfer a fichero
- Por ejemplo para cuando estoy en log4j-mode; me interesa no poder cambiar a otros
- O también para trabajar más en openTrends.org.
- También para poder abrir eshell como si fuera un urxvt normal: una ventana de shell que no puede convertirse en editor a ratos, sino que sigue siendo una terminal hasta morir. (Quiero sustituir urxvt por eshell)
Es una restricción por ventana.
Desactivadas:
- find-file
- switch-to-buffer
Activado:
- kill-this-buffer
No sé si hay forma mejor que desactivar teclas.
1.1.4.1. BONUS hay algo parecido, emacs-lock, para impedir matar búfer
1.1.5. IS modo xmodmap. #2065
Lo puedo hacer junto con un modo xkb (xkb-mode).
1.1.5.1. código ampliado desde wiki; repuesto en wiki también
El bueno está en file:///home/dc/.emacs.
(define-generic-mode 'xmodmap-mode '(?!) '("add" "clear" "keycode" "keysym" "remove" "pointer") nil '("[xX]modmap\\(rc\\)?\\'") nil "Simple mode for xmodmap files.")
1.1.5.2. mandado a emacs-pretest-bugs por NNTP
1.1.5.3. IS esperar respuesta para xmodmap
Esperando desde el
… Faltan voluntarios.- [] Mejor crear parche. ← bueno, lo que mandé ya es suficiente
- el lo incluyeron en rama oficial; ver revisión 103550 de Bazaar
- tras más de 2 años… ya está
1.1.5.4. URL del informe en Emacs
http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=2065
2065@emacsbugs.donarmstrong.com
Es del
.1.1.6. comentarios en modo x-resources
En x-resource-generic-mode, iluminar comentarios con color distinto.
1.1.7. BONUS modo xkb (xkb-mode)
Igual que el modo para xmodmap, pero para Xkb, más moderno.
[ ]
buscar gramática[ ]
usar define-generic-mode para listar expresiones, etc[ ]
probarlo
1.1.8. indicador de rcirc podría ser clicable
El:
(defun rcirc-activity-string (buffers).........
podría hacer que al hacer clic en el nombrecito se cambiare al búfer de chat clicado.
1.1.8.1. meter un enlace
1.1.8.1.1. ¡en el búfer!
En el búfer:
(insert-text-button "hola")
1.1.8.1.2. meterlo en una variable
(defun insert-text-button-en-variable (label &rest properties) "lo mete en variable" (apply #'make-text-button (prog1 (point) (insert label)) (point) properties))
1.1.8.1.3. Añadir rótulo y propiedades
(insert (propertize "hola" 'face 'org-level-4 'button '(t) 'help-echo "Hola") )
1.1.8.2. función rcirc-activity-string
1.1.8.2.1. original
(defun rcirc-activity-string (buffers) (mapconcat (lambda (b) (let ((s (substring-no-properties (rcirc-short-buffer-name b)))) (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) s)) buffers ","))
1.1.8.2.2. BONUS modificándola…
(defun rcirc-activity-string (buffers) (concat "PR8" " " (propertize "ho" 'face 'org-level-4 'help-echo "Hola") (mapconcat (lambda (b) ; (y-or-n-p (concat "b vale: " (if (numberp b) (number-to-string b)) ". Aprieta „y“ ")) (let ((s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (buffer-name b) 'mouse-face 'mode-line-highlight ;'local-map '(keymap (mode-line keymap (mouse-1 . pita-de-verdad))) ; 'local-map '(keymap (mode-line keymap (mouse-1 . (lambda nil (interactive) (switch-to-buffer "#debian@irc.freenode.net"))))) 'local-map '(keymap (mode-line keymap (mouse-1 . (lambda nil (interactive) (display-buffer (buffer-name b)))))) ) )) (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) s)) buffers ",") ) ;14 )
;;'button '(t) ;;'action (lambda (arg) (pita-de-verdad-pero-flojito)) ;;'category 'default-button ;; 'keymap '(keymap (mouse-1 . pita-de-verdad) (mouse-2 . pita-de-verdad)) ;;;'follow-link t ;;:box t
;(defun rcirc-track-button-clicked (arg) ;"Executed when
- CONCLUSIÓN escrita el
Superado
; Exercise: write *in a loop* three buttons with different names, and make that each displays its name when clicked (mapcar (lambda (buttontext) (insert-text-button (concat "Button " buttontext) 'action (lambda (arg) (interactive) (pita-de-verdad) ; (message "Clicked at marker: %s" arg) (message "I am button %s" buttontext) ; <--- doesn't work due to dynamic binding )) (insert ", ") ) '("one" "two" "three"))
; Exercise: write *in a loop* three buttons with different names, and make that each displays its name when clicked (mapcar (lambda (buttontext) (lexical-let ((textsymbol buttontext)) (insert-text-button (concat "Button " buttontext) 'action (lambda (arg) (interactive) (pita-de-verdad) ; (message "Clicked at marker: %s" arg) (message "I am button %s" textsymbol) )) (insert ", ") ) ) '("one" "two" "three"))
; prueba más sencilla ; Exercise: write *in a loop* three buttons with different names, and make that each displays its name when clicked (mapcar (lambda (buttontext) (lexical-let ((textsymbol buttontext)) (insert-text-button (concat "Button " buttontext) 'action (lambda (arg) (interactive) (pita-de-verdad) ; (message "Clicked at marker: %s" arg) ; (message "I am button %s" textsymbol) (funcall (lambda nil (message "I am button %s" textsymbol))) )) (insert ", ") ) ) '("one" "two" "three"))
Por fin… resulta que aunque le hacía lexical-let, no estaba interpretando la variable porque la estaba citando mediante un bonito ' muy a la izquierda. La he descitado y ya está :-) Pasé de:
; 'local-map '(keymap (mode-line keymap (mouse-1 . (lambda nil (interactive) (message "El búfer es %s " (buffer-name buffersym)) ) ) ))
A :
'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (message "El búfer es %s " (buffer-name buffersym)) ) ) ))
Y buffersym ya se lee.
(defun rcirc-activity-string (buffers) (concat "PR7" " " (propertize "ho" 'face 'org-level-4 'help-echo "Hola") (mapconcat (lambda (b) (lexical-let* ( (buffersym b) (s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (buffer-name b) 'mouse-face 'mode-line-highlight ; ¡Esto funciona! Pita: ;'local-map '(keymap (mode-line keymap (mouse-1 . pita-de-verdad))) ; 'local-map '(keymap (mode-line keymap (mouse-1 . (lambda nil (interactive) (message "El búfer es %s " (buffer-name buffersym)) ) ) )) 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (message "El búfer es %s " (buffer-name buffersym)) ) ) )) ) ) ) ; fin del (()) del let ; empieza el cuerpo del let (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) s) ) ;fin lambda (1r arg. mapconcat) buffers ",") ) )
(defun rcirc-activity-string (buffers) (mapconcat (lambda (b) (lexical-let* ( (buffersym b) (s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (concat (buffer-name b) "; mouse-1: show") 'mouse-face 'mode-line-highlight ; 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (message "El búfer es %s " (buffer-name buffersym)) ) ) )) ; 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (display-buffer (buffer-name buffersym)) ) ) )) 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (funcall rcirc-switch-to-buffer-function buffersym))) ) ) ) ) ) ; lexical-let* ; fin del ((vars)) del let ; empieza el cuerpo del let (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) ; y ahora devuelve s en el let*: s) ) ;fin lambda (1r arg. mapconcat) buffers ",") )
(defun rcirc-activity-string (buffers) (mapconcat (lambda (b) (lexical-let* ( (buffersym b) (s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (concat (buffer-name b) "; mouse-1: show, mouse-3: ignore") 'mouse-face 'mode-line-highlight 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (funcall rcirc-switch-to-buffer-function buffersym))) ;(mouse-3 . ,(lambda nil (interactive) (funcall rcirc-switch-to-buffer-function buffersym))) ;(mouse-3 . ,(lambda nil (interactive) (message "Borraré %s de %s" buffersym rcirc-activity ))) ;(mouse-3 . ,(lambda nil (interactive) (delete buffersym rcirc-activity))) (mouse-3 . ,(lambda nil (interactive) (message "Borraré %s de %s" buffersym rcirc-activity ) (rcirc-clear-activity buffersym) (rcirc-update-activity-string) )) ) ) ) ) ) ; lexical-let* ; fin del ((vars)) del let ; empieza el cuerpo del let (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) ; y ahora devuelve s en el let*: s) ) ;fin lambda (1r arg. mapconcat) buffers ",") )
(defun rcirc-activity-string (buffers) (mapconcat (lambda (b) (lexical-let* ( (buffersym b) (s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (concat (buffer-name b) "; mouse-1: show, mouse-3: ignore") 'mouse-face 'mode-line-highlight 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (unless (eq major-mode 'rcirc-mode) (setq rcirc-last-non-irc-buffer (current-buffer))) (funcall rcirc-switch-to-buffer-function buffersym) )) (mouse-3 . ,(lambda nil (interactive) (rcirc-clear-activity buffersym) (rcirc-update-activity-string) )) ) ) ) ) ) ; lexical-let* ; fin del ((vars)) del let ; empieza el cuerpo del let (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) ; y ahora devuelve s en el let*: s) ) ;fin lambda (1r arg. mapconcat) buffers ",") )
(defun rcirc-activity-string (buffers) (mapconcat (lambda (b) (lexical-let* ( (buffersym b) (s (propertize (substring-no-properties (rcirc-short-buffer-name b)) 'help-echo (concat (buffer-name b) "; mouse-1: show, mouse-3: ignore") 'mouse-face 'mode-line-highlight 'local-map `(keymap (mode-line keymap (mouse-1 . ,(lambda nil (interactive) (unless (eq major-mode 'rcirc-mode) (setq rcirc-last-non-irc-buffer (current-buffer))) ; (funcall rcirc-switch-to-buffer-function buffersym) ; En Emacs23 ya no existe rcirc-switch-to-buffer-function, parece. Simplifico: (switch-to-buffer buffersym) )) (mouse-3 . ,(lambda nil (interactive) (rcirc-clear-activity buffersym) (rcirc-update-activity-string) )) ) ) ) ) ) ; lexical-let* ; fin del ((vars)) del let ; empieza el cuerpo del let (with-current-buffer b (dolist (type rcirc-activity-types) (rcirc-add-face 0 (length s) (case type (nick 'rcirc-track-nick) (keyword 'rcirc-track-keyword)) s))) ; y ahora devuelve s en el let*: s) ) ;fin lambda (1r arg. mapconcat) buffers ",") )
1.1.8.2.3. cómo va eso del mode-line
global-mode-string contiene la lista de cadenas que componen la mode-line. Ej:
("" display-time-string emms-mode-line-string emms-playing-time-string working-mode-line-message rcirc-activity-string)
1.1.9. IS M-& para ejecutar comandos en segundo plano
- CONCLUSIÓN escrita el
ya está en Emacs 23.2
Julio 2008. Yo sólo quería más documentación…
Se dejó para más adelante.
Email from Juri Linkov: Re: & and M-& to run programs asynchronously
1.1.9.1. IS enviar informallo después de que salga Emacs23
1.1.9.1.1. motivo
Re: & and M-& to run programs asynchronously Samstag, 15. November, 2008 17:12 Uhr Von: "Chong Yidong" <…> Absender in den Kontakten speichern An: "Daniel Clemente" <…> CC: emacs-devel@gnu.org Daniel Clemente <…> writes: > Sorry, but why do we have to wait to check in features? More than 3 > months have passed and I don't know if someone else remembers that > this issue was still not resolved. If you're worried about this getting forgotten, file a bug; the report won't get lost.
1.1.9.1.2. IS pues mandé el informallo el ; apuntar URL
I propose to add a new function, async-shell-command, bound to M-&, which in analogous to shell-command (bound to M-!) but executes the command in the background (as if you had written an ampersand at the end of M-!). Both functions would respectively correspond to keys ! and & in dired, only that ! and & work only in dired but M-! and M-& would be global (work everywhere). The code is in this message in an old thread: http://article.gmane.org/gmane.emacs.devel/111825 There ar still some details to decide: how many buffers to open, where to direct STDOUT, whether output should be visible, … Some modes should be checked since they might be using M-&.
1.1.9.1.3. IS ver si alguien más se mueve
- CONCLUSIÓN escrita el
Ya se corrigió en la revisión 94761, el 3.m7.2009. ¡Bien!
1.1.9.2. sobre todo este rollo de las esperas forzadas
1.1.9.2.1. IS ¿por qué hay que esperar en Emacs?
- CONCLUSIÓN escrita el
vale, porque están en fase de „sólo correcciones mínimas“, por decisión de RMS que dice que si no se distraerían
1.1.9.2.2. BONUS proponer otros modelos de desarrollo a Emacs/RMS sin esperas (más ágiles)
1.1.9.2.3. IS mandarlo ya en
Contesto el mensaje de hace casi 1 año:
Now we have gone through the miserable bureaucracy of waiting almost 1 year since the patch was written. Could the patch for M-&=async-shell-command be finally checked in? -- Daniel
1.1.9.3. BONUS aún hay que ampliarlo para que tenga más opciones
1.1.10. IS después de M-/, permitir seguir enganchando palabras desde la fuente encontrada
- CONCLUSIÓN escrita el
se puede con: M-/ M-espacio M-/
1.1.11. BONUS investigar una cosa que me gustaría: acciones interactivas para después de un M-/
1.1.11.1. mi idea y solución inicial
en #emacs
19:23 <clemente> I would really like a complete set of subcommands to „paste from another location“ interactively so that you can decide after doing a M-/ how much text from there you want to bring here. Similar to the behaviour of C-w when you're doing C-s, but allowing you to rectify (un-yank words), preview what will be inserted, ... 19:23 <bts-> yeah when i press ctrl-right it just drops [5C in the buffer 19:23 <clemente> I should master Elisp first :-)
Lo que sí que va es:
trozodepalab M-/ ESPACIO M-/ ESPACIO M-/ ESPACIO M-/ ...
De momento me he hecho esto en mi .emacs:
; 18.7.2007: cosa muy útil pero que aún me gustaría mejorar más (defun copia-palabra-que-sigue-al-hallazgo (arg) "Como M-/ pero ampliado. Busca la palabra que estaba a medio escribir, por el documento actual (y otros), la completa, y entonces si se vuelve a llamar a esta función sigue copiando palabras que están adyacentes por la derecha a la palabra que se encontró" (interactive "*P") (progn (dabbrev-expand t)(insert " "))) (global-set-key "\M-?" 'copia-palabra-que-sigue-al-hallazgo)
1.1.11.2. formas menos chapuceras descubiertas luego; posibles soluciones alternativas
- LineCopyChar: para copiar la línea de encima/debajo del cursor. Poco útil
- vcursor: su extensión. 2º cursor
- secondary selection (y sus extensiones; ver wiki)
1.1.11.2.1. probar más vcursor
Es lo que yo quiero…
1.1.11.2.2. ¿secondarySelection?
1.1.12. BONUS deshacer en kmacro-step-edit-macro
Para permitir ir alante y atrás en la ejecución de una macro
1.1.13. IS en dired-do-shell-command, permitir completado por TAB
- CONCLUSIÓN escrita el
ya está
Con „!“ Y en lo de ejecutar comando, en general…
1.1.14. BONUS en dired, sugerir mejores nombres al copiar (C) y mover (R)
Quiero que esas operaciones empiecen ya sugiriendo en el minibúfer no sólo el directorio actual, sino también el nombre del fichero. O sea, al mover cos.txt
, quiero ver escrito cos.txt
para retocarlo p.ej. a cosa.txt
Se podría usar dired-dwim-target
para elegir el comportamiento de la elección del destino sugerido.
1.1.15. BONUS „vista de pájaro“ de un fichero: gráfico a escala del tamaño de cada sección
- representación gráfica de los bloques que componen un fichero
- ocupa toda la pantalla o menos, pero nunca más
- parecido a filelight pero para el interior de un fichero en vez de el interior de un directorio
- si no existe el concepto de „bloque interior“ dentro del fichero, mostrar simplemente las líneas, en un tamaño de fuente muy pequeño
- „bloque interior“: el definido por inicios y finales de secciones, cabeceras (org-mode), definiciones de funciones (prog-mode), etc.
- el tamaño de cada bloque interior ha de dar una indicación de su extensión
- igual que una sección (org) puede tener subsecciones, un bloque puede mostrar subbloques
- puede ir perfecto para poder ver cómo de grande es cada sección (cuántas líneas de contenido hay bajo cada cabecera) en org
[ ]
probar extensión „minimap“ (está en elpa) pues lo hace; aunque no sé si delimita bloques
1.1.16. BONUS pequeña función para sublista
¡Que esto se integre en algún paquete de Emacs
; Encontrado por ahí, en http://osdir.com/ml/help-gnu-emacs-gnu/2009-11/msg00484.html (defun sublist (list from &optional to) "Return a sublist of LIST, from FROM to TO. If END is omitted, it defaults to the length of the sequence. Counting starts at 0. Like `subseq' and `substring' but solely for lists." (let ((start (nthcdr from list))) ;start reference (if to (butlast start (- (+ from (length start)) ;if extract list at the end this makes it much faster to)) start)))
1.1.17. „bajar hasta la 1ª letra distinta“
Como C-n pero que salte todos los caracterese iguales al actual, hasta encontrar uno diferente.
Ej. si estoy en la „u“ del primer „/run/“, bajará hasta la „i“ del primer „/lib32“:
/run/initramfs /run/initramfs/fsck-root /run/initramfs/fsck.log /lib32 /lib32/libresolv.so.2 /lib32/libcrypt-2.22.so
Y luego, para confundir un poco… ¡hacer este comportamiento el inicial para todos los usuarios!. Creerán que las teclas flechita se han atascado.
1.1.18. varias cosas para „zone“
1.1.18.1. helm se cuelga las dos primeras veces → ver en „helm“ abajo
1.1.18.2. funcionar en varias ventanas/marcos
[ ]
añadir nueva variable personalizable para elegir dónde actúa. zone-window-scope- current-window (por defecto; es lo que hace ahora)
- all-windows-in-current-frame-same-effect
- all-windows-in-current-frame-different-effects
- all-windows-in-all-frames-same-effect
- all-windows-in-all-frames-different-effects
- quizás separarla en 2…
- https://emacs.stackexchange.com/questions/36238/how-do-i-run-zone-zone-when-idle-for-all-windows
1.1.18.3. tomar bien los „overlay“
- ahora: no toma ~overlays (o algo así), los descarta temporalmente, ẽ un dired
1.1.18.4. no quitar el window-display-table
- ahora me cambia window-display-table temporalmente (me quita el mío temporalmente)
1.1.19. renombrar fichero, ahora es muy complejo
- http://lists.gnu.org/archive/html/emacs-devel/2018-05/msg00103.html
- quiero que el rename-file me dé el nombre actual, no el nombre de un búfer cercano sugerido como destino
- https://emacs.stackexchange.com/questions/12656/how-to-complete-the-original-name-in-helm-dired-rename
- ooooooh, apretando M-n ya se encuentra el nombre que busco
1.1.20. se cuelga poco de vez en cuando por algo de jit o de org-mode, y no se deja matar
Lisp Backtrace: "re-search-forward" (0x7bdb33d8) "org-font-lock-add-priority-faces" (0x7bdb3748) "font-lock-fontify-keywords-region" (0x7bdb3c00) "font-lock-default-fontify-region" (0x7bdb3fb8) "font-lock-fontify-region" (0x7bdb42a8) 0x37de3cf0 PVEC_COMPILED "run-hook-wrapped" (0x7bdb46c0) "jit-lock–run-functions" (0x7bdb4a40) "jit-lock-fontify-now" (0x7bdb4e98) "jit-lock-function" (0x7bdb5238) "redisplay_internal (C function)" (0x0)
— SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=2, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 94885258459412 — SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=5, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 87 — SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=3, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 24 — SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=6, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 1 — SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=2, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 72 — SIGPROF {si_signo=SIGPROF, si_code=SI_TIMER, si_timerid=0, si_overrun=6, si_value={int=81205448, ptr=0x564c04d718c8}} — rt_sigreturn({mask=[]}) = 94885599648922
1.1.21. moverme en las 4 direcciones (izquierda, derecha, arriba, abajo) hasta encontrar el 1r carácter distinto al actual. „Disparar“ cursor hasta que choque contra algo distinto
[X]
está jump-char.el pero no hace esto; sólo hace izquierda/derecha (le falta arriba/abajo). Y tampoco permite decir „el 1º distinto“. Y no es muy cómodo- en lo que quiero yo, no hace falta ni siquiera decir a dónde hay que moverse; simplemente se mueve hasta encontrar algo distinto (o hasta que se acaba el camino en esa dirección)
- probablemente es útil algo así para editar dibujos en ASCII
por ejemplo, si me pongo en la s de security.d y pido ir abajo, quiero acabar en la c de classpath
/etc/java/security/security.d /etc/java/security/security.d/1003-gnu.javax.net.ssl.provider.Jessie /etc/java/security/security.d/1000-gnu.java.security.provider.Gnu /etc/java/security/security.d/1001-gnu.javax.crypto.jce.GnuCrypto /etc/java/security/security.d/1004-gnu.javax.security.auth.callback.GnuCallbacks /etc/java/security/security.d/2000-org.bouncycastle.jce.provider.BouncyCastleProvider /etc/java/security/security.d/1002-gnu.javax.crypto.jce.GnuSasl /etc/java/security/classpath.security /etc/java/cacerts-gcj
pruebo algo. Vaya, ELisp es más molesto que lo quiero. Pero esto ya es una „prueba del concepto“
(defun movu-ĝis-trovi-alian-leteron (&optional io) (interactive "P") (let ((letero (following-char))) (message "Nun en: %s, %s" (point) (line-number-at-pos)) (message "Movos ĝis trovi ion malsaman al «%s» (%s)" letero (get-char-code-property letero 'name)) (next-line) (while (eq (following-char) letero) (next-line) ) ;; plu ĉi tie. ẽ ebligu salti tra pluraj tipoj de spacoj ) )
- veo: spatial-navigate, parece hacer una parte de lo que busco. Por probar
- ah, veo que visidata lo hace bien, con
<
y>
, es lo que buscaba. Pero lo quiero para cualquier modo de texto, no sólo CSV- mmmmm… puedo abrir cualquier .txt como si fuera un CSV de 1 columna
1.2. fallos molestos
1.2.1. MALFAR fallo al buscar, debido a global-hl-line-mode
- CONCLUSIÓN escrita el
ya no pasa
- edita
- busca: C-s LE1_PROG
- dale más a C-s
- no encuentra más resultados, aunque los hay
El fallo sólo pasa si global-hl-mode está activo
1.2.2. IS al depurar, al evaluar y hacer un error se para el depurado
- CONCLUSIÓN escrita el
lo arreglaron
Mandé el fallo el
http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=2966
1.2.3. BONUS al grabar tendría que crear un directorio
(make-directory)
1.2.3.1. IS mandar infrallo
- CONCLUSIÓN escrita el
3016: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=3016
emacs-pretest-bug@gnu.org 23.0.92.2; offer to make a directory when saving if it is needed
- Do: C-x C-f /tmp/doesnotexist/myfile RET. Emacs tells you about make-directory
- Type something.
- C-x C-s. Error: no such directory
I suggest that Emacs not only tell the user about make-directory, but actually ask him/her in a y-n question if the directory should be created. This should happen on save.
The script could be then:
a. User does: C-x C-f /tmp/doesnotexist/myfile RET b. Emacs warns: Warning: Directory /tmp/doesnotexist does not exist c. User types something d. User does: C-x C-s e. Emacs asks: Create directory /tmp/doesnotexist? f1. If yes, it (and the above directories) are created f2. If not, issue an error. The user can then do M-x make-directory as needed
This allows a faster save with just one extra key (C-x C-s y) instead of having to type M-x make-directory /tmp/doesnotexist RET C-x C-s
1.2.4. BONUS mejorar mensaje molesto "A command is running. Kill it?"
Está en simple.el, función shell-command
.
Sale al abrir con & un .pdf mediante evince y luego hacer (shell-command "xeyes &")
.
Por lo visto no quiere tener dos tareas de fondo a la vez.
[ ]
debería decir algo como "Command evince is running. Kill it and open xeyes?"[ ]
hay que permitir varias tareas en segundo plano a la vez; se ha de solucionar con un parche como el de M-& para ejecutar comandos en segundo plano
1.2.5. BONUS el modo batch no debería hacer preguntas interactivas
Hay que buscar o una solución general o un evite de cada problema.
1.2.5.1. IS un fichero está bloqueado: locked by %s: (s, q, p, ?)
- CONCLUSIÓN escrita el
Ya encontré la forma de evitar que se genere la pregunta bloqueante
Esto está en userlock.el y parece que no hay forma de desactivarlo. Debería. file:///w/emacs/lisp/userlock.el
Quizás puedo revertir el efecto de:
(put 'file-locked 'error-conditions '(file-locked file-error error)) (put 'file-locked 'error-message "File is locked")
Se ve con:
(get 'file-locked 'error-conditions)
Y con:
(message (format "tengo %s" (length (get 'file-locked 'error-conditions))))
Pero aunque lo ponga a null me sigue haciendo la pregunta.
Tengo que mandar el fallo. → no, ya encontré la solución, ver abajo.
1.2.5.1.1. también podría ser org-mode quien atrape este error y lo trate
Pedir en lista
1.2.5.1.2. IS encontré la forma de evitar que se genere la pregunta bloqueante
(defun ask-user-about-lock (file opponent) nil)
1.2.6. BONUS avisar antes de imprimir. #2250
Mandado a -pretest-bugs el
.http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=2250
1.2.7. BONUS C-M-x no va siempre
Cuando está en dos líneas, falla:
(setq b '( (c d )))
Ponte entre c y d (¡en lisp-interaction-mode!) y C-M-x
Da: Lisp error: (void-function c)
En 2012, veo: eval-defun: Wrong type argument: listp, ***
1.2.7.1. En cambio, así va:
(setq b '( (c d )))
Absurdo
1.2.7.2. solución esquive
Solución por offby1:
(setq defun-prompt-regexp nil open-paren-in-column-0-is-defun-start nil)
Y ya va. Triste :-(
1.2.8. BONUS no puedo copiar más de 4000 caracteres mediante mi función usuaria de xsel
Me doy cuenta el
en ali con .org; sólo pasa en modo texto y es debido al invento que me hice con xsel (encontrable en Internet, supongo).Quizás se debe a esto en xsel.c, línea 2040:
/* Get the maximum incremental selection size in bytes */ /*max_req = MAX_SELECTION_INCR (display);*/ max_req = 4000;
Curioso que diga „4000 bytes“ pues yo conté „4000 caracteres“.
1.2.9. BONUS no va menú (F10) ¡debido a rcirc!
Debugger entered--Lisp error: (wrong-type-argument stringp nil) string-width(nil) tmm-get-keymap(nil nil) … tmm-menubar() x-menu-bar-open(nil) menu-bar-open()
Y pasa excepto si comento la línea (rcirc-track-minor-mode 1)
de mi .emacs.
Debe de ser por los ganchos a post-command-hook…
Se me ocurre:
- que ese modo sólo se active al entrar en rcirc, y se desactive al salir. Se minimiza el problema
- usar ERC envez
- corregirlo
Temporal: M-x rcirc-track-minor-mode
lo desactiva y el menú vuelve a ir
1.2.10. BONUS js-mode colorea mal los comentarios (quizás los confunde con expresiones regulares)
El
, js.el de Emacs de Bazaar. Ej.// this fails: the 3rd line is shown in font-lock-string-face (it should be font-lock-comment-face) // something, / // this line is wrong (but it is corrected if you type here. Type again the / above to restore the misbehaviour)
Muchos lo han visto antes:
- http://joost.zeekat.nl/2007/10/31/javascript-regex-en-string-literal-highlighting-in-emacs/ ← parecido mas distinto fallo (que ya no está)
1.2.11. el demonio muere cada vez que cierro X
Quizás es por hibernar.
Es por matar X.
Desde mucho tiempo he estado abriéndolo de nuevo cada vez. Me pasa desde m9.2011 mínimo (y en m9.2012 sigue pasando).
Ver strace.
1.2.11.1. ∴ no tiene que ver con:
- wanderlust ni cualquier otra actividad que estuviera haciendo antes
- dbus, pues compilé sin biblioteca de dbus (comprobado con ldd) y aún pasaba
- gtk, pues compilé sin gtk (con lucid) y pasaba
- screen, pues pasa igual tanto dentro como fuera
- nohup, pues muere igual tanto con como sin (por lo visto no lo protege bien de SIGTERM)
1.2.11.2. depuración para ver qué hace al morir
Intento depurarlo:
- con ltrace, es ltrace quien lo mata
killed by SIGTRAP
, por algo como https://bugzilla.redhat.com/show_bug.cgi?id=526007 - con strace puedo
1.2.11.2.1. MALFAR con ltrace ← ¡lo mata ltrace!
SYS__newselect(17, 0xbfcc5894, 0xbfcc5914, 0, 0xbfcc5cc8 <no return ...> +++ killed by SIGTRAP +++
1.2.11.2.2. IS con strace, algo útil pero no se ve el SIGTERM
write(2, "Saving summary and folder status"..., 39) = 39 write(2, "\n", 1) = 1 close(3) = 0 stat64("/tmp/emacs1000/server", {st_dev=makedev(8, 1), st_ino=3620976, st_mode=S_IFSOCK|0700, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=0, st_size=0, st_atime=2011/10/02-18:58:08, st_mtime=2011/10/02-18:48:47, st_ctime=2011/10/02-18:48:47}) = 0 unlink("/tmp/emacs1000/server") = 0 socket(PF_FILE, SOCK_STREAM, 0) = 3 connect(3, {sa_family=AF_FILE, path="/tmp/emacs1000/server"}, 110) = -1 ENOENT (No such file or directory) close(3) = 0 kill(24163, SIGABRT) = 0 --- SIGABRT (Aborted) @ 0 (0) --- rt_sigaction(SIGABRT, {SIG_DFL, [], 0}, {0x8128e90, [], 0}, 8) = 0 kill(24163, SIGABRT) = 0 --- SIGABRT (Aborted) @ 0 (0) --- Process 24163 detached
1.2.11.2.3. IS ∴ otro con strace y con emacs -Q
← éste es el caso más sencillo que falla
Veo un ERESTARTNOHAND muy extraño:
Process 19853 attached - interrupt to quit select(7, [3 4], [], NULL, {9, 917779}) = ? ERESTARTNOHAND (To be restarted) — SIGTERM (Terminated) @ 0 (0) — rt_sigaction(SIGTERM, {SIG_DFL, [], 0}, {0x812e530, [], 0}, 8) = 0 close(3) = 0 stat64("/tmp/emacs1000/server", {st_dev=makedev(0, 17), st_ino=1363200, st_mode=S_IFSOCK|0700, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=0, st_size=0, st_atime=2012/05/13-12:18:37, st_mtime=2012/05/13-12:18:34, st_ctime=2012/05/13-12:18:34}) = 0 unlink("/tmp/emacs1000/server") = 0 socket(PF_FILE, SOCK_STREAM, 0) = 3 connect(3, {sa_family=AF_FILE, path="/tmp/emacs1000/server"}, 110) = -1 ENOENT (No such file or directory) close(3) = 0 kill(19853, SIGABRT) = 0 — SIGABRT (Aborted) @ 0 (0) — rt_sigaction(SIGABRT, {SIG_DFL, [], 0}, {0x812e530, [], 0}, 8) = 0 kill(19853, SIGABRT) = 0 — SIGABRT (Aborted) @ 0 (0) — Process 19853 detached
Dicen que el ERESTARTNOHAND no debería llegar nunca a una aplicación. Quizás es sólo del strace.
Creo que no tiene que ve el ERESTARTNOHAND.
1.2.11.3. otras cosas raras que pasan
Además veo que algún emacsclient X que tenía abierto queda vivo al salir de X… qué extraño.
Intento reproducirlo… y entonces funciona todo: emacsd aguanta tanto matar X y reabrir (varias veces) como hibernar entre medio. Tendré que probarlo más tras haber abierto correo, org, etc.
1.2.11.4. IS ∴ solución temporal
- abrir demacs fuera de X. Así los cierres de X no le afectan. Parece que funciona bien.
1.2.12. BONUS me queda un proceso hijo openssl bloqueado que consume el 100% de CPU
Pasa de vez en cuando. Sobre todo me lo encuentro al volver a abrir emacsclient tras abrir X (las veces en que emacsd no ha muerto por cerrar X).
dc 31992 2.1 0.1 4712 2148 ? Rs Sep24 30:31 /usr/bin/openssl s_client -quiet -host imap.gmail.com -port 993 -verify 1 -CApath ~/.emacs.d/datos-w3m/
Una traza dice poco:
(gdb) bt #0 0xb77f5424 in __kernel_vsyscall () #1 0xb7525c3d in select () from /lib/i386-linux-gnu/i686/cmov/libc.so.6 #2 0x08082977 in ?? () #3 0x0805ca00 in ?? () #4 0x0805c430 in ?? () #5 0xb7476e46 in __libc_start_main () from /lib/i386-linux-gnu/i686/cmov/libc.so.6 #6 0x0805c6a1 in ?? () Backtrace stopped: Not enough registers or memory available to unwind further
En efecto, está en select:
select(4, 0xbfd931a0, 0xbfd93220, 0, 0 <unfinished ...> SYS__newselect(4, 0xbfd931a0, 0xbfd93220, 0, 0) = 1 <... select resumed> ) = 1 SSL_version(0x8dedfd8, 0xbfd931a0, 0xbfd93220, 0, 0) = 768 SSL_get_fd(0x8dedfd8, 0xbfd931a0, 0xbfd93220, 0, 0) = 3 SSL_get_fd(0x8dedfd8, 0xbfd931a0, 0xbfd93220, 0, 0) = 3 SSL_write(0x8dedfd8, 0x8de4950, 0, 0, 0) = 0 SSL_get_error(0x8dedfd8, 0, 0, 0, 0) = 5 SSL_version(0x8dedfd8, 0, 0, 0, 0) = 768 SSL_state(0x8dedfd8, 0, 0, 0, 0) = 3 SSL_pending(0x8dedfd8, 0, 0, 0, 0) = 0 fileno(0xb75b6440) = 0 fileno(0xb75b6440) = 0 SSL_get_fd(0x8dedfd8, 0, 0, 0, 0) = 3 SSL_get_fd(0x8dedfd8, 0, 0, 0, 0) = 3 select(4, 0xbfd931a0, 0xbfd93220, 0, 0 <unfinished ...> SYS__newselect(4, 0xbfd931a0, 0xbfd93220, 0, 0) = 1 <... select resumed> ) = 1
Por si acaso desactivo gnus (con su gnus-demon).
Pero ¡me pasó sin ni siquiera haber abierto el correo! (Ni gnus ni wanderlust).
Y yo sólo escribí imap.gmail.com
en mi .emacs aquí:
(setq elmo-imap4-default-server "imap.gmail.com")
Así que es por elmo, que es usado por Wanderlust para mi cuenta de Gmail principal.
[ ]
elegir bien entre openssl y starttls; creo que starttls es poco seguro
1.2.13. BONUS python-mode se lía con ciertos comentarios de tipo "raro""" y colorea mal el resto del fichero
En concreto:
print "hola"""
1.2.14. IS no detecta bien cdv cuando tengo uno dentro de otro
(vc-responsible-backend "/home/dc/repoweb")
Debería dar Hg, da git. Quizás porque /home/dc es git.
Vaya, debería detectar esta imbricación y dar el cdv más interno, no el primero que encuentra.
∴ Cambiar vc-handled-backends.
1.2.15. quiero desactivar automáticamente el coloreado cuando detecte líneas muy largas, pues lo petan todo
Ej. cuando >1M caracteres por línea, el coloreado es muy lento. Como protección, debería autoapagarse.
~~~
https://emacs.stackexchange.com/questions/9955/how-do-i-turn-off-syntax-coloring-for-lines-that-exceed-the-word-limit-in-prelud~~~
https://github.com/clojure-emacs/cider/issues/1115
De momento, desactivarlo manualmente: M-x font-lock-mode
1.2.16. el minibúfer está usado (veo cursor remanente), y puedo colocarme ahí, y un M-x abre un 2º („[2]“)
(buffer-name)
" *Minibuf-0*"
Pruebo:
- (kill-buffer (buffer-name))
- (kill-buffer " Minibuf-0") → nil
- ∴ (kill-buffer " Minibuf-2") ← ∴ esto me lo ha arreglado alguna vez
- (buffer-list), me ayudó
Tras tener un error (intentando usar exit-minibufer) salió backtrace, y creo que este backtrace me arregló el problema original.
1.2.17. „zone“ no combina bien con helm → ver abajo en „helm“
1.2.18. colorea mal el modo HTML cuando hay una plantilla jinja
esto ya se lía: a partir del apóstrofe, queda todo en amarillo (el resto de esa línea, y la línea siguiente). No debería
{% if a < 0 %} <p> {# It's the apostrophe #} Something
- es debido al signo
<
. Alguien se cree que está empezando etiqueta HTML
1.2.18.1. dentro de modo jinja2-mode, hay fallo parecido
- visto en https://github.com/paradoxxxzero/jinja2-mode/issues/24
- he informado el nuevo: https://github.com/paradoxxxzero/jinja2-mode/issues/26
aquí, la línea del comentario queda en rojo (entera), pero la siguiente línea está afectada por el error mencionado arriba; sale toda en amarilla
{% if a < 0 %} <p>a</p> {# It's the apostrophe #} <p>Something</p>
1.2.18.2. necesito una forma de que Emacs explique las decisiones de fontificación
1.2.19. me está tomando ciertos caracteres de otra fuente
- esto me pasa , con: GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2023-01-05, y creo que antes no pasaba
- „ẽ“ lo toma de:
ftcr:-PfEd-Terminus-medium-normal-normal-*-12-*-*-*-c-*-iso10646-1 (#x2D1)
- „S“ lo toma de:
x:-xos4-terminus-medium-r-normal--20-200-72-72-c-100-iso8859-1 (#x53)
1.2.20. tramp falla a menudo (ẽ al revertir búfers) con (wrong-type-argument "integer-or-marker-p nil")
y hay que repetir orden
Debugger entered--Lisp error: (wrong-type-argument "integer-or-marker-p nil") signal(wrong-type-argument ("integer-or-marker-p nil")) tramp-error((tramp-file-name "su" "so" nil "ocrb" nil "/home/so/billing/src/steps/reversal_invoice/__init..." nil) wrong-type-argument "integer-or-marker-p nil") tramp-signal-hook-function(wrong-type-argument ("integer-or-marker-p nil")) signal(wrong-type-argument ("integer-or-marker-p nil")) tramp-handle-insert-file-contents("/su:so@ocrb:/home/so/contract/src/get_or_create_contract.py" t nil nil t) tramp-sh-file-name-handler(insert-file-contents "/su:so@ocrb:/home/so/contract/src/get_or_create_co..." t nil nil t) apply(tramp-sh-file-name-handler insert-file-contents ("/su:so@ocrb:/home/so/contract/src/get_or_create_co..." t nil nil t)) tramp-file-name-handler(insert-file-contents "/su:so@ocrb:/home/so/contract/src/get_or_create_co..." t nil nil t) revert-buffer-insert-file-contents--default-function("/su:so@ocrb:/home/so/contract/src/get_or_create_co..." nil) revert-buffer--default(nil t) revert-buffer(nil t)
tramp-handle-insert-file-contents("/su:so@ocrb:/home/so/contract/src/get_or_create_contract.py" t nil nil t) (tramp-handle-insert-file-contents "/su:so@ocrb:/home/so/contract/src/get_or_create_contract.py" t nil nil t)
hago eso
decenasmiles de veces seguidas y me va bien. No parece ser que un % de veces falle(loop for i from 1000 downto 1 do (tramp-handle-insert-file-contents "/su:so@ocrb:/home/so/contract/src/get_or_create_contract.py" t nil nil t))
- me miro tramp-handle-insert-file-contents, es largo
1.2.21. en modo gráfico, algunos caracteres de otras fuentes (ej. en vietnamita) salen muy pequeños
- Por ejemplo, en „Trần“, el ầ aparece mucho más pequeño
- está eligiendo para ầ: x:-mutt-clearlyu-medium-r-normal–17-120-100-100-p-123-iso10646-1 (#x1EA7)
- mientras que para la n elige: x:-xos4-terminus-medium-r-normal–32-320-72-72-c-160-iso8859-1 (#x6E)
- ∴ en modo texto (-nw) va bien
- en terminal (urxvt) va bien; elige otras fuentes
- estoy usando
--with-x-toolkit=lucid
,GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2023-08-10
1.3. pequeños arreglos quizás de configuración
1.3.1. BONUS vc: se cierra una ventana más de la que toca tras un C-x v v (commit)
En: GNU Emacs 23.1.1 (2009-09-14)
- Dividir el marco en 4 ventanas
- En una de ellas hacer C-x v v
- Se usa una de las otras para escribir el comentario (en vez de crear una nueva)
- C-c C-c
- Se cierra esa ventana usada, cosa que es un error, pues no fue abierta por vc, sino por el usuario, y por tanto la quiere mantener
Soluciones:
- o siempre abrir ventana nueva para el comentario de la entrada
- o matar el búfer pero no la ventana
Se pueden hacer ambaas. En la 1ª solución, partir la ventana actual en dos, en vez de irse a buscar una otra ventana cualquiera.
Lo 2º se controla con la variable vc-delete-logbuf-window
, por lo que hay mucho trozo hecho. Le falta una opción: matar búfer pero no ventana (esto es diferente de „enterrar búfer“, que mantiene una ventana vieja pero funcional). Además, si se queda la ventana vieja por ahí, en cada comentario de los siguientes „C-x v v“ se ve el texto del anterior.
Por ahora usar (setq vc-delete-logbuf-window nil)
1.3.2. el outline-mode (en modos ¬org, como en Lisp) no me funciona desde hace años: peta o hace cosas raras
- me dice a veces:
rx--translate-bounded-repetition: rx ‘**’ range error
Warning (org-element-cache): org-element–cache: Org parser error in .emacs::1944. Resetting. The error was: (error "rx ‘**’ range error") Backtrace: " backtrace-to-string(nil) org-element-at-point() org-cycle(nil) funcall-interactively(org-cycle nil) call-interactively(org-cycle nil nil) command-execute(org-cycle) "
no veo nada especial en 1944 (move-text-down). Excepto que quizás hay mucho texto hasta ahí; quizás estaba buscando algo antes, no lo ha encontrado, y se ha paseado por miles de líneas en vano, y es la cantidad lo que le hace fallar- ah, 1944 es el byte, no la línea. Es cuando empieza el esquemado
- quizás tengo mal la sintaxis en alguna de las secciones, o en la cabecera
- quizás mi .emacs es demasiado grande
aparentemente se llama a rx–translate-bounded-repetition con name="**"
rx--translate-bounded-repetition(** (1 0 "*"))
- está en org-element–parse-to(1944)
rx-to-string((seq line-start (** 1 0 "*") " "))
- ya falla: (org-element–parse-to 1944)
pasa con:
;; -- mode: emacs-lisp; mode:outline-minor; hs-minor-mode: nil; outline-regexp:";;;; [^ ]" -*-
;;; hola ; a ;;;; h1 ; b
funciona fatal; ni siquiera esto va, y hace cosas muy raras:
;; -- mode: emacs-lisp; mode:outline-minor; outline-regexp:";+" --
; hola (a) ;; h1 (b) ;; h2 (c)
; segundo
- ∴ de momento no lo uso y no lo necesito, pues conozco la estructura de mi .emacs, y el outline-mode me ha hecho perder demasiadas horas durante años. Pero me gustaría que alguien lo arreglara
1.4. cuelgues, petadas y cosas que han dejado de ir sin motivo
1.4.1. MALFAR bloqueo aleatorio en llamadas a XftGlyphExtents, fallo viejo
- CONCLUSIÓN escrita el
parece que ya no pasa; de todas formas otros no pudieron reproducirlo, así que se ha cerrado el informe
Tiene algo que ver con el cursor. Fallo muy viejo (me ha acompañado años). Quizás ya está arreglado.
Mandado a: http://debbugs.gnu.org/db/30/3090.html
[ ]
mirarme la entrada 100999 de Bazaar, puede haber corregido algo[ ]
encontrar la forma de causarlo sin icicles ni tabbar (pues no los uso y me ha pasado alguno vez)
Recuerdo que podía desbloquear Emacs de alguna forma, aunque no siempre con éxito (a veces hizo SIGSEGV).
1.4.2. IS peta en overlay-put-ov 'after-string, #9738
Con versión „GNU Emacs 24.0.90.4 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars) of 2011-10-12 on ali“ esto hace petar:
(setq ov (make-overlay 1 2)) (overlay-put ov 'after-string "\n111\n2" )
(gdb) bt #0 0xb7fe2424 in __kernel_vsyscall () #1 0xb7393be6 in kill () from /lib/i386-linux-gnu/i686/cmov/libc.so.6 #2 0x081288e8 in abort () at emacs.c:386 #3 0x08083497 in find_row_edges (max_bpos=2, max_pos=2, min_bpos=2, min_pos=2, row=0x882e008, it=0x586b) at xdisp.c:18713 #4 display_line (it=0x586b) at xdisp.c:19310 #5 0x08087b5f in try_window (window=141028573, pos=..., flags=1) at xdisp.c:15896 #6 0x0809c920 in redisplay_window (window=141028573, just_this_one_p=0) at xdisp.c:15440 #7 0x0809e3d1 in redisplay_window_0 (window=141028573) at xdisp.c:13563 #8 0x08199617 in internal_condition_case_1 (bfun=0x809e3b0 <redisplay_window_0>, arg=141028573, handlers=138771190, hfun=0x8068970 <redisplay_window_error>) at eval.c:1537 #9 0x0806ca4f in redisplay_windows (window=<optimized out>) at xdisp.c:13543 #10 0x08088960 in redisplay_internal () at xdisp.c:13120 #11 0x081339b7 in read_char (commandflag=1, nmaps=2, maps=0xbffff210, prev_event=138789130, used_mouse_menu=0xbffff308, end_time=0x0) at keyboard.c:2443 #12 0x08135b69 in read_key_sequence (keybuf=0xbffff378, prompt=138789130, dont_downcase_last=0, can_return_switch_frame=1, fix_current_buffer=1, bufsize=30) at keyboard.c:9282 #13 0x081373f7 in command_loop_1 () at keyboard.c:1447 #14 0x081994ed in internal_condition_case (bfun=0x8137260 <command_loop_1>, handlers=138820138, hfun=0x812d7c0 <cmd_error>) at eval.c:1499 #15 0x0812c2c5 in command_loop_2 (ignore=138789130) at keyboard.c:1158 #16 0x08199409 in internal_catch (tag=138818114, func=0x812c2a0 <command_loop_2>, arg=138789130) at eval.c:1256 #17 0x0812d2fa in command_loop () at keyboard.c:1137 #18 recursive_edit_1 () at keyboard.c:757 #19 0x0812d5ee in Frecursive_edit () at keyboard.c:821 #20 0x08054deb in main (argc=4, argv=Cannot access memory at address 0xa ) at emacs.c:1706 (gdb) quit
Encontré el fallo cuando intentaba usar http://www.randomsample.de/profile-dotemacs.el.
[X]
Enviado a emacs: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9738[X]
corregido; ambos parches enviados por Eli funcionan. Ha sido una corrección muy rápida
1.4.3. MALFAR me ha cambiado indentación de todo
- me ha quitado espacios a final de línea
- me ha cambiado espacios por tabuladores al inicio de citas
- me ha separado de otra manera las etiquetas en cabeceras
- los CLOCK los ha cambiado a TAB también
Mmm… tiene pinta de que no ha sido org-mode, sino un whitespace-cleanup mal hecho
1.4.4. se cuelga en delete_frame a veces cuando intento cerrar ventana
1.4.4.1. bt de gdb (traza)
(gdb) bt #0 0x080610aa in candidate_frame (candidate=293563469, frame=309720077, minibuf=139254378) at frame.c:904 #1 0x08061273 in next_frame (frame=309720077, minibuf=139254378) at frame.c:954 #2 0x08061738 in delete_frame (frame=309720077, force=139157738) at frame.c:1151 #3 0x08061cc1 in Fdelete_frame (frame=309720077, force=139157738) at frame.c:1390 #4 0x081b9b5b in Ffuncall (nargs=3, args=0xbf898734) at eval.c:2678 #5 0x081f513a in exec_byte_code (bytestr=137650553, vector=137650573, maxdepth=16, args_template=139157714, nargs=0, args=0x0) at bytecode.c:898 #6 0x081ba449 in funcall _ lambda (fun=137650525, nargs=1, arg_vector=0x84b60d2) at eval.c:2907 #7 0x081b9d61 in Ffuncall (nargs=2, args=0xbf898a34) at eval.c:2724 #8 0x081f513a in exec_byte_code (bytestr=139511521, vector=141971309, maxdepth=12, args_template=139157714, nargs=0, args=0x0) at bytecode.c:898 #9 0x081ba449 in funcall _ lambda (fun=141971349, nargs=1, arg_vector=0x84b60d2) at eval.c:2907 #10 0x081b9d61 in Ffuncall (nargs=2, args=0xbf898d70) at eval.c:2724 #11 0x081b57fb in Fcall _ interactively (function=139545402, record_flag=139157714, keys=142847421) at callint.c:852 #12 0x081b9b85 in Ffuncall (nargs=4, args=0xbf898fbc) at eval.c:2682 #13 0x081f513a in exec_byte_code (bytestr=137525497, vector=137525517, maxdepth=52, args_template=4100, nargs=4, args=0xbf8992e0) at bytecode.c:898
1.4.4.2. n en gdb (voy corriendo por líneas)
(gdb) next 952 if (EQ (FRAME_MINIBUF_WINDOW (c), minibuf) (gdb) 954 || EQ (WINDOW_FRAME (XWINDOW (minibuf)), (gdb) 955 FRAME_FOCUS_FRAME (c))) (gdb) 958 else if (XFASTINT (minibuf)
= 0) (gdb) 950 else if (WINDOWP (minibuf)) (gdb) 952 if (EQ (FRAME_MINIBUF_WINDOW (c), minibuf) (gdb) 954 || EQ (WINDOW_FRAME (XWINDOW (minibuf)), (gdb) 955 FRAME_FOCUS_FRAME (c))) (gdb) 958 else if (XFASTINT (minibuf) =
0) (gdb) 950 else if (WINDOWP (minibuf)) (gdb) 952 if (EQ (FRAME_MINIBUF_WINDOW (c), minibuf) (gdb) 954 || EQ (WINDOW_FRAME (XWINDOW (minibuf)), (gdb) 955 FRAME_FOCUS_FRAME (c))) (gdb) 958 else if (XFASTINT (minibuf) == 0) (gdb) 950 else if (WINDOWP (minibuf)) (gdb) 952 if (EQ (FRAME_MINIBUF_WINDOW (c), minibuf) (gdb) 954 || EQ (WINDOW_FRAME (XWINDOW (minibuf)),
1.4.4.3. cómo reproducirlo (he encontrado forma)
- emacs -Q –daemon
- In a terminal: emacsclient -c
- In a second terminal: emacsclient -c
- In that second terminal press C-c to kill the emacsclient process
Results: the second emacsclient is not killed, and the first one is hung. The daemon is also hung and you cannot open other emacsclient
1.4.4.4. ∴ solución para revivirlo
¡Me funcionó esto! Y muchas veces.
(gdb) return 0 Make next_frame return now? (y or n) y #0 0x08061523 in delete_frame (frame=324524917, force=139157738) at frame.c:1151 1151 if (NILP (Vrun_hooks) || is_tooltip_frame) (gdb) cont Continuing.
Pero otras veces me lo cargo tocando cosas raras en gdb.
1.4.5. MALFAR se cuelga solo al abrir ciertos ficheros, creo que por Unicode raro
[76488.909530] emacs[4995]: segfault at 5612084b ip b3007781 sp bf9b05c0 error 4 in libgcc_s.so.1[b2ff3000+1b000] [78003.210008] emacs[30959]: segfault at 2159f504 ip 0813332d sp bf8ca3c4 error 4 in emacs-24.3.50[8048000+264000] [81138.280177] emacs[2698]: segfault at 2a3607c4 ip 0813332d sp bf9ebcb4 error 4 in emacs-24.3.50[8048000+264000] [82635.248673] emacs[19470]: segfault at 10cf0334 ip 08133459 sp bfd63ef4 error 4 in emacs-24.3.50[8048000+265000]
- recompilé, y lo mismo
- creo que es por algo nuevo de estos días ( )
- tuve que pasar a emacs 23.4 (sin helm)
- y usar vim por el camino (¡incómodo!)
- seguí un tiempo con 23 pues ya iba bien
[X]
esperar arreglo, volver a 24 ← parece que el ya no falla
1.4.6. MALFAR se cuelga con uso al 100% tras matar X (el demonio sobrevive)
#9332 0x00000000005984ee in mark_object (arg=16408162) at alloc.c:6243 #9333 0x00000000005988ba in mark_object (arg=16649030) at alloc.c:6355 #9334 0x00000000005984ee in mark_object (arg=12843890) at alloc.c:6243 #9335 0x0000000000597c8b in mark_vectorlike (ptr=0xc221b8 <buffer_defaults>) at alloc.c:5894 #9336 0x0000000000597e00 in mark_buffer (buffer=0xc221b8 <buffer_defaults>) at alloc.c:5945 #9337 0x000000000059747c in Fgarbage_collect () at alloc.c:5637 #9338 0x00000000005206db in maybe_gc () at lisp.h:4522 #9339 0x00000000005b6fff in Ffuncall (nargs=2, args=0x7fffbaf6c300) at eval.c:2766 #9340 0x00000000005b6c47 in call1 (fn=12883202, arg1=212844253) at eval.c:2614 #9341 0x000000000052c916 in timer_check_2 (timers=384952022, idle_timers=384952070) at keyboard.c:4515 #9342 0x000000000052ca2e in timer_check () at keyboard.c:4582 #9343 0x0000000000602747 in wait_reading_process_output (time_limit=37, nsecs=0, read_kbd=-1, do_display=true, wait_for_cell=12843890, wait_proc=0x0, just_wait_proc=0) at process.c:4386 #9344 0x0000000000419ea1 in sit_for (timeout=148, reading=true, display_option=1) at dispnew.c:5805 #9345 0x0000000000529553 in read_char (commandflag=1, map=73056374, prev_event=12843890, used_mouse_menu=0x7fffbaf6cd9f, end_time=0x0) at keyboard.c:2811 #9346 0x0000000000534bd4 in read_key_sequence (keybuf=0x7fffbaf6cf80, bufsize=30, prompt=12843890, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9084 #9347 0x0000000000526821 in command_loop_1 () at keyboard.c:1452
1.4.7. el cuelgue de xcb creo que lo puedo reproducir, me pasó al buscar (C-s), es excesivamente lento (se queda parado un rato), y cuando cambié a otra ventana mientras esperaba esos segundos, se quedó colgado ahí
1.4.8. IS líneas muy altas, con márgenes muy grandes, si contienen símbolos como ∀ (algo pasa con las fuentes)
- con emacs 24.3.1 y el de
- no pasa con: ∅←Δߪ∩ŝ…
- pasa con ∴∀∃
- ∀ es de esta fuente:
xft:-unknown-TeX Gyre Termes Math-normal-normal-normal-*-20-*-*-*-*-0-iso10646-1 (#xEFE)
Eso es porque actualicé hace poco:
-fonts-texgyre 2.004.2-4 +fonts-texgyre 20140520-1
Las desinstalo… Y me queda otra:
xft:-unknown-FreeMono-normal-normal-normal-*-20-*-*-*-m-0-iso10646-1 (#x9EC)
Que ya funciona y me da esos glifos.
1.4.9. IS condition-case lo peta
(condition-case nil nil nil)
Mandado informe, 22675: http://lists.gnu.org/archive/html/bug-gnu-emacs/2016-02/msg00875.html Corregido.
1.4.10. IS error raro al compilar, por async
helm-files.el:1632:26:Warning: ‘(sum (with-temp-buffer (insert-file-contents-literally file) (secure-hash algo (current-buffer))))’ is a malformed function
(require 'cl-lib)
Debido a:
commit 2f85993b5a455d5633f42c7e1a0a1cb429b2c09b Author: Thierry Volpiatto <thierry.volpiatto@gmail.com> Date: Tue May 2 14:28:53 2017 +0200
Helm requires async from now and use it in helm-ff-checksum.
- helm-files.el (helm-ff-checksum): Use async-let.
Era por versión vieja de async.
1.4.11. IS no lee socket de $XDG_RUNTIME_DIR, y le tengo que pasar yo la ruta. Tras cambio de m12.2018. No se abre emacsclient
Esto tras recompilar.
- http://lists.gnu.org/archive/html/emacs-devel/2018-12/msg00116.html
- ¡me toca actualizar todas las llamadas a emacsclient…!
Intento esto, no va:
dc; ~/.emacs.d ; ln -s ~/.xdg-runtime-mío/emacs/ server
(lo hice porque veo que lo busca ahí. Pero lo busca tras fallar, no antes).
Esto sí que va pero no me gusta:
ln -s ~/.xdg-runtime-mío/emacs/ /tmp/emacs1000
De momento cambio invocaciones.
∴ Al final lo arreglaron, y mi problema era que estaba usando emacsclient vieja. Ya no me hace falta lo de /tmp/emacs1000
1.4.11.1. MALFAR se le volvió a perdir
dc; ~ ; emacsclient -e '(progn (selected-window))'emacsclient: can't find socket; have you started the server? To start the server in Emacs, type "M-x server-start". emacsclient: No socket or alternate editor. Please use:
–socket-name –server-file (or environment variable EMACS_SERVER_FILE) –alternate-editor (or environment variable ALTERNATE_EDITOR)
M-x server-start. .emacs está igual que siempre.
Lo borré (enlace mal creado). Luego ya fue, así:
dc; ~/.xdg-runtime-mío ; ll -dl ~/.xdg-runtime-mío/emacs ~/.xdg-runtime-mío/emacs/serverdrwx-–— 2 dc dc 4096 Aug 28 19:10 home/dc.xdg-runtime-mío/emacs srwx-–— 1 dc dc 0 Aug 28 19:10 home/dc.xdg-runtime-mío/emacs/server
dc; ~/.xdg-runtime-mío ;
∴ Era que estaba usando un emasclient viejo.
1.4.12. error extraño con uniquify y org, lo cuelga
Tenía dos pruebas.html abiertos, uno de ellos viene de pruebas.org. Reexporto un trozo de este org, y se culega cada vez, con pila de decamiles.
Lisp Backtrace: "Automatic GC" (0x0) "file-name-nondirectory" (0x43cf7658) "uniquify-get-proposed-name" (0x43cf7990) "uniquify-rationalize-conflicting-sublist" (0x43cf7c58) "uniquify-rationalize-a-list" (0x43cf7ea8) "uniquify-rationalize-conflicting-sublist" (0x43cf8188) "uniquify-rationalize-a-list" (0x43cf83d8) "uniquify-rationalize" (0x43cf8768) "uniquify-rationalize-file-buffer-names" (0x43cf8a88) "uniquify–rename-buffer-advice" (0x43cf8c88) "apply" (0x43cf8d88) "rename-buffer" (0x43cf8fa0) "set-visited-file-name" (0x43cf9300) "write-file" (0x43cf95a0) "org-export-to-file" (0x43cf9a08) "org-html-export-to-html" (0x43cf9c50) "org-export-dispatch" (0x43cf9fa0) "funcall-interactively" (0x43cf9f98) "call-interactively" (0x43cfa2c0) "command-execute" (0x43cfa558)
Otra vez, meses más tarde, abriendo varios README.md (que iban quedando README.md<1>, README.md<2> etc.:
"directory-file-name" (0x25e00b08) "uniquify-get-proposed-name" (0x25e00f20) "uniquify-rationalize" (0x25e01378) "uniquify-rationalize-file-buffer-names" (0x25e01788) "uniquify–create-file-buffer-advice" (0x25e01b50) "apply" (0x25e01b48) "create-file-buffer" (0x25e01e68) "find-file-noselect" (0x25e02408) "view-file" (0x25e02758) "dired-view-file" (0x25e02be0) "funcall-interactively" (0x25e02bd8) "call-interactively" (0x25e02cf0) "command-execute" (0x25e03068)
Para salir del paso: M-x toggle-uniquify-buffer-names
1.4.13. tengo una función que no consigo sobreescribir durante el arranque pero sí a mano. helm-git-grep-get-input-symbol. Es para que vaya helm-git-grep-at-point. Con el demonio no va, con emacs suelto sí
Parece que se ha corregido con el emacsclient nuevo (es que estaba usando uno desfasado).- creo que es que alguien me la redefine
- ∴ por lo visto es el helm-git-grep.elc original (el .elc). Borrarlo
- añado pitidos para ver dónde pasa cada cosa
1.4.14. por cierto, el helm-git-grep me peta, quizás tras redefinición rara que he hecho, ẽ
Debugger entered--Lisp error: (error "No buffer named *helm*") helm-get-current-source() helm-attr(base-directory) (let ((it (helm-attr 'base-directory))) (if it (let ((default-directory it)) (apply 'start-process "git-grep-process" nil "git" (helm-git-grep-args))) 'nil)) helm-git-grep-process() funcall(helm-git-grep-process) do-after-load-evaluation("/home/dc/.emacs.d/elpa/helm-git-grep-20170614.1411...") load-with-code-conversion("/home/dc/.emacs.d/elpa/helm-git-grep-20170614.1411..." "/home/dc/.emacs.d/elpa/helm-git-grep-20170614.1411..." nil t) command-execute(helm-git-grep)
- y es que mi defun para redefinir esa función no está teniendo efecto. ¿Por qué? Estoy cansándome de que cosas tan básicas no funcionen
aaaaaah, ya falla el eval-after-load
Debugger entered–Lisp error: (error "No buffer named helm") helm-get-current-source() helm-attr(base-directory) (let ((it (helm-attr 'base-directory))) (if it (let* ((default-directory it) (handler (find-file-name-handler (directory-file-name default-directory) 'make-process))) (make-process :name "git-grep-process" :buffer "búfpro3" :command (append '("git") (helm-git-grep-args)) :file-handler handler)) 'nil)) (helm-aif (helm-attr 'base-directory) (let* ((default-directory it) (handler (find-file-name-handler (directory-file-name default-directory) 'make-process))) (make-process :name "git-grep-process" :buffer "búfpro3" :command (append '("git") (helm-git-grep-args)) :file-handler handler)) 'nil) helm-git-grep-process() eval-after-load("helm-git-grep" helm-git-grep-process) elisp–eval-last-sexp(nil)
1.4.15. se cuelga en garbage-collect, tras un rato. ¿O es que es muy lento? ~ sweep_conses
en alloc.c. Algo que ver con kill-ring, y quizás con otras cosas
- esto en versión compilada,
GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2020-09-16
- hace pocos meses no pasaba
"Automatic GC" (0x0) "garbage-collect" (0x3833bcc0) "semantic-fetch-tags" (0x3833c0d0) "semantic-idle-scheduler-refresh-tags" (0x3833c480) "semantic-idle-core-handler" (0x3833ca70) "semantic-idle-scheduler-function" (0x3833cea0) "apply" (0x3833ce98) "timer-event-handler" (0x3833d228)
- tenía sólo 196 búfers abiertos: org y 4 python y nada más
- ∴ esperar (y C-g) es efectivo, y lo recupero
en alloc.c, está ejecutando esto, y se pasa mucho rato en
sweep_conses
, luego consigue avanzar* Sweep: find all structures not marked, and free them. * static void gc_sweep (void) { sweep_strings (); check_string_bytes (!noninteractive); sweep_conses (); sweep_floats (); sweep_intervals (); sweep_symbols (); sweep_buffers (); sweep_vectors (); pdumper_clear_marks (); check_string_bytes (!noninteractive); }
- además me ha pasado que (ẽ al hacer „fetch“ en magit de emacs) empieza a consumir mucha memoria, >10 Gb
[X]
probar a ejecutarlo con límite de memoria
ulimit -v 5000123; demacs # emacs -Q
- lo pongo en demacs
- ayuda
está iterando continuamente en file:///w/emacs/src/alloc.c#org3538176
while (*tem) { if (*tem >= (struct ablock *) abase && *tem < atop) { i++; *tem = (*tem)->x.next_free; }
- eso es lisp_align_free
- quizás el pasarse rato en sweep_conses es razonable, y el problema está en haber consumido tanta memoria. O sea, quizás el problema es una fuga de memoria
1.4.15.1. busco revisión que falla
- "d037a6a2e6f92d793b1d5403dea4c7d3ca70883c" („GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2020-10-02“) falla, y otros anteriores también
- volveré al de m2 para ver si pasa, "b6c39214065272e33a544d09b9a341bbe17ed47b"
- también me pasó
- o sea, o es anterior, o es por algún paquete (ẽ helm)
1.4.15.2. ¿es gradual o súbito? Busco cuándo pasa. Parece que tiene que ver con kill-ring (no con helm)
- gradual, parece
- y parece que tiene ver con helm (o con el paso del tiempo…)
(helm-find-files)- con el „C-c g“ (git-grep) y tecleando y borrando varias veces, puedo hacer que suba la memoria
- si me muevo de otra forma por búfer, no pasa
- por eso parece helm
- lo pruebo con un pitador que me he hecho (ir midiendo cóm se gasta la memoria, en directo, y pitando)
- lo reproduzco un poco si en helm-git-grep tecleo muchas barras |||||||||||
- pero esto no causa fuga
[ ]
aaaaaaaaaah, creo que he encontrado algo. Pasa al copiar (M-w) trozos muy grandes- helm-show-kill-ring sufre un poco, pero creo que no tiene que ver
- aprieto M-w continuamente, y el uso de memoria sube continuamente (aunque estoy copiando lo mismo): 2 Gb, 3 Gb, …
- no es por interprogram-cut-function pues a nil también pasa
- esto ya lo causa (copy-region-as-kill 1 1000000)
- en 2º intento, las órdenes de abajo no iban pero ésta sí
- confirmo
- repito: (loop for i from 1 to 50 do (if (copy-region-as-kill 1 1000000) 'ended))
- en „scratch“ ya pasa
- (filter-buffer-substring 1 1000000)
- (loop for i from 1 to 50 do (if (filter-buffer-substring 1 1000000) 'ended))
- no pasa siempre, no es tan pasante como el copy-region-as-kill
- sube memoria, pero no siempre, o luego baja
- esto lo causa: (if (filter-buffer-substring 1 1000000) 5)
esto lo causa: (if (filter-buffer-substring-function 1 1000000) 5)- esto también: (if (buffer-substring–filter 1 1000000) 5)
qué raro. Parece que está pasando algo másCuando no lo oigo es porque era muy agudo el pitido- (loop for i from 1 to 50 do (if (buffer-substring–filter 1 1000000) 'ended))
- no siempre sube
- ahora me adentro mejor, tras ver que buffer-substring–filter no es el problema → el problema es kill-new
- de hecho, ¿cuál de los dos es culpable?
(setq largo (buffer-substring–filter 1 1000000)) (loop for i from 1 to 50000 do (if (kill-new largo) 'ended))
- el 1º come, el 2º no
∴ esto siempre come memoria
;; no ayuda: (setq mistr (filter-buffer-substring 1 1000000 ))
(defun miversiónde-copy-region-as-kill (beg end) "Esta función come RAM" ;; muy importante el let (let ((str (filter-buffer-substring beg end))) (kill-new str) ) nil) ;; pon búfer de 1M de letras antes (loop for i from 1 to 50 do (if (miversiónde-copy-region-as-kill 1 1000000) 'fin))
- ah, parece que falla cuando ambas están juntas en el let
- me toca desarrollarla
- tras hacerlo, veo que buffer-substring–filter no importa y equivale a buffer-substring
∴ queda:
(defun miversiónde-copy-region-as-kill (beg end) "Esta función come RAM" ;; muy importante el let ;; Nota: miversiónde-buffer-substring–filter beg end: al final es buffer-substring simplemente (let ((str (buffer-substring beg end))) (kill-new str) ) nil) ;; pon búfer de 1M de letras antes (loop for i from 1 to 50 do (if (miversiónde-copy-region-as-kill 1 1000000) 'fin))
¿por qué kill-new tiene parches?
(ad-Advice-kill-new AD–ADDOIT-FUNCTION STRING &optional REPLACE)
Before-advice ‘strip-keymap-properties-from-kill’: Advised by emacs-w3m. Strip ‘keymap’ or ‘local-map’ properties from a killed string.
- (ad-deactivate #'kill-new)
- ∴ no es por este parche
- por cierto,
(setq kill-do-not-save-duplicates t)
no me ayuda, sigue comiendo memoria [ ]
¿desarrollo kill-new? Seguir con ello
(setq kill-ring-max 100) (defun miversiónde-kill-new (string) "Buscando versión mínima hambrienta" (let ((history-delete-duplicates nil)) (add-to-history 'kill-ring string kill-ring-max t)) ;; (setq kill-ring-yank-pointer kill-ring) )
(defun miversiónde-copy-region-as-kill (beg end) "Esta función come RAM" ;; muy importante el let ;; Nota: miversiónde-buffer-substring–filter beg end: al final es buffer-substring simplemente (let ((str (buffer-substring beg end))) (miversiónde-kill-new str) ) nil) ;; pon búfer de 1M de letras antes (loop for i from 1 to 50 do (if (miversiónde-copy-region-as-kill 1 1000000) 'fin))
1.4.15.3. añadir algo para ver cómo está usando la memoria
- Mmmmmmm ¿información de depuración? Tipo „estoy tomando 1510 Kb“, „estoy liberando 1510 Kb“.
- Dejarlo en fichero.
- o pitando
- ¿no hay nada ya hecho?
- me hice función para exportar todas las variables de Emacs a un árbol de ficheros
y vi el problema:
-rw-r–r– 1 dc dc 214713 Oct 14 21:17 face-new-frame-defaults -rw-r–r– 1 dc dc 221353 Oct 14 21:16 char-code-property-alist -rw-r–r– 1 dc dc 249761 Oct 14 21:16 composition-function-table -rw-r–r– 1 dc dc 446546 Oct 14 21:16 cl–generic-combined-method-memoization -rw-r–r– 1 dc dc 112950409 Oct 14 21:17 gui–last-selected-text-primary -rw-r–r– 1 dc dc 752243187 Oct 14 21:17 kill-ring-yank-pointer -rw-r–r– 1 dc dc 752243187 Oct 14 21:18 kill-ring
- en este momento tenía 40 Mb. en el portapapeles
- (/ 112 40.0)
- (/ 752 40.0)
1.4.15.4. IS reducir la incidencia de los problemas de kill-ring
- creo que lo que estoy es por algo fundamental de emacs: si doy un texto de 1 Gb y le pido que lo copie 5 veces al portapapeles, me va a tomar 5 Gb de memoria. Y esta memoria luego no se devuelve (creo)
- obviamente la solución es no copiar cosas tan grandes
- pero hay paliativos
[X]
ẽ permitir cola más pequeña[X]
¿poner límite de longitud a lo que cabe?- no creo que haga falta pues rara vez quiero copiar textos enormes
- sí que hace falta para forzarme a no copiar cachos de >100 Mb
[X]
no guardar repetidos
1.4.15.5. ATENDAS otra fuga, por caché de helm
- tras corregir lo de kill-ring, tendré una fuga menos, pero hay otras. No se ha arreglado. Sigo buscando. Encuentro algo de helm, y ∴ encuentro que quien come memoria es una caché de helm
vuelco memoria, y encuentro cadena sospechosa, aparece >1M veces (en 5'4 Gb de RAM). Y aparece poco en emacs recién empezado
195046 #+END_QUOTE 198459 s.org 201406 /wiki/M 287123 tica.org 508749 n.org 588332 /wiki/ 649631 a.org 1001204 .~[-[:alnum:]:#@^._]+\(?:~[[:digit:]]+\)?~\)\'
es file-name-version-regexp
(defvar file-name-version-regexp "\?~\\)" ;; The last
[[:digit]]+ matches relative versions in git, ;; e.g. `foo.js.~HEAD~1
'. "Regular expression matching the backup/version part of a file name. Used by `file-name-sans-versions'.")[ ]
hacer bucle que detecte cuándo una cadena se hace „demasiado“ popular en memoria y que me avise pitando- en concreto esa cadena…
aaaaaaaaaaaaah, helm está haciendo algo que llama muchísimo a file-name-sans-versions continuamente
Debugger entered: nil file-name-sans-versions(".") file-name-extension(".") helm-ff-filter-candidate-one-by-one("home/dc/repoweb/hacer.") helm-ff-directory-files("home/dc/repoweb/hacer" t) #f(compiled-function (k v) #<bytecode 0x705a7c35e103035>)("home/dc/repoweb/hacer" ((#("home/dc/repoweb/hacer." 0 24 (face helm-ff-dotted-directory)) . "home/dc/repoweb/hacer.") (#("home/dc/repoweb/hacer.." 0 25 (face helm-ff-dotted-directory)) . "home/dc/repoweb/hacer..") (#("basic.css" 0 6 (face helm-ff-file) 6 9 (face (helm-ff-file-extension helm-ff-file))) . […] maphash(#f(compiled-function (k v) #<bytecode 0x705a7c35e103035>) #<hash-table equal 3/65 0x157c5d3ecf97>) helm-ff-refresh-cache() helm-ff–cache-mode-refresh-1() helm-ff–cache-mode-refresh() apply(helm-ff–cache-mode-refresh nil) timer-event-handler([t 0 1 0 nil helm-ff–cache-mode-refresh nil idle 0]) recursive-edit() debug()
- le pongo temporalmente:
(setq helm-ff-keep-cached-candidates nil)
- eso hace que llame muchísimo menos a
file-name-sans-versions
- aún la llama al entrar a fichero nuevo, o al teclear en helm
- y no parece ralentizarme
- eso hace que llame muchísimo menos a
[X]
probar, a ver si así no come RAM- en efecto. Ya no pasa. Era por esto de la caché
[ ]
intentar arreglar en helm, o entender por qué la caché come tanta memoria
1.4.16. IS magit, no entra
hint: Waiting for your editor to close the file… Waiting for Emacs… ERROR: Wrong number of arguments: (1 . 4), 5 error: There was a problem with the editor 'opt/dc/emacs/bin/emacsclient –socket-name=/home/dc.xdg-runtime-m\ío/emacs/server'. Please supply the message using either -m or -F option.
- quizás es por: .git/hooks/pre-commit ← no creo, no ha cambiado
Debugger entered–Lisp error: (wrong-number-of-arguments (1 . 4) 5) server-switch-buffer–with-editor-server-window-alist(#f(compiled-function (&optional next-buffer killed-one filepos this-frame-only) "Switch to another buffer, preferably one that has a client. NEXT-BUFFER is a suggestion; if it is a live buffer, use it.-ONE is t in a recursive call if we have already killed one-file server buffer. This means we should avoid the final\"switch to some other buffer\" since we've already effectively that. specifies a new buffer position for NEXT-BUFFER, if we NEXT-BUFFER in an existing window. If non-nil, it should a cons cell (LINENUMBER . COLUMNNUMBER)." #<bytecode 0x43092dd55890222>) #<buffer COMMIT_EDITMSG> nil nil nil) […] server-execute-continuation(#<process server <55>>) server-process-filter(#<process server <55>> "-dir home/dc/opencraft/edx-platform -current-fra…")
- es por file:~/.emacs.d/elpa/with-editor-20191024.1905/with-editor.el
- lo actualizo
1.4.17. IS ya no puedo teclear el número siete (7)
GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2022-04-28
) y se estropeó esta tecla
compilé (- produzco el número apretando „3“ y „Enter“ a la vez. Entiendo que esto es algo poco común: aparte de esa extraña elección de teclas que sólo hago yo, está el añadido de que tanto el „3“ como el „Enter“ son para mí modificadores, que no escriben nada sino que son para producir otras letras. Probablemente Emacs ha decidido que „un modificador + otro modificador, apretados a la vez, no pueden producir ningún signo“. En realidad sí que pueden, pues cuando aprieto „3“, el „Enter“ deja de ser un modificador. Esto me va en todos los demás programas, durante muchos años
- no encuentro eso de hacer que emacs me diga la tecla que ha leído; ẽ ahora me dice que ha visto „á“ en vez de „translated frorm AltGr+a“ o algo así
- aún lo veo en lisp/help.el, en help-key-description, pero no sé lo que hace aún
- (help–read-key-sequence 'no-mouse-movement) ← no me lo detecta
- (read-key-sequence "Describe the following key, mouse click, or menu item: " nil nil 'can-return-switch-frame) ← no me la detecta
- [BROKEN LINK: No match for fuzzy expression: DEFUN ("read-key-sequence", Fread_key_sequence, Sread_key_sequence, 1, 5, 0,]
[X]
biseccionar para encontrar dónde se estropeó → ∴ es 15910e5da3- sospecho de:
bbbb47704f „Fix detection of modifier keys on XInput 2“,. Pero no0a9c8855b0 „Don't decode text within XIM callbacks or handle_one_xevent“,f1d535da1e „Decode keyboard input as latin-1 whenever appropriate“ etc.
- la de fallaba
- probaré ec464789df, de
no compila
Loading window (source)… Loading /w/emacs/lisp/files.el (source)…
Error: void-function (string-lines) mapbacktrace((closure (t) (evald func args _flags) (let ((args args)) (if evald (progn (princ " ") (prin1 func) (princ "(")) (progn (princ " (") (setq args (cons func args)))) (if args (while (progn (prin1 (car args)) (setq args (cdr args))) (princ " "))) (princ ")
- pruebo f2047fdca4, de , compila bien. Pero aún falla; no hay siete
- pruebo b1c6d5f2b7, de , aún falla
- pruebo d0d7765f23, de , justo antes de bbbb47704f. También falla
- pruebo 6410b6ada0, de . También falla
- pruebo eb0680bd57, de
- curioso, luego la probé otra vez y no fallaba
. Falla y ¿me detecta menos teclas? ← no, quizas es por teclado „frío“
- pruebo a6df8f9f99, de , sí que va el 7
- limito a una más cercana: 68b3273214, de , sí que va
limito a una más cercana: d43ca38556, de- limito a una más cercana: 2d573afecb, de , sí que va
- así que de 2d573afecb..eb0680bd57 se estropeó
- pruebo en a654e37349 (viene tras 2 entradas de teclado, sospechosas)
(supongo que ya fallará)← pero no falla - así que de a654e37349..eb0680bd57 se estropeó
- pruebo 3b7d55a801 „Speed up count_size_as_multibyte“, sí que va
- así que de 3b7d55a801..eb0680bd57 se estropeó. Extraño
pruebo e389da74d5, „Fix recent change in xwidget.c“. Aquí me pierdo pues todo esto parece funcionar (eb0680bd57 también). Quizás mal probadopruebo otra vez: (empiezo de nuevo): 86ebc88cd8 va, 8a7df412a6 falla, ecaedf2117 va, 51e51ce2df va.- otro intento: 7a699e79f6 va, y alguno de los posteriores cercanos lo rompe
- ∴ es por 15910e5da3 | Ignore modifier keys early when handling X key press events junto con d7fc7bdd81 | master Fix typo in last change, de
- sospecho de:
- parece que 15910e5da3 está algo relacionado con pgtk, ver ahí notas
- veo algo relacionado: https://lists.gnu.org/archive/html/emacs-devel/2022-04/msg00761.html
- enviar fallo
- por ahora no tengo tiempo de meterme en esto de pgtk/xinput2 etc. El desarrollo de Emacs necesita bastante tiempo
- y mi caso es muy extraño y específico y difícil de replicar
[X]
encuentrosoluciónparche para mi configuración„simplemente“ comentar esta línea (que añadí yo mismo) en mi .xkb:
modifier_map Mod4 { <RTRN> };
- no creo que estuviera mal esa línea, pues el RTRN es un modificador (es mi AltGr), así que no sé por qué tengo que esconderlo. Sigo creyendo que el problema está en Emacs (es lo que se estropeó)
- ∴ comentándolo, va
esquives← ya no me hacen falta tras la solución del Mod4- ¿volver a versión anterior? (de hace ~2 meses)
- quizás buscarme otra combinación de teclas para poner número siete
- ¿quizás evitar mencionarlo? Ya hay mucha gente hablando del siete
- el „seis coma nueve periódico“ es lo mismo
- apretar 6 y 8 a la vez… y que ponga la media… Lo malo es que aún necesito apretar la tecla etiquetada „3“ para conseguir el 6 y el 8… Qué lío
- puedo usar wmii para capturar las teclas que emacs no ve, y hacer que envíe un „7“
M-x siete
, ver mi .emacs
1.4.18. se cuelga seriamente al añadir una función Python a un fichero largo. Por font-lock. Creo que es por abrir """ y no haberlo cerrado aún
(gdb) finish Run till exit from #0 syntax_property_entry (c=c@entry=115, via_property=true) at syntax.h:105 syntax_property_with_flags (via_property=true, c=115) at syntax.h:121 121 return CONSP (ent) ? XFIXNUM (XCAR (ent)) : Swhitespace; Value returned is $1 = (struct Lisp_X *) 0x7f73aa94eceb (gdb) finish Run till exit from #0 syntax_property_with_flags (via_property=true, c=115) at syntax.h:121 scan_sexps_forward (state=state@entry=0x7ffe67bea310, from=<optimized out>, from_byte=<optimized out>, end=end@entry=19427, targetdepth=targetdepth@entry=-9223372036854775808, stopbefore=stopbefore@entry=false, commentstop=0) at syntax.c:3410 3410 c_code = SYNTAX (c); (gdb) finish Run till exit from #0 scan_sexps_forward (state=state@entry=0x7ffe67bea310, from=<optimized out>, from_byte=<optimized out>, end=end@entry=19427, targetdepth=targetdepth@entry=-9223372036854775808, stopbefore=stopbefore@entry=false, commentstop=0) at syntax.c:3410 Fparse_partial_sexp (from=<optimized out>, to=<optimized out>, targetdepth=<optimized out>, stopbefore=0x0, oldstate=<optimized out>, commentstop=0x0) at syntax.c:3610 3610 SET_PT_BOTH (state.location, state.location_byte); (gdb) finish Run till exit from #0 Fparse_partial_sexp (from=<optimized out>, to=<optimized out>, targetdepth=<optimized out>, stopbefore=0x0, oldstate=<optimized out>, commentstop=0x0) at syntax.c:3610 0x000055bb7c3d4eab in exec_byte_code (fun=0x2, args_template=94263985235299, nargs=5, args=0x7f73aa1f1730) at bytecode.c:809 809 val = funcall_subr (XSUBR (call_fun), call_nargs, call_args); Value returned is $2 = (struct Lisp_X *) 0x55bb8b5ae563 (gdb) finish Run till exit from #0 0x000055bb7c3d4eab in exec_byte_code (fun=0x2, args_template=94263985235299, nargs=5, args=0x7f73aa1f1730) at bytecode.c:809
- tuve que matarlo. Luego cada vez que se abría volvía a pasar
GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2022-05-04
1.4.19. show-paren-mode se queja más que antes: „Error running timer ‘show-paren-function’: (error "Marker does not point anywhere") [10 times]“
- esto en feature-mode
1.4.20. magit ya no va en remoto. Creía que era por tramp, pero era más bien por uniquify (probablement por uniquify ∩ tramp, y además visible sólo en magit)
- esto en „GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2022-12-28“. Pero hace unos días iba
■ Warning (magit): "Magit cannot find Git on host #(\"/su:so@ocrb:\" 1 3 (helm-ff-file t helm-ff-dir t) 4 6 (helm-ff-file t helm-ff-dir t) 7 11 (helm-ff-file t helm-ff-dir t)).
Check the value of `magit-remote-git-executable' using `magit-debug-git-executable' and consult the info node `(tramp)Remote programs'."
Running "git –version" failed with output:
bin/sh: 374: cd: can't cd to ~/billing
No sé qué es el número; va aumentando:
/bin/sh: 404: cd: can't cd to ~/billing/ /bin/sh: 410: cd: can't cd to ~/billing/ /bin/sh: 416: cd: can't cd to ~/billing/ /bin/sh: 422: cd: can't cd to ~/billing/ /bin/sh: 428: cd: can't cd to ~/billing/ /bin/sh: 434: cd: can't cd to ~/billing/ /bin/sh: 440: cd: can't cd to ~/billing/
- no es ID de proceso pues no le afectan otros procesos que creo
- si creo como dc un ~/billing, sigue pasando
- pasé a „GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2022-11-18“, y ¡¡aún pasa!! No entiendo porqué. Antes no pasaba, con ese mismo emacs
veo que hace
timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1672647664, tv_nsec=341572062}}, NULL) = 0 timerfd_settime(3, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=1672647664, tv_nsec=341572062}}, NULL) = 0 write(17, "( cd \\~/billing/ && env INSIDE_EMACS\\=30.0.50\\,magit\\,tramp\\:2.6.0-pre git --no-"..., 279) = 279 timer_settime(0, TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0 timerfd_settime(3, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0 alarm(0) = 0
- ∴ ¿será que intenta entrar a directorio llamado
~/billing
, con el ~ literalmente?pruebo
so@ocrb:~$ mkdir -p \~/billing so@ocrb:~$
- sí, es eso. El error cambia tras es
- me está volviendo loco. Está yendo a directorios extraños tipo
/su:so@ocrb:~/.
y luego quejándose con/bin/sh: 477: cd: can't cd to ~/./
- aún no sé si el problema es tramp o magit. tramp lo abre bien
- eshell funciona bien, ẽ
/su:so@ocrb:~/billing $ ls
va bien
- eshell funciona bien, ẽ
instalo magit nuevo
Version: 20221208.1848
Other versions: 20221101.2214 (installed), 3.3.0 (nongnu).
- ∴ no hizo falta
∴ por cierto, el primer fallo fue
Debugger entered–Lisp error: (cl-assertion-failed ((equal (directory-file-name dirname) dirname) nil)) cl–assertion-failed((equal (directory-file-name dirname) dirname)) uniquify-get-proposed-name("
" #("/su:so@ocrb:~/" 7 11 (tramp-default t)) nil #("/su:so@ocrb:~/" 7 11 (tramp-default t))) uniquify-rationalize((#s(uniquify-item :base "
" :dirname #("su:so@ocrb:~" 7 11 (tramp-default t)) :buffer #<buffer<3>> :proposed nil :original-dirname #("/su:so@ocrb:~/" 7 11 (tramp-default t))))) uniquify-rationalize-file-buffer-names("
" #("su:so@ocrb:" 7 11 (tramp-default t)) #<buffer<3>>) uniquify--create-file-buffer-advice(#<buffer ~<3>> #("/su:so@ocrb:
" 7 11 (tramp-default t))) create-file-buffer(#("/su:so@ocrb:~" 7 11 (tramp-default t))) dired-internal-noselect(#("/su:so@ocrb:~" 7 11 (tramp-default t)) nil) dired-noselect(#("su:so@ocrb:~" 7 11 (tramp-default t))) run-hook-with-args-until-success(dired-noselect #("su:so@ocrb:~" 7 11 (tramp-default t))) find-file-noselect("su:so@:/home/so" nil nil nil)- esto es la causa. Me estaba creando búfers llamados
~
y cosas raras~<2>
etc., y creo que por esto se liaba cuando llegaba uno nuevo por tramp - ∴ cerré esos búfers, reintenté y ya fue
- esto es la causa. Me estaba creando búfers llamados
1.4.21. IS peta con SIGSEGV la versión terminal (sin X) por algo de faz a nulo. Es por GC
- mandado
- https://lists.gnu.org/archive/html/bug-gnu-emacs/2024-05/msg01548.html
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71176
para reproducir:
for j in `seq 30`; do for i in `seq 10`; do urxvt -e emacsclient '-nw' '-e' '(dired "~")' &; done; sleep 1 && killall emacsclient; done
descubro
The minimal .emacs needed to reproduce it has these 2 lines:
(setq garbage-collection-messages t) (set-face-foreground 'default "#bbb")
If I comment any of them, it doesn't crash.
So it seems it's GC-related. When GC runs while some face is being set up AND the GC tries to display a message (by using that face?), it crashes.
[X]
ya lo arregló Eli, en 74b8043e60d, „Prevent crashes due to redisplay while realizing the default face“
1.4.22. MALFAR peta con SIGPIPE por abrir y cerrar frames TTY rápidamente
1.4.23. algo nuevo por abrir y cerrar muchas ventanas: máxima recursión
- pasa con -Q
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71223
- el nuevo parche de Stefan va bien
metido en:
0d7d835902d server.el: Avoid nested runs of process filters (bug#71223)
1.4.24. BONUS algo nuevo por abrir y cerrar muchas ventanas: SIGSEGV. Difícil de reproducir. w->desired_matrix->rows
. No hay „glyph matrix“
- pasa con -Q
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71224
- pude 2 veces
- grabé core dump
- tras el parche de Stefan para 71223, aún pasa. Aunque le causé yo el max-lisp-eval-depth bajo; quizás eso ayudó
añado, sin saber mucho lo que hago
fprintf(stderr, "Allocated frame glyph matrix, window %s, frame %s, x/y %d/%d\n", window, f, x, y);
- file:///w/emacs/src/term.c#orgb4941aa
no mando esto, no hace falta ya. Ver lo que mandé a Eli, es mucho más sencillo
I could reproduce it but only once! with a combination of this : emacs –fg-daemon -Q (setq max-lisp-eval-depth 100) ;; not sure how important (setq garbage-collection-messages t) ;; not sure if needed (defun recurse () (recurse)) (recurse) ;; not sure if needed I see the Lisp backtrace inside Emacs. I don't close it with "q". Then: for j in `seq 100`; do for i in `seq 10`; do urxvt -e emacsclient '-nw' '-e' '(dired "~")' &; done; sleep 3 && killall emacsclient; done And wait around 15 seconds. I think then I manually opened still another frame; not sure.
Then I saw:
Process server <441> not running: connection broken by remote peer
Lisp nesting exceeds ‘max-lisp-eval-depth’
Program received signal SIGSEGV, Segmentation fault. 0x00005555555ac8a3 in init_iterator (it=0x7ffffffe5440, w=0x5555562cb760, charpos=-1, bytepos=-1, row=0x0, base_face_id=MODE_LINE_ACTIVE_FACE_ID) at xdisp.c:3225 3225 row = MATRIX_MODE_LINE_ROW (w->desired_matrix); (gdb) bt #0 0x00005555555ac8a3 in init_iterator (it=0x7ffffffe5440, w=0x5555562cb760, charpos=-1, bytepos=-1, row=0x0, base_face_id=MODE_LINE_ACTIVE_FACE_ID) at xdisp.c:3225 #1 0x00005555555ebf64 in display_mode_line (w=0x5555562cb760, face_id=MODE_LINE_ACTIVE_FACE_ID, format=XIL(0x7ffff1d38143)) at xdisp.c:27366 #2 0x00005555555a913c in pos_visible_p (w=0x5555562cb760, charpos=-1, x=0x7ffffffeb74c, y=0x7ffffffeb748, rtop=0x7ffffffeb75c, rbot=0x7ffffffeb758, rowh=0x7ffffffeb754, vpos=0x7ffffffeb750) at xdisp.c:1732 #3 0x0000555555606480 in Fpos_visible_in_window_p (pos=XIL(0x30), window=XIL(0), partially=XIL(0x30)) at window.c:2018 #4 0x0000555555770ab5 in funcall_subr (subr=0x555555eb3500 <Spos_visible_in_window_p>, numargs=3, args=0x7ffff0dff4a0) at eval.c:3165 […] #436 0x000055555568fc21 in recursive_edit_1 () at keyboard.c:754 #437 0x000055555568fe4d in Frecursive_edit () at keyboard.c:837 #438 0x000055555568b8b4 in main (argc=3, argv=0x7fffffffdf08) at emacs.c:2625 (gdb) (gdb) xbacktrace "pos-visible-in-window-p" (0xf0dff4a0) "line-move-partial" (0xf0dff3a8) "line-move" (0xf0dff338) "next-line" (0xfffebfb0) "funcall-interactively" (0xfffebfa8) "call-interactively" (0xf0dff2a0) "command-execute" (0xfffecbb8) "recursive-edit" (0xfffed000) "debug" (0xf0dff220) "eval-expression–debug" (0xfffed708) "recurse" (0xfffeda70) "recurse" (0xfffedcf0) "recurse" (0xfffedf70) "recurse" (0xfffee1f0)
∴ así lo reproduzco:
After a few hours of debugging and learning. I found a very simple formula to produce the SIGSEGV. No GC involved, and no automated window opening/resizing. To reproduce it:
emacs –fg-daemon -Q emacsclient -c
Open a buffer with this code in it: (defun recurse () (recurse)) (recurse)
And eval the defun. Don't call (recurse) yet.
Do: M-x debug This opens the backtrace window. Use C-x o to go away from the backtrace window and back to that buffer with the Lisp code. Now eval (with C-x C-e) the call to (recurse) You get a message in the minibuffer: cl-prin1, excessive-lisp-nesting, and the backtrace window is updated. Don't close that backtrace window.
Open a new frame, as before: emacsclient -c The daemon crashes with SIGSEGV.
- luego no puedo abrir emacsclient
- 9cd182dae88, va bien
- bef514de4d3: va bien. No me lo esperaba. ∴ Quizás es recompilar lo que me lo ha arreglado
- 19806248167: también va bien
1.4.25. IS tras 71224 (glyph_matrix), algo parecido pero en adjust_frame_glyphs (delete_frame)
71473- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71475
- corregido
1.4.26. MALFAR tras 71224 (glyph_matrix), otro, en restore_kboard_configuration, por pop_kboard
- file:///w/emacs/src/keyboard.c#org782f3de
71474- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71474
- no lo corregirán (aún). No me gusta tener que vivir con comandos que se sabe que pueden petar el servidor. Pero tendré que acostumbrarme
1.4.27. IS encontré otro SIGSEGV con realize_face, por realize_basic_faces
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71243
interesante el
(gdb) frame 1 #1 0x0000555555668663 in realize_face (cache=0x555557a04a40, attrs=0x7fffffba6500, former_face_id=13) at xfaces.c:6060 6060 uncache_face (cache, former_face); (gdb) list 6055 6056 if (former_face_id >= 0 && cache->used > former_face_id) 6057 { 6058 * Remove the former face. * 6059 struct face *former_face = cache->faces_by_id[former_face_id]; 6060 uncache_face (cache, former_face); 6061 free_realized_face (cache->f, former_face); 6062 SET_FRAME_GARBAGED (cache->f); 6063 } 6064 (gdb) p former_face $5 = (struct face *) 0x0 (gdb) p former_face_id $6 = 13 (gdb) p cache $7 = (struct face_cache *) 0x555557a04a40 (gdb) p cache->used $8 = 19 (gdb) p cache->faces_by_id[19] $9 = (struct face *) 0x0 (gdb) p cache->faces_by_id[18] $10 = (struct face *) 0x5555569d45c0 (gdb) p cache->faces_by_id[17] $11 = (struct face *) 0x5555572c26d0 (gdb) p cache->faces_by_id[16] $12 = (struct face *) 0x5555569825f0 (gdb) p cache->faces_by_id[15] $13 = (struct face *) 0x555556c11db0 (gdb) p cache->faces_by_id[14] $14 = (struct face *) 0x5555575bc180 (gdb) p cache->faces_by_id[13] $15 = (struct face *) 0x0 (gdb) p cache->faces_by_id[12] $16 = (struct face *) 0x555557490a10 (gdb) p cache->faces_by_id[11] $17 = (struct face *) 0x5555569c0da0 (gdb) p cache->faces_by_id[10] $18 = (struct face *) 0x55555693fab0 (gdb) p cache->faces_by_id[9] $19 = (struct face *) 0x555557607cd0 (gdb)
- lo arregló Eli
1.4.28. IS petada aleatoria mientras depuro glifos, y sale "Folder" (eso es wanderlust), w->window_end_valid. Creo que por init_to_row_end
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71274
le añado
fprintf(stderr, "At point 1, w->window_end_valid is %d\n", w->window_end_valid);
útil, veo cosas como
Allocated frame glyph matrix, window (null), frame à , x/y 0/50 Allocated frame glyph matrix, window (null), frame à , x/y 0/50 Allocated frame glyph matrix, window (null), frame à , x/y 0/50 Garbage collecting... When done with this frame, type C-x 5 0 Allocated frame glyph matrix, window (null), frame à , x/y 0/50 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 4, w->window_end_valid is 1 At point 5, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 Allocated frame glyph matrix, window (null), frame à , x/y 0/50
- patrones raros
tras abrir wanderlust y ponerlo en otro lado. Normalmente hace 12345123123, sólo ahora llega a puntos nuevos
Allocated frame glyph matrix, window (null), frame à , x/y 0/52 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 4, w->window_end_valid is 1 At point 5, w->window_end_valid is 1 At point 6, w->window_end_valid is 1 At point 7, w->window_end_valid is 1 At point 8, w->window_end_valid is 1 At point 9, w->window_end_valid is 1 At point 11, w->window_end_valid is 1 At point 12, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1 At point 4, w->window_end_valid is 1 At point 5, w->window_end_valid is 1 At point 1, w->window_end_valid is 1 At point 2, w->window_end_valid is 1 At point 3, w->window_end_valid is 1
- apunto sobre try_window_id
lo vi fallar
At point 7, w->window_end_valid is 1 At point 8, w->window_end_valid is 1 At point 9, w->window_end_valid is 0 At point 11, w->window_end_valid is 0
—
At point 8.3, w->window_end_valid is 1 At point 8.4, w->window_end_valid is 0 At point 9, w->window_end_valid is 0 At point 11, w->window_end_valid is 0
At point ccc1, w->window_end_valid is 1 At point ccc1, charpos 20, bytepos 20 At point ccc1.5, w->window_end_valid is 1 At point ccc1.5, charpos 20, bytepos 20 At point ddd0, w->window_end_valid is 1 At point ddd1, w->window_end_valid is 1 At point ddd2, w->window_end_valid is 0 At point ddd3, w->window_end_valid is 0
más cosas que no digo aún
It happens inside: init_iterator (it, w, charpos, bytepos, NULL, DEFAULT_FACE_ID);
I also see that try_window_id is called many times in succession for some reason (with my ~/.emacs which includes timers, font-lock etc). Maybe the first call reaches this point and leaves things in a bad state for the other run.
Now, after reading that comment about "some package" I'm growing suspicious of Wanderlust and its font-lock
Is it possible that something external changed while running those lines, e.g. a window manager focus change, or moving the mouse, or holding or releasing a key. My Emacs is very slow now (-O0, glyph checks), so it makes race conditions more likely to happen :-)
I saw this bug 2 times yesterday, both times unexpectedly, e.g. while just typing in a buffer. No scim involved, no Python mode. One of them I went to try_window_id and ran call dump_glyph_matrix (w->current_matrix, 1), and I saw that now it's Wanderlust's "Summary" window listing my e-mails. I wasn't even looking at it. After my debug fprintfs I see that the try_window_id is also called every minute (by a timer?) so this may be the cause.
> Any ideas, even crazy ones, are welcome.
- Maybe it's because I have (setq garbage-collection-messages t), which interrupted the code somewhere in the middle and changed the display. I don't know if GC can do that.
- More crazy: maybe Emacs lost (or my window manager didn't send) some notifications about changes in window size or configuration, and therefore the window changed without Emacs realizing it. I mention this because I know TTY Emacs has a certain redisplay problem. Since I started using it a few weeks ago, I see that sometimes it doesn't detect window changes, and it only refreshes when I press a key or move the mouse. It happens when I focus a frame just after having killed another frame. This not-noticing-window-changes may be a sign that here too an outside change wasn't seen by Emacs. It may also be a bug in my window manager (wmii) since I know it has some bugs related to focusing windows. I can reliably reproduce this non-refresh bug but I'll need some more time to document it and report it (I'm reporting too many bugs…). While researching it I found still another one (when will it end?), …………………
- Another crazy idea: maybe it's actually ok to have w->window_end_valid == false? That is, it's the assert what's wrong, not the rest of the code. I mention this because while exploring my variables in a working Emacs, I saw some of them being false. (Note that I don't know what I'm looking at):
(gdb) frame 9 #9 0x00005555556a67ff in read_key_sequence (keybuf=0x7fffffffd8f0, prompt=XIL(0), dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false, disable_text_conversion_p=false) at keyboard.c:10728 10728 key = read_char (prevent_redisplay ? -2 : NILP (prompt), (gdb) p ((struct window *)interrupted_frame->root_window)->window_end_valid $12 = false
It's further below, i.e. after the call to find_first_unchanged_at_end_row. But maybe the same argument holds, and this "giving up on optimization" must be done earlier? (Actually I would prefer doing it in a better way, i.e. not silently becoming slower as a punishment, but showing a warning message).
-—
I should try setting a breakpoint that only activates in the particular case I'm looking for. This is still hard to reproduce; it just happens some times a week.
- sobre el init_iterator, ver ahí
- creo que he de parar al inicio de init_iterator, y ahí añadir watchpoint para vigilar w->window_end_valid, y avisarme justo en punto en que pase a 0
- parece que arreglado
1.4.29. BONUS algo pasa por no actualizarse bien: tarda, no se entera. Al cambiar tamaña de ventana. Pasa en wmii al menos. Y en urxvt. Lo he reproducido con icewm también. 71343
- lo mando a https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71343
- C-l
- ¿SIGWINCH?
- es debido a
abrir un marco nuevomover el foco a un marco distinto. Eso congela los anteriores; congela el tiempo (ẽ para tetris) y las actualizaciones- no pasa si abro urxvt (y luego la aparto)
- ¿quiero congelar el tiempo (ẽ tetris) en marcos no enfocados? ¿o hacer que sigan corriendo?
- me va bien congelarlo, pero al menos me gustaría que minibúfer etc. se actualicen ante SIGWINCH
- en general pasa con las „ventanas“ también: abandonar ventana de tetris lo congela
- reproducir
- forma de reproducirlo: abrir varios marcos uno tras otro. Luego cerrarlos. La línea de modo pasa de ser 1 línea de alto a ser 2. Cuando toco tecla (o muevo ratón mínimamente) se refresca y es 1
- cuando pasa esto (no se ha actualizado ventana), puedo luego cambiar el tamaño de ventana cuanto quiera, y sigue sin actualizarse; sigue sin arreglarse solo. Sólo se arreglará solo al apretar una tecla luega
- por tanto ¿está ignorando los SIGWINCH?
- forma ~mejor de verlo: poner tetris. Las piezas dejan de caer, pero si muevo el ratón sigue el juego
- ∴ una más fácil:
- poner 1 emacsclient a la izq, una terminal a la derecha
- puedo cambiar tamaño (izq./der.) de ventana. Va bien
- moverme a la parte derecha de pantalla
- abrir emacsclient (se abre a la derecha)
- cerrarlo
- moverme a la parte izquierda
- cambiar tamaño (izq./der.) de ventana. Ya no va
- dicho de otra forma: al apuntar con wmii a un marco, aún no le ha dado el foco (emacs aún no se ha enterado de que lo he apuntado). Si pito tras cada post-command-hook, no pita. Sólo al mover el ratón para apuntar, o al tocar tecla, se da cuenta de que lo apuntan (y pita, dos veces)
- todo esto (no se entera de que lo han enfocado, no se entera de que lo han desenfocado) apunta a problemas debido a wmii
- probar con otro gdv
- me pasa desde que uso
emacs -nw
- ¿pasa en -Q? Sí
- ¿puedo simularlo? (xdotool etc). Sí
no digo
Making a TTY wider creates more space: lines can be longer now. Isn't this considered a change in the buffer text? The buffer text isn't changing due to edits. I may not have use the right word (redisplay); what I mean is that a SIGWINCH should cause a refresh of the window, to adapt things to the new size (minibuffer, scroll bars, line length, …). Right now it's not happening: in this particular case (emacsclient, immediately after closing a frame) Emacs sees the SIGWINCH but doesn't refresh the contents. In all other cases (including non-daemon emacs) it works.
–
maybe X always tells the terminal that it got focus, and the X terminal always relays the signal to the running program, independently of which program it is. But maybe it doesn't work that way. I'm just imagining possibilities, with no knowledge of X, so please discard the ideas that don't make sense.
–
Because there may be no other way to detect whether they need a redisplay, or which ones need it. I'm thinking about cases, like in a tiling X window manager in which closing a TTY frame will affect the size of the other frames. Anyway, redisplaying everything „just in case“ feels bad; I hope there are ways to detect.
— There's still this other scenario in which I open 2 frames and close the 2nd one and the focus goes to the 1st one without Emacs realizing (until I press any key), but there's nothing wrong with that; the frame wouldn't require any repainting/refreshing because the frame size doesn't change. But the moment the frame size changes, then I expect a repainting.
— This is important now that there are ways to see many TTY frames at the same time (e.g. through X). Maybe in the past we expected to only Although there may be reasons to do so.
By ensuring that Emacs repaints the frame contents after the frame size changed, it would already improve the situation. I think we don't need to think about X focus change; we're dealing with TTYs anyway.
–
Since I might have used the wrong terms, let me rephrase (redisplay→redraw): I'm concerned about preventing cases in which the lack of redraw_frame can cause larger problems like garbled text.
I haven't seen the garbled text lately. When it happened it was continuous and couldn't be fixed by a single action (like pressing C-l). But that's another issue.
—
We mentioned X focus, but I think it's not very important. More important is reacting to frame size changes. If we just change focus from one frame to another and forget to repaint the newly focused frame, I expect there will be only very minor differences (e.g. some face used in the minibuffer that changes color depending on whether a frame is active). But if we forget to repaint a frame after resizing it, that's when all the contents may drastically change and it looks bad when no repaint happened at all.
Eli mentioned: > Emacs switches to reading input from a > different terminal/keyboard when there's actually some input from that > terminal's keyboard.
My proposal is that it should repaint a frame whenever the frame size changed. Independently of whether there has been recent keyboard input or not. Emacs is able to detect the size change and I don't see why it should „delay the repainting until there's keyboard activity“. I guess it comes from the assumption that users could only use a TTY frame at the same time. But nowadays they can see more than one at the same time, e.g. through X terminals.
-—
> > I'm concerned about preventing cases in which the lack of redisplay > > can cause larger problems like mangled text. > > Lack of redisplay cannot possibly produce garbled text because only > displaying something can do that.
Ok. Then I'm concerned about a badly done redisplay (or frame redraw, which may be triggered via redisplay_internal→clear_garbaged_frame→redraw_frame) which constantly garbles the text, e.g. doesn't clear garbaged frames, doesn't redraw, etc. Anyway that's another bug, and luckily I didn't see garbled text happen recently.
I agree then that this report (71343) is of minor priority. It's just a very noticeable minor cosmetic issue.
719 new_inner_height = (new_native_height (gdb) 722 new_text_height = FRAME_PIXEL_TO_TEXT_HEIGHT (f, new_native_height); (gdb) 723 new_text_lines = new_text_height / unit_height; (gdb) 790 if (CONSP (frame_size_history)) (gdb) 803 if ((XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top (gdb) info locals unit_width = 1 unit_height = 1 old_native_width = 72 old_native_height = 50 new_native_width = 61 new_native_height = 50 min_inner_width = 2 min_inner_height = 4 r = 0x62100022d130 old_inner_width = 72 old_inner_height = 49 new_inner_width = 61 new_inner_height = 49 old_text_cols = 72 old_text_lines = 49 new_text_cols = 61 new_text_lines = 49 old_text_width = 72 old_text_height = 49 inhibit_horizontal = true inhibit_vertical = true frame = XIL(0x621000181105) (gdb)
—
(gdb) list 4934 4929 window_pixel_to_total (r->frame, horflag ? Qt : Qnil); 4930 } 4931 } 4932 } 4933 4934 if (FRAME_HAS_MINIBUF_P (f) && !FRAME_MINIBUF_ONLY_P (f)) 4935 { 4936 m = XWINDOW (mini); 4937 if (horflag) 4938 { (gdb) n 4936 m = XWINDOW (mini); (gdb) 4937 if (horflag) (gdb) 4939 m->total_cols = new_size; (gdb) p m->total_cols $59 = 61 (gdb) p new_size $60 = 72 (gdb)
- ŭ1 es de redraw_frame, ver ahí
- sospecho de file:///w/emacs/src/xdisp.c#orgaeefff3
(gdb) adjust_frame_glyphs_for_frame_redisplay (f=0x6210000175b8) at dispnew.c:2092 2092 if (matrix_dim.width != FRAME_TOTAL_COLS (f) (gdb) 2093 || matrix_dim.height != FRAME_TOTAL_LINES (f)) (gdb) 2108 eassert (matrix_dim.width == FRAME_TOTAL_COLS (f) (gdb) 2120 if (display_completed (gdb) p display_completed $62 = true (gdb) n 2121 && !FRAME_GARBAGED_P (f) (gdb) p FRAME_GARBAGED_P (f) $63 = true (gdb)
(gdb) n 2138 adjust_glyph_matrix (NULL, f->desired_matrix, 0, 0, matrix_dim); (gdb) 2139 adjust_glyph_matrix (NULL, f->current_matrix, 0, 0, matrix_dim); (gdb) 2140 SET_FRAME_GARBAGED (f); (gdb) n 2120 if (display_completed (gdb) 2035 { (gdb) 2156 } (gdb)
—
(gdb) frame #0 clear_garbaged_frames () at xdisp.c:13341 13341 redraw_frame (f); (gdb) list xdisp.c:13335 13330 struct frame f = XFRAME (frame); 13331 13332 if (FRAME_REDISPLAY_P (f) && FRAME_GARBAGED_P (f)) 13333 { 13334 if (f->resized_p 13335 / It makes no sense to redraw a non-selected TTY 13336 frame, since that will actually clear the 13337 selected frame, and might leave the selected 13338 frame with corrupted display, if it happens not 13339 to be marked garbaged. */ (gdb) 13340 && !(f != sf && (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)))) 13341 redraw_frame (f); 13342 else 13343 clear_current_matrices (f); 13344 13345 #ifdef HAVE_WINDOW_SYSTEM 13346 if (FRAME_WINDOW_P (f) 13347 && FRAME_RIF (f)->clear_under_internal_border) 13348 FRAME_RIF (f)->clear_under_internal_border (f); 13349 #endif (gdb) p f $98 = (struct frame *) 0x6210000175b8 (gdb) p sf $99 = (struct frame *) 0x6210000175b8 (gdb) p FRAME_TERMCAP_P(f) $100 = 1 (gdb)
lo normal
Breakpoint 2, adjust_frame_size (f=0x6210000175b8, new_text_width=61, new_text_height=49, inhibit=5, pretend=false, parameter=XIL(0x40e0)) at frame.c:646 646 int unit_width = FRAME_COLUMN_WIDTH (f); (gdb) cont Continuing.
Breakpoint 3, clear_garbaged_frames () at xdisp.c:13334 13334 if (f->resized_p (gdb) cont Continuing.
Breakpoint 4, redraw_frame (f=0x6210000175b8) at dispnew.c:3185 3185 eassert (f->glyphs_initialized_p); (gdb) cont Continuing.
pero con este fallo
Breakpoint 2, adjust_frame_size (f=0x6210000175b8, new_text_width=61, new_text_height=49, inhibit=5, pretend=false, parameter=XIL(0x40e0)) at frame.c:646 646 int unit_width = FRAME_COLUMN_WIDTH (f); (gdb) c Continuing.
- ∴ es porque cree que es marco inicial
- por mirar por qué es inicial
más, no digo
It seems that under normal Emacs operation, the emacs daemon creates an initial frame which has no output_data->tty. In addition there are non-initial frames, created by make_terminal_frame; one for each frame opened by the user.
Here's a hypothesis: the problem isn't that the frame being resized was wrongly initialized (i.e. make_terminal_frame didn't run); the problem is that the resizing operation or some previous operation chose the initial frame as the frame to resize, instead of the other, non-initial frame. There were 2 frames: the initial one (which I can't resize because it's invisible to me) and the non-initial one. I resized the non-initial one and Emacs tried to resize the initial one.
1.4.30. ATENDAS otro fallo parecido a 71343, pero con xterm en vez de urxvt, por FRAME_TTY(sf)
conxterm.core- mandado https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71693 :
1.4.31. ATENDAS otro fallo parecido a 71343, encontrado con -fsanitize. heap-use-after-free
me espero a poder investigarlo más. No tengo tiempo ahora mismo- mandado https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71694 :
usé:
-fsanitize=undefined,address,bounds-strict,float-cast-overflow ''
- se supone que undefinde+address no van bien
quizás mandar
I opened some frames with urxvt, then others with xterm. I got a few different crashes, including this one.
==9677==ERROR: AddressSanitizer: heap-use-after-free on address 0x625000123b30 at pc 0x55555695b2c9 bp 0x7fffffff9900 sp 0x7fffffff98f8 READ of size 1 at 0x625000123b30 thread T0 #0 0x55555695b2c8 in tty_defined_color /w/emacs/src/xfaces.c:1115 #1 0x55555695c2fb in load_color2 /w/emacs/src/xfaces.c:1260
- resto lo mando por correo
- grabo datos de compilación en ~/n/heap…datos
1.4.32. IS otro fallo suelto que encontré, esta vez también en icewm, cmcheckmagic, tty_write_glyphs, creo que por GC mientras se redimensiona terminal
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71289
a decir
In the meantime, I found a very similar error, it seems that it's due to terminal processing during GC; backtrace below. Not sure if related. I see many bugs with (setq garbage-collection-messages t) in TTY, so I may as well disable it to focus on the more important TTY bugs.
me pide Eli
> But sometimes I can't reproduce it at all with this method! > And never could I in emacs -Q
So maybe you could bisect your init files and find the customization(s) which make the reproduction possible? Because I cannot reproduce any of this here, no matter what I try.
no digo
> That hypothesis needs to be explained. Which is why I asked to > investigate what happens when the SIGWINCH handler is called.
I don't know how to do this; I'll have to find a better way to reproduce this. Right now, I have to constantly resize the window until it randomly crashes, sometimes after a few minutes. That's a lot of SIGWINCH to verify. I'll try to learn more about it and track the variables you mention. Maybe seeing those variables before the crash I can't debug each SIGWINCH operation and I don't know which one is the last one before it fails.
- y ver el 71289v2 de abajo
[X]
∴ informar del 71289v2 y cerrar éste: 73022
1.4.32.1. y hay problema ¿serio con ẽ contar número de filas
At point cmcheckmagic, ¿abort? 0. MagicWrap 1, curY 18, vs. 45 - 1. Now tty has 45 rows, 104 cols
- ẽ hago ventana de 1 línea, y sigue viendo ẽ 11 todo el rato.
- ẽ si es de 45x104 y con una tecla la saco de ahí y la hago que sea de 1x1, aún sigue viendo 45x104, y puedo usarla etc. Sigue afirmando que es 45x104 aunque claramente no lo es
- y puedo seguir redimensionándala y „no se entera“
- quizás es otro fallo
- puede ver 3 líneas, y 4, 5, … pero no 2 ni 1
- sin embargo no me hace petar
- además, si reduzco el tamaño de ventana rápidamente, no se actualiza bien. ẽ se queda el antiguo, ẽ 31 filas (ni siquiera 21, ni 11, y mucho menos el 1 real); estaba reduciendo de 10 en 10 desde ẽ 81 hasta 1
1.4.33. BONUS en build_frame_matrix_from_leaf_window (a veces en cmcheckmagic como 71289), pero al apretar C-x 2, y no tiene que ver con GC. Lo llamo 71289v2 temporalmente. Luego es fallo 73022
- mandado: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=73022
[X]
creo que esto siguiendo este comentario
Right now if I run the C-x 2 and resize scenario, I get this other backtrace with build_frame_matrix_from_leaf_window
That's another problem. There seems to be some disconnect, time-wise, in reallocating frame matrices and sub-allocating window matrices from the frame matrices, and the crash happens when the check is done in-between those two.
- en versión de pasa
- open emacs -Q
- open ~/.emacs ← just to be able to find the window
- EC=$(xdotool search –name '^gdb src/emacs') && echo $EC && while :; do for height_px in `seq 275 -25 10`; do xdotool windowsize $EC $((height_px+5)) $height_px; sleep 0.001; done; for height_px in `seq 1 25 400`; do xdotool windowsize $EC $((height_px+5)) $height_px; sleep 0.1; done; sleep 0.3 && done
- While it's being resized in a loop, use C-x 2 to do a top/bottom window split
- It crashes
[X]
por informar, quizás aparte: 73022por cierto, traduzco con alias de struct cm:
p (tty)->Wcm->cm_curY p (tty)->Wcm->cm_rows-1 p (tty)->Wcm->cm_curY < (tty)->Wcm->cm_rows-1 # assertion must be true
- me molesta lo incómodo que es depurar código C → ver depuración; trazarlo, investigar lo que hace. Quiero facilitarlo. C es incómodo de depurar
si trazo variables con „display“, cuáles mirar
break cmcheckmagic display curY (tty) display FrameRows (tty) - 1 display curY (tty) >= FrameRows (tty) - 1 display frame_size_change_delayed (XFRAME (tty->top_frame)) || (curY (tty) >= FrameRows (tty) - 1)
display curX (tty) display FrameCols (tty) display curX (tty) == FrameCols (tty)
y si lo que tengo es „frame“
break dispnew.c:5325 display curY(f->terminal->display_info->tty) display FrameRows(f->terminal->display_info->tty) display (f->terminal->display_info->tty)->Wcm->cm_curY < (f->terminal->display_info->tty)->Wcm->cm_rows-1 # assertion must be true
~ esto me permite pararme justo antes de llamar a un tty_write_glyphs que creo que a veces puede petar. Sin embargo se activa más veces que las que quiero (cada vez que reduzco algo ventana). Se activa también en veces que no peta
(gdb) list dispnew.c:5326 5321 5322 * Write the contents of the desired line. * 5323 if (nlen) 5324 { 5325 cursor_to (f, vpos, 0); 5326 write_glyphs (f, nbody, nlen); 5327 } 5328 5329 /* Don't call clear_end_of_line if we already wrote the whole 5330 line. The cursor will not be at the right margin in that (gdb)
break dispnew.c:5326 if !((f->terminal->display_info->tty)->Wcm->cm_curY < (f->terminal->display_info->tty)->Wcm->cm_rows-1) # assertion must be true
- por ahora no puedo responder nada ni contribuir a la discusión. Sigo aprendiendo de Emacs, y cuesta mucho entender lo que hace este código, y sus limitaciones. Quizás sigo más adelante
1.4.33.1. parche de Martin
a Martin
(window-min-size) still answers 4 (with and without your patch).
It still crashes when shrinking the frame (and I didn't even need to do C-x 2):
#4 0x00005555556c3016 in emacs_abort () at sysdep.c:2391 #5 0x000055555566d36f in cmcheckmagic (tty=0x55555608fa80) at cm.c:122 #6 0x0000555555671b1b in tty_write_glyphs (f=0x555556012ff0, string=0x7ffff0f4ec10, len=80) at term.c:831 #7 0x000055555567c11d in write_glyphs (f=0x555556012ff0, string=0x7ffff0f4dd10, len=80) at terminal.c:164 #8 0x0000555555591b60 in update_frame_line (f=0x555556012ff0, vpos=3, updating_menu_p=false) at dispnew.c:5326
126 if (tty->termscript) (gdb) p curY (tty) $1 = 3 (gdb) p FrameRows (tty) - 1 $2 = 3 (gdb)
This one still happens (this is after C-x 2): #5 0x000055555558b697 in build_frame_matrix_from_leaf_window (frame_matrix=0x555556050420, w=0x555556013210) at dispnew.c:2647
1.4.33.2. depuro
para depurar hago
del breakpoints break term.c:762 commands 1 printf "current %i, total %i, %i<%i? %i", (tty)->Wcm->cm_curY, (tty)->Wcm->cm_rows, (tty)->Wcm->cm_curY, (tty)->Wcm->cm_rows-1, (tty)->Wcm->cm_curY < (tty)->Wcm->cm_rows-1 cont end
FRAME_TTY (f)
interesante
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3032010, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 0, total 6, 0<5? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab30334e0, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 1, total 6, 1<5? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3037350, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 4, total 6, 4<5? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3032010, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 0, total 5, 0<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab30334e0, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 1, total 5, 1<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3035e80, len=111) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 3, total 5, 3<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3032010, len=110) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 0, total 5, 0<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab30334b0, len=110) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 1, total 5, 1<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3035df0, len=110) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 3, total 5, 3<4? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3032010, len=109) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 0, total 4, 0<3? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3033480, len=109) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 1, total 4, 1<3? 1
Breakpoint 7, tty_write_glyphs (f=0x55cf47386ff0, string=0x7f8ab3035d60, len=109) at term.c:765 765 if (curY (tty) >= FrameRows (tty) - 1) current 3, total 4, 3<3? 0
Program received signal SIGABRT, Aborted.
- ¿quién es el responsable de haber elegido hacer algo en líneas 0, 1 y 3? Deberían ser 0, 1 y 2
1.4.33.3. sobre el primer error, el de cmcheckmagic
(esto es con -O3) (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff554ae8f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff54fbfb2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x0000555555585b3d in terminate_due_to_signal (sig=sig@entry=6, backtrace_limit=backtrace_limit@entry=40) at emacs.c:469 #4 0x0000555555586142 in emacs_abort () at sysdep.c:2391 #5 0x0000555555585159 in cmcheckmagic (tty=0x555555f4c730) at cm.c:122 #6 0x0000555555590e19 in update_frame_line (f=f@entry=0x555555e4a838, vpos=vpos@entry=4, updating_menu_p=updating_menu_p@entry=false) at dispnew.c:5326 #7 0x0000555555591ab6 in update_frame_1 (f=f@entry=0x555555e4a838, force_p=force_p@entry=true, inhibit_id_p=<optimized out>, inhibit_id_p@entry=false, set_cursor_p=set_cursor_p@entry=true, updating_menu_p=updating_menu_p@entry=false) at dispnew.c:5008 #8 0x000055555559813f in update_frame (f=f@entry=0x555555e4a838, force_p=<optimized out>, force_p@entry=false, inhibit_hairy_id_p=inhibit_hairy_id_p@entry=false) at dispnew.c:3346 #9 0x00005555555d57c9 in redisplay_internal () at xdisp.c:17518 #10 0x00005555555d6cb5 in redisplay_preserve_echo_area (from_where=from_where@entry=11) at xdisp.c:17801 #11 0x000055555575ba22 in wait_reading_process_output (time_limit=time_limit@entry=97, nsecs=nsecs@entry=0, read_kbd=read_kbd@entry=-1, do_display=do_display@entry=true, wait_for_cell=wait_for_cell@entry=0x0, wait_proc=wait_proc@entry=0x0, just_wait_proc=0) at process.c:5584 #12 0x000055555559ac90 in sit_for (timeout=timeout@entry=0x186, reading=reading@entry=true, display_option=display_option@entry=1) at dispnew.c:6335 #13 0x000055555565cb4e in read_char (commandflag=commandflag@entry=1, map=map@entry=0x7ffff0550c53, prev_event=0x0, used_mouse_menu=used_mouse_menu@entry=0x7fffffffd98b, end_time=end_time@entry=0x0) at /w/emacs/src/lisp.h:746 #14 0x000055555565d96d in read_key_sequence (keybuf=keybuf@entry=0x7fffffffdab0, prevent_redisplay=prevent_redisplay@entry=false, disable_text_conversion_p=false, fix_current_buffer=true, can_return_switch_frame=true, dont_downcase_last=false, prompt=0x0) at keyboard.c:10747 #15 0x000055555565fd6e in command_loop_1 () at keyboard.c:1424 #16 0x00005555556ed3f7 in internal_condition_case (bfun=bfun@entry=0x55555565fbd0 <command_loop_1>, handlers=handlers@entry=0x90, hfun=hfun@entry=0x55555564bf80 <cmd_error>) at eval.c:1598 #17 0x000055555564a596 in command_loop_2 (handlers=handlers@entry=0x90) at keyboard.c:1163 #18 0x00005555556ed34c in internal_catch (tag=tag@entry=0xfba0, func=func@entry=0x55555564a570 <command_loop_2>, arg=arg@entry=0x90) at eval.c:1277 #19 0x000055555564a531 in command_loop () at keyboard.c:1141 #20 0x0000555555650e2e in recursive_edit_1 () at keyboard.c:749 #21 0x00005555556511a0 in Frecursive_edit () at keyboard.c:832 #22 0x000055555558e9e6 in main (argc=<optimized out>, argv=0x7fffffffdf28) at emacs.c:2624 (gdb)
1.4.33.4. sobre el segundo error, build_frame_matrix_from_leaf_window
Another time (resizing by hand), it crashed with: (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff554ae8f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff54fbfb2 in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26 #3 0x000055555568d0c2 in terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:469 #4 0x000055555573de15 in die ( msg=0x555555856798 "frame_size_change_delayed (XFRAME (w->frame)) || glyph_row_slice_p (window_row, frame_row)", file=0x555555856231 "dispnew.c", line=2647) at alloc.c:8058 #5 0x000055555558b697 in build_frame_matrix_from_leaf_window (frame_matrix=0x5555560fed00, w=0x55555603cca8) at dispnew.c:2647 #6 0x000055555558b154 in build_frame_matrix_from_window_tree (matrix=0x5555560fed00, w=0x55555603cca8) at dispnew.c:2536 #7 0x000055555558b13f in build_frame_matrix_from_window_tree (matrix=0x5555560fed00, w=0x555556260390) at dispnew.c:2534 #8 0x000055555558b0e3 in build_frame_matrix (f=0x55555603ca88) at dispnew.c:2520 #9 0x000055555558d0e3 in update_frame (f=0x55555603ca88, force_p=true, inhibit_hairy_id_p=false) at dispnew.c:3336 #10 0x00005555555d0904 in redisplay_internal () at xdisp.c:17518 #11 0x00005555555d1244 in redisplay_preserve_echo_area (from_where=11) at xdisp.c:17801 #12 0x00005555557f5893 in wait_reading_process_output (time_limit=97, nsecs=0, read_kbd=-1, do_display=true, wait_for_cell=0x0, wait_proc=0x0, just_wait_proc=0) at process.c:5584 #13 0x00005555555951d3 in sit_for (timeout=0x186, reading=true, display_option=1) at dispnew.c:6335
if (!MagicWrap (tty) || curY (tty) >= FrameRows (tty) - 1) emacs_abort ();
(gdb) up 5 #5 0x000055555566d413 in cmcheckmagic (tty=0x55555608fa80) at cm.c:122 122 emacs_abort (); (gdb) p MagicWrap (tty) $1 = true (gdb) p curY (tty) >= FrameRows (tty) - 1 $2 = 1 (gdb) p curY (tty) $3 = 4 (gdb) p FrameRows (tty) - 1 $4 = 4 (gdb)
¿cómo depurar esto?
2643 2644 #ifdef GLYPH_DEBUG 2645 * Window row window_y must be a slice of frame row 2646 frame_y. * 2647 eassert (frame_size_change_delayed (XFRAME (w->frame)) 2648 || glyph_row_slice_p (window_row, frame_row)); 2649 2650 /* I
break dispnew.c:2647 if !(frame_size_change_delayed (XFRAME (w->frame)) || glyph_row_slice_p (window_row, frame_row))
- funciona
- ahí puedo usar dump_glyph_matrix, y veo que hay 2 líneas (la 0 y la 1)
1.4.33.5. no digo, verborreico
(gdb) frame_size_change_delayed (XFRAME (w->frame) Undefined command: "frame_size_change_delayed". Try "help". (gdb) p frame_size_change_delayed (XFRAME (w->frame) A syntax error in expression, near `'. (gdb) p frame_size_change_delayed(XFRAME (w->frame) A syntax error in expression, near `'. (gdb) p frame_size_change_delayed(XFRAME (w->frame)) $1 = false (gdb) p glyph_row_slice_p (window_row, frame_row) $2 = false (gdb)
1.4.33.6. me preocupa ver el -1 en cmcheckmagic pero no verlo (el -1) en el código añadido recientemente por Eli
- ¿por qué lo del -1?
1.4.33.7. hipótesis: justo antes de llamada a write_glyphs está bien (ẽ 3<5), pero cuando llega a cmcheckmagic ya está mal. v2: Y es distinto porque compara otra cosa (no es vpos)
Breakpoint 2, update_frame_line (f=0x562d850e1ff0, vpos=3, updating_menu_p=false) at dispnew.c:5325 5325 cursor_to (f, vpos, 0); udpate_frame_line: vpos 3, total 5, 3<5? 1 (must be 1)
Program received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007f9721f4ae9f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007f9721efbfb2 in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26 #3 0x0000562d82a55260 in terminate_due_to_signal (sig=6, backtrace_limit=40) at emacs.c:469 #4 0x0000562d82a8b016 in emacs_abort () at sysdep.c:2391 #5 0x0000562d82a3536f in cmcheckmagic (tty=0x562d8515ea70) at cm.c:122 #6 0x0000562d82a39b1b in tty_write_glyphs (f=0x562d850e1ff0, string=0x7f97213de290, len=110) at term.c:831 #7 0x0000562d82a4411d in write_glyphs (f=0x562d850e1ff0, string=0x7f97213dcdf0, len=110) at terminal.c:164 #8 0x0000562d82959b60 in update_frame_line (f=0x562d850e1ff0, vpos=3, updating_menu_p=false) at dispnew.c:5326 #9 0x0000562d82958d6a in update_frame_1 (f=0x562d850e1ff0, force_p=true, inhibit_id_p=false, set_cursor_p=true, updating_menu_p=false) at dispnew.c:5008 #10 0x0000562d82955128 in update_frame (f=0x562d850e1ff0, force_p=true, inhibit_hairy_id_p=false) at dispnew.c:3346 #11 0x0000562d829989fe in redisplay_internal () at xdisp.c:17563 #12 0x0000562d8299933e in redisplay_preserve_echo_area (from_where=11) at xdisp.c:17846
(gdb) frame 5 #5 0x0000562d82a3536f in cmcheckmagic (tty=0x562d8515ea70) at cm.c:122 122 emacs_abort (); (gdb) list 117 if (frame_size_change_delayed (XFRAME (tty->top_frame))) 118 return; 119 if (curX (tty)
= FrameCols (tty)) 120 { 121 if (!MagicWrap (tty) || curY (tty) >
FrameRows (tty) - 1) 122 emacs_abort (); 123 if (tty->termscript) 124 putc ('', tty->termscript); 125 putc ('', tty->output); 126 if (tty->termscript) (gdb) p curY(tty) $1 = 2 (gdb) p FrameRows(tty) $2 = 3 (gdb)- ¿es justo 5325 cursor_to el problema?
- ¿cómo es que pasa de 5 a 3 de golpe?
- creo que es que no se ha dado cuenta
- ∴ no, es que se miden otras cosas
- hipótesis mejor: cuando mira „vpos“, eso es un valor viejo (ẽ 5). Por eso no peta (ẽ no usa el return de salida rápida que añadió Eli), pero luegocuando mira curY, eso le da el real
~~~
hay que permitir que ẽ el frame sea 5 (no puede ser menos← error, el límite es 2, no 5) mientras que la terminal es ẽ 3 (sí puede ser tan pequeña)- o lo contrario: hay que hacer que el frame también sea 5, o 3, o 4, …
- ŭ1 idea: en tty_write_glyphs: si le piden escribir una línea que está por encima de f->total_lines, no hacerl
mando mi hipótesis a Eli+Martin,no mando esta parteRight now a frame can be 5 lines (there's a protection to avoid getting smaller than that; it ignores it and it stays at 5. Your patch doesn't remove this protection). Meanwhile, the tty will get to 5, 4, 3, 2, … lines.
Eli recently added this code (dispnew.c):
* This should never happen, but evidently sometimes does if one resizes the frame quickly enough. Prevent aborts in cmcheckmagic. * if (vpos >= FRAME_TOTAL_LINES (f)) return;
But this is checking the frame. Later, the assertion in cmcheckmagic will be made about the terminal. If we're at line 4 in a terminal of 3 lines, the code just quoted above may be saying „4 is <5, so it's fine“ whereas later cmcheckmagic will say „4 is >3, it's too large. (I'm being imprecise in terms of < vs <=, please just take the general idea).
Do we want FrameRows to be reduced, up to the maximum amount of terminal lines? I.e. do we allow 5-line, 4-line, 3-line, 2-line, 1-line frames? (Possibly 0-line frames too).
If we say no, (i.e. a frame can be 5 lines in a terminal of 3 lines): another option could be: At the beginning of tty_write_glyphs, check whether we've been asked to write glyphs in a line which is higher than the amount of lines in the terminal. If so, return without writing anything. (Because the line would be invisible). Or maybe in some of the callers of tty_write_glyphs. Don't call tty_write_glyphs to write glyphs in a line which is not visible (it exists in the frame, but doesn't exist in the terminal).
no digo esto, porque Martin ha puesto código dentro del if, por tanto no va a ponerse nunca a ẽ 1
If you want FrameRows to be the height of the terminal, as you propose, doesn't this create the possibility of the frame having 2 rows or 1 row? Something which is supposedly undesired according to the handle_window_change_signal protection.
1.4.33.8. ¿quién ha pedido circular por todas las líneas escritas? ¿Y ese alguien está pidiendo una línea incorrecta? (fuera de la pantalla)
1.4.34. ATENDAS un fallo al abrir menú (F10) mientras abuso de redisplay y de otras cosas
- hice bucle para causar (redisplay) continuamente, otro para abrir/cerrar marcos, e hice F10
- por simplificar
- por ahora no lo informo aún porque es muy raro y porque no uso menú
Fatal error: glibc detected an invalid stdio handle
Program received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff54a9e8f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff545afb2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff5445472 in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007ffff549e430 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff55b807e "%s") at ../sysdeps/posix/libc_fatal.c:155 #5 0x00007ffff549e462 in __GI___libc_fatal (message=message@entry=0x7ffff55ba668 "Fatal error: glibc detected an invalid stdio handle") at ../sysdeps/posix/libc_fatal.c:164 #6 0x00007ffff549ec95 in _IO_vtable_check () at ./libio/vtables.c:72 #7 0x00007ffff549edb2 in IO_validate_vtable (vtable=0xffffffffffffffff) at ./libio/libioP.h:946 #8 __GI___fflush_unlocked (fp=0x55555600295c) at ./libio/iofflush_u.c:38 #9 0x00005555556740b2 in tty_menu_activate (menu=0x555556fda220, pane=0x7fffffffc904, selidx=0x7fffffffc900, x0=1, y0=1, txt=0x7fffffffc8f8, help_callback=0x55555567424c <tty_menu_help_callback>, kbd_navigation=true) at term.c:3483 #10 0x0000555555675084 in tty_menu_show (f=0x555556fe8368, x=1, y=1, menuflags=7, title=XIL(0x7ffff1b13b4c), error_name=0x7fffffffca30) at term.c:3853 #11 0x00005555555fd316 in x_popup_menu_1 (position=XIL(0x555558110633), menu=XIL(0x7ffff1dc6e6b)) at menu.c:1411 #12 0x00005555555fd395 in Fx_popup_menu (position=XIL(0x555558110633), menu=XIL(0x7ffff1dc6e6b)) at menu.c:1476 #13 0x0000555555770ad1 in funcall_subr (subr=0x555555eb1dc0 <Sx_popup_menu>, numargs=2, args=0x7ffff0dff0f8) at eval.c:3163 #14 0x00005555557cce29 in exec_byte_code (fun=XIL(0x7ffff1c2a995), args_template=1025, nargs=4, args=0x7ffff0dff080) at bytecode.c:812 #15 0x0000555555771123 in funcall_lambda (fun=XIL(0x7ffff1dd517d), nargs=2, arg_vector=0x7fffffffd2e0) at eval.c:3252 #16 0x00005555557704bd in funcall_general (fun=XIL(0x7ffff1dd517d), numargs=2, args=0x7fffffffd2e0) at eval.c:3044 #17 0x000055555577077a in Ffuncall (nargs=3, args=0x7fffffffd2d8) at eval.c:3093 #18 0x0000555555764da7 in Ffuncall_interactively (nargs=3, args=0x7fffffffd2d8) at callint.c:250 #19 0x0000555555770d0a in funcall_subr (subr=0x555555ec3d00 <Sfuncall_interactively>, numargs=3, args=0x7fffffffd2d8) at eval.c:3184 #20 0x0000555555770471 in funcall_general (fun=XIL(0x555555ec3d05), numargs=3, args=0x7fffffffd2d8) at eval.c:3040 #21 0x000055555577077a in Ffuncall (nargs=4, args=0x7fffffffd2d0) at eval.c:3093 #22 0x000055555576fc23 in Fapply (nargs=3, args=0x7fffffffd470) at eval.c:2765 #23 0x00005555557651b9 in Fcall_interactively (function=XIL(0x2aaa9be8f448), record_flag=XIL(0), keys=XIL(0x5555563249a5)) at callint.c:342 #24 0x00007ffff19aeb8d in F636f6d6d616e642d65786563757465_command_execute_0 () from opt/dc/emacs/bin../lib/emacs/30.0.50/native-lisp/30.0.50-cd05323a/preloaded/simple-fab5b0cf-c39c6ea4.eln #25 0x0000555555770b3f in funcall_subr (subr=0x7ffff22dfec0, numargs=1, args=0x7fffffffda98) at eval.c:3167 #26 0x0000555555770471 in funcall_general (fun=XIL(0x7ffff22dfec5), numargs=1, args=0x7fffffffda98) at eval.c:3040 #27 0x000055555577077a in Ffuncall (nargs=2, args=0x7fffffffda90) at eval.c:3093 #28 0x000055555569155c in command_loop_1 () at keyboard.c:1550 […]
Lisp Backtrace: "x-popup-menu" (0xf0dff0f8) "popup-menu" (0xf0dff060) "menu-bar-open" (0xffffd2e0) "funcall-interactively" (0xffffd2d8) "command-execute" (0xffffda98)
- quizás relacionado: https://lists.gnu.org/archive/html/emacs-devel/2024-09/msg00436.html
- ¿qué es „child frame“? Ver notas en struct frame
1.4.35. ATENDAS fallo al abrir menú (F10) mientras abro/cierro marcos en bucle
- igual que el anterior
- fácil de reproducir
- por ahora no lo informo aún porque es muy raro y porque no uso menú
[Detaching after vfork from child process 27847] [Detaching after vfork from child process 27848]
Program received signal SIGSEGV, Segmentation fault. 0x00007ffff549ed7b in __GI___fflush_unlocked (fp=0x442d3d534e4f4954) at ./libio/iofflush_u.c:38 38 ./libio/iofflush_u.c: No such file or directory. (gdb) bbt Undefined command: "bbt". Try "help". (gdb) bt #0 0x00007ffff549ed7b in __GI___fflush_unlocked (fp=0x442d3d534e4f4954) at ./libio/iofflush_u.c:38 #1 0x00005555556740b2 in tty_menu_activate (menu=0x5555561c0c30, pane=0x7fffffffc904, selidx=0x7fffffffc900, x0=1, y0=1, txt=0x7fffffffc8f8, help_callback=0x55555567424c <tty_menu_help_callback>, kbd_navigation=true) at term.c:3483 #2 0x0000555555675084 in tty_menu_show (f=0x55555608e4d0, x=1, y=1, menuflags=7, title=XIL(0x7ffff1b13b4c), error_name=0x7fffffffca30) at term.c:3853 #3 0x00005555555fd316 in x_popup_menu_1 (position=XIL(0x7ffff0ca2c13), menu=XIL(0x7ffff1dc6e6b)) at menu.c:1411 #4 0x00005555555fd395 in Fx_popup_menu (position=XIL(0x7ffff0ca2c13), menu=XIL(0x7ffff1dc6e6b)) at menu.c:1476 #5 0x0000555555770ad1 in funcall_subr (subr=0x555555eb1dc0 <Sx_popup_menu>, numargs=2, args=0x7ffff0dff0f8) at eval.c:3163
(gdb) frame 1 #1 0x00005555556740b2 in tty_menu_activate (menu=0x5555561c0c30, pane=0x7fffffffc904, selidx=0x7fffffffc900, x0=1, y0=1, txt=0x7fffffffc8f8, help_callback=0x55555567424c <tty_menu_help_callback>, kbd_navigation=true) at term.c:3483 3483 fflush (tty->output); (gdb) list 3478 } 3479 * Both tty_menu_display and help_callback invoke update_end, 3480 which calls tty_show_cursor. Re-hide it, so it doesn't show 3481 through the menus. * 3482 tty_hide_cursor (tty); 3483 fflush (tty->output); 3484 } 3485 3486 sf->mouse_moved = 0; 3487 screen_update (sf, state[0].screen_behind); (gdb) p tty $1 = (struct tty_display_info *) 0x555556084660 (gdb) p tty->output $2 = (FILE *) 0x442d3d534e4f4954
(gdb) p *tty $4 = { next = 0x555556ab8a90, name = 0x555556086648 "", type = 0x5555566340c0 ".", input = 0x504f5f4156414a5f, output = 0x442d3d534e4f4954, output_buffer_size = 6009336224923547489, termscript = 0x4641416d65747379, old_tty = 0x6974746553746e6f, term_initted = false, reference_count = 28271, terminal = 0x5555566340e0, Wcm = 0x5500766e652d, top_frame = XIL(0x555556634100), […]
(gdb) p tty->output $7 = (FILE *) 0x442d3d534e4f4954 (gdb) x 0x442d3d534e4f4954 0x442d3d534e4f4954: Cannot access memory at address 0x442d3d534e4f4954 (gdb) xpr Lisp_String $8 = (struct Lisp_String *) 0x442d3d534e4f4950 Cannot access memory at address 0x442d3d534e4f4968 (gdb)
unicode -x 44 2d 3d 53 4e 4f 49 54
- D-=SNOIT
unicode -x 50 4f 5f 41 56 41 4a 5f
- PO_AVAJ_
- ay, qué misteriosas cadenas…
(gdb) p tty $10 = (struct tty_display_info *) 0x555556084660 (gdb) x 0x555556084660 0x555556084660: 0x56ab8a90 (gdb) x/20 0x555556084660 0x555556084660: 0x56ab8a90 0x00005555 0x56086648 0x00005555 0x555556084670: 0x566340c0 0x00005555 0x56414a5f 0x504f5f41 0x555556084680: 0x4e4f4954 0x442d3d53 0x2e747761 0x53657375 0x555556084690: 0x65747379 0x4641416d 0x53746e6f 0x69747465 0x5555560846a0: 0x3d73676e 0x00006e6f 0x566340e0 0x00005555 (gdb) x/20s 0x555556084660 0x555556084660: "\220\212\253VUU" 0x555556084667: "" 0x555556084668: "Hf" 0x55555608466f: "" 0x555556084670: "\300@cVUU" 0x555556084677: "" 0x555556084678: "_JAVA_OPTIONS=-Dawt.useSystemAAFontSettings=on" 0x5555560846a7: "" 0x5555560846a8: "\340@cVUU" 0x5555560846af: "" 0x5555560846b0: "-env" 0x5555560846b5: "U" 0x5555560846b7: "" 0x5555560846b8: "" 0x5555560846b9: "AcVUU" 0x5555560846bf: "" 0x5555560846c0: "-env" 0x5555560846c5: "" 0x5555560846c6: "" 0x5555560846c7: "" (gdb)
1.4.36. otro en handle_switch_frame, parecido a 71475. Algo por acumular minibúfers
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71521
#0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:443 #1 0x000055555573533c in die ( msg=0x55555584e4e8 "FRAME_INITIAL_P (f) || noninteractive || !initialized || !f->terminal->name || (f->current_matrix && f->current_matrix->nrows > 0 && f->current_matrix->rows && f->desired_matrix && f->desired_matrix->"…, file=0x55555584e231 "dispnew.c", line=1851) at alloc.c:8082 #2 0x0000555555589ee4 in adjust_frame_glyphs (f=0x5555567f84e8) at dispnew.c:1851 #3 0x0000555555617ff8 in apply_window_adjustment (w=0x555556295448) at window.c:7848 #4 0x000055555560c1a2 in set_window_buffer (window=XIL(0x55555629544d), buffer=XIL(0x5555561bf575), run_hooks_p=false, keep_margins_p=false) at window.c:4189 #5 0x00005555556e131e in zip_minibuffer_stacks (dest_window=XIL(0x55555629544d), source_window=XIL(0x555555fde315)) at minibuf.c:160 #6 0x00005555556e170a in move_minibuffers_onto_frame (of=0x555555fdde58, frame=XIL(0x5555567f84ed), for_deletion=false) at minibuf.c:209 #7 0x000055555559ae29 in do_switch_frame (frame=XIL(0x5555567f84ed), track=0, for_deletion=0, norecord=XIL(0)) at frame.c:1569 #8 0x000055555559b1fc in Fhandle_switch_frame (event=XIL(0x7ffff0a2e363)) at frame.c:1656 #9 0x0000555555770aaa in funcall_subr (subr=0x555555eb00e0 <Shandle_switch_frame>, numargs=1, args=0x7ffffff00640) at eval.c:3161
- guardo core
- mando
no mando
(no es cierto, pasa sin):
I remember I enabled (setq enable-recursive-minibuffers t) in one test but I don't remember if it was in this one.
In addition, during the loop I pressed C-c to interrupt some of the emacsclient processes while they were being opened/closed, to interrupt the half-openend emacsclient.
1.4.37. otro fallo en verify_interval_modification, quizás porque he compilado emacs con tantas funciones de depuración (-fsanitize) que es tan lento que no puede procesar los eventos de teclado
- estaba haciendo cosas como abrir marcos y cambiarles el tamaño, a mano y poco a poco
- repetible
intervals.c:619: Emacs fatal error: assertion failed: relative_position <= TOTAL_LENGTH (tree)
Breakpoint 1, terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:443 443 signal (sig, SIG_DFL); (gdb) bt #0 terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:443 #1 0x0000555556c04d91 in die (msg=0x55555727a1a0 "relative_position <= TOTAL_LENGTH (tree)", file=0x555557279e20 "intervals.c", line=619) at alloc.c:8082 #2 0x0000555556eafb5a in find_interval (tree=0x619000062100, position=393) at intervals.c:619 #3 0x0000555556ee6edd in verify_interval_modification (buf=0x7ffff0590768, start=393, end=393) at textprop.c:2220 #4 0x0000555556ac59b7 in prepare_to_modify_buffer_1 (start=393, end=393, preserve_ptr=0x0) at insdel.c:2037 #5 0x0000555556ac68f2 in prepare_to_modify_buffer (start=393, end=393, preserve_ptr=0x0) at insdel.c:2078 #6 0x0000555556e4f73e in read_and_insert_process_output (p=0x621000200ff8, buf=0x63100026c800 "\033[1mfns.c:4971:7:\033[1m\033[31m runtime error: \033[1m\033[0m\033[1mnull pointer passed as argument 2, which is declared to never be null\033[1m\033[0m\033[1mfns.c:4977:7:\033[1m\033[31m runtime error: \033[1m\033[0m\033[1mnull pointer p"…, nread=410, process_coding=0x616000019e80) at process.c:6404 #7 0x0000555556e50b2b in read_and_dispose_of_process_output (p=0x621000200ff8, chars=0x63100026c800 "\033[1mfns.c:4971:7:\033[1m\033[31m runtime error: \033[1m\033[0m\033[1mnull pointer passed as argument 2, which is declared to never be null\033[1m\033[0m\033[1mfns.c:4977:7:\033[1m\033[31m runtime error: \033[1m\033[0m\033[1mnull pointer p"…, nbytes=410, coding=0x616000019e80) at process.c:6481 #8 0x0000555556e4c116 in read_process_output (proc=XIL(0x621000200ffd), channel=22) at process.c:6266 #9 0x0000555556e48809 in wait_reading_process_output (time_limit=0, nsecs=0, read_kbd=-1, do_display=true, wait_for_cell=XIL(0), wait_proc=0x0, just_wait_proc=0) at process.c:5947 #10 0x00005555569b57da in kbd_buffer_get_event (kbp=0x7fffffffca50, used_mouse_menu=0x7fffffffd4f0, end_time=0x0) at keyboard.c:4079
- volqué „core“ pero se colgó; >800 Mb. Lo maté
1.5. cosas que voy aprendiendo
1.5.1. IS seguir probando slime-mode
- CONCLUSIÓN escrita el
Por fin acabé; era sólo una introducción. Pero me gusta para CLISP
Ahora que Icicles está corregido
1.5.1.1. mirar slimewiki
1.5.2. BONUS mirar cómo se hace lo de editar un fichero que está en dos sitios a la vez
Se llamaba algo de „shadow“. Lo necesito para openTrends: para el Eclipse+Emacs al editar JSPs.
De momento unison va bien.
1.6. sobre velocidad y arranque rápido; rendimiento
1.6.1. DumpEmacs
Ver file:///home/dc/.emacs al principio. ; para que arranque en 1s: http://www.emacswiki.org/cgi-bin/wiki.pl?DumpingEmacs
Peta aquí, también con versión de CVS. SIGSEGV.
0x81ac22b is in unexec (unexelf.c:953). 948 */ 949 950 memcpy (NEW_SECTION_H (nn).sh_offset + new_base, 951 (caddr_t) OLD_SECTION_H (n).sh_addr, 952 new_data2_size); 953 nn++;
1.6.2. es demasiado lento, me tarda mucho en mover el cursor, abrir ficheros, hacer búsquedas, etc.
Me tarda más de 5 segundos para buscar un texto, moverse. Necesito depurarlo más.
1.6.2.1. buscando la causa
[X]
desactivé global-font-lock-mode y sigue yendo lento, así que no es por eso[ ]
flymake-stop-all-syntax-checks- tengo muchos procesos de flymake, uno para cada búfer
- me hice función mejor: cancela-todos-los-contadores-de-flymake
- „idle timers“, tengo muchos a 0
- ¿poco espacio en disco? Tengo 300 Mb
- ¿fuga de memoria? emacs lleva 12 días encendido, 340 búfers
- algo así podría ser, pues cerrándolo y volviéndolo a abrir mejoró mucho. También mejoró por quitar yasnippet
1.6.3. con líneas largas se hace muy lento
- está cache-long-scans, que dicen que si se pone a t acelera las largas (pero enlentece las cortas)
- cache-long-line-scans ya lo tengo a t
- https://www.emacswiki.org/emacs/SoLong
- versión más nueva: http://git.savannah.nongnu.org/cgit/so-long.git/plain/so-long.el?h=wip
- longlines.el, file:/w/emacs/lisp/obsolete/longlines.el
- ~ corta visualmente las líneas para poder moverse mejor
- ∴ ya es muy bueno
- activarlo a mano
- la situación en 2018 sigue siendo muy mala incluso con so-long: http://lists.gnu.org/archive/html/emacs-devel/2018-10/msg00497.html
- ẽ file:///w/edx-platform/common/lib/xmodule/xmodule/assets/word_cloud/src/js/d3.min.js
- muevo ciertas cosas a fichero aparte, para evitar tenerlas ẽ en org
1.6.4. al deshibernar, se cuelga un rato en una pila muy alta (>20k niveles de llamadas)
Creo que es por el autograbado, quizás se ejecuta miles de veces para compensar todas las veces que no se ejecutó mientras dormía.
… #21165 0x000000000060922c in exec_byte_code (bytestr=50574609, vector=51514541, maxdepth=12, args_template=12888946, nargs=0, args=0x0) at bytecode.c:1163 #21166 0x00000000005c6ea6 in funcall_lambda (fun=51514621, nargs=0, arg_vector=0xc4ab72) at eval.c:2956 #21167 0x00000000005c6666 in Ffuncall (nargs=1, args=0x7fff8abf1618) at eval.c:2772 #21168 0x00000000005c5e97 in call0 (fn=50469426) at eval.c:2568 #21169 0x000000000053345e in safe_run_hooks_1 (nargs=2, args=0x7fff8abf16c0) at keyboard.c:1885 #21170 0x00000000005c380b in internal_condition_case_n (bfun=0x53343b <safe_run_hooks_1>, nargs=2, args=0x7fff8abf16c0, handlers=12888994, hfun=0x533460 <safe_run_hooks_error>) at eval.c:1426 #21171 0x00000000005336b6 in safe_run_hook_funcall (nargs=2, args=0x7fff8abf17c0) at keyboard.c:1937 #21172 0x00000000005c5db1 in run_hook_with_args (nargs=2, args=0x7fff8abf17c0, funcall=0x533669 <safe_run_hook_funcall>) at eval.c:2539
#21173 0x0000000000533713 in safe_run_hooks (hook=17037026) at keyboard.c:1958 #21174 0x00000000005787e6 in Fdo_auto_save (no_message=12888946, current_only=12888946) at fileio.c:5557 #21175 0x0000000000534ef3 in read_char (commandflag=1, map=122778342, prev_event=12888946, used_mouse_menu=0x7fff8abf1e1f, end_time=0x0) at keyboard.c:2831 #21176 0x0000000000540a84 in read_key_sequence (keybuf=0x7fff8abf2000, bufsize=30, prompt=12888946, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9171 #21177 0x0000000000532152 in command_loop_1 () at keyboard.c:1462
#21178 0x00000000005c3391 in internal_condition_case (bfun=0x531d97 <command_loop_1>, handlers=12940418, hfun=0x53165d <cmd_error>) at eval.c:1344 #21179 0x0000000000531af1 in command_loop_2 (ignore=12888946) at keyboard.c:1197 #21180 0x00000000005c2b6d in internal_catch (tag=12936338, func=0x531acb <command_loop_2>, arg=12888946) at eval.c:1105 #21181 0x0000000000531a9f in command_loop () at keyboard.c:1176 #21182 0x0000000000531255 in recursive_edit_1 () at keyboard.c:786 #21183 0x00000000005313c5 in Frecursive_edit () at keyboard.c:857 #21184 0x000000000052f2ad in main (argc=2, argv=0x7fff8abf2468) at emacs.c:1623
1.6.5. ibuffer es lento
1.6.5.1. filtro por ruta (o por „proyecto“)
1.6.5.2. BONUS ibuffer es lento, parece ser por lo de „formatos“
- me tarda unos segundos (~5 a ~10) en abrirse (o actualizar lista), esto cuando tengo ~1000 ficheros abiertos
Toda la lentitud está en:
(ibuffer-update nil)
Ya es lento esto:
- medio: (buffer-list)
- Y un poco: (ibuffer-current-buffers-with-marks bufs)
- bastante: (ibuffer-redisplay-engine blist arg)
Esto ayuda mucho, tras ello me tarda ~3 segundos (con 1300 búfers): (ibuffer-recompile-formats) Aún es lento…
El código parece complejo (ej. de http://emacshorrors.com/posts/when-data-becomes-code.html):
;; You're not expected to understand this. Hell, I ;; don't even understand it, and I wrote it five ;; minutes ago. (insertgenfn […]
Soluciones:
[ ]
¿usar filtro? „/n“ etc., sí, es más rápido[ ]
buscar solución anterior a ibuffer[ ]
puedo hacerme zocko-cambia-rama o aprender lo de proyectos para evitar este ibuffer
1.6.5.3. por recencia („s v“): peta: ibuffer-current-state-list: Args out of range: #<buffer *Ibuffer*>, 13909, 13968 [4 times]
Sí, es que estaba cortada la lista, no sé por qué. Tenía sólo 1025 abiertos.
1.6.5.4. cuando no me muestra nada…
- mmmm… no tiene filtros activados pero muestra 0
- „/ /“ no quita nada
- ∴ cerrar y abrirlo
1.6.6. tras usarlo un rato, C-f C-n etc. van muy lentos. Creo que tiene que ver con dired o tramp (tramp hacia otro usuario)
Por ejemplo en:
/su:labx@localhost:/home/labx:
1.6.7. ¿por qué la búsqueda es tan lenta? (isearch). Cada pulsación llega con retardo. Es por estar llamando a font-info continuamente
- esto el con emacs GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw scroll bars) of 2019-04-25, lleva 25 días abierto, 1009 búfers simultáneos abiertos (884 ficheros), y consumiendo 2'2 Gb RES
trazo; esto es en fichero .org de 4'5 Mb
- command-execute 1419 90% - call-interactively 1418 90% - funcall-interactively 1029 65% - isearch-printing-char 526 33% - isearch-process-search-char 526 33% - isearch-process-search-string 526 33% - isearch-search-and-update 526 33% - isearch-update 524 33% - window-max-chars-per-line 509 32% window-font-width 509 32% + isearch-lazy-highlight-new-loop 10 0% + pos-visible-in-window-group-p 5 0% isearch-push-state 2 0% + isearch-delete-char 441 28% + isearch-forward 61 3% + execute-extended-command 1 0% + byte-code 389 24% - timer-event-handler 151 9% - apply 151 9% + auto-revert-buffers 97 6% + semantic-idle-scheduler-function 28 1% + isearch-lazy-highlight-start 2 0%
- mmmm… sí, (window-max-chars-per-line) es muy lenta
[ ]
quizás puedo volver a (window-body-width), se nota mucho más rápida que (window-max-chars-per-line) y parece dar el mismo resultado en la mayoría de casos (excepto si no hay „fringe“, pues entonces da ẽ 90 vs 89)- lo pruebo, es rapidísimo y aparentemente funciona igual
[ ]
quiero tenerlo como opción- ∴ de momento cambiarlo a mano
- ¿preguntar en lista de emacs?
- pero window-max-chars-per-line hace más cosas (ẽ tiene en cuenta tamaño)
- podría usar (- (window-body-width) 1) si veo que siempre da un resultado 1 mayor
- de todas maneras uso „fringe“ así que no me da problemas
cambiaron a window-max-chars-per-line por:
+2016-04-26
- Fix bug#22891: wrong terminal width when a fringe width is zero.
- When either fringe width is zero, Emacs reserved one column for a
- continuation glyph. Terminal windows does not take this into
- account when the frame is resized.
- * lisp/window.el (window-adjust-process-window-size): Use
- `window-max-chars-per-line' instead of `window-body-width'.
- https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22891
[…] it was a function in window.el used to by terminal windows to track the window width that didn't take the continuation glyph into account. (The continuation glyph is visible when the width of a fringe is zero.)
[ ]
aaaah, (window-font-width) ya es problema, ya es muy lenta (sólo para decir ẽ 10)- quizás porque llama a (font-info (face-font 'default))
- quiere (aref (font-info (face-font 'default)) 11)
- font-info es ya algo gordo
[ ]
¡¡¡+window-font-width+ face-font debería ser instantáneo a menos que la fuente haya cambiado!!! Tiene que haber alguna caché- iría en file:///w/emacs/src/font.c#org0dbf3b7
- quizás porque llama a (font-info (face-font 'default))
[ ]
isearch no debería estar pidiendo el nº de caracteres repetidamente…- claro que alguien podría estar cambiando la fuente mientras isearch está activo… pero aceptaría fallar en ese caso para tener búsqueda rápida en el resto de casos
1.6.8. IS algo de mailcap es mucho más lento que antes (unos 20s más al arrancar)
"mailcap-parse-mailcap-extras" (0xc6d6f748) "mailcap-parse-mailcap" (0xc6d6fba0) "mailcap-parse-mailcaps" (0xc6d6ff98) "mailcap-mime-info" (0xc6d70330) "setq" (0xc6d704a0) "if" (0xc6d70570) "while" (0xc6d70650) "let" (0xc6d707c0) "defvar" (0xc6d708a0) "eval-buffer" (0xc6d70a90) "load-with-code-conversion" (0xc6d70e98) "require" (0xc6d712c0) "eval-buffer" (0xc6d714a0) "load-with-code-conversion" (0xc6d718a8) "load" (0xc6d71ca8) "startup–load-user-init-file" (0xc6d720c0) "command-line" (0xc6d72a48) "normal-top-level" (0xc6d72ee0)
- (require 'mailcap)
- (mailcap-mime-info "text/plain")
- (mailcap-parse-mailcaps nil t)
- (mailcap-parse-mailcaps "~/.mailcap" t)
- (mailcap-parse-mailcaps "/etc/mailcap" t)
es por w3m, creo
Debugger entered–Lisp error: (void-variable w3m-use-symbol) default-toplevel-value(w3m-use-symbol) custom-initialize-reset(w3m-use-symbol (when (and (featurep 'mule) (eq w3m-type 'w3m-m17n)) (if (eq w3m-output-coding-system 'utf-8) (and (w3m-mule-unicode-p) (or (featurep 'xemacs) (< emacs-major-version 23)) 'w3m-device-on-window-system-p) t))) custom-declare-variable(w3m-use-symbol (when (and (featurep 'mule) (eq w3m-type 'w3m-m17n)) (if (eq w3m-output-coding-system 'utf-8) (and (w3m-mule-unicode-p) (or (featurep 'xemacs) (< emacs-major-version 23)) 'w3m-device-on-window-system-p) t)) "Non-nil means replace symbols that the <_SYMBOL> …" :group w3m :type boolean :require w3m-symbol) eval-buffer(#<buffer *load-460691> nil "home/dc.emacs.d/emacs-w3m-cvs/w3m.el" nil t) ; Reading at buffer position 53574 load-with-code-conversion("home/dc.emacs.d/emacs-w3m-cvs/w3m.el" "home/dc.emacs.d/emacs-w3m-cvs/w3m.el" nil t) require(w3m) eval-buffer(#<buffer *load*> nil "home/dc.emacs" nil t) ; Reading at buffer position 468445 load-with-code-conversion("home/dc.emacs" "home/dc.emacs" t t) load("~/.emacs" noerror nomessage)
- w3m hace:
- (mailcap-parse-mailcaps nil t)
- (mailcap-parse-mimetypes nil t)
- pasa así: (require 'w3m)
- [] entender por qué lo hace
[X]
ya de paso, actualizar y simplificar w3m- ∴ al actualizar al w3m de git (m10.2020), ya no pasa. Usaba el ~m1.2019 de CVS
1.7. cosas raras que necesitan investigación
1.7.1. BONUS indeterminismo en salida devuelta por emacsclient
$ for a in `seq 1 20`; do echo -n "vez $a: "; emacsclient -e '(message "hola")' ; sleep 0.2 ; done
A veces devuelve algo, otras no:
vez 1: "hola" vez 2: "hola" vez 3: vez 4: "hola" vez 5: "hola" vez 6: vez 7: "hola" vez 8: vez 9: "hola" vez 10: "hola" vez 11: vez 12: vez 13: vez 14: "hola" vez 15: "hola" vez 16: vez 17: "hola" vez 18: "hola" vez 19: "hola" vez 20: "hola"
Esto es muy feo.
Visto el
con Emacs reciente de Bazaar.1.7.1.1. esto afecta mucho al retorno de valores
Ej. es inútil querer asignar esto a una variable en bash:
emacsclient -e '(and emms-player-playing-p (not emms-player-paused-p))'
No es debido a que las variables tengan un valor inestable, sino a STDOUT, pues esto pita siempre:
emacsclient -e '(if (and emms-player-playing-p (not emms-player-paused-p)) (beep))'
1.7.1.1.1. IS solución chapucera para devolver variables mediante emacsclient
function valor1 { TEMPI=$(mktemp); emacsclient -e "(with-temp-file \"$TEMPI\" (if (and emms-player-playing-p (not emms-player-paused-p)) (insert ?1)))" >/dev/null; RETO=1; [ -s $TEMPI ] && RETO=0; rm -f $TEMPI; return $RETO; }
Funciona siempre. Pero ¡qué complicado!
1.7.2. IS mensaje Invalid face reference: quote
registrado de vez en cuando
Pero va todo bien.
[X]
conseguir reproducir[X]
corrijo lo del color-80candidatosno es por esto:- creo que es por file:~/.emacs.d/color-theme-6.6.0/color-theme.el,
(if (and (consp face) (eq (car face) 'quote))
- creo que es por file:~/.emacs.d/color-theme-6.6.0/color-theme.el,
1.7.2.1. IS ∴ es por el texto tachado en org-mode (ejemplo): cuando hay en la pantalla, da el mensaje
There are text properties here: face (quote (:strike-through t) org-level-4) font-lock-multiline t …
Y es que en .emacs tengo:
(setq org-emphasis-alist '( ; … ("~" org-verbatim "<code>" "</code>" verbatim) ("+" '(:strike-through t) "<del>" "</del>") ) )
[X]
le quito la comilla al strike-through[X]
se arregla
1.7.2.2. MALFAR registro interesante del contexto en que sale; hay pistas
Clock starts at
- showing entire task time. CHILDREN Invalid face reference: quote [3 times] CHILDREN Invalid face reference: quote Unable to load color "color-80" [4 times] Invalid face reference: quote [20 times] Mark set [2 times] gnuplot-mode 0.6.0 (gnuplot 4.6) – report bugs with "M-x gnuplot-bug-report" Auto-saving…
1.7.3. IS me toma la categoría mala de un fichero (Lisp.org)
- (org-get-category) en Lisp.org, me da "opencraft.org"
- y en agenda sale mal listado
- creo que es porque moví algo opencraft→Lisp.org
- (get-text-property (point) 'org-category)
- (org-refresh-category-properties)
(org-get-at-eol 'org-category 1)
también- luego empezó a mostrármelo bien, pero agenda mal
- ∴ solución: ponerme en el búfer .org fallante y hacer
(org-refresh-category-properties)
- „fallante“ es el que sale en agenda y no debería salir; en ése toca hacerlo
- esto arregla agenda
[ ]
no sé por qué pasó- no puedo fiarme de org-agenda-log-mode por ahora
- suerte que de momento uso otros sistemas (cromonetrados-org.el para exportar, y luego Python)
- otra solución: cerré emacs y volví a abrir, y ya iba
- recargué org-mode y compilé, no ayuda
1.7.3.1. me pasó otra vez. Pasa poco pero pasa. Tras filtrar por „opencraft“ salió algo que no lo era
- (org-element-cache-reset t), no me ayuda, no arregla nada
1.7.4. mensajes continuos sobre errores en ficheros que no estoy usando
- lo hace semantic-idle-scheduler-mode
- no ralentizan ni molestan pero distraen
Save Error: "Unbalanced parentheses": /home/dc/.emacs.d/cedet-caché/!home!dc!Downloads!semantic.cache Parsing Sprint - Serenity - Agile Board - OpenCraft-bonificado.html (HTML)... Parsing Sprint - Serenity - Agile Board - OpenCraft-bonificado.html...done Save Error: "Unbalanced parentheses": /home/dc/.emacs.d/cedet-caché/!home!dc!Downloads!semantic.cache […] Error running timer ‘semantic-idle-scheduler-function’: (scan-error "Unbalanced parentheses" 29487 856661)
- parece que es por HTML raro ¿o inválido? o lioso, tipo
<![endif]-->
; en alguno se lía - cerrar el fichero afectado, eso ayuda
∴ mmmmmm… es porque le he activado semantic-show-parser-state-mode. Pruebo a desactivarlo y ya se calla
(global-semantic-show-parser-state-mode 0) ← justo esto no va, pero lo desactivé de otra forma
1.7.5. el recover-session, me muestra y sugiere siempre un fichero que no tiene cambios
1.7.6. MALFAR emacs me pierde un fichero org importante con cambios sin grabar, tras haberlo matado a la fuerza
- ∴ ah, no me lo perdió, estaba en
#nombre.org#
, es que lo recuperó mal - igualmente, me está fallando mucho, por el error de garbage-collect (sweep_conses) y otros
¿quizás debido a que intenté por error una versión de hace 10 años? No sé en qué afecta- por si acaso, subo la frecuencia del coseguador (el porsifalla)
1.7.7. el [#A] de una prioridad en org-mode se expande una letra más que lo que quiero (o sea, incluye el espacio posterior)
- no sé si por overlays
- lleva pasando años
- ẽ con: Org mode version 9.3.7 (release_9.3.7-708-g5417e3.dirty @ w/org-mode/lisp)
1.7.8. BONUS el helm-git-grep no va cuando estoy usando tramp para acceder a otro usuario. Se equivoca de usuario y no reconoce el de tramp
- por ejemplo, como usuario
dc
entro a/su:usu@:/home/usu/
(eso entra a través de usuariousu
). Y ahí, git grep no va; sigue pensando que soy el usuariodc
mirando el repositorio de home/dc, no el /home/usu. Quiero el otro repositorio (/home/usu) - no ayuda:
- „Helm Git Grep Base Directory“: lo quiero siempre a RootDirectory. Pero he probado ambos y no cambia nada
- …
el comando que ejecuta (es: helm-git-grep-submodule-grep-command)
Result: "git grep -n --no-color -i -e ho | sed s!^!$path..." ("git" "--no-pager" "submodule" "--quiet" "foreach" "git grep -n --no-color -i -e ho | sed s!^!$path...")
- lo llama con start-process. Lo pruebo aquí: (apply 'start-process "prueba-de-proceso" "búfpro1" '("id"))
- y luego mirar búfer
- veo que start-process, a diferencia de shell-command, no sabe de tramp. ẽ no se da cuenta de que el directorio actual es otro
a ver, lo compruebo: lo fuerzo a estar en algo con tramp
(let ((default-directory "/su:so@ocrb:/home/so")) (apply 'start-process "prueba-de-proceso" "*búfpro1*" '("id")))
- y veo que no usa tramp
a diferencia de esto, que sí que usa tramp:
(let ((default-directory "/su:so@ocrb:/home/so")) (shell-command-to-string "id"))
experimento:
(let ((default-directory "/su:so@ocrb:/home/so")) (funcall 'tramp-file-name-handler 'shell-command "id" nil nil))
- propuestas: ver abajo
- o quizás puedo hacer que helm-git-grep no use async-process…
- o modificar ẽ helm-git-grep-process, para que haga un „su“ antes e invoque el comando git como otro usuario
1.7.8.1. me gustaría usar tramp con start-process → ∴ puedo, si uso make-process en vez de eso
- ∴ mandé mi solución a https://github.com/yasuyk/helm-git-grep/issues/48, ver ahí
- por mirar: https://www.gnu.org/software/emacs/manual/html_node/tramp/Remote-processes.html
por ahora no va:
(let ((default-directory "/su:so@ocrb:/home/so")) (funcall 'tramp-file-name-handler 'start-process "prueba2" "*búfpro2*" '("id")))
- pero:
(error "Unknown file I/O primitive: start-process")
- eso es porque tramp-file-name-for-operation permite muchas operaciones, pero no start-process
- pero:
- sí que permite start-file-process, exec-path, make-process
- mmmmmm… make-process es muy apto, pues es como start-process
pruebo con make-process:
(let ((default-directory "/su:so@ocrb:/home/so")) (make-process :name "prueba-id" :buffer "*búfpro1*" :command '("id") :file-handler 'tramp-file-name-handler))
- ¡funciona!
- tramp.el dice „Emacs 27+ only“ sobre make-process, y NEWS.25 dice que make-process está desde Emacs 25. Por tanto el truco sólo va en Emacs 27 o superior. Eso es agosto 2020
para probar, me hago función que fuerza usar make-process y tramp (siempre). No es la versión final que quiero (la que quiero es dinámica y vale para tramp y ¬tramp). ¡Funciona!
(defun helm-git-grep-process () "Fuerza a usar tramp en todos lados (aunque no haga falta), para probar si el „git grep“ se puede hacer y funciona a través de tramp. Me ha funcionado. Por cierto, esto sobreescribe la helm-git-grep-process original" (helm-aif (helm-attr 'base-directory) (let ((default-directory it)) ;; (debug) (make-process :name "git-grep-process" ;; :buffer nil :buffer "búfpro3" ;; Quizás mejorable :command (append '("git") (helm-git-grep-args)) :file-handler 'tramp-file-name-handler )) '()))
mejoro lo anterior, para detectar si hace falta tramp o no. ¡Funciona! Lo he mandado a https://github.com/yasuyk/helm-git-grep/issues/48
;; v2, mandada a https://github.com/yasuyk/helm-git-grep/issues/48 (defun helm-git-grep-process () "Retrieve candidates from result of git grep. It decides whether to use tramp or not, based on the directory.
It's just a proof of concept, to show that it's possible to make helm-git-grep work with tramp. It shows more debug messages than required and IT DOESN'T CLOSE PROCESSES, so you'll be left with many `su' processes. You may manually kill them. But it works: it allows you to e.g. open this path: su:user2@:/home/user2 and then helm-git-grep will run `git grep' as that user. Non-tramp paths aren't affected.
Please improve this function and post a fixed version!" (helm-aif (helm-attr 'base-directory) (let* ((default-directory it) (handler (find-file-name-handler (directory-file-name default-directory) 'make-process))) (make-process :name "git-grep-process" :buffer "debuggingbuffer1" :command (append '("git") (helm-git-grep-args)) :file-handler handler )) '()))
;; la 1ª versión que hice (defun helm-git-grep-process () "Usa tramp, o no, en función del directorio. Aún es algo incómodo (muestra más mensajes que los que quiero) pero funciona. Cuidado, LE FALTA CERRAR EL PROCESO (ahora quedan procesos „su“ abandonados cada vez que se invoca la búsqueda). Esta función sobreescribe la helm-git-grep-process original" (helm-aif (helm-attr 'base-directory) (let* ( (default-directory it) (handler (find-file-name-handler (directory-file-name default-directory) 'make-process)) ) ;; (message handler) ;; (debug) (make-process :name "git-grep-process" ;;:buffer nil :buffer "búfpro3" ;; Quizás mejorable :command (append '("git") (helm-git-grep-args)) ;; :file-handler 'tramp-file-name-handler :file-handler handler )) '()))
- lo pongo temporalmente en mi emacs
- una versión aún mejor sería: usar make-process sólo si
existetramp la soporta. Si no, usar start-process [X]
mandado a autores de helm-git-grep: https://github.com/yasuyk/helm-git-grep/issues/48- para matar los procesos extra abiertos
esto es un poco cutre (lo del „SN“) pero parece evitar los que he abierto yo, y mata el resto
root@ocrb:~# ps axfu | grep -- '\\_ su - so' | grep -v 'grep'| grep -Ev '\bSN\b' | awk '{print $2}' | xargs kill
1.8. que Emacs participe en Summer of code 2009
1.8.1. mensaje que envié el
From: Daniel Clemente <…> Newsgroups: gmane.emacs.devel Subject: Re: Summer of Code 2009 References: <18797.40998.179248.71695@kahikatea.snap.net.nz> X-Draft-From: ("gmane.emacs.devel" 107842) Date: Thu, 15 Jan 2009 11:10:59 +0100 Message-ID: <87k58wg9qk.fsf@CPU107.opentrends.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux) Cancel-Lock: sha1:Ijrv9J5osjSMaMC8HUEupzBz/SE= --text follows this line-- Hi, I think this is a very good opportunity to tackle the big projects which have been around for a long time and which would improve Emacs considerably. As examples: 1. Integrate CEDET into Emacs ----------------------------- This will ease support for other languages and integrate features like code completion, syntax checking, project handling, ... Some other tools like JDEE (Java support) or ECB could also be included. 2. Good multithreading support for Emacs ---------------------------------------- This is much wanted, specially for background processes like checking mail. It is necessary to profit from multicore processors, very common nowadays. There were already attempts to do this. 3. Version control system and bug tracker ----------------------------------------- This would include: - setting the Bazaar repository, migrating from CVS to Bazaar - web interface to the bug tracker, similar to the other projects like Bugzilla and Launchpad, where you could see reports, send a new bug, query for bugs, ... - and at the same time, mail interface, where you can issue all commands just via mail - integration between VC and bug tracker; similar to what Bundle Buggy (in Launchpad) does: patch tracking, asking for automatic merges from the mailing list, patch approval, ... - some other infrastructure tasks could be added, like automatic building (continuous integration), breakage detection (get noticed when code doesn't compile), validation at commit time, ... There are for sure more ambitious projects; and I'm sure that many students would apply for them. Emacs needs mentors first. Greetings, Daniel
1.8.2. también lo mandé a CEDET
In the Emacs mailing list they are discussing participating in Google's „Summer of code". Since CEDET will be an important part of Emacs, have you considered presenting some of these or bigger projects? Maybe the first project would be to integrate CEDET into Emacs.
1.8.3. IS ver respuesta
1.8.4. IS escribir en wiki
- CONCLUSIÓN escrita el
http://www.emacswiki.org/emacs/SummerOfCode2009
Título: SummerOfCode2009
#+BEGIN_EXAMPLE
In Google's [http://code.google.com/soc Summer of Code] program, students receive some help while they work for 3 months on the free software project they choose. Several organizations have taken part in the last 4 years, including GNU ([http://www.gnu.org/software/soc-projects/ideas.html ideas for SOC 2009]). GNU Emacs could also take part this year; this page is an informal discussion about ideas. Feel free to edit this page! ([[HowToEdit]]). == How to participate; the basics == Detailed info here: [http://code.google.com/opensource/gsoc/2008/faqs.html] Use also the chat channel <code>#gsoc</code> on FreeNode. === Dates and deadlines === In 2008: the program announcement was on 25th February; the start date of applications submission from the mentoring organizations was on 3rd March In 2007 it started in 5th March. In 2009... we still (22th Jan.) don't know. The dates in 2008 were the following: [http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline] There were 9 days to submit the ideas list, 14 to register as students, and almost 3 months to code. === People === We need: ,* mentors, which follow students' progress and help them. Each project needs a mentor. ,* students which have interest on a particular project. They must be taking official studies. They will work approx. from May to August. === Legal === Since students will write code for [[GnuEmacs]], they must sign first an agreement with the FSF. See [[LegalMatters]]. == Firm list of ideas (with mentors) == If you can guide a student in a particular project, write your name and the project here. Requisites for the proposals: ,* the goal is to write code, not documentation ,* adapt the difficulty to 12 weeks of work ,* they should fit the GNU project; that means: they should steer people to use free plattforms and programs ,* please list here only the projects with mentor; for loose ideas and brainstorming, see the next section After a proposal is here, consult with the community and then send to [http://www.gnu.org/software/soc-projects/ideas.html GNU project's ideas list]. That is the page which will be shown to Google. === shell and script debuggers and Emacs === (From [http://www.gnu.org/software/soc-projects/ideas.html#shelldbg]): In the last couple of years, a large number of Integrated Development Environments (IDE's) has emerged. So far, none has come close to the editing capabilities of Emacs, but on the debugger side, Emacs has been surpassed. As many people still use Emacs as their preferred editor, an ideal situation would be that Emacs also would be used as a debugger front-end with windows for, say, the call stack, local variables, and breakpoints. Some work in this area has been done, most notably gdb-ui.el, which provides a multi-window debugging environment for C and C++ and gdb. In addition, the ruby-debug project is doing similar work for Ruby. This project would: ,* define guidelines for the look and feel for multi-window debugger Emacs environments. ,* refactor and unify the existing code base (gdb-ui and rdebug), to make it easier to implement support for other debuggers. ,* Analyze the underlying Emacs layers [1], and maybe restructure parts. Especially, the gud.el layer is a candidate for this. ,* Implement support for other languages and/or debuggers, for example Bash and Python. For more information, contact R. Bernstein and Anders Lindgren. == Loose ideas and discussion == If you know about these topics and you want to help people to improve Emacs, please adapt it, add yourself as a mentor and move the heading to the previous section. Other sources for ideas are: ,* the [[WishList]]. You can extract and define a project based on the wishes there ,* [[EmacsIDEWishList]], particularly important improvements ,* [[EmacsBugs]] ,* [[EmacsTodo]]: fixing a subset of those tasks would be instructive and helpful === Make Scheme an Emacs extension language === See [[GuileEmacs]]. At least goal 1 can be aimed. === Integrate CEDET into Emacs === See [[CEDET]]; this is already planned for Emacs 24. This will ease support for other languages and integrate much wanted features like code completion, syntax highlighting, syntax checking, project handling, ... Some other tools like [[JDEE]] (Java support) or [[ECB]] could also be included. Lots of things must be done to make Emacs a better IDE, and this is one of them. === Improve VC (version control system) === How about also having a proposal for improving VC? ,* implement vc-pull / vc-push ,* improve dealing with branches ,* add other features that are needed for modern version control systems. === Good multithreading support for Emacs === This is much wanted, specially for background processes like checking mail. It is necessary to profit from multicore processors, very common nowadays. There were already attempts to do this. See [[ConcurrentEmacs]] and messages in the mailing list (Giuseppe Scrivano, 29 Nov 2008). === Create an usable shell interface === There is M-x term, ansi-term, shell, eshell: too many shells, and no one is good enough to please most users. ,* [[AnsiTerm]] and [[ShellMode]] could be merged so that we have just 2 types of shell: an Elisp one ([[Eshell]]) and an interface to your other shell (like bash). ,* Eshell could also have all good things by default: colors, completion, globbing, ... See [[EshellWishlist]] ,* Compatibility should be checked so that all programs work normally; just like in bash inside an xterm ,* Performance issues: cat, ls, find, ... should run fast === Integrated version control system and bug tracker to be used in Emacs project === Emacs has unfinished and sometimes rudimentary tools to track its development. A new GNU project could be established (or existing ones extended) to improve the tools which will serve to sustain Emacs' coding infrastructure. This could include: ,* setting the Bazaar repository, migrating from CVS to Bazaar and adapting Bazaar so that it fits Emacs ,* web interface to the bug tracker, similar to the other projects like Bugzilla and Launchpad, where you could see reports, send a new bug, query for bugs, ... ,* and at the same time, mail interface, where you can issue all commands just via mail ,* integration between VC and bug tracker; similar to what Bundle Buggy (in Launchpad) does: patch tracking, asking for automatic merges from the mailing list, patch approval, ... ,* some other infrastructure tasks could be added, like automatic building (continuous integration), breakage detection (get noticed when code doesn't compile), validation at commit time, ... === Finer dimensions for window and frame sizes === Another change we should ask Google to support is to eliminate the requirement for window and frame sizes to be integral numbers of characters and lines. === Multiple major modes === Integrate [[MuMaMo]] into Emacs so that it is easy to have more than one major mode in a buffer; for instance: Java and HTML (that's .jsp) or [[OrgMode]]+C/Lisp/Python/Java/...
1.8.5. IS para lista de correo
Hi, I wrote in EmacsWiki the list of ideas which have appeared on the mailing list with relation to Summer of Code 2009: http://www.emacswiki.org/emacs/SummerOfCode2009
Anyone can add more; and please restructure the page if you want. I will also try to keep the list consistent and update it. Please add some deadlines to your org-modes so that you don't miss the dates to submit proposals! :-) We can collect ideas until March, so there's still time to discuss and choose the project.
Remember: we don't only need ideas, we need also mentors (people who can help the students and track their progress).
Greetings, Daniel
1.8.6. IS mandé el enlace también a CEDET
1.8.7. IS y a JDEE
jdee-devel@lists.sourceforge.net
Hi, this is a good opportunity to boost JDEE's progress and maybe integrate it with CEDET and Emacs. Are there big projects (for 12 weeks of work) which could be done to improve in JDEE? You can add your ideas to this page I started: http://www.emacswiki.org/emacs/SummerOfCode2009
We need also mentors (people to help the students).
I hope Emacs becomes soon a better IDE for Java coding. Greetings,
Daniel
1.8.8. IS revisar respuestas en Emacs, CEDET y JDEE
- CONCLUSIÓN escrita el
nada especial
1.8.9. IS seguir ideas para SOC2009 en EmacsWiki
Hay alguna nueva… nada en especial.
1.8.10. IS pedir estudiantes con proyectos (y que busquen mentores)
Aprovechar para decir fechas
1.8.10.1. IS enviado, esperar respuesta en .devel
- CONCLUSIÓN escrita el
nadie
1.8.10.2. IS volver a escribir para animar a estudiantes
We will begin accepting applications from mentoring organizations on March 9, 2009.
1.8.10.3. MALFAR reesperar respuesta
- CONCLUSIÓN escrita el
no tuvo mucho éxito
2. EmacsWiki
2.1. BONUS reimplementar EmacsWiki en ficheros .org
2.1.1. mensaje que envié el
From: Daniel Clemente <…> Newsgroups: gmane.emacs.xemacs.beta,gmane.emacs.sxemacs.devel,gmane.emacs.devel Subject: Re: Emacs-Lisp Bill-Board References: <49881BE3.6090907@online.de> X-Draft-From: ("gmane.emacs.devel" 108667) Date: Wed, 04 Feb 2009 11:27:41 +0100 Message-ID: <87vdrqo5sy.fsf@CPU107.opentrends.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux) Cancel-Lock: sha1:wi9h55SzNJSprxYYTetVRkZeYSE= --text follows this line-- EmacsWiki was suggested as the natural place to share code snippets, but not appropriate because of possible unwanted edits and because it doesn't integrate well with our tools (version control, Emacs, ...). I propose to reimplement EmacsWiki using org-mode pages. Org-mode ( http://orgmode.org/ ) is an oficial Emacs mode to take notes, define tasks to do, schedule appointments and deadlines, publish to several formats, and more. It uses just a plain text file with as much markup as you want. Version control works thus very well with .org files. This combination would do it: - a Bazaar repository. This is where access control is done - several .org files in it; including global pages with Emacs information and also personal pages with information and the each user's task list if they want. - a script which export these pages to HTML (this is already done; see below) - a web interface so that users can edit pages in a web browser A special branch or directory with restricted access could be used to hold the accepted code for inclusion with Emacs. Emacs could then branch this directory. Either this is restricted to people who signed the FSF papers, or some script is included in Emacs to download this branch at will. There can be a global section and also personal pages, where each users tracks their Emacs-related tasks (schedules, deadlines, TODOs, links to discussions, ...). Hey, even bugs could be discussed and fixed in Org better than in a bug tracker! Note that you get all the typical Emacs eye-candy while you are editing .org files: gnus, remember, bbdb, vc, diary, appt, ... Of course, other files could also be tracked and shared, like export scripts. Org-mode even includes an attachment system which can help organize files and add any metadata you want. Source code can be edited in place (with syntax colouring) or attached in files. This is not an utopia; this is already being used in Worg, a repository of pages related to Org-mode. Its main page is: http://orgmode.org/worg/ You can fetch this branch (read-only) with: git clone git://repo.or.cz/Worg.git Registered users can push to that branch easily, can fork from that branch, merge again, etc. What is missing is a web interface to that repository which allows to commit each change that. But I understand that this is already what EmacsWiki does, since it commits everything to a repository (http://www.emacswiki.org/emacs/SVN_repository). The new EmacsWiki branch could even import this Subversion branch. Many users have been contributing to Worg and it has been useful. It is a working demo of what EmacsWiki could do; in the future, maybe Worg is just a part of the greater EmacsWiki... Greetings, Daniel
2.1.1.1. MALFAR avisar a org sobre reimplementación de EmacsWiki
Primero probar elbb
2.1.2. idea de Bastien
2.1.2.1. su mensaje
I don't know if people on the list actually played with Worg but I just set up ELBB (Emacs Lisp Bill-Board). It works like Worg, but for Emacs Lisp code.
The ELBB repository is hosted on gitorious:
http://gitorious.org/projects/emacs-lisp-bill-board
I publish an HTML output here:
http://lumiere.ens.fr/~guerry/elbb/
Changes made to the git repository are reflected on this website every hour.
Please have a go and let me know if this is useful.
2.1.2.1.1. IS le contesté; ver qué dice
2.1.2.2. IS probar elbb
en /w/elbb
[X]
No me va git push[X]
Me tiene que dar de alta
2.1.2.3. BONUS adaptar elbb para que sea como EmacsWiki
3. org-mode y relacionado
3.1. cosas que no funcionan como deberían. «Fallos»
3.1.1. algunos problemas al colorizar
3.1.1.1. hay estos dos fallos relacionados
3.1.1.1.1. prueba
aaa =eee
ooo* uuu =ae
e=
ooo* uuu
3.1.1.1.2. son dos fallos
- el = se pasa a la cabecera de la siguiente línea
- el * abierto en una cabecera sigue por debajo
3.1.1.2. IS se coloriza mal (la faz pasa a la siguiente línea)
- CONCLUSIÓN escrita el
enviado a org
3.1.1.2.1. blabla
<c:if test="<%= GroupPermission.contains(permissionChecker, group.getGroupId(), ActionKeys.MANAGE_LAYOUTS) %>">
3.1.1.2.2. IS probar con última versión de org
3.1.1.2.3. prueba
3.1.1.2.4. IS esperar ambos fallos
- CONCLUSIÓN escrita el
ya lo hizo Carsten, qué eficiente
[X]
bajar línea sola[X]
código demasiado
3.1.1.2.5. otra prueba
a="b
a=b
3.1.1.2.6. MALFAR Lo sigo viendo mal; ¿no se corrigió?
El
con „release_6.29c.55.ga48f“ y Emacs 23 (-snapshot).3.1.1.3. también se malcoloriza (la faz cruza una cabecera inferior)
Éste lo intenté corregir un poco tocando org-emph-re.
3.1.1.3.1. org-emph-re original
"\\([ ('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ \n,\"']\\|[^ \n,\"'].*?\\(?:\n.*?\\)\\{0,1\\}[^ \n,\"']\\)\\3\\)\\([- .,:!?;'\")}\\]\\|$\\)"
De proto-correo:
- I did some tests with org-emph-re (original value: [1]); the interesting part is \\\{0,1\\} because it is the one that allows the face to extend up to 1 line below.
3.1.1.3.2. intento fallido para que no incluya marcas que no tocan; con \3
No es lo solución pues entre = y = no hay otros =, eso está claro.
(setq org-emph-re "\\([ ('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ \n,\"']\\|[^ \n,\"'].*?\\(?:\n[^\n\\3]*?\\)\\{0,1\\}[^ \n,\"']\\)\\3\\)\\([- .,:!?;'\")}\\]\\|$\\)" )
Esto es incorrecto:
- I think that the dot in .*? shouldn't be a dot but a [^\3]*?, that means, any character (except newline) except the one that would close the emphasis. The face would then stop there.
3.1.1.3.3. cambio para que no traspase inicios de cabeceras
Lo que hay que hacer es que no ligue ^*.+ El .*? debería ser (línea no de cabecera, hasta el final) o sea:
( ^*+\[^ ].*? | ^[^*].*? )
Ésta va mucho mejor:
(setq org-emph-re "\\([ ('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ \n,\"']\\|[^ \n,\"'].*?\\(?:\n\\*+[^\n ].*?\\|\n[^\n*].*?\\)\\{0,1\\}[^ \n,\"']\\)\\3\\)\\([- .,:!?;'\")}\\]\\|$\\)" )
La original era:
(setq org-emph-re "\\([ ('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ \n,\"']\\|[^ \n,\"'].*?\\(?:\n.*?\\)\\{0,1\\}[^ \n,\"']\\)\\3\\)\\([- .,:!?;'\")}\\]\\|$\\)" )
Adapto la mía a org:
(setq org-emph-re "\\([ ('`\"{]\\|^\\)\\(\\([*/_=~+]\\)\\([^ \n,\"']\\|[^ \n,\"'].*?\\(?:\n\\(?:\\*+[^\n ]\\|[^\n*]\\).*?\\)\\{0,1\\}[^ \n,\"']\\)\\3\\)\\([- .,:!?;'\")}\\]\\|$\\)" )
Por tanto body:"\." (eso cuadra con todo). Antes body="."
; antes (defcustom org-emphasis-regexp-components '(" \t('`\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "." 1) ; mío (defcustom org-emphasis-regexp-components '(" \t('`\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "\\(?:\\*+[^\n ]\\|[^\n*]\\)." 1) ; para probar (setq org-emphasis-regexp-components '(" \t('`\"{" "- \t.,:!?;'\")}\\" " \t\r\n,\"'" "\\(?:\\*+[^\n ]\\|[^\n*]\\)." 1))
Aunque no es solución muy buena Enviado el
.3.1.1.4. también pasa en tabla y en comentario… en realidad el fallo es genérico, no sólo para esos dos casos
Mensaje de Carsten:
Also, there are similar issues with this in tables: Try | *h | h | | h | h* | or also with comments: Some text *h mamma mia # terminate bold in comment*
3.1.1.5. ¿no se pueden solucionar ambos fallos a la vez?
Quizás pidiendo a la expresión regular que no traspase fronteras entre cabecera y contenido… Pero no sé si se puede. Quizás mirando alguna propiedad del texto.
3.1.1.5.1. propuesta de Carsten: dejar de usar una expresión regular
- So I will out this on the back burner and try to get myself to implement programmed emphasis at some point.
3.1.1.5.2. mi propuesta: mejorar las expresiones regulares en Emacs para permitir comprobar propiedades de texto
Or many regular expressions, one for each context: table, heading, comment, text, … Based on the context, you choose one or another. To know the context, there may be some text property set at each point. If Emacs had a way to check for a text property (or even a face) inside a regexp, this could be easier. You could still use a single expression which would direct to the context-specific part, like in: \p{heading}REGEXP_ONLY_FOR_HEADINGS\|\p{table}REGEXP_FOR_TABLES\|… where \p{property} is the proposed addition to Emacs regexps. This was a minor issue, but making Emacs regexps more powerful would be nice.
3.1.1.6. siguen pasando cosas raras. La faz se extiende
Ej. instrucciones:
- Using: GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2021-08-15
- emacs -Q
- find file: new.org
- type: #+BEGIN_QUOTE
- press enter twice
- type: #+END_QUOTE
- press enter (1 time)
- press C-u C-x =
- it shows that face of the blank line after the block is „org-block-end-line“. That particular face shouldn't apply there because the block ended above
- insert still more blank lines after the block. All lines carry the „org-block-end-line“ face
- por mandar
3.1.2. IS Subject: Bug in clocking in: the list becomes corrupted by the CLOCK drawer
3.1.2.1. IS esperar respuestas
- CONCLUSIÓN escrita el
corregido
3.1.3. MALFAR fallo al empezar reloj
- CONCLUSIÓN escrita el
ya no pasa
3.1.3.1. ejemplo, importante esto del final: 50%
Haz aquí: C-c C-x C-i
Debugger entered--Lisp error: (error "Not enough arguments for format string")
org 6.28trans
3.1.4. ATENDAS otro fallo al empezar reloj en la misma tarea: no cierra el reloj anterior
3.1.4.1. mensaje
Hi, in recent org-modes a new behaviour was added: when doing C-c C-x C-i on the current task, it isn't clocked out first. It shows the message „Clock continues in "[task]"“ and adds a new line for the clock in. This creates a clock section like:
(le he metido un _ para que org no se confunda). #+BEGIN_EXAMPLE
3.1.4.2. por ejemplo queda así después de varios C-c C-x C-i seguidos
CL_OCK:
=> 0:05 CL_OCK: CL_OCK: CL_OCK: CL_OCK: CL_OCK: CL_OCK: CL_OCK: => 0:01#+END_EXAMPLE
They are later correctly found to be dangling clocks. I presume this is a bug?
Enviado a lista el
; buscar por „Clocking in the current task should clock it out first“.3.1.4.3. IS investigo por qué falla
# /w/org-mode ; git bisect start # /w/org-mode ; git bisect good 2b528343557b4ff08 # /w/org-mode ; git bisect bad 19113c46c99d99a93f4c8
Good: [da03a848e548c97667945c6e0207e8d336fd973c] babel: now correctly combining nested tangle header arguments
Bad: [4a4fbf1b8caa338a3a59f7b6f3f89b279615725d] Update modeline with effort and task name on re-clock-in
Problem: 29d945720095a65852f69b7c628c1199eb4961fe
Escribí a lista:
Commit 29d945720095a65852f69b7c628c1199eb4961fe (Date: Fri Nov 27 08:09:10 2009 +0100) was done precisely to leave clocks open; the bad behaviour comes from this change. Via bisect I found that the previous revision was good and the next revision bad.
3.1.4.4. estado actual
- : a otros no les pasa; a algunos sí. No ha habido más respuesta; toca investigar
3.1.5. fallos en la exportación a HTML y LaTeX
3.1.5.1. una lista en pie de página se exporta mal a HTML
Informado: http://lists.gnu.org/archive/html/emacs-orgmode/2009-10/msg00118.html
Ignorado. Me parece que ya lo informé en otras ocasiones pero no hay mucho interés; tendré que buscar tiempo yo.
En efecto: me dijo Carsten:
unfortunately, I do not see an easy way to fix this. My recommendation is to not use itemized lists in footnotes.
3.1.5.2. BONUS que se puedan exportar tablas con bordes, incluso los externos
En principio las tables se exportan sin bordes:
a | b | c |
Y si los defino (con grupos de columnas), faltan los exteriores:
a | b | c |
Hace falta poder configurar si los externos salen o no.
Ahora lo más parecido es org-export-latex-tables-column-borders = t
, que puso Bastien cuando se lo pedí.
Pero habría que subirlo de nivel para que sirva tanto para HTML como para LaTeX.
3.1.5.3. IS se descontrolan los números en la tabla de contenidos si un ejemplo tiene líneas que empiezan por asterisco
3.1.5.3.1. ejemplo
(aparte del emacs.org)
#+BEGIN_EXAMPLE
We need: ,* pears ,* lettuce ,* watermelons
Very important!
Me ha quedado:
<ul> <li><a href="#sec-1">1 five sections under here </a> <ul> <li><a href="#sec-1.1">1.1 one </a></li> <li><a href="#sec-1.2">1.2 two </a></li> <li><a href="#sec-1.3">1.3 three </a></li> </ul> </li> <li><a href="#sec-2">2 pears</a></li> <li><a href="#sec-3">3 lettuce</a></li> <li><a href="#sec-4">4 watermelons</a> <ul> <li><a href="#sec-4.1">4.1 four </a></li> <li><a href="#sec-4.2">4.2 five </a></li> </ul> </li> </ul>
3.1.5.3.2. cosas que investigo
(setq snumber (org-section-number level))
¡Pasa con EXAMPLE pero no con QUOTE ni VERSE ni SRC ni CENTER!
Sospecho de org-export-replace-src-segments-and-examples
,
en concreto de este trozo:
;; Free up the protected lines (goto-char (point-min)) (while (re-search-forward "^," nil t) (if (or (equal lang "org") (save-match-data (looking-at "\\([*#]\\|[ \t]*#\\+\\)"))) (replace-match "")) (end-of-line 1))
Depuro. (looking-at "\\([*#]\\|[ \t]*#\\+\\)")
es cierto.
Por tanto borra las comas y deja los asteriscos libres; por eso se cuelan.
Creo que a org-export-replace-src-segments-and-examples se la llama muy pronto.
Soluciones posibles:
- marcar como „no de org“ el trocito extraído del EXAMPLE
- obtener órdenes antes de desproteger trocito
3.1.5.3.3. IS mandado a lista; a ver si saben de qué es
- CONCLUSIÓN escrita el
Lo corrigió Carsten :-)
Mandado el
.3.1.5.3.4. MALFAR esto mismo pasa aún con la creación de enlaces
Por ejemplo en esta misma página (emacs.org) he visto enlaces incorrectos, como:
sólo me falta <a href="#sec-32.1.2.3">publicarlo</a>
cuando el ID real es sec-3.2.2.3
y la sección 32 no existe.
También un 3.2.2.2 me lo ve como 32.1.2.2.
Tengo que avisar a Carsten.
3.1.5.4. IS algunos IDs no los encuentra y por eso me crea enlaces como #22j2h2h cuando debería ser emacs.html#22j2h2h
Hay problemas con org.html que ha de enlazar a emacs.html
Donde tendría que enlazar a emacs.html#jgg8k741eue0
enlaza ahora a emacs.html
, y eso está mal.
También pasa:
- .orgs reducidos
- org-publish-project (dentro de prita)
- desde 5.34 (visto por bisect) ← curioso, eso apunta a otro lado
- si quito el ~/.emacs.d/.org-id-locations
Pero no pasa:
- en Emacs (C-c C-e)
- org-publish-project desde dentro de Emacs
Para probar:
- meter todo en ~/.org-defproyectos.el
- ~/repoweb/hacer/hacer ; rm -rf *.html ~/.org-timestamps/; emacs -Q –batch –load ~/.org-defproyectos.el –eval '(message "adiós")' && sleep 1 && b cdiff org.html
- ./comprueba en ~/org-linktest, para bisect
- para comprobar que la exportación de HTML no estropea esto:
b diff |grep -C2 '^-.*href.*html#'
Quizás es por:
- no sabe nada de esos ficheros, por tanto nunca vio esos IDs
- fallo de org-publish (pues con C-c C-e va)
3.1.5.4.1. quizás ajustando la configuración se arregla
Sí. Esto (y no menos) me ha hecho falta para hacer ir la demo:
(require 'org-id) (setq org-id-extra-files `(,@org-agenda-text-search-extra-files "~/org-linktest/has_ids.org" "~/org-linktest/linker.org")) (org-update-id-locations)
Y luego exportar de nuevo.
¡Qué lío tener que hacer eso! Dentro de un proyecto, los enlaces entre ficheros del proyecto deberían ir sin requerir nada especial.
Sugiero:
- añadir a org-id-extra-files temporalmente todos los ficheros .org del proyecto que org-publish está publicando
- luego llamar a org-update-id-locations
Mejor aún:
- llamar a org-update-id-locations para que actualice sólo los ficheros del proyecto publicándose (no toda la agenda)
(org-id-update-id-locations &optional FILES) (org-publish-get-base-files PROJECT &optional EXCLUDE-REGEXP) org-publish-get-project-from-filename
(require 'org-id) (org-id-update-id-locations (org-publish-get-base-files (org-publish-get-project-from-filename "~/repoweb/hacer/hacer/conkeror.org")))
Funciona. Lo malo: me borra los IDs anteriores en el fichero de IDs. Quiero que añada, no que sobreescriba.
3.1.5.4.2. IS aviso a org-mode e intento que se corrija (pero nadie responde)
- mando informe de fallo el Email from Daniel Clemente: org-publish skips the file name in inter-page link :
- me tocará resolverlo pues nadie contesta
- o aguantarme y buscarme la solución por mi cuenta
3.1.5.4.3. la parte de actualizar la BD de lugares funciona bien (org-update-id-locations)
Ej:
(org-id-update-id-locations '("~/repoweb/hacer/hacer/org.org" "~/repoweb/hacer/hacer/emacs.org") )
El fichero de id-locations sí que contiene contiene el fichero que donde aparece la entrada "jgg8k741eue0". Pero luego, el enlace desde org.org hasta emacs.org no usa esa información.
3.1.5.4.4. IS buscar cuándo se estropeó esto, pues hace poco iba
Una bisección desde 6.35 hasta la de hoy (enlace file: algo.org sale como http: algo.html). Es por eso por lo que pierdo la parte derecha de los enlaces.
) buscando la pérdida de anclaje (no otros errores) me ha llevado primero a revisiones inofensivas y luego a bbac53d7fe1cab14bc70e152092cf7a538a6a810, que es precisamente la corrección rápida a otro problema que encontré (- CONCLUSIÓN escrita el
arreglado en oficial
Esto me ha funcionado.
diff --git a/lisp/org-html.el b/lisp/org-html.el index 3fd7b72..3e4a789 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -746,7 +746,8 @@ MAY-INLINE-P allows inlining it as an image." ((or (not type) (string= type "http") - (string= type "https")) + (string= type "https") + (string= type "file")) (if fragment (setq thefile (concat thefile "#" fragment))))
Enviado a org el
. El está ya en oficial.3.1.5.5. BONUS algunos IDs se exportan con doble #, como emacs.html##wikipedia
Ej. de cambios generados por org-publish desde hace un tiempo.
-<p>Los fallos gordos, en la sección llamada <a href="#temas.html">A largo plazo</a>, apartado <a href="temas.html#wikipedia">Arreglar Wikipedia</a>. +<p>Los fallos gordos, en la sección llamada <a href="#temas.html">A largo plazo</a>, apartado <a href="temas.html##wikipedia">Arreglar Wikipedia</a>.
Supongo que tiene que ver con los problemas anteriores con IDs (faltan IDs, IDs con http).
[ ]
quizás es por culpa de sintaxis mía antigua; revisar[ ]
buscar revisión causante
3.1.5.6. IS los enlaces como algo.html están saliendo como http:algo.html
# ~/repoweb/hacer/hacer ; cat org.html | grep 'http:[^/]' <a href="http:index.html">Índice (varias tareas)</a> <a href="http:temas.html">Temas de investigación (tareas mayores)</a> <a href="http:emacs.html">Emacs</a> …
No es sólo en org-publish, sino en exportación normal también.
[X]
hacer juego de pruebas en httptest
# ~/org-httptest ; emacs --batch --load=/w/org-mode/lisp/org.el --visit ~/org-httptest/marco.org --funcall org-export-as-html-batch
- me encuentro con problemilla con org-list-automatic-rules; lo sobrepaso con:
# ~/org-httptest ; emacs --batch --load=/w/org-mode/lisp/org.el --visit ~/org-httptest/marco.org --eval "(setq org-list-automatic-rules nil)" --funcall org-export-as-html-batch
O:
# ~/org-httptest ; emacs --batch --load=/w/org-mode/lisp/org.el --visit ~/org-httptest/marco.org --eval "(setq org-list-automatic-rules nil)" --execute='(org-export-as-html-and-open nil)'
[X]
en proceso por lotes, va (no salehttp:
)[X]
probar en emacs normal con -Q: aquí pasaemacs --load cargaem.el -Q --visit marco.org
y hacerC-c C-e H
[X]
bisecciono: es por bd1b57f92a33485c90db1efc407c8b7c7450993a[X]
mandado a lista: http://thread.gmane.org/gmane.emacs.orgmode/29979[X]
corregido y ya va
3.1.5.7. IS no exporta fragmentos en C
Publishing file /home/dc/repoweb/ofinial/hacer/index.org using `org-publish-org-to-html' OVERVIEW Exporting… Debugger entered–Lisp error: (void-function nil) nil(1 346 nil) c-font-lock-fontify-region(1 346 nil) font-lock-fontify-region(1 346 nil) byte-code("\212\303 \304\216\305ed #\210\306 \210\307\211+\207" [save-match-data-internal verbose font-lock-fontified match-data ((byte-code "\30\302\"\207" [save-match-data-internal set-match-data evaporate] 3)) font-lock-fontify-region font-lock-after-fontify-buffer t] 4) font-lock-default-fontify-buffer() font-lock-fontify-buffer() org-export-format-source-code-or-example("c" "static void clientwin_do_set_focus(WClientWin cwin, bool warp){ if(cwin->flags&CLIENTWIN_P_WM_TAKE_FOCUS){ Time stmp=ioncore_get_timestamp(); send_clientmsg(cwin->win, ioncore_g.atom_wm_take_focus, stmp); } else { region_finalise_focusing((WRegion)cwin, cwin->win, warp); } XSync(ioncore_g.dpy, 0);}" " " 0 nil) org-export-replace-src-segments-and-examples()
Eso es por file:/opt/dc/share/emacs/24.0.92/lisp/progmodes/cc-mode.el.gz::(funcall c-standard-font-lock-fontify-region-function.
O sea, c-standard-font-lock-fontify-region-function
vale nil.
Lo pongo en mi prita que exporta:
(setq c-standard-font-lock-fontify-region-function (default-value 'font-lock-fontify-region-function))
3.1.5.8. IS exporta <li><p>elemento </p></li>
- mandado en m8.2014 a lista
- regresión
3.1.5.9. IS se pierden palabras de enlaces radio cuando están definidas fuera de la cabecera exportada
- mandado aviso el
3.1.6. al buscar IDs, detecta como distinto el mismo fichero porque en uno ha codificado mal el nombre
(org-id-update-id-locations)
A veces va bien… Pero otras detecta ej "lápices.org" y "l\200\33pices.org" (o los códigos que sean) como distintos, cuando son el mismo.
Es por el org-id-files
que es el último componente del (append)
que acaba en files
, en org-id-update-id-locations
. Ése y no otro es el que tiene caracteres raros.
Por tanto la solución de momento es:
(setq org-id-files nil)
Y entonces llamar a (org-id-update-id-locations)
para ver si se corrige el fichero ~/.emacs.d/.org-id-locations
3.1.7. no abre algunos IDs
- ej. éste,
cee9b461-afbd-4974-81b5-142ad00afe28
- estaba en
~/wiki/MF_Autónomo.org
- esto falla:
- (org-id-open "cee9b461-afbd-4974-81b5-142ad00afe28")
- ∴ org-id-update-id-locations lo arregla
3.1.8. no encuentra IDs, porque org-id-update-id-locations se cuelga mucho y no acaba; es lentísimo y hace GC
(org-id-update-id-locations)
Se cuelga en:
Finding ID locations (4/155 files): /home/dc/org/semana.org
Lisp Backtrace: "Automatic GC" (0x0) "line-end-position" (0x58dd8628) "org-element-clock-parser" (0x58dd8a00) "org-element–current-element" (0x58dd8f90) "org-element–parse-to" (0x58dd9578) "org-element-at-point" (0x58dd98b0) "org-element-context" (0x58dd9f38) 0x557a2e20 PVEC_COMPILED "org-entry-properties" (0x58dda980) "org-cached-entry-get" (0x58ddac30) "or" (0x58ddad90) "org-string<>" (0x58ddaec0) "and" (0x58ddaf80) "or" (0x58ddb040) "progn" (0x58ddb100) 0x501dfc60 Lisp type 3 "org-scan-tags" (0x58ddb998) "org-map-entries" (0x58ddbe50) "org-id-update-id-locations" (0x58ddc3b0) "funcall-interactively" (0x58ddc3a8) "call-interactively" (0x58ddc4c0)
(el "Automatic GC" (0x0) es lo que peligra, pues me mete en pila de más de 20k niveles)
[ ]
¿es por emacs o por org-mode?- actualicé emacs, parece que sigue fallando
[ ]
bisección[X]
perfilar- ẽ durante un minuto
CPU:
- command-execute 7841 55%
- … 6187 44%
- redisplay_internal (C function) 2 0%
- timer-event-handler 2 0%
MEM:
- command-execute 799,957,974 99%
- redisplay_internal (C function) 7,630 0%
- timer-event-handler 3,843 0%
- eldoc-schedule-timer 16 0% … 0 0%
más detallado:
CPU:
- org-cached-entry-get 6705 47%
- org-entry-properties 6705 47%
- #<compiled 0x15582053df31> 6684 47%
- org-element-context 6673 47%
- org-element-at-point 6661 47%
- org-element–parse-to 6495 46%
- org-element–current-element 5447 38%
- org-element-clock-parser 2944 20%
- org-get-limited-outline-regexp 840 5%
- org-at-heading-p 191 1%
- org-element-drawer-parser 94 0%
- org-element–current-element 5447 38%
- org-element–parse-to 6495 46%
- org-element-at-point 6661 47%
- org-element-context 6673 47%
- #<compiled 0x15582053df31> 6684 47%
- org-entry-properties 6705 47%
MEM:
- org-element-context 725,795,015 90%
- org-element-at-point 722,675,648 90%
- org-element–parse-to 720,933,473 90%
- org-element–current-element 706,848,867 88%
- org-element-clock-parser 530,370,966 66%
- org-element-timestamp-parser 417,505,018 52%
- org-parse-time-string 287,207,457 35% match-string 286,913,316 35% string-to-number 108,512 0% match-string-no-properties 34,606,710 4%
- org-element-timestamp-parser 417,505,018 52%
- org-element-clock-parser 530,370,966 66%
- org-element–current-element 706,848,867 88%
- org-element–parse-to 720,933,473 90%
- org-element-at-point 722,675,648 90%
- org-cached-entry-get 6705 47%
[X]
¿qué hay en el org-parse-time-string? ¿por qué ocupa tanto?- nada especial dentro, está analizando fechas. Pero veo bucle inf., ver abajo
- hay bucle infinito
miro el org-parse-time-string, le pongo mensaje de depuración, veo ẽ esto en línea de mi registro nº 198, y 424, y 652, y 880, o sea, (- 424 198) cada ~ 228 fechas se está repitiendo. (- 652 424) 228, …
Me piden analizar esta cadena: «[2016-09-10 Sat 21:45» Me piden analizar esta cadena: «[2016-09-10 Sat 22:05]» Me piden analizar esta cadena: «[2016-09-07 Wed 22:17» Me piden analizar esta cadena: «[2016-09-07 Wed 22:28]»
[ ]
¿por qué?veo en org
C…LOCK:
=> 0:25 C…LOCK: => 1:50 C…LOCK: => 0:30 C…LOCK: => 0:59pero analiza:
Me piden analizar esta cadena: «[2016-08-09 Tue 19:25» Me piden analizar esta cadena: «
» Me piden analizar esta cadena: «[2016-08-09 Tue 17:00» Me piden analizar esta cadena: « » Me piden analizar esta cadena: «[2019-11-05 Tue 03:05» Me piden analizar esta cadena: « » Me piden analizar esta cadena: «[2019-11-03 Sun 19:35»- y en ese punto vuelve a saltar al inicio. No sé porqué. Es la cabecera „cosas sueltas, repeticiones, ya vistas, vídeos, …“
- (- 3401 3286)115 líneas aprox. de cronómetros → sí, son las ~230 fechas que veo
[ ]
¿por qué bucla por esas líneas? No les veo nada especial- quizás no es por los tiempos, sino por org-element. ẽ quizás hay dos líneas que casualmente dan misma caché, o algo así
añado a
org-element--current-element
:(message "Analizando %i en %s" (point) (buffer-name) )
- oh on, descubro que parece no un bucle infinito, sino un bucle muy ineficiente y lento, pasando varias veces por los mismos sitios, pero avanzando un poco
¿y es que no hay caché?
org-element-use-cache is a variable defined in ‘org-element.el’. Its value is nil
Documentation: Non-nil when Org parser should cache its results.
WARNING: for the time being, using cache sometimes triggers freezes. Therefore, it is disabled by default. Activate it if you want to help debugging the issue.
- (setq org-element-use-cache nil)
- ∴ (setq org-element-use-cache t), esto lo acelera mucho, tarda cerca de 1 minuto ahora
3.1.8.1. más depuraciones, en 2020. org-update-id-locations se cuelga, es muy lento
Tras 10 minutos no ha pasado de 4 ficheros.
"search-forward" (0x7bdbbaa0) "org-element-clock-parser" (0x7bdbbe90) "org-element--current-element" (0x7bdbc420) "org-element--parse-to" (0x7bdbca18) "org-element-at-point" (0x7bdbcd50) "org-element-context" (0x7bdbd3d8) 0x6d43c90 PVEC_COMPILED "org-entry-properties" (0x7bdbde10) "org-cached-entry-get" (0x7bdbe0c0) "or" (0x7bdbe220) "org-string<>" (0x7bdbe350) "and" (0x7bdbe410) "or" (0x7bdbe4d0) "progn" (0x7bdbe590) 0x15dede50 Lisp type 3 "org-scan-tags" (0x7bdbee38) "org-map-entries" (0x7bdbf2f0) "org-id-update-id-locations" (0x7bdbf850) "funcall-interactively" (0x7bdbf848) "call-interactively" (0x7bdbf960) "command-execute" (0x7bdbfd08) "execute-extended-command" (0x7bdc01b0) "funcall-interactively" (0x7bdc01a8) "call-interactively" (0x7bdc0410) "command-execute" (0x7bdc0788)
CPU:
- org-id-update-id-locations 6926 54%
- org-map-entries 6835 54%
- org-scan-tags 6835 54%
- #<lambda 0xa92ff67a5c9ffd> 5981 47%
- progn 5981 47%
- or 5981 47%
- and 5981 47%
- org-string<> 5981 47%
- or 5981 47%
- org-cached-entry-get 5980 47%
- org-entry-properties 5977 47%
- #<compiled -0x70a60c874d6f422> 5955 47%
- org-element-context 5949 47%
- org-element-at-point 5932 47%
- org-element–parse-to 5809 46%
- org-element–current-element 4743 37%
- org-element-clock-parser 2306 18%
- org-element-timestamp-parser 1508 11%
- org-parse-time-string 640 5% match-string 259 2% match-string-no-properties 41 0% match-string-no-properties 13 0% count-lines 6 0%
- org-get-limited-outline-regexp 721 5%
- org-at-heading-p 134 1%
Misma solución: (setq org-element-use-cache t), y ya tarda algo más de 1 minuto. (Mmmm… me gustaría que fuera instantáneo como el café).
3.1.8.2. MALFAR pensaba que se colgaba, pero no es así, es que es lentísimo
Result: 90842 (#o261332, #x162da)
Result: "c49c2409-edd2-444e-baf7-ea70cb19c07f"
Result: 109541 (#o325745, #x1abe5)
Result: "a4116883-3225-4e63-9a2a-10ecd3cadf8f"
Result: 111829 (#o332325, #x1b4d5)
Result: "3b4a27fb-bb48-475b-820e-d859b6de1c0c"
Ahí se para.
No llega a ID 88b36e02-8151-4ff7-a9b0-0b22af2e45b9 ← llega tras mucho rato
3.1.9. IS no encuentra IDs cuando uso org-capture desde cierto(s) fichero(s)
- ẽ al hacer C-m m
> I….org > org-capture-set-target-location: Cannot find target ID "notas-sueltas-de-lo-que-sea"
- pero desde otros va
- org-update-id-locations lo arregla. Pero tarda varios minutos porque es lento y mis ficheros son grandes
3.1.10. IS algunos enlaces a ID los exporta como ID-id:aquívaelcódigo
- es nuevo, de o poco antes
- enlazo al ID
jgg8k741eue0
- va porque estoy en mismo fichero
- enlazo al ID
- enlazo a ID de otro fichero:
c5m2je81pue0
: soluciones temporales para descubrir cuál es me queda:
+<li>enlazo a ID de otro fichero: <code>c5m2je81pue0</code>: <a href="conkeror.html#ID-id:c5m2je81pue0">soluciones temporales para descubrir cuál es</a></li>
eso es inútil, porque el ID real de la sección es:
<h4 id="soluciones-temporales-para"><span class="section-number-4">3.1.4.</span> soluciones temporales para descubrir cuál es</h4>
por tanto me esperaba:
…<a href="conkeror.html#soluciones-temporales-para">soluciones temporales para descubrir cuál es</a>…
con un org de dentro de emacs, y sin mi confi, queda:
+<li>enlazo a ID de otro fichero: <code>c5m2je81pue0</code>: <a href="conkeror.html#ID-c5m2je81pue0">soluciones temporales para descubrir cuál es</a></li>
- quizás tiene que ver con el ajuste que yo hice
- file:///home/dc/.emacs.d/lisp/org-exportar-mejores-ids.el
- pero está funcionando, al menos al generar el ID que toca
- quizás falla (le falta) el tomar ese ID
- pruebo a desactivarlo
- pasa también al exportar una sola sección
org-html--id-attr-prefix
es „ID-“- ¿qué es esto? No lo quiero
- estoy leyendo org-html-link, que lo usa. Qué horror. Lisp es muy guarro y lioso
parece que en org-html-link, esto es lo que los une (ID-id)
(let ((fragment (concat org-html--id-attr-prefix path))
- ¿por qué le toca esto?
- veo que en 5e9953fa0ea9023786e62d83e12653d4aadfa869 (m10.2022) cambió esto de ID-
- esto fue tras mi implementación de org-exportar-mejores-ids.el
simulo
(org-html-link prueba1-link prueba1-desc prueba1-info)
- ah, veo
org-html-prefer-user-labels
, ¿qué es? → ver pruebas.org. Ya me va bien a nil - lo mando a lista de correo de org-mode
- lo corrigió Ihor. Creo que yo tenía otros problemas, pero éste está solucionado
3.1.10.1. prueba2
3.1.11. BONUS no reconoce algunos nombres de constantes en tablas
3.1.12. BONUS no reconoce algunos nombres de tablas al hacer referencias
Casi el mismo error que el anterior.
a | b |
---|---|
1 | 2 |
a | b |
---|---|
3 | 4 |
works | doesn't |
---|---|
3.14 | #ERROR |
3.1.13. BONUS no funcionan algunos nombres de etiquetas
Visto con org-mode de
.- cuáles no van: a/b ∀i a+c l*c (etiqueta) etc. Pasa con caracteres que no son alfanuméricos.
- no se lee tras C-c C-c
- no actualiza sino que añade al final
- no se resaltan
- yo quiero libertad para usar nombres de etiqueta; para mí es una necesidad real pues encontré este fallo al necesitar usar „∀idioma“ como etiqueta. Entiendo que mucha gente ni siquiera tiene „∀“ en su teclado, y por eso me cuesta que otros den importancia a correcciones como ésta.
Busco expregu que falla:
- C-c C-c empieza en org-set-tags
(org-get-tags-string)
ya lo lee mal (da "")- debido a: (looking-at (org-re ".*[ ]\[ ]*$"))
- lo malo es que esta expregu está en muchos lados de org (buscar por „alnum“). Tocará refactorizar algo para compartir expregus
- clases de caracteres: http://www.gnu.org/software/emacs/elisp/html_node/Char-Classes.html
Qué hay que pedir a org:
- I suggest to expand the character ranges in tags to allow some punctuation and symbol characters, including /.()[]{} and Unicode symbols (∴∀…∃→← etc) but excluding colon (:) and colon-equivalents (+,). This should allow tags like gnu/linux, with_friend(s), ∀day, version1.3, etc.
[ ]
pedir
3.1.13.1. ejemplo sin „∀i“ uno dos tres
(org-get-tags-string)
3.1.13.2. ejemplo con „∀i“, no va :uno:dos:∀i tres
3.1.13.3. ejemplo con „útil“, sí que va interesante útil bonito
3.1.13.4. uno que no va por tener una barra :a/b:
3.1.13.5. intento poner dos puntos a b
3.1.13.6. con letras no latinas, menos mal que funciona прекрасное
3.1.13.7. paréntesis :(abc):
3.1.13.8. con coma a b
3.1.13.9. con punto :a.b:
3.1.13.10. con más a b
3.1.13.11. con arroba yo@aquí
3.1.14. BONUS al grabar enlace, es preferible que deje la ruta relativa
Pues si deja la absoluta, hay probabilidad de que salga exportada. org-publish es listo y quita la ruta si coincide con la ruta real del fichero, pero si se ha movido de sitio el fichero para exportarlo (cosa que yo hago: lo muevo a otra rama), entonces eso fallará.
Lo que debería hacer es: si uso C-u C-c C-l y tecleo org.org
para tener un enlace a org.html, tendría que grabar file:org.org
en vez de una ruta absoluta.
No sé cómo creé el enlace, pero se me coló una ruta absoluta. Tengo que reproducir esto.
3.1.14.1. cómo detectar enlaces mal creados
revisar: grep "file:~/repoweb" *.org revisar: grep "\[\[.*.org\]\]" *.org
3.1.15. BONUS cuando exporta un proyecto, se lía si tiene varias entradas con el mismo ID y puede dar enlaces a las de otro directorio
Tener varias secciones con el mismo ID es habitual si se tiene el mismo contenido replicado en varias ramas.
Ej: en index.html de rama ofinial me encontré este enlace:
(<a href="../../hacer/hacer/emacs.html#kp6lbta0yxe0">o emacs, que también puede</a>).
cuando debía ser realmente:
(<a href="emacs.html#kp6lbta0yxe0">o emacs, que también puede</a>).
Lo que pasa es que ha ido a buscar el fichero con ID kp6lbta0yxe0 a la rama „hacer“ en vez de a la actual („estructura“)
Para detectar salidas a otro proyecto, usar:
grey -r "../../hacer/" .
Soluciones posibles (ideas):
- en caso de id repetido, elegir el del fichero más cercano al fichero que se exporta ahora.
- pedirle a org manualmente antes de exportar que olvide todos los IDs de las otras ramas
3.1.16. BONUS los enlaces a fichero local se exportan usando una URL que no es válida ni útil
Ej. un enlace a file:///home/dc/.emacs queda como:
<p>Ver <a href="/home/dc/.emacs">file:~/.emacs</a> al principio.</p>
Tres problemas:
- se está grabando y difundiendo la ruta real de
~
. No sólo no quiero, sino que en cada ordenador donde lo exporte va a ser distinta, mientras que~/.emacs
es válido para todos - si fuera un enlace a fichero debería llevar el
file://
- cuando se exporta para Internet, lo más normal es no querer usar este tipo de enlaces. Pero no hay forma de desactivarlos, creo
3.1.17. ATENDAS error al mostrar historial de búfer si hay una fecha al principio
Ej: este búfer.
one <2010-04-23 vie> * two
Entonces apretar C-c a L
(~show timeline) y dice:
Debugger entered--Lisp error: (error "Before first headline at position 6 in buffer c.org") signal(error ("Before first headline at position 6 in buffer c.org")) error("Before first headline at position %d in buffer %s" 6 #<buffer c.org>) (condition-case nil (outline-back-to-heading invisible-ok) (error (error "Before first headline at position %d in buffer %s" ... ...))) org-back-to-heading(t)
Enviado a org el
3.1.18. la actualización de ficheros de agenda es excesivamente lenta debido al vc-mode de Emacs
Ejecuto agact para mi agenda (200 ficheros, 76k líneas, 3'6 Mb, 1600 tareas abiertas en
):- normal: 1m35s
- con bzr y git desactivados: 11s
- en otro ordenador: 1m7s vs 11s
Ya tengo una triquiñuela para acelerarlo; ver abajo mi mensaje a la lista.
No me sale a cuenta trabajar mucho para acelerar 1 minuto algo que uso semanalmente; ya llevo más de 5 horas investigando este tema y el límite son 4 h con un horizonte de 5 años.
3.1.18.1. IS solución temporal que me va muy bien
De momento uso en mi actualizador:
; Acelero enormemente la carga evitando que se active vc-mode al leer cada fichero de agenda (defun vc-find-file-hook () nil)
3.1.18.2. arreglarlo en Org
Pero para corregirlo en org, habría que tocar org-agenda-get-day-entries
, pero ahí sale:
(org-get-agenda-file-buffer file)
Y eso hace find-file-noselect
.
3.1.18.2.1. IS Menciono el tema en lista de org-mode
- CONCLUSIÓN escrita el
Nadie responde
Hi. I have a shell script which exports my agenda to a file. It's pretty slow: about 90 seconds. There are many files (200 .org files, 76k lines, 3'6 Mb, 1600 open tasks) but the performance should be better. I found a way to bring it down to 11 seconds: temporarily disable the version control tools I'm using (bazaar, git). To test, just change their names so that Emacs can't run them. Since this slowness is caused by vc-mode, I wonder if it's possible for Org to open the agenda files without enabling vc-mode, for vc-mode is not necessary for org-mode. I fear not, because org-agenda-get-day-entries uses org-get-agenda-file-buffer to open a buffer normally, and this buffer should be fully functional for later usage. As a hack, I used (defun vc-find-file-hook () nil) in my script; this does the trick. Greetings, Daniel
3.1.18.3. cuando org abre mis 200 ficheros de agenda, quien es lento es git, no es tanto culpa de vc-mode ni de org. «git lento»
- org-agenda-list me abre mis 200 ficheros .org, y eso es lento (tarda 1'42") por vc-mode (pues están en git); no tanto por org
- Tal como está hecho org, inevitablemente ha de abrir todos los ficheros, y quiero que los abra bien (con vc, font-lock, …).
- Esto es lento:
(org-agenda-list)
cuando esos 200 ficheros aún no están abiertos.
Lo he ido comentando varias veces en lista.
3.1.18.3.1. IS traza que muestra lo que está haciendo git: ∴ ls-files
En el momento de llamar a git:
Debugger entered--Lisp error: (quit) call-process("git" nil (t nil) nil "ls-files" "-c" "-z" "--" "wiki/Imagen.org") apply(call-process "git" nil (t nil) nil ("ls-files" "-c" "-z" "--" "wiki/Imagen.org")) process-file("git" nil (t nil) nil "ls-files" "-c" "-z" "--" "wiki/Imagen.org") apply(process-file "git" nil (t nil) nil "ls-files" ("-c" "-z" "--" "wiki/Imagen.org")) vc-git--call((t nil) "ls-files" "-c" "-z" "--" "wiki/Imagen.org") apply(vc-git--call (t nil) "ls-files" ("-c" "-z" "--" "wiki/Imagen.org")) vc-git--out-ok("ls-files" "-c" "-z" "--" "wiki/Imagen.org") byte-code(…) vc-git-registered("/home/dc/.mirp/wiki/Imagen.org") apply(vc-git-registered "/home/dc/.mirp/wiki/Imagen.org") vc-call-backend(Git registered "/home/dc/.mirp/wiki/Imagen.org") #[…] mapc(#[(b) "…" [b file vc-call-backend registered vc-file-setprop vc-backend throw found t] 4] (RCS CVS SVN SCCS Bzr Git Hg Mtn Arch)) byte-code("…") vc-registered("/home/dc/.mirp/wiki/Imagen.org") vc-backend("/home/dc/.mirp/wiki/Imagen.org") #[…] vc-find-file-hook() run-hooks(find-file-hook) after-find-file(nil t) find-file-noselect-1(#<buffer Imagen.org> "~/wiki/Imagen.org" nil nil "~/wiki/Imagen.org" (5929158 19)) find-file-noselect("/home/dc/.mirp/wiki/Imagen.org" nil nil nil) find-file("/home/dc/.mirp/wiki/Imagen.org")
3.1.18.3.2. MALFAR ¿ese ls-files/diff-index/loquesea no podría hacerse de forma asíncrona?
Difícil No, lo que hay que hacer es ejecutarlo de forma conjunta para todos los ficheros; ver abajo.
3.1.18.3.3. BONUS ese comando lento de git (ls-files/status) se podría hacer para todos los ficheros a la vez y no uno por uno. «ls-files a la vez»
Está éste, más rápido:
git status -z --porcelain <file>
Pero necesita 1.7.0
# ~ ; time (for a in ~/wiki/*.org; do git status -z --porcelain "$a"; echo $a; done) real 1m3.487s user 0m4.448s sys 0m2.936s # ~ ; time git status -z --porcelain ~/wiki/*org real 0m0.424s user 0m0.080s sys 0m0.020s
[ ]
¿Y no vale vc-git-dir-status?- (vc-git-dir-status "~/wiki/" …)
- (vc-git-dir-status-goto-stage 'update-index nil …)
- (vc-git-dir-status-goto-stage 'update-index nil nil)
- no parece estar muy bien acabado: sin documentar, y no usa „dir“
- (vc-git-dir-status-goto-stage 'update-index "~/wiki/*.org" #'ignore) ← no va…
[ ]
está vc-git-dir-status-files
Ver en: file:/w/emacs/lisp/vc/vc-git.el::file "diff-index" "-z" "HEAD" "–")))
(defun vc-git-state (file) "`vc-state' para git, reescrita para aprovechar git 1.7.0 y ser más rápida." (if (not (vc-git-registered file)) 'unregistered (vc-git--call nil "add" "--refresh" "--" (file-relative-name file)) (let ((diff (vc-git--run-command-string file "status" "-z" "--porcelain" "--"))) (if (and diff (string-match " \\([ADMUT]\\) [^\0]+\0" diff)) (vc-git--state-code (match-string 1 diff)) (if (vc-git--empty-db-p) 'added 'up-to-date)))))
Probar:
- (vc-git-state "~/wiki/Lisp.org")
- (vc-git-state "~/wiki/emacs.org")
- (vc-git-state "~/wiki/GNU.org")
- (vc-git-state "~/wiki/nada")
Por lo visto esto no acelera mucho las cosas. Algo sí, pero no lo suficiente.
Hay que hacer eso de calcular todos los estados de forma conjunta; ver arriba.
3.1.18.3.4. puedo falsear las llamadas a git en el momento de apertura, para acabar antes. Con que en el momento de la necesidad se hagan bien, ya vale
3.1.18.3.5. MALFAR ¿es necesario que org abra esos búfers y los deje abiertos? ¿no podría acceder a los ficheros sin pasar por vc-mode?
(¡vc-mode no le hace falta a org!). Pero a mí sí; si voy a abrir los ficheros, los quiero con vc.
3.1.18.3.6. IS puedo instrumentar para ver dónde se pierde el tiempo
,---- | (require 'elp) | (elp-instrument-package "font-lock") | | ;; rest of your .emacs | | (elp-results) `----
Pero no me hace falta, ya lo sé: vc-mode
Sólo vc:
vc-call-backend 2135 5.0947729999 0.0023863105 vc-find-file-hook 195 4.4697830000 0.0229219641 vc-git--out-ok 570 3.4561020000 0.0060633368 vc-git--call 570 3.4416280000 0.0060379438 vc-backend 195 3.155648 0.0161828102 vc-registered 195 3.1490329999 0.0161488871 vc-git-registered 190 2.6983060000 0.0142016105 vc-mode-line 195 1.2948129999 0.0066400666 vc-git-mode-line-string 190 1.1954319999 0.0062917473 vc-git-working-revision 380 1.1641889999 0.0030636552
Y con org+vc al hacer org-agenda-list para que abra mis 195 ficheros:
org-agenda-list 1 30.982892 30.982892 org-prepare-agenda 1 21.698145 21.698145 org-prepare-agenda-buffers 1 21.678153 21.678153 org-get-agenda-file-buffer 780 20.186387999 0.0258799846 org-mode 195 7.4260620000 0.0380823692 org-agenda-get-day-entries 585 6.7582090000 0.0115524940 vc-call-backend 2135 5.4079410000 0.0025329934 vc-find-file-hook 195 4.7608490000 0.0244146102 org-agenda-get-scheduled 585 3.6713660000 0.0062758393 vc-git--out-ok 570 3.6363749999 0.0063796052 vc-git--call 570 3.6219279999 0.0063542596 vc-backend 195 3.3971240000 0.0174211487 vc-registered 195 3.3900380000 0.0173848102 org-set-startup-visibility 195 3.0589860000 0.0156871076 org-install-agenda-files-menu 195 2.9689720000 0.0152254974 vc-git-registered 190 2.9009579999 0.0152681999 org-find-base-buffer-visiting 780 2.3046570000 0.0029546884 org-agenda-files 198 2.257319 0.0114006010 vc-mode-line 195 1.3413839999 0.0068788923 org-cycle 195 1.3265489999 0.0068028153 org-cycle-hide-drawers 391 1.2425669999 0.0031779207 vc-git-mode-line-string 190 1.236259 0.0065066263 vc-git-working-revision 380 1.201688 0.0031623368 org-cycle-internal-global 195 1.1195899999 0.0057414871 org-finalize-agenda 1 1.116502 1.116502 org-agenda-dim-blocked-tasks 1 1.05927 1.05927 org-entry-blocked-p 352 1.0070439999 0.0028609204
Ahí se ve que se ejecutan 11 llamadas a vc por fichero; creo que es excesivo.
3.1.19. IS la vista de agenda se carga cada vez en vez de estar en caché
- CONCLUSIÓN escrita el
„sticky agenda“, ya lo implementaron y va bien
Ahora mis ficheros .org no pasan de 10 Mb en 200 ficheros, pero ya empieza a ir lenta la agenda.
Con ficheros .org muy grandes (ej. 65 Mb. en 200 ficheros), me tarda unos 50 segundos en abrirse; incluso dos veces sucesivas. Debería ir más rápido las siguientes veces. Por ejemplo:
[ ]
[#A] detectando que muchos búfers no han cambiado últimamente (mirando el tiempo de última modificación y comparando con la hora de la última agenda)- hace falta caché
- ¿en memoria o en disco?
- hace falta caché
- [#C] decidiendo voluntariamente no releer algunos ficheros grandes que han cambiado hace poco, a menos que se fuerce (ej. con prefijo)
- esto ya se puede hacer con diferentes vistas de agenda, unas incluyendo esos ficheros, otras no
Proceso:
- [] buscar
- [] intentar acelerar la carga saltándose ficheros no cambiados
- [] sugerir en lista org
- ∴ ya lo implementaron; „sticky agenda“
3.1.20. MALFAR la exportación a taskjuggler falla con ciertas estructuras
Por ejemplo identifiqué esto como fallante:
*** un :taskjuggler_project: **** dos ******* IS tres
En cambio quitándole un asterisco al „tres“ ya iba. El error era más o menos: "Not a valid effort"
Luego descubrí que cerrando el fichero y volviéndolo a abrir ya iba. Con cualquier fichero.
3.1.21. BONUS la exportación a taskjuggler ha de evitar generar propiedades de esfuerzo en contenedores
Pues son erróneos según TaskJuggler.
Ej.
task int_ "INT: interfície web per connectar-se al servidor de mapes" { effort 84h start 2010-10-05 task configurar "configurar openLayers per fer de visor" { } …
Esto da error
/home/dc/.mirp/taskj.tjp:18: Container task 'parts.int_' may not have a duration criteria in 'plan' scenario
Y es porque int_
es un contenedor y por eso no puede definir ni effort
ni start
, aunque yo lo hice en org (sí que puedo y me va bien). O bien TaskJuggler debería aceptarlo, o bien org no exportarlo.
3.1.22. IS al publicar no siempre detecta el proyecto del fichero pasado
Ej: esto falla (nil):
(org-publish-get-project-from-filename "~/repoweb/hacer/hacer/conkeror.org")
El fichero existe y el proyecto está definido; lo que pasa es que acaba haciendo una expregu del estilo:
"^/home/dc/repoweb/hacer/.+\\.\\(\\)$"
Que no ligará porque ningún fichero mío acaba en punto.
El fallo es debido a no haber definido :base-extension
en la definición del proyecto
Parche mandado a lista:
diff --git a/lisp/org-publish.el b/lisp/org-publish.el index b387e7b..a50cf56 100644 --- a/lisp/org-publish.el +++ b/lisp/org-publish.el @@ -466,7 +466,7 @@ matching filenames." ;; [[info:org:Selecting%20files]] shows how this is supposed to work: (let* ((r (plist-get (cdr prj) :recursive)) (b (expand-file-name (plist-get (cdr prj) :base-directory))) - (x (plist-get (cdr prj) :base-extension)) + (x (or (plist-get (cdr prj) :base-extension) "org")) (e (plist-get (cdr prj) :exclude)) (i (plist-get (cdr prj) :include)) (xm (concat "^" b (if r ".+" "[^/]+") "\\.\\(" x "\\)$")))
http://patchwork.newartisans.com/patch/112/
Ver si lo incluyen. Sí, aceptado el
.3.1.23. problemillas de org-mode que vienen y van (cosas que antes iban bien y se rompen)
[X]
„Symbol's value as variable is void: org-list-automatic-rules“, mandado a lista el , es por fd16515b4a88d48362223b19c511c4973cdbc84c. http://thread.gmane.org/gmane.emacs.orgmode/29968 ← más bien problema de la sintaxis que usé[X]
etiquetas radio no van por ejemplo ésta, si hay algún carácter detrás (ej. la coma en ese ejemplo)- es por ce8819f18d9d2be000fb70fc4d74b5d96fe07a83, en org-element
- avisado y corregido
[X]
etiquetas radio demasiado enlazadas, concuerdan hasta dentro de palabra (ej „c“ dentro de „casa“)[X]
etiquetas radio iluminan los espacios en blanco de alrededor[X]
se me cuelga con un fichero de agenda[X]
avl-tree.el tenía fallo, mandé este parche
(if (version< emacs-version "24") (defmacro avl-tree–root (tree) ;; Backport fix for older versions due to missing comma in ,tree `(avl-tree–node-left (avl-tree–dummyroot ,tree))) )
3.1.24. ATENDAS org-adapt-indentation ha cambiado, ahora mete espacios en 1ª columna.
- informado el http://lists.gnu.org/archive/html/emacs-orgmode/2014-12/msg00091.html a lista.
- el mando 2 propuestas que creo que se acercan mejor a soluciones aceptables por ambos
- afecta al org-shiftmetaright, o sea al „R“ de speed-commands
3.1.24.1. solución propuesta: indentar todo hasta la 1ª línea que tiene indentación 0
- pero dice que eso rompe cosas y que es un hack
Sí, esto rompería este ejemplo.
,|** DELEGATED Better ,| :LOGBOOK: ,|- State "DELEGATED" from "TODO"
,| Nicolas Girard is taking this up with TeX people ,| :END:
3.1.24.2. otra solución: indentar hasta el punto dicho por (org-log-beginning) saltándose varias cosas
> Another option would be to have another option to indent only planning > info, properties drawer, and every drawer located right after it, à la > `org-log-state-notes-insert-after-drawers'. At least, it couldn't break > structure.
… > No. `org-log-beginning' is not a good idea. It can be located before, after, or even in the middle of CLOCK lines.
3.1.24.3. lo que sea pero tiene que haber 3ª opción en org-adapt-indentation
3.1.24.4. opción para initial-only, como nil
I'd rather have org-adapt-indentation = 'initial-only which works like like org-adapt-indentation = nil with the extra that „Property drawers and planning information is inserted indented“.
That is, new things appear with the same indentation as the element above. And demoting doesn't indent anything.
Example:
→** something
You press C-c C-s and you get:
→** something → SCHEDULED:
You press S-M-right and you get: →*** something → SCHEDULED:
3.1.24.5. MALFAR a medias…
The proposal is a new option in org-adapt-indentation which will work for all users that only have drawers at the top. I suspect that would be most users, since that's where org-mode puts all drawers by default.
2 possible definitions.
Option a) Indent until the first 0-indented line.
Option b) Indent until (org-log-beginning)
3.1.24.6. ¿algo alternativo para hacerlo a mano?
Supongo que una macro
3.1.24.7. luego vi que mete 3 espacios en vez de 2, en algunos casos
a
- a
- mirar org-fixup-indentation
3.1.24.7.1. quizás depende de nivel de cabecera
3.1.25. el tabulador me pone muchos espacios y me deja el cursor en sitio muy alejado de donde quiero estar (la 1ª columna)
- cambio nuevo de
- por mirar: org-cycle-emulate-tab
3.1.26. el tabulador está activado en modos que no toca (ej. HTML)
esto en un búfer HTML que no tiene relación con org
<tab> runs the command orgtbl-hijacker-command-102 (found in orgtbl-mode-map), which is an interactive Lisp function.
It is bound to <tab>.
(orgtbl-hijacker-command-102 ARG)
In tables, run ‘orgtbl-tab’. Outside of tables, run the binding of ‘<tab>’ or ‘TAB’.
- en efecto me alínea tablas. ¡Pero no quiero meter tablas org en un .html directamente!
3.1.27. IS babel ya no exporta bloques python ni los colorea, es por tramp-cache, por cambios recientes en Emacs
- CONCLUSIÓN escrita el
corregido en emacs
Qué absurdo. Tras el (require 'tramp-cache) org-babel deja de funcionar. Es por esto:
(add-hook 'kill-buffer-hook 'tramp-flush-file-function)
3.1.28. IS no van los formatos de tiempos personalizados cita
,#+TITLE: Custom time stamps don't work ,#+DATE: seen today with Org-mode version 7.4 (release_7.4.553.g83b7), Emacs 24.0.50.1 from december 2010 Open this file and use =C-c e H=. Review and accept the usage of the 2 BIND values in this buffer. See timestamps in HTML output. # This doesn't work (the time stamps remain intact: <2011-02-28> instead of 28.m2.2011): # ,#+BIND: org-time-stamp-custom-formats ("<%d.m%m.%Y>" . "<%d.m%m.%Y %H:%M>") # An invalid value produces no error; try this: #+BIND: org-time-stamp-custom-formats 42 # # I think this was needed: ,#+BIND: org-display-custom-times t # # This works if activated: it shows the custom time stamp while editing (but not on export) # #+STARTUP: customtime One timestamp: <2011-02-28 lun>. No Another: <2011-02-28 lun>
[X]
enviado a lista. http://permalink.gmane.org/gmane.emacs.orgmode/38489- probado en 2 equipos, fallan ambos
bisección
- desde 52b07a584c1b6ee7444065497acdf100716d6701 hasta efa562c1ee7cd857d3cf8c3e47d44b9ae1bb25d4.
- Resultado (mandado a lista):
163cd58ffd6461c98a96b1b63a3cf082b2825a52 is the first bad commit commit 163cd58ffd6461c98a96b1b63a3cf082b2825a52 Author: David Maus <dmaus@ictsoc.de> Date: Fri Jan 14 06:37:52 2011 +0100 Handle timestamps after handling links
[X]
lo corrigen el , ya funciona bien
3.1.29. IS me quita los IDs de los enlaces (CUSTOM_ID)
Ej. en index.html
-<li><a href="#txt2tags">3.2.1 txt2tags </a></li> -<li><a href="#dislines">3.2.2 dislines </a></li> -<li><a href="#schart">3.2.3 schart.pl (va de malabares) </a></li> +<li><a href="#sec-3_2_1">3.2.1 txt2tags </a></li> +<li><a href="#sec-3_2_2">3.2.2 dislines </a></li> +<li><a href="#sec-3_2_3">3.2.3 schart.pl (va de malabares) </a></li>
Bisecciono:
- org-mode el 23.m3 iba bien → e5340a365022f19a12e7424d781d688889e191f8 más o menos es bueno
- actual, c4737ae48b84308e1ac201531aca392a81529974 es malo
- ∴ es obviamente por 438536f6157794101ce0957e39cad6bf70580751, „Change underscores to hyphens in section labels“, de
[X]
avisado a org-mode el[X]
llega parche; va
3.1.30. MALFAR error al tomar categorías; lleva ya muchos meses
- CONCLUSIÓN escrita el
de hace años, y parece que no pasa ya
Lo mandé el
:Hi, with org-mode from today I created a file miso.org with this content: --------------------------------------------------- ,* aaa :PROPERTIES: :CATEGORY: bbb :END: ,** TODO ccc ---------------------------------------------------- Then I used an ~/.emacs which said: ---------------------------------------------------- (progn (add-to-list 'load-path "/w/org-mode/lisp") (require 'org-install) (require 'org) (require 'org-agenda)) (org-agenda-get-day-entries "/home/dc/miso.org" '(10 22 2011) :todo) ---------------------------------------------------- And after running „emacs“ I got: ---------------------------------------------------- Debugger entered--Lisp error: (wrong-type-argument stringp nil) string-match("^ +" nil) (if (string-match "^ +" txt) (setq txt (replace-match "" nil nil txt))) (progn (if (string-match "^ +" txt) (setq txt (replace-match "" nil nil txt))) (setq txt … (unwind-protect (progn (if (string-match "^ +" txt) (setq txt (replace-match "" nil nil tx… (let ((save-match-data-internal (match-data))) (unwind-protect (progn (if (string-match "^ +" txt) … (save-match-data (if (string-match "^ +" txt) (setq txt (replace-match "" nil nil txt))) (setq … org-format-agenda-item("" nil #("bbb" 0 3 (fontified nil org-category "miso")) nil) (setq marker (org-agenda-new-marker (match-beginning 0)) category (org-get-category) txt (match-string 1) … (catch :skip (save-match-data (beginning-of-line) (setq beg (point) end (save-excursion (out… (while (re-search-forward regexp nil t) (catch :skip (save-match-data (beginning-of-line) (se… (let* ((props (list (quote face) nil (quote done-face) (quote org-agenda-done) (quote org-not… ]*\\)")) marker priority category tags todo-state ee txt beg end) (goto-char (point-min)) (whil… org-agenda-get-todos() (setq rtn (org-agenda-get-todos)) … ---------------------------------------------------- The second time I ran the code from .emacs I got it right: ---------------------------------------------------- (#("TODO ccc" 0 8 (org-category #("bbb" 0 3 ...) fontified nil tags nil org-highest-priority 65 org-lowest-priority 67 prefix-length 0 ...))) ---------------------------------------------------- Which seems to be inappropriate, as in previous versions I get: ---------------------------------------------------- (#("TODO ccc" 0 8 (fontified nil org-category nil tags nil org-highest-priority 65 org-lowest-priority 67 prefix-length 0 ...))) ---------------------------------------------------- Via git bisect I traced the bug to: ---------------------------------------------------- ca733df0d41eccced5f8f1abb85d525cb12dd21f is the first bad commit commit ca733df0d41eccced5f8f1abb85d525cb12dd21f Author: Carsten Dominik <carsten.dominik@gmail.com> Date: Mon Jan 3 13:12:42 2011 +0100 Move the category property refresh to org-get-category where possible ---------------------------------------------------- Greetings, Daniel
Espero respuesta
3.1.31. al cronometrar, se queja de ¬dbus (y es cierto, no lo tengo); es por notifications
3.1.31.1. ejemplo de tarea cuya estimación se sobrepasó
Al hacer C-c C-x C-i:
notifications-notify: Symbol's value as variable is void: dbus-message-type-method-call
3.1.32. IS ahora que está ox-publish en vez de org-publish, cambió mucho y hay que reprobarlo y reescribir pritas y configuraciones
- CONCLUSIÓN escrita el
ya pasé todo a v8, ya va bien
[X]
org-publish-org-to-html es llamado condemasiados argumentosargumentos en orden que no toca- mandé a emacs-orgmode@gnu.org el un mensaje
- nuevas variables
[X]
org-display-custom-times ya no va, ox-html no lo usa- sí que lo usa: ox-html llama a org-translate-time
- está en 4 lados (schedule/deadline/closed/CLOCK),
pero falta en marcas de tiempo comunes - está también org-timestamp-translate, que lo hace
[X]
org-translate-time está fallando- es porque org-display-custom-times == nil, porque de hecho lo quiero para exportación sólo
- ∴ no falla, sino que está añadiendo <> a mi formato, ẽ <12.m2.2013>
[X]
aceptar que tendré <> y reexportar así- pero en exporta-org va
[X]
parece que los #+BIND no van, pongo error y no peta → nueva var.[X]
nueva var[X]
los lee porque ahora da error si intento t=nil[X]
probar más
[X]
{{{input-file}}}
dentro de #+MACRO no va (fuera, sí) → lo cambio/quito[X]
actualizado hasta {{{date(%e.m%m.%Y)}}}
no va → usar time[X]
„[TABLE-OF-CONTENTS]“ no va[X]
ahora hay #+TOC, http://orgmode.org/manual/Table-of-contents.html[X]
creo que no necesito índice
[X]
no publica bien porque al exportar un trozo C quiere activar flymake[X]
añadir mi JS (menú, esquemadorg), para eso necesito exportar con org-publish, creo[X]
quizás necesito sistema nuevo para decir preámbulo/postámbulo- http://orgmode.org/manual/HTML-preamble-and-postamble.html
- no, parece que preámbulo va bien, y post no hay
[X]
aparte, cabecera de página- ya no es :style, ahora… mejor usaré #+HTML_HEAD_EXTRA: y así lo saco de org-publish y lo dejo dentro de .org
[X]
probar con JS[X]
reexportar hasta que salga lo mismo que ya tenía, y luego entrarlo[X]
peta exportación por usar la palabra funcall_lambda (se queja de „lambda“) y Fcall_interactively (se queja de „interactively“)[X]
exportar lo nuevo y comprobar que tampoco da error
3.1.33. IS con exportador nuevo (ox), no me coge algunos IDs porque no son de tipo uuidgen
Hi, in ox-html.el there's a line with an assert (the only one):
(assert (org-uuidgen-p path))
- I have some IDs like "o5y98600aze0" which don't conform to that uuidgen format; they were created by early versions of org. Should only UUIDs be accepted as ID?
I think the ID should be editable by hand to what you like, as long as they are unique. If you don't need to export it you don't need a CUSTOM_ID, and having both ID and CUSTOM_ID is not the simplest way.
So I think that assert is too strict. My short IDs seem as good as the long UUIDs.
[X]
avisado a org- se corrigió
3.1.34. IS la agenda se puede hacer más rápida si evito org-refresh-properties (desactivo „propiedades“)
- mandé mensaje a lista el
- org-agenda-ignore-properties
[X]
mandado parche el- Carsten añadió org-agenda-ignore-drawer-properties
[X]
mirarlo, comprobarlo[X]
en agenda normal va, la reduce 1'60 segundos[X]
en agenda normal no lo noto, ¿por qué? De 54 a 54 (o sea, los dos van rápida, e igual de rápido)- he vuelto a versión anterior, y no lo puedo reproducir
- deduzco que lo que ha cambiado ha sido mi agenda → por tanto es muy difícil probar esto. No importa, el cambio es a mejor
- [] escribir en Worg ← lo hizo Carsten
[X]
añadir a mi configuración
3.1.35. me pone „nilIS“ in vez de „IS“, etc.
: dc; ~/repoweb/hacer ; g ' nil[A-Z]' bazaar.html 189:46:<li><a href="#sec-1-2">1.2. <span class="done nilIS">IS</span> Primera contribución: documentación</a>
∴ Postprocesado eficaz:
find . -type f -name '*.html' | xargs sed -i 's/nil\([A-Z]\+\"\)/\1/'
3.1.36. no exporta bien enlaces nntp://…, me quita el „nntp“
Me he tenido que hacer un tipo de enlace nuevo. No sé si funciona del todo…
3.1.37. „Unknown cross-reference“ al exportar, y luego algunos
Unknown cross-reference "return" in file "/w/conkeror/modules/element.js" Unknown cross-reference "return%20make_uri%20read_from_x_primary_selection%20spec" in file "/w/conkeror/modules/element.js"
Y luego:
-Tocar esto: <a href="file:///w/conkeror/modules/element.js#return%20make_uri%20read_from_x_primary_selection%20spec"><a href="file:///w/conkeror/modules/element.js#return">file:///w/conkeror/modules/element.js#return</a> make_uri read_from_x_primary_selection spec</a> +Tocar esto: <a href="file:///w/conkeror/modules/element.js#MissingReference"><a href="file:///w/conkeror/modules/element.js#MissingReference">file:///w/conkeror/modules/element.js#MissingReference</a> make_uri read_from_x_primary_selection spec</a>
Es por: org-publish-resolve-external-link
∴ Da igual, me puede dejar el MissingReference.
3.1.38. IS Invalid search bound (wrong side of point), lo dice al exportar (HTML)
Con esto:
<<<a>>> a-bug
Mandé informe: http://lists.gnu.org/archive/html/emacs-orgmode/2016-10/msg00395.html
3.1.39. salen cadenas UTF-8 raras en las fechas
Esto el
al actualizar.15:00̠ϨҰոـ܈ߐ ATENDAS
Lo dejo, queda bonito. Pero parece memoria corrompida; quizás esos datos son por zona horaria o algo así.
3.1.40. IS tras un C-' para editar bloque y matar búfer temporal, luego no puedo cambiar texto, y queda en azul („overlay“)
user-error: Cannot modify an area being edited in a dedicated buffer
Es culpa mía, pero quiero poder arreglarlo.
∴ Hacerlo a mano en región:
(remove-overlays)
3.1.41. C-ucxi (org-clock-select-task) peta por „read-only "Type ‘e’ to edit property"“
Y es porque el búfer „*Clock Task Select*“ contiene un texto con propiedad read-only.
There are text properties here: :org-clock-minutes 922 :org-clock-minutes-today 40 face org-level-6 fontified t org-category "Vojaĝe" read-only "Type ‘e’ to edit property"
Quizás el fallo está en org-clock-insert-selection-line
El título en concreto no tiene read-only ni propiedades.
3.1.42. al pegar (ẽ desde urxvt), no toma bien utf-8 y lo cambia por „?“
- Doble clic un algo con utf-8 en urxvt.
- Esto ya falla: (x-get-selection 'PRIMARY)
∴ Aaaaah, esto va: (x-get-selection 'PRIMARY 'UTF8_STRING)
Sólo pasa en mi implementación.
3.1.43. IS me toma todos los #+HTML_HEAD:
de todo el fichero, no sólo los de la sección que estoy exportando. Yo quiero aplicar un estilo local (sólo para una cabecera). „htmlheadlocal1“
[X]
∴ me gustaría con propiedad tipoHTML_HEAD
pero no hay- quiero una propiedad (local a cabecera exportada) que defina la cabecera a usar
- ∴ veo que hay algo llamado
EXPORT_HTML_HEAD
. Funciona
- file:///home/dc/org/desa/bug-localstyle.html para probar
- creo que es por diseño: https://orgmode.org/guide/Export-options.html dice que estas líneas se pueden poner en cualquier lugar del fichero
- esto es poco intuitivo, aunque la alternativa quizás es peor
- ¿y qué hay entonces para decir el estilo de una cabecera?
- mmmmmmmmmmmmm… esto me fuerza a usar un mismo CSS para todos mis ficheros. No es tan malo (me enseñaría a mantener un poco el diseño), pero es cutre y complejo.
- usar
BEGIN_EXPORT html
en vez de esto. Es cutre tener que hacer esto, y no puedo usar „<link>“- sólo funciona si quería meter un <style> directamente
- pero no puedo hacer
<style src
"…">=, eso necesita un <link>
- está lo de definir un proyecto (org-publish), etc.
- pero muy manual
- me puedo adaptar con esta combinación
- si quiero algo local, usar BEGIN_EXPORT (nunca HTML_HEAD), y usar sólo <style> con todo el CSS metido dentro (nunca <link>)
- o sea: prohibido usar un fichero externo que estila una cabecera local ← es mala práctica, es incómodo, pero es pasable
- sin embargo, puedo (y me iría bien) un fichero externo pueso en <link> en un HTML_HEAD, que afecta a todas las cabeceras
escribir a org-mode
3.1.44. es lento (ẽ 3 segundos) al ofrecer lista de tareas a cronometrar (C-u C-c C-x C-i)
Lisp Backtrace: "re-search-forward" (0x25e01d70) "org-find-open-clocks" (0x25e020a8) "org-resolve-clocks" (0x25e02430) "org-clock-in" (0x25e02ac0) "funcall-interactively" (0x25e02ab8) "call-interactively" (0x25e02cf0) "command-execute" (0x25e03068)
- org-find-open-clocks, podría usar caché
- ẽ (org-find-open-clocks "~/org/pruebas.org")
- lo puedo acelerar mucho si me salto el org-resolve-clocks. No lo necesito para presentar un menú
- mmm… algo ya hace alguna caché, pues luego es más rápido
3.1.45. MALFAR org-decrypt-entry se cuelga, excepto si mato gpg-agent
. Es por pinentry
, creo, pues lo forcé a ser modo texto
- CONCLUSIÓN escrita el
ver siguiente apartado. Y probablemente se corrigió con el gpg2
Lisp Backtrace: "accept-process-output" (0xda824720) "epg-wait-for-status" (0xda824a80) "epg-start-decrypt" (0xda824e08) "epg-decrypt-string" (0xda825168) "org-decrypt-entry" (0xda825670) "funcall-interactively" (0xda825668) "call-interactively" (0xda825780) "command-execute" (0xda825b28) "execute-extended-command" (0xda825fd0) "funcall-interactively" (0xda825fc8) "call-interactively" (0xda826230) "command-execute" (0xda8265a8)
dc 14180 0.0 0.0 154692 3200 ? SNsl Nov07 0:00 gpg-agent –homedir home/dc.gnupg –use-standard-socket –daemon dc 6284 0.0 0.0 6664 3428 ? SNL 01:20 0:00 pinentry –display :0
3.1.46. MALFAR org-encrypt falla (quizás relacionado con punto anterior), „org-encrypt-entry: Encrypt failed“ y nada más
Es:
(epg-error "Encrypt failed" "Exit")
Pasa en: (org-encrypt-string "hola holita" "") es lo que da error.
¿La clave debería ser ""? Parece que no. Lo es porque (org-crypt-key-for-heading) devuelve "". ¿No debería preguntar una?
(epg-list-keys (epg-make-context nil t t) "" ; crypt-key )
Probando otras cosas descubro:
Error while encrypting with "gpg1": gpg: Invalid option "–pinentry-mode"
∴ Aaaaaaah, creo que era por esto, lo había toqueteado:
epg-pinentry-mode is a variable defined in ‘epg-config.el’. Its value is ‘loopback’ Original value was nil
De todas formas actualicé cosas para usar más gpg2 en otros lados.
3.1.47. IS peta al exportar a latex
cl--assertion-failed: Assertion failed: (or (equalp format 'html) (equalp format 'ascii))
∴ Era por mi exporta-enlace-org-nntp sin implementar.
3.1.48. por algo de org-element se cuelga, y a veces me invierte la lista de cronómetros en una cabecera. Reordena todos los CLOCK de viejo a nuevo (en vez de de nuevo a viejo) cuando empiezo a cronometar en cierta sección. Muy raro
aquí se colgaba
"org-element--cache-compare" (0xa9a172d8) "avl-tree--do-delete" (0xa9a176c8) "avl-tree--do-delete" (0xa9a17ab8) "avl-tree--do-delete" (0xa9a17ea8) "avl-tree--do-delete" (0xa9a18298) "avl-tree--do-delete" (0xa9a18670) "avl-tree-delete" (0xa9a189f8) "org-element--cache-process-request" (0xa9a194c0) "org-element--cache-sync" (0xa9a19880) "org-element--cache-submit-request" (0xa9a19ef8) "org-element--cache-after-change" (0xa9a1a2e8) "insert-file-contents" (0xa9a1e860) "revert-buffer-insert-file-contents--default-function" (0xa9a1ebf0) "revert-buffer--default" (0xa9a1efb8) "revert-buffer" (0xa9a1f2a8) "vc-revert-buffer-internal" (0xa9a1f5b0) "vc-resynch-window" (0xa9a1f8f0) "vc-resynch-buffer" (0xa9a1fc18) "vc-revert-file" (0xa9a20000) "vc-revert" (0xa9a20570)
- me pasa mucho en Zeitmanagement.org, no en otros
- ¿quizás porque uso lo de „capture“ para colocar entradas ahí?
- me ha pasado que veces repetidas hacen este problema (desordenar la lista): lo puedo repetir ẽ 10 veces. Incluso teclear algo, y al empezar a cronometrar ya lo desordena
- pasa ¿sólo? en una sección mía, agenda para hoy, donde tengo >360 CLOCK
- me pasó otra vez en ésa y rato después en día equilibrado (1ª vez que me pasa en otra), que tiene muy pocos cronómetros (<30)
- pasa cuando aprieto I en la cabecera. Pasa también con C-cxi, no sólo con I
- pasa sólo cuando llevaba un rato largo sin usar org-mode, ẽ justo tras deshibernar. Pero pasa cuando llevo horas trabajando en otros ficheros (grabando, cronometrando, escribiendo, …) y luego voy al agenda para hoy
cuando pasa, pasa esto:
"org-element–current-element" (0xdd56ce80) "org-element–parse-to" (0xdd56d478) "org-element-at-point" (0xdd56d7c0) "org-indent-region" (0xdd56dd18) "org-indent-region" (0xdd56e228) "org-clock-find-position" (0xdd56e6a0) "org-clock-in" (0xdd56ed30) "funcall-interactively" (0xdd56ed28) "call-interactively" (0xdd56ef38) "org-self-insert-command" (0xdd56f3e0) "funcall-interactively" (0xdd56f3d8) "call-interactively" (0xdd56f610) "command-execute" (0xdd56f988)
- si deshago y repito, va
Org mode version 9.3.7 (release_9.3.7-708-g5417e3.dirty @ /w/org-mode/lisp/)
parece que cree que esto es necesario:
;; When a clock drawer needs to be created because of the ;; number of clock items or simply if it is missing, collect ;; all clocks in the section and wrap them within the drawer.
- tengo (setq org-clock-into-drawer "CLOCK")
[ ]
aún me falta poder reproducir esto[ ]
esto es sospechoso pero no creo que esté relacionado: org-log-states-order-reversed- ¿me pasa con otras cabeceras que tengan muchas entradas?
- tengo otras secciones con más de 3000 cronómetros y no pasa
- en situación en que probablemente iba a pasar:
[X]
pruebo a copiar+pegar esa cabecera a otro fichero y cronometrarla en el otro, no me falla. Justo después en Z….org, y falla[X]
pruebo a borrar todo lo anterior a esa cabecera; entonces no pasa[ ]
pruebo a borrar todo lo siguiente a esa cabecera. Lo probé 1 vez y no pasaba. Por reprobarme ha pasado incluso al borrar todo, con un documento tan sencillo como una sola línea:
* cabecera
. Al empezar a cronometrar, se cuelga"org-element–cache-compare" (0xc61d8668) "avl-tree–do-delete" (0xc61d8a58) "avl-tree–do-delete" (0xc61d8e48) "avl-tree–do-delete" (0xc61d9238) "avl-tree–do-delete" (0xc61d9610) "avl-tree-delete" (0xc61d9998) "org-element–cache-process-request" (0xc61da460) "org-element–cache-sync" (0xc61da7f8) "org-element-at-point" (0xc61dab40) "org-indent-region" (0xc61db080) "org-clock-find-position" (0xc61db500) "org-clock-in" (0xc61dbb90) "funcall-interactively" (0xc61dbb88) "call-interactively" (0xc61dbd98)
[ ]
he de probar a grabar ese fichero sencillo (1 sola línea) con otra línea y abrirlo en fresco, y ver si pasa. Así evito cachés
- quizás me pasa por ser la 1ª operación en mucho rato
- y por tanto si hago otra (ẽ añadir letra, borrarla y entonces cronometrar) ya no pasará
lo puedo reproducir con:
(org-element--cache-sync (current-buffer))
y también con:
(org-element--parse-to 694818 t '(92111111111111111111111111111111 . 56294995342131200000000))
- por cierto, esa posición es la línea que dice
desde [2018-05-01 Tue] lo apunto
eso da:
(wrong-type-argument integer-or-marker-p nil)
es por esta línea en
org-element--parse-to
:(goto-char (or next cbeg))
- ambos (next, cbeg) son
nil
- ambos (next, cbeg) son
- no investigué por qué. Cambié un poco el orden de las líneas, para ver si ayuda. Probando…
3.1.49. IS al crear enlace está tomando texto de cabecera en vez de su ID
Curioso pues ya tengo:
(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id)
Se ha estropeado al actualizar.
e7f625d42 org-contacts.el: Fix org-store-link error caused by org-contacts
Eso lo arregló.
3.1.50. org-encrypt-entries es lento (porque hace org-scan-tags) y a veces me bloquea todo durante unos 5 segundos
- (org-encrypt-entries)
- esto trabajando con búfer grande (9'5 Mb)
- y sólo si estoy puesto en el búfer
- „org-crypt: Re-encrypting all decrypted entries due to auto-save.“, es esto lo lento
- org-crypt-disable-auto-save
- mmmmm… cierto. Si dejo activado auto-save, se pueden exfiltrar secciones que he descifrado temporalmente
∴ por ahora: comprobar que no quedan secciones descifradas, entonces ir a búfer concreto, y hacer M-x:
(setq auto-save-hook nil)
3.1.51. errores por caché; la agenda se queda colgada muchos minutos y no acaba
"org-element-cache-map" (0x8b67d678) "org-element-cache-map" (0x8b67d388) "org-agenda-get-deadlines" (0x8b67d310) "org-agenda-get-day-entries" (0x7fdfbfc8) "apply" (0x8b67d250) "org-agenda-list" (0x7fdfc180) "funcall-interactively" (0x7fdfc178) "call-interactively" (0x8b67d118) "org-agenda" (0x7fdfc440) "funcall-interactively" (0x7fdfc438) "call-interactively" (0x8b67d070) "command-execute" (0x7fdfc6d8) $2 = "Fin de xb…" [Inferior 1 (process 352) detached]
- org-mode se está burocratizando… No sé lo que está haciendo org-element-cache; no hace lo que quiero; me ralentiza; produce alertas; causa pequeñas desincronizaciones; se pone a hacer cosas contrarias a las que pido (ej. empieza a computar cosas durante minutos cuando le pido cerrar Emacs. ¡Como si fuera Windows!); y no veo que acelere nada. Espero que encuentren mejores formas de acelerar Emacs
otros errores incomprensibles que veo mucho:
Warning (org-element-cache): org-element--cache: Warning(X.org): (org-cycle) Cached element is incorrect in X.org. (Cache tic up to date: "yes") Resetting. If this warning appears regularly, please report the warning text to Org mode mailing list (M-x org-submit-bug-report).
- ¿si aparece poco no es malo? Discrepo. Este mensaje no ha de salir nunca, y lo que hay que hacer es corregir eso de „Cached element is incorrect“. Quizás ayuda el explicar por qué pasa
3.1.52. se hace muy lento al moverse por celdas de tabla, org org-table-align
Org mode version 9.5.3 (release_9.5.3-465-g82a09b.dirty @ /w/org-mode/lisp/)
ej. de
"generate-new-buffer-name" (0xd2c39320) "generate-new-buffer" (0xd2c392a0) "org-string-width" (0xd2c39228) "org-table-align" (0xd2c39138) "org-table-next-field" (0x13f9f870) "funcall-interactively" (0x13f9f868) "call-interactively" (0xd2c390f0) "org-cycle" (0x13f9fa00) "funcall-interactively" (0x13f9f9f8) "call-interactively" (0xd2c39070) "command-execute" (0x13f9fc98)
- org-string-width es función muy compleja. No sé por qué tiene que generar un búfer…
otra vez
"Automatic GC" (0x0) "functionp" (0xd2c39548) "switch-to-prev-buffer" (0xd2c394c8) "replace-buffer-in-windows" (0x13f9f308) "kill-buffer" (0xd2c39470) 0x43bf0a68 PVEC_COMPILED "org-string-width" (0xd2c39390) "org-table--align-field" (0x13f9f598) "apply" (0xd2c39330) "cl--mapcar-many" (0xd2c39298) "cl-mapcar" (0xd2c39230) "org-table-align" (0xd2c39138) "org-table-next-field" (0x13f9f870)
otra vez
"font-lock-fontify-keywords-region" (0xd2c39610) "font-lock-default-fontify-region" (0xd2c39550) "org-fold-core-fontify-region" (0xd2c394c0) "font-lock-fontify-region" (0xd2c39450) 0x66ed2648 PVEC_COMPILED "run-hook-wrapped" (0xd2c393d8) "jit-lock--run-functions" (0xd2c392f8) "jit-lock-fontify-now" (0xd2c39290) "org-font-lock-ensure" (0xd2c391a0) "org-table-align" (0xd2c39138) "org-table-next-field" (0x13f9f870)
más
"version-to-list" (0xd2c39328) "version<" (0xd2c39290) "org-string-width" (0xd2c39228) "org-table-align" (0xd2c39138) "org-table-next-field" (0x13f9f870) "funcall-interactively" (0x13f9f868) "call-interactively" (0xd2c390f0) "org-cycle" (0x13f9fa00) "funcall-interactively" (0x13f9f9f8) "call-interactively" (0xd2c39070) "command-execute" (0x13f9fc98)
11300 90% - command-execute 11300 90% - call-interactively 11300 90% - funcall-interactively 11266 90% - orgtbl-hijacker-command-6 11266 90% - if 11197 89% - call-interactively 11197 89% - funcall-interactively 11197 89% - org-table-insert-row 11005 87% - org-table-align 5399 43% - cl-mapcar 5387 43% - cl–mapcar-many 5331 42% - org-table–align-field 4432 35% - org-string-width 1508 12% + version< 1292 10% + #<compiled -0x1c8b1fbe74e16a3f> 700 5% generate-new-buffer 444 3% + #<compiled -0x461035e5c5f10a0> 408 3% + record-window-buffer 4488 35% + org-string-width 4 0% + font-lock-ensure 4 0% + org-table–list-shrunk-columns 4 0% + #<compiled -0x221d3aeb5947b5c> 12 0% + org-table-clean-line 8 0% + org-fold-core–fix-folded-region 8 0% + org-table-fix-formulas 4 0% + org-element–cache-after-change 69 0% + org-at-table-p
- ver hilo „Table refresh very slow“ de en lista org-mode
luego veo que es por element-cache
7040 81% - command-execute 7040 81% - funcall-interactively 3389 39% + undo 2859 32% - org-metaright 2794 32% - call-interactively 2794 32% - funcall-interactively 2770 31% - org-table-move-column 1974 22% - org-element--cache-after-change 1838 21% - org-element--cache-submit-request 1726 19% - org-element--cache-for-removal 1407 16% - org-element-headline-parser 4 0% + rx-to-string 4 0% replace-regexp-in-string 15 0% org-at-comment-p 4 0% org-element-set-element 4 0% org-element--cache-find 92 1% org-element--cache-before-change 12 0% + run-with-idle-timer 332 3% + org-table-align 240 2% + org-fold-core--fix-folded-region 68 0% org-element--cache-before-change 8 0% org-at-table-hline-p 8 0% + jit-lock-after-change 4 0% + org-table--list-shrunk-columns 4 0% + org-table-fix-formulas 65 0% + org-at-table-p
- no tengo ganas de investigar tanto org-element. Ya me da muchos problemas por otros lados
3.1.53. muy lento ¡al salir! Por org-persist
de m4.2022:
"Automatic GC" (0x0) "buffer-modified-tick" (0xcd39a418) 0x3dc27a40 PVEC_COMPILED "org-persist--normalize-associated" (0xcd39a320) "org-persist-write" (0xcd39a2b0) "org-persist-write-all" (0xcd39a248) 0xcdba1bf0 PVEC_COMPILED "run-hook-wrapped" (0xcd39a208) "run-hook-query-error-with-timeout" (0x95ae0098) "kill-emacs" (0x95ae0160) "funcall-interactively" (0x95ae0158) "call-interactively" (0xcd39a1a8) "command-execute" (0xcd39a108) "execute-extended-command" (0x95ae0410) "funcall-interactively" (0x95ae0408) "call-interactively" (0xcd39a070) "command-execute" (0x95ae0698)
3.1.54. se ha hecho muy lento, incluso al empezar a cronometrar (tarda más de 40 segundos). Sobre todo cuando hay muchas entradas en una cabecera. Otra vez es por lo típico: org-element–cache-verify-element
- pasa, con versiones nuevas
aquí se atasca
"org-element-clock-parser" (0x2525508) "org-element–current-element" (0x25259a8) "org-element–parse-to" (0x2525b18) "org-element–cache-verify-element" (0x2525e80) "org-element-at-point" (0x2525f78) "org-clock-sum" (0x2526288) "org-clock-sum-current-item" (0x2526358) "org-clock-in" (0x2526470) "funcall-interactively" (0x2526468) "call-interactively" (0x69e70040) "org-self-insert-command" (0x2526740) "funcall-interactively" (0x2526738) "orgtbl-self-insert-command" (0x25269f0) "funcall-interactively" (0x25269e8) "command-execute" (0x2526cc8)
- maldita caché de org-element… ¡Tarda más con caché que sin! Tengo que probar a desactivarla
otra vez
"match-string-no-properties" (0x2524f18) "org-element-timestamp-parser" (0x25252b0) "org-element-clock-parser" (0x2525508) "org-element–current-element" (0x25259a8) "org-element–parse-to" (0x2525b18) "org-element–cache-verify-element" (0x2525e80) "org-element-at-point" (0x2525f78) […]
6762 82% - command-execute 6523 80% - funcall-interactively 6504 79% - org-self-insert-command 6504 79% - call-interactively 6504 79% - funcall-interactively 6504 79% - org-clock-in 5712 70% - org-clock-sum-current-item 5676 69% - org-clock-sum 5584 68% - org-element-at-point 5556 68% - org-element–cache-verify-element 5456 66% - org-element–parse-to 4500 55% - org-element–current-element 1876 23% - org-element-clock-parser 876 10% - org-element-timestamp-parser 412 5% org-parse-time-string 40 0% org-element-section-parser 28 0% + org-get-limited-outline-regexp 8 0% org-element-headline-parser 4 0% #<compiled 0xad42f194f400f> 12 0% + org-element–cache-sync 8 0% org-element–parse-to 80 0% + org-time-string-to-seconds 8 0% #<compiled 0xad42f194f400f> 772 9% - org-resolve-clocks 12 0% - org-files-list 8 0% + org-agenda-files 4 0% mapcar 8 0% + org-indent-line 4 0% + org-get-heading 4 0% + org-in-item-p 4 0% + insert-and-inherit
3.1.55. ATENDAS sólo el teclear ya se ha vuelto ridículamente lento: latencia de más de un cuarto de segundo (quizás medio segundo) al teclear cada letra. Es por org-element--cache-after-change
- esto el en búfer grande (3'8 Mb) (aunque no tan grande como los otros que tengo)
perfilado de cpu
45,018,289 98% - command-execute 45,018,289 98% - call-interactively 37,768,329 82% - funcall-interactively 33,393,363 72% - org-self-insert-command 33,315,267 72% - self-insert-command 31,848,807 69% - org-element–cache-after-change 31,378,572 68% - org-element–cache-submit-request 500,624 1% - org-element–cache-for-removal 288,952 0% - org-element-headline-parser 142,144 0% + replace-regexp-in-string 24,552 0% + rx-to-string 17,408 0% org-element–parse-objects 83,400 0% org-at-comment-p 4,168 0% + run-with-idle-timer 555,296 1% + org-fold-core–fix-folded-region 106,096 0% + jit-lock-after-change 96 0% + undo-auto–undoable-change 33,776 0% org-fix-tags-on-the-fly 21,552 0% org-at-table-p 2,048 0% run-hook-with-args-until-success 3,870,951 8% + execute-extended-command 504,015 1% + org-return 7,249,960 15% + byte-code 879,642 1% + redisplay_internal (C function) 4,144 0% internal-echo-keystrokes-prefix 296 0% + timer-event-handler
- esto en: Org mode version 9.6 (release_9.6-3-ga4d38e @ w/org-mode/lisp)
- otra vez digo: maldita caché. Muchas cosas parecen más lentas con caché que sin
- ¿por qué
org-element--cache-after-change
es llamada porself-insert-command
?- no lo tengo en post-self-insert-hook
- ∴ ah, es por after-change-functions
- tiene: '(org-element–cache-after-change jit-lock-after-change org-fold-core–fix-folded-region t)
ah, perfilado de CPU muestra otra visión:
2084 74% - command-execute 1163 41% - funcall-interactively 943 33% - org-self-insert-command 819 29% - org-fold-core–fix-folded-region 4 0% org-fold-core-get-folding-spec 4 0% + org-fold-core-next-folding-state-change 4 0% org-fold-core-region-folded-p 108 3% + org-element–cache-after-change 4 0% + org-element–cache-before-change 122 4% + org-delete-backward-char 34 1% + org-return 31 1% + org-kill-line 15 0% + execute-extended-command 2 0% + org-beginning-of-line
otra captura
4626 86% - command-execute 3377 63% - funcall-interactively 2438 45% - org-self-insert-command 2438 45% - apply 2398 45% - #<subr org-self-insert-command> 2370 44% - org-element–cache-after-change 2344 44% - org-element–cache-submit-request 2270 42% - org-element–cache-for-removal 2238 42% org-element-org-data-parser 8 0% - org-element-headline-parser 8 0% - org-element–parse-objects 4 0% org-element–parse-objects 4 0% - org-element–cache-before-change 4 0% #<compiled 0xadec16c0ad88f> […]
el uso de memoria también asusta. Esto es por teclear una 20 palabras y borrarlas
98,258,812 99% - command-execute 92,025,932 92% - funcall-interactively 73,528,698 74% + save-buffer 14,541,612 14% - org-self-insert-command 14,541,612 14% - apply 10,580,394 10% - #<subr org-self-insert-command> 8,742,290 8% - org-element--cache-after-change 8,057,144 8% - org-element--cache-submit-request 3,260,888 3% - org-element--cache-for-removal 1,385,232 1% - org-element-org-data-parser 169,952 0% file-name-sans-extension 888,680 0% - org-element-headline-parser 323,536 0% - org-element--parse-objects 153,584 0% - org-element--object-lex 8,184 0% org-element-radio-target-parser 8,184 0% replace-regexp-in-string 48 0% + run-with-idle-timer 411,648 0% + jit-lock-after-change 137,216 0% org-at-table-p
- voy a desactivar org-element-use-cache un tiempo. Me decepciona
- pero entonces algunas operaciones tardan más de 5 minutos…
- pruebo en ficheros: ∴ Le (3'9 Mb). o op (11'1 Mb)
- todo esto lo estoy probando con 73134cfbf
- veo
- iría bien si realmente se retrasa todo lo de org para que no pase justo al teclear
- aún no he probado la versión nueva. Aún tiene fallos nuevos. ∴ Esperar un poco
que hay opciones nuevas en org-element: „deferred“ etc. Y un nuevo asintador. Y veo también que org-element se está „comiendo“ muchas funcionas de org (pasan a estar implementadas mediante org-element), de forma que org-element deja de ser opcional. Por tanto es necesario que funcione perfectamente
- actualicé org más adelante
- por probar, a ver si hay diferencia apreciable
- sigue pasando. En algunos ficheros (ẽ uno de 2'5M) hay latencia de ŭ1 250-500 ms tras cada tecla
- veo que sigue
, y nuevo emacs (revisión git 89558533683)
- org-element-headline-parser, ¿por qué la llama tantas vecse (ẽ 2671 veces mientras tecleaba frase de ~100 letras)
- es org-element–cache-for-removal
[X]
veo que hay org-element–cache-avoid-synchronous-headline-re-parsing para acelerar cosas, lo activo. Probarlo un tiempo- parece que va bien, y mejor
3.1.56. muy lento al teclear en búfer grande; tardo casi un segundo en ver el texto tecleado. Parece que es por redisplay_internal
directamente; por código C
- esto el , en Zeitmanagement.org, al teclear al final de cabecera de nivel 3 que está por el 59% del fichero
desde emacsclient gráfico
20765 88% - redisplay_internal (C function) 80 0% - jit-lock-function 80 0% - jit-lock-fontify-now 76 0% - jit-lock–run-functions 76 0% - #<compiled -0x7399baae27627e7> 76 0% - font-lock-fontify-region 48 0% + c-font-lock-fontify-region 28 0% + font-lock-default-fontify-region 4 0% put-text-property 16 0% redisplay–pre-redisplay-functions 8 0% - eval 8 0% - if 4 0% frame-parameter 4 0% or 4 0% mode-line-default-help-echo 1125 4% - command-execute 802 3% + funcall-interactively
desde emacsclient -nw; se nota menos retardo, pero aún así hay
39230 64% - redisplay_internal (C function) 62 0% - redisplay–pre-redisplay-functions 17 0% - run-hook-with-args 8 0% - redisplay–update-region-highlight 4 0% #<compiled -0x5eaf05e30c61bb0> 2 0% window-buffer 43 0% - jit-lock-function 39 0% - jit-lock-fontify-now 35 0% - jit-lock–run-functions 35 0% - #<compiled -0x74fcfff394729e7> 35 0% - font-lock-fontify-region 35 0% - font-lock-default-fontify-region 27 0% - font-lock-fontify-keywords-region 8 0% - org-do-emphasis-faces 8 0% looking-at 4 0% - org-activate-links 4 0% - org-activate-links–text-properties 4 0% re-search-forward 4 0% org-activate-target-links 4 0% org-do-latex-and-related 3 0% lisp–match-hidden-arg 4 0% + font-lock-unfontify-region 4 0% match-data 4 0% #<compiled 0x164681ebe0832> 32 0% + eval 8 0% + mode-line-default-help-echo 1 0% file-remote-p 8649 14% - command-execute 7455 12% - funcall-interactively 5455 8% + projectile-find-file
- desactivo font-lock mode y aún pasa
- con
GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2024-01-08
- me leo
redisplay_internal
, es doloroso pero bonito documento histórico (hay trozos de hace más de 30 años, y otros recientes), y me sorprende que funcione muy extraño: minutos más tarde, vuelvo a X y tecleo en mismo sitio, y ahora es rápido (hay latencia algo molesta, pero de pocos milisegundos). Y ahora
83438 50% - redisplay_internal (C function) 3051 1% - jit-lock-function 2993 1% - jit-lock-fontify-now 2882 1% + jit-lock–run-functions 34 0% text-property-any 24 0% put-text-property 8 0% make-closure 4 0% + #<compiled 0xb556bb42fa4cf> 1556 0% + redisplay–pre-redisplay-functions 706 0% + eval 276 0% file-remote-p 80 0% + mode-line-default-help-echo 34 0% + tty-color-desc 24 0% + #<compiled 0x785e047d2419034> 14 0% + wl-summary-after-resize-function 4 0% + window–adjust-process-windows 4 0% + rcirc-window-configuration-change 54507 32% - timer-event-handler 54418 32% - apply 45250 27% - jit-lock-stealth-fontify 20740 12% - jit-lock-fontify-now 20556 12% - jit-lock–run-functions 20556 12% - #<compiled -0x73947c51e79f1e7> 18250 10% - font-lock-fontify-region 11243 6% - c-font-lock-fontify-region
- (lo de c-font-lock-fontify-region es por otro búfer no relacionado. Sólo estuve en el de org en esta prueba)
3.1.57. org-clock-in, lentísimo (puede tardar unos cinco minutos) en fichero algo grande. Cuando desactivo la caché
- me pasó en lerni latvan per anki, creo
"Automatic GC" (0x0) "org-parse-time-string" (0xef427ef8) "org-element-timestamp-parser" (0xef428200) "org-element-clock-parser" (0xef428458) "org-element–current-element" (0xef4288f8) "org-element–parse-to" (0xef428a00) "org-element-at-point" (0xef428b08) "org-clock-sum" (0xef428fe8) "org-clock-sum-current-item" (0xef4290b8) "org-clock-in" (0xef429150) "progn" (0xef429210) "unwind-protect" (0xef4292f0) "let" (0xef429420) "save-window-excursion" (0xef4294d0
- desactivo la caché porque hace casi todo más lento (ver sección anterior). Pero no esperaba que sin caché fuera tan malo todo
3.1.58. IS al cambiar el momento final de cronómetro, me mueve el cursor a la derecha y no puedo seguir usando S-arriba/S-abajo
- es algo reciente, de ~m9.2022
- no pasa con
emacs -Q
así que le afecta algún ajuste mío - ¿se ejecuta 2 veces el org-timestamp-change? La 1ª va (deja el cursor donde toca), la 2ª no
~~~
de hecho parece que hace 1 pase para la fecha final, 1 para la inicial, y otra vez la final- por mirar mejor
lo reproduzco con un .emacs que contiene sólo:
(add-to-list 'load-path "/w/org-mode/lisp") (require 'org)
bisecciono y
dc; /w/org-mode ; git bisect bad
5bc6741a5abd42e8305bb0fcfe78801813309640 is the first bad commit commit 5bc6741a5abd42e8305bb0fcfe78801813309640 Author: Ihor Radchenko <yantar92@posteo.net> Date: Tue Nov 1 15:52:25 2022 +0800
org-clock-update-time-maybe: Update the containing timestamps as well
- lisp/org-clock.el (org-clock-update-time-maybe): Update the
containing timestamps inside the clock, not only the clock sum.
Reported-by: Bruce E. Robertson <brucer42@gmail.com> Link: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=53393
lisp/org-clock.el | 35
------–— 1 file changed, 24 insertions(+), 11 deletions(-)++- lo mando a lista de org-mode, „[BUG] Shift-up/down move the cursor to end of timestamp“
- ∴ ¡Ihor lo arregló! Ya funciona
3.1.59. error al cargar con org-reload
byte-code: Org version mismatch. Make sure that correct ‘load-path’ is set early in init.el
- no me había pasado antes
- pruebo a cargar con L en dired (los .elc) y no ayuda
- org-version dice:
Org mode version 9.6-pre (release_9.5.5-1135-gaed553.dirty @ /w/org-mode/lisp/)
- no puedo hacer org-reload para cargar la nueva, qué irónico
- de momento añado algunos mensajes a mi .emacs para investigar esto
3.1.60. los enlaces radio no van, porque crean una expresión regular demasiado larga
- unir, quizás escribí
- ahí explico mi sistema
- lo podría publicar en algún lado
[…]
- I created a helm menu, that offers me all the radio links. I compute the list of radio links myself, through grep, by looking for <<<. It's easier than it seems, and very fast. The code (no explanations) is my configuration, functions: anythingyhelm-fuente-etiquetas-radio-org, precarga-etiquetas-radio-de-wiki-para-helm
[…]
mandé respuesta a lista org-mode: ver: „Radio links work only in small numbers“
3.1.61. IS petada por (org-tags-expand "+cable")
sólo esto ya basta para petar
emacs -Q
:(add-to-list 'load-path "/w/org-mode/lisp") (require 'org) (org-tags-expand "+cable")
Debugger entered–Lisp error: (wrong-type-argument syntax-table-p "Syntax table including \"@\" and \"_\" as word constit…") org-tags-expand("+cable") (progn (org-tags-expand "+cable")) elisp–eval-last-sexp(nil) eval-last-sexp(nil) funcall-interactively(eval-last-sexp nil)
- mmmmmmmmmmm, la variable
org-mode-tags-syntax-table
parece ser realmente la cadena"Syntax table including \"@\" and \"_\" as word constituents."
- debería ser otra cosa
- alguien se ha dejado hacer todo esto: (setq org-mode-tags-syntax-table (make-syntax-table org-mode-syntax-table))
- no se está ejecutando lo de org.el
pruebo:
(add-to-list 'load-path "/w/org-mode/lisp") (require 'org) ; (load-file "/w/org-mode/lisp/org.el") (org-tags-expand "+cable")
GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw scroll bars) of 2023-05-23
- org:
- oficial: Org mode version 9.6.6 (release_9.6.6 @ opt/dc/emacs/share/emacs/30.0.50/lisp/org)
- la de w: Org mode version 9.7-pre (release_9.6.5-385-gfa058f.dirty @ w/org-mode/lisp)
- pruebo a borrar los .elc, y pasa
creo que es por:
commit 6e6354c074a323780f103aabf45be74104ce3ecf Author: Ihor Radchenko <yantar92@posteo.net> Date: Mon May 8 13:23:15 2023 +0200
org-tags-expand: Do no modify buffer's syntax table by side effect
- lisp/org.el (org-mode-tags-syntax-table): New variable holding
syntax table for tags. (org-mode): Initialize tag syntax table. (org-make-tags-matcher): Match tags using appropriate syntax table. (org-tags-expand): Do no modify syntax table by side effect.
Reported-by: Mattias Engdegård <mattias.engdegard@gmail.com> Link: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=63225#68
- envío aviso a lista de org-mode
- lo envío a lista org-mode, „[BUG] wrong-type-argument syntax-table-p "Syntax table including \"@\" and \"_\" as word constituents.“
- compruebo que Ihor lo ha arreglado
3.1.62. no exporta
Publishing file home/dc/repoweb/hacer/conkeror.org using ‘org-html-publish-to-html’ No haré org-update-radio-target-regexp pues es lentísimo; me pierdo los subrayados azules en radios y la posibilidad de seguir enlaces radio. cl-no-applicable-method: No applicable method: semanticdb-create-database, semanticdb-project-database-file, "/w/conkeror/modules"
- ∴ reexportar y va
3.1.63. peta al exportar fichero grande (>90 Mb), org-export--annotate-info: Invalid regexp: "Regular expression too big"
- con todo.org de 91 Mb. Exportando a txt (UTF-8) ya pasa, tras 50 segundos
ah, es por
Debugger entered–Lisp error: (invalid-regexp "Regular expression too big") org-update-radio-target-regexp() org-export–annotate-info(#s(org-export-backend :name ascii :parent nil […] org-export-as(ascii nil nil nil (:ascii-charset utf-8)) org-export-to-buffer(ascii "Org ASCII Export" nil […]
- obvio, pues hay unos 14k radios en ese fichero
- redefino el org-update-radio-target-regexp tal como hago en mi .emacs. Ahora no lo tuve activo porque hice org-reload
- probé a actualizar, pues creo que han pasado a partir la expregu en cachos. Pero tarda minutos en cargar algunos .org, así que seguiré desactivando radios
3.1.64. se cuelga por líneas largas visibles en pantalla, por ejemplo mientras intenta fontificar un bloque Python visible en la misma pantalla
Lisp Backtrace: "string-width" (0x24dde1a0) "org-element--list-struct" (0x24dde3a8) 0xcefb3dd0 PVEC_SUBR "org-element--parse-to" (0x24ddea38) "org-element-at-point" (0x24ddeb00) "org-src-preserve-indentation-p" (0x24ddec40) "org-src-font-lock-fontify-block" (0x24ddf098) "org-fontify-meta-lines-and-blocks-1" (0x24ddf150) "org-fontify-meta-lines-and-blocks" (0x24ddf298) "font-lock-fontify-keywords-region" (0x24ddf508) "font-lock-default-fontify-region" (0x24ddf5d8) "font-lock-fontify-region" (0x673ff040) 0xdb5e7bf8 PVEC_CLOSURE "jit-lock--run-functions" (0x24ddf888) "jit-lock-fontify-now" (0x24ddf9a8) "jit-lock-function" (0x24ddfab8) "redisplay_internal (C function)" (0x0)
- le mandé SIGSUR2
- eso causó montones de GC, durante minutos, y no paraba
- cada varios semiminutos procesaba mis C-n y lo veía avanzar una línea
- lo maté y lo reinicié. Pero esto renacimiento estilo Fénix no lo hace mejor
3.1.65. IS org-table-eval-formula ya no reconoce los porcientos
- mandado a lista
a b percent of a in b 10 20 #ERROR 20 30 #ERROR - corregido, revirtió el cambio
3.1.66. al moverme por tabla con C-v/M-v se pierde la columna; el cursor se mueve unas 87 columnas a la derecha
Pruebo tabla grande vacía:
(reducir ventana para que la tabla sea más grande que la ventana).
¿Pasa en ¬org?
3.2. cosas nuevas que quiero. «Nuevo»
3.2.1. IS función para pasar de lista a lista con casillas
O sea:
- a
- b
- c
A:
[ ]
a[ ]
b[ ]
c
Me gustaría hacerla yo.
3.2.1.1. pedido a org-mode
3.2.1.2. lo implementó Carsten y en org 6.20a ya está
Aunque le falta que funcione sin el transient-mark-mode
3.2.2. IS exportar agenda a fichero; quizás con cron
- CONCLUSIÓN escrita el
ya lo tengo montado y va bien; sólo me falta publicarlo
Se puede poner en http://orgmode.org/worg/org-hacks.php El pedí si podía escribirlo uno de la lista.
Me encuentro con este problema: un fichero está bloqueado: locked by %s: (s, q, p, ?) Hasta que no lo solucione no puedo seguir ← solucionado; ver ahí.
3.2.2.1. cómo lanzar el proceso de actualización
3.2.2.1.1. MALFAR cron. Tarea que se podría poner en cron
- CONCLUSIÓN escrita el
no me gusta esta opción
time emacs –batch –load .org-muestra-agenda.el –eval '(org-batch-agenda "a")'
Me encuentro con preguntas interactivas en el modo batch de Emacs :-( El modo batch no debería hacer preguntas interactivas. → solucionado.
- Sólo me gustará meterlo en cron si puedo recibir la salida de mi prita para ver si está funcionando bien o no.
- Tengo que usar mi crontab de usuario porque no tengo que liarme editanado ficheros de root
3.2.2.1.2. otra forma mejor, con (run-at-time) en demacs creando el fichero
Quizás puedo usar la misma instancia de Emacs (demacs) con una tarea programada por run-at-time
(sólo si está ocioso) que redirija (org-agenda-list)
a un fichero, coloreado si puede ser.
Así me evito una carga, duplicación de código, y tengo más control de la salida.
Pero puedo bloquear demacs un rato.
Y sólo funcionará si Emacs está corriendo (aunque eso es casi el 100% del tiempo).
3.2.2.1.3. MALFAR lo puedo lanzar de forma manual dentro de tagajn.ujojn
Lo malo es que este prita lo ejecuto muy de vez en cuando, y yo quiero actualizaciones casi en tiempo real.
3.2.2.1.4. IS lo puedo lanzar manualmente, con comando propio
- CONCLUSIÓN escrita el
hice esto. Ver comandos usados.
Engorroso. Pero si luego usare otro sistema, podría llamar a este comando para actualizar.
3.2.2.2. IS comandos que necesito para consultar mi agenda
Me crearé varios comandos. Propongo:
- ag: ver agenda (semanal)
- ag1: ver un elemento de la agenda, el más importante (según reglas de Org); suele ser el más atrasado y el que primero tengo que solucionar
- agd: ver agenda del día actual; me lo puedo poner en .bashrc como entrada
- agact: opcional; para actualizar la agenda. Puede comprobar al principio si es necesario (estilo make pero regenerando a plazos medianos, ej. de 1 día). El resto de comandos pueden llamar siempre antes a agact para asegurarse datos últimos
3.2.2.3. BONUS publicar el sistema usado
Esto puede ir bien a otros. Poner implementación de comandos para consultar la agenda, ELisp para sacar agenda, …
3.2.3. BONUS el cronómetro en la barra de modo podría ser más útil
Ahora org-clock-modeline-total
puede ser current, today, repeat, all, auto
.
Yo quiero poder poner una cadena personalizada como "0:10 (tot: 1:10/2:00)" donde 1:10 es el total (incluyendo los 0:10 de esta cronometración) y 2:00 la estimación total.
Hay que tener en cuenta que no siempre hay total (en concreto, la 1ª vez) y no siempre hay estimación.
Implementación posible:
- se permite una cadena de formato como valor, con algo como
%current (%total/%effort)
← complicado porque habría 4 cadenas de formato - se permite una función como valor,
#'display-clock-total-effort
← mejor
Parecido a org-clock-heading-function, que está al lado y permite definir una función para el texto de la tarea (no para el reloj).
- : mandado a lista.
- Nadie contesta; tendré que ponerme yo.
- : Carsten „I'd be happy to accept a patch!“
3.2.4. BONUS en la agenda, me gustaría ver reflejadas las estimaciones de esfuerzo
Por ejemplo, si agendo algo para las 10:00 y he estimado un esfuerzo de 3 horas, me gustaría ver ocupado el bloque de 10:00 a 13:00. Ahora no sale nada.
Y si la estimación fuera de 32h, pues también querría ver ocupado el día entero al final; eso es síntoma de que estoy agendando una tarea muy poco específica. En vez de agendar ésa de 32 horas debería descomponerla en otras de 1 hora etc.
Ahora se puede buscar (con / <
, / <
, etc.) pero quiero verlo directamente, sin tener que tocar más teclas.
3.2.5. BONUS en la agenda, quiero ver en la cuadrícula de las horas de hoy una línea que represente „ahora“
Así, si tengo 15 tareas con hora para hoy, una línea horizontal me separará las que han quedado en el pasado (hechas o no) de las previstas para el futuro.
3.2.6. BONUS buscar comando para pegar dentro de un bloque, y hacerlo si no está
Ej: he copiado 5 líneas de texto, y al pegar mediante este comando me pregunta el modo, le pongo „velocity“ y me escribe:
## $theme.iconMinimize() ## $theme.iconMaximize() #if ($portlet_display.getPortletName().equals("openbookmarks_portlet")) $theme.iconMaximize() #end
Sugiero tecla C-c C-y para este comando, y mover la actual (org-evaluate-time-range) a C-c C-c
3.2.7. IS una macro no puede contener otras macros
3.2.7.1. prueba
3.2.7.2. a ver cómo va lo de exportar
Es malo: lo veo como enlace:
Result: "Este fichero se ve mejor abriendo [[file:{{{input-file}}}%20][{{{input-file}}}]] con [[http://orgmode.org/][org-mode]] ([[http://www.gnu.org/software/emacs/][Emacs]])"
3.2.7.3. IS intento corregir org-mode en esto
Hecho:
diff --git a/lisp/org-exp.el b/lisp/org-exp.el index 3e12e6a..3d2fad8 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -2106,7 +2106,7 @@ TYPE must be a string, any of: (if (and val (not (stringp val))) (setq val (format "%s" val)))) (and (stringp val) - (replace-match val t t)))))) + (prog1 (replace-match val t t) (beginning-of-line))))))) (defun org-export-apply-macros-in-string (s) "Apply the macros in string S."
Ahora va incluso:
#+MACRO: cc1 100001 #+MACRO: cc2 100002 #+MACRO: mycc-start {{{cc #+MACRO: mycc-end 2}}} Yes, it is {{{mycc-start}}}{{{mycc-end}}}. And even: #+MACRO: mycc {{{mycc-start}}}{{{mycc-end}}} {{{mycc}}}.
3.2.7.4. IS que se añada a org-mode oficial
Enviado a lista. Carsten lo incluyó en org 6.30d
3.2.8. IS selector de tareas comunes (para cambiar rápidamente a tareas predefinidas)
- CONCLUSIÓN escrita el
Carsten me propuso alternativa funcional; ver abajo.
Ver mi mensaje del
en hilo „Re: A simpler remember architecture“ de la lista.3.2.8.1. solución de Carsten, que me va muy bien
Contesté
> > To cater more to the OP's needs, consider using a special tag for such > common tasks, like :COMMON: > > The create a special agenda view hat just shows this tag. This is a very nice solution. I thought of the agenda view as a way to view your agenda, but now I see that it can actually serve as a generic task dispatcher. There are also common files and directories which I often want to open. I will write them as links inside a :COMMON: task, and this will be the generic Emacs dispatcher I was looking for.
3.2.9. BONUS quiero una columna (en vista de columnas) tipo CLOCKSUM pero que diga el tiempo que me queda (no de vida; sino de una tarea)
Mi mensaje en lista:
#+BEGIN_EXAMPLE Column view (C-c C-x C-c) is useful to show how much time I have estimated for a task and how much time I have clocked for it. It also seems helpful to show „how much time it remains“, which is the difference {estimated time} - {clocked time} for that task. It can be positive, negative (overrun) or empty (if you didn't estimate the effort). It is useful to choose the next task to do from a set of partially worked-on tasks.
Just like there is a special column called CLOCKSUM ([1]), ¿is there something like CLOCKREM to show the remaining time?
Dijo Carsten:
there is nothing like this yet, and I do not have the time currently to implement it - but I would accept a patch to this effect.
3.2.10. BONUS en vista de columnas (C-c C-x C-c), poder mover cabeceras arriba y abajo con M-arriba, M-abajo
3.2.11. BONUS org-mouse ha de permitir redimensionar tablas arrastrando
Ej:
a | b | c | |
---|---|---|---|
Uno | 1001 | 1 | 10 |
Dos y pico | 2 | 2222 (este campo es bastante largo) | 22222 |
Tres | 33 | 3 | 333 |
Ha de añadirle las cabeceras | / | apropiadas para grabar los anchos (<20> etc.).
3.2.12. BONUS en una tabla quiero diferenciar los campos calculados y los campos manuales, ej. con colores
a | b | percent | m | multiple |
---|---|---|---|---|
15 | 112 | 16.80 | 2 | 33.6 |
2 | 15 | 0.30 | 2.1 | 0.63 |
1.2 | 7 | 0.08 | 12.5 | 1. |
max%→ | 16.8 | 5.7266667 | 1 | 0 |
[ ]
avisado a org,
3.2.13. BONUS hacer gráficos a partir de tabla de tiempos, mediante R y org-babel
A partir de la tabla de tiempos (como la de org-agenda-clock-report-mode
, tecla R
en la agenda) tendría que haber una forma de generar un gráfico de tarta.
Se pueden hacer con GNU R ahora que se integra bien con org-babel.
3.2.13.1. BONUS Una idea más loca: crear árbol de directorios con ficheros dentro, y luego pasarlo a filelight
.
Crear una estructura de directorios equivalente a la estructura de tareas. Cada tarea es un fichero. Se le cambia el tamaño de cada fichero (se puede trucar; no hace falta llenarlo de ceros) para que 1 hora represente 1 Mb. Entonces se abre filelight
o cualquier otro programa que represente uso de disco.
¡Quien más horas trabaje necesitará también más megas!
3.2.13.1.1. se parece mucho a algo más sencillo
A: decir cuántas líneas de contenido hay en cada cabecera. Primero hacer eso, luego esto.
3.2.13.2. También se pueden crear en SVG cuando Emacs acepte mostrar SVGs internamente
Así se puede programar todo en Lisp.
3.2.14. BONUS poder ver cómo de grande es cada sección (cuántas líneas de contenido hay bajo cada cabecera)
Esto fue muy necesario para mí cuando escribía mi proyecto final. Ya lo describí; ver ahí.
3.2.14.1. tipo de información que necesito, y cómo verla
Quiero una representación visual de la cantidad de texto. En inglés podría buscarlo como:
- visualization of content size
- visual representation of number of pages
De hecho me podría valer con iconitos o barras:
[.......]
poco[*......]
un poco más[**.....]
más[***....]
más[****...]
más[*****..]
más[******.]
mucho[*******]
máximo
(O algo parecido a lo que usa org-habit).
Algo así hace git cuando dice cuánto han cambiado los ficheros.
3.2.14.2. podría hacerlo creando estructura de directorios y usando filelight
3.2.14.3. BONUS podría hacerlo superponiendo información, como hace C-c C-x C-d ahora
Es org-clock-display
.
Ver file:/home/w/org-mode/lisp/org-clock.el::(defun org-clock-display (&optional total-only)
3.2.14.4. podría hacerlo a partir del HTML/LaTeX ya exportado
El LaTeX ya genera un índice. ¡Eso dice el número de páginas ocupadas por cada sección!
Pero no sirve para comparar cantidades.
3.2.14.5. podría hacerlo si Emacs me ayudara
3.2.14.6. funciones para org que ya sacan una estimación de tamaño (en palabras, bytes, párrafos, subsecciones, …)
3.2.14.6.1. BONUS con org-wc, contando palabras
Nuevo del http://comments.gmane.org/gmane.emacs.orgmode/41146
:[ ]
conseguir que entre en contrib
3.2.14.6.2. Poca cosa, cuenta subsecciones y párrafos y lo muestra en minibúfer
(defun pinard-count-subtree-and-paragraphs () "Return number of subtrees and paragraphs in the subtree at point." (interactive) (org-with-wide-buffer (org-narrow-to-subtree) (let ((tree (org-element-parse-buffer 'element)) (num-hl 0) (num-el 0)) (org-element-map tree 'headline (lambda (hl) (incf num-hl))) (org-element-map tree '(paragraph table verse-block quote-block src-block example-block) (lambda (el) (incf num-el))) (message "Sub-headings: %d ; Parapraphs (or equivalent): %d" (1- num-hl) num-el))))
pinard-count-subtree-and-paragraphs
3.2.14.6.3. sistema más largo, que superpone textos, pero poca información
- [BROKEN LINK: wl:/flag:unread/%25orgmode#871uphlzfs.fsf@iro.umontreal.ca]
3.2.14.6.4. BONUS uno que cuenta bytes
- [BROKEN LINK: wl:/flag:unread/%25orgmode#CAJcAo8ujquda5SiQ-UWH0CkvE2EqG42G-ikc2dzer-Xz1hVZLA@mail.gmail.com]
Reformarlo
3.2.15. BONUS no hay modo de poner un pie de página que vaya desasociado a toda entrada
Ej. lo quiero para esta misma lista de cosas por hacer; quiero poner la fecha de modificación y el autor.
- Si pongo una frase al final de la última entrada, aparece como dentro del contenedor de esa entrada, por tanto no se ve siempre.
- Si pongo una cabecera nueva para el fin de página, queda feo
- Puedo usar
org-publish
y definir un postámbulo (postamble), pero entonces se usa un postámbulo genérico para todos los ficheros; y me gustaría poner uno algo distinto en cada página. (O sea, quiero definir el pie de página dentro mismo de cada página).
Lo pregunté en lista hace tiempo y me dijeron que no había forma
3.2.16. BONUS protección antiespam (aunque sea mínima)
Quiero una opción de exportación que me sustituya todo lo que parezcan direcciones de correo a algo no obvio. Creo recordar que txt2tags lo hace.
Esto es importante para cuando los datos no están muy revisados y pueden incluir direcciones de otras personas.
3.2.17. MALFAR necesito un buen sistema para expresar dependencias en org-mode, pues los correos las tienen
Ej. quiero poder decir: „antes de responder este correo tengo que escribir y publicar la respuesta“
∴ Mejor no liarse; soy solo/sólo 1 persona. Responder el correo directamente y ya está. Simplicidad Me puede servir para otras cosas aparte de correos. ẽ para visualizar mapa de bloqueos.
3.2.17.1. IS org-depend
- org-depend es muy bueno
http://orgmode.org/worg/org-contrib/org-depend.php- https://orgmode.org/worg/org-contrib/org-depend.html
- Lo que aporta es:
- impedir cerrar una tarea cuando ésta depende de otras ← no me es muy útil pues mi problema no es „que quiera cerrar tareas sin cumplir sus requisitos“, sino que no me doy cuenta del mapa global de dependencias
- disparar cambios de estado en otras entradas (o incluso agendarlas) cuando se cierra una tarea ← esto tampoco me ayuda mucho porque ya lo implemento como una casilla que dice: „[ ] seguir con [loquesea]“ y la tengo que marcar; es un proceso manual y fácil (→bueno)
- ∴ org-depend no me ayuda mucho en su estado actual
3.2.17.1.1. BONUS pero me puedo hacer yo un grafo de dependencias (graphviz) basándome en la información registrada con la sintaxis de org-depend
- antes probar org-edna
3.2.17.2. org-edna, más complejo que org-depend
3.2.17.3. el sistema de dependencias que necesito
Es para descubrir cosas:
- mapa global de dependencias
- visualizar mapa de bloqueos
- debería poder ordenarme las tareas de mi agenda en distintos flujos paralelos
- e invitarme a hacer el primer paso de cada uno de los flujos
- debe evitar bucles, etc.
3.2.18. BONUS poder buscar todos los enlazantes a la sección actual (org-find-backlinks o similar)
Hay que pasearse por todos los .org conocidos (agenda y más) y revisar cada enlace para ver si es al ID de la sección apuntada.
Muse hacía algo así.
3.2.19. ATENDAS la función org-revert-all-org-buffers podría revertir sólo los búfers que lo necesitan
- si la fecha de modificación del fichero en disco es más reciente que la fecha de {modificación o de carga} del búfer, recargar
- funciones útiles:
- buffer-modified-p no me ayuda, es para cambios manuales
- creo que (verify-visited-file-modtime &optional BUF) me servirá; sí
(defun org-revert-changed-org-buffers () "Revert all Org-mode buffers changed outside of Emacs. This works like org-revert-all-org-buffers but is limited to those files which have a more recent modification time than the one in Emacs' buffer. This function is faster because it does not reload unchanged buffers." (interactive) (unless (yes-or-no-p "Revert changed Org buffers from their files? ") (error "Abort")) (save-excursion (save-window-excursion (mapc (lambda (b) (when (and (with-current-buffer b (org-mode-p)) (with-current-buffer b buffer-file-name) (not (verify-visited-file-modtime b))) ; (message "revirtiendo búfer %s" (buffer-name b)) (switch-to-buffer b) (revert-buffer t 'no-confirm))) (buffer-list)) (when (and (featurep 'org-id) org-id-track-globally) (org-id-locations-load)))))
org-revert-all-org-buffers loads all buffers from disk even if they didn't change. This can be very slow if you have hundreds of org files. The code below adds an extra check to only revert files which changed (according to verify-visited-file-modtime). It may be better to have only one function, org-revert-org-buffers, which by default reverts only changed buffers, but accepts a parameter to revert them all.
[X]
enviado el- no hay respuesta
[ ]
debería mejorarlo y dar un parche bueno
3.2.20. BONUS ayudar a visualizar una lista larga mientras te mueves por ella
- una
- lista
- larga
- ejemplo
- ésta
- y ésta
- con
- varios
- niveles
- de
- indentación
- etc
- varios
- etc.
Quiero que al apuntar a un „-“ con el cursor, te ilumine los „-“ del mismo nivel que quedan en las líneas de arriba y abajo. Esto sólo al dejar el cursor ahí un momentito (ej. 1 segundo).
Así se podrá ver dónde están los hermanos, qué queda dentro y qué queda fuera.
3.2.20.1. BONUS otra opción más fácil es colorear los „-“ en función de su nivel
Parecido a lo que hace rainbow-delimiters-mode.
3.2.21. IS simplemente quiero un calendario con el número de tareas para cada día
Así podré ver que me quedan 50 para el día 19, pero 2 para el 20, etc. O que me programo demasiadas actividades para los lunes pero pocas para el domingo. O cosas de ese tipo. Muy importante para detectar errores de planificación (demasiadas tareas por día).
Se pueden usar distintas opciones:
- un bloque dinámico
- extender (ej. mediante una nueva tecla) el „calendar“ normal
- crear
org-calendar
directamente - [] proponerlo a org
- ∴ ya tengo calfw, que lo hace bien
3.2.22. ATENDAS ver „la última tarea abierta en que he cronometrado trabajo“ (de un fichero)
Muy interesante si quiero trabajar un poco en todas las tareas abiertas, por igual. Es aplicar un estilo Round-Robin.
Se podrían ordenar tareas por „recencia“ (palabrota significando: calidad de „reciente“) y buscar el menos reciente.
Se podría usar org-clock-history pero eso es global (no de fichero, no de subárbol).
[X]
preguntado el a la lista; „least recently clocked open task in a file“.- no responden; esto me pasa siempre que hago preguntas raras
[ ]
quizás puedo hacerlo en vista de columnas con alguna función de las de org-columns-compile-map- lo podría hacer con org-element (para iterar por ficheros org); ver notas
3.2.23. ¿revertir todos los búfers?
- no sé cómo se hace
- o „todos los que lo necesitan“
- yo creía que era automático, pero con tramp (su:… en localhost) no me ha funcionado
3.3. proyectos grandes sobre org-mode. «Proyectos»
3.3.1. IS conversor de muse a org
- CONCLUSIÓN escrita el
Al final ha quedado así: versión final, sin acabar
CLOCK:
=> 0:11Ver: file:///home/dc/proj/emacs/muse-orgD0.el
Esto es cada vez más importante pues quiero tener todo mi wiki en Org. Y poder cronometrar una tarea en todo momento, pues muchas de mis tareas viven en wiki.
3.3.1.1. Varias ideas a priori
3.3.1.1.1. Exportador „org“ para muse
Pro:
- los exportadores de muse son fáciles de programar
- podría convertir con mucha precisión
Contra:
- necesito amplia experiencia con ambos
- los dos lenguajes cambian rápido
3.3.1.1.2. Importador de (X)HTML para org-mode
Pro:
- se sigue usando HTML como lenguaje intermedio
Contra:
- HTML no es capaz de describir todo
- pasar de muse->HTML->org pierde más información que de muse->org
3.3.1.1.3. Conversor tonto de muse a org por expregus
¿Para qué, si tengo el exportador de muse? Quizás es más fácil, eso sí…
(defun org-to-anhnmncb () (interactive) (goto-char (point-min)) (let ((curlevel 0)) (while (< (point) (point-max)) (goto-char (point-at-bol)) (cond ((looking-at "\\(\\*+\\)\\s-*") (setq curlevel (1- (length (match-string 1)))) (replace-match (make-string curlevel ?\t))) ((looking-at "\\s-*") (replace-match (concat (make-string curlevel ?\t) "- ")))) (forward-line 1))))
3.3.1.2. IS Lo empiezo usando exportador de muse.
- CONCLUSIÓN escrita el
Al final ha quedado así: versión final, sin acabar
Ver: file:///home/dc/proj/emacs/muse-org.el file:///home/dc/repoweb/minis/emacs/muse-orgD0.el
3.3.1.3. IS mirar planner2org, algo antiguo pero que me será útil
- CONCLUSIÓN escrita el
no me ayuda mucho; de todas formas no traduce enlaces, etc. Creo además que no está actualizado mucho. Y prefiero ELisp :-)
- [http://gitorious.org/projects/planner2org A small Perl script that will convert data to orgmode] format from PlannerMode format.
3.3.1.4. IS ¡publicar de una vez el código parcial!
- CONCLUSIÓN escrita el
Al final ha quedado así: versión final, sin acabar
3.3.1.5. versión final, sin acabar, de exportador de muse a org
Al final ha quedado publicado así y aquí:
- emacs/muse-orgD0.el ← conversor a medias
- Útil para probar: emacs/sintaxis.muse (fichero que muestra toda la sintaxis de Muse)
- para probar sólo listas: emacs/lista.muse
3.3.2. BONUS incluir WWW en org
Esto ya es una idea alocada… pero bastante posible. Consiste en un transformador de HTML a org-mode que permita navegar por WWW desde dentro de búfers org en Emacs. Por tanto org subsume a la red mundial de páginas de hipertexto WWW. En mi opinión org es mejor que WWW :-) Incluso se acerca más a la idea de la WWW que tenía su creador.
El sistema funcionaría así:
- un demonio en lenguaje rápido (luego ya se portará a ELisp) que crea conexiones y genera el búfer .org (va traduciendo enlaces, cabeceras, marcas, …)
- un nuevo tipo de enlaces que haga pasar todos los accesos a WWW a través de este programa gestor de conexiones. De esta forma, para seguir un enlace de una página WWW a otra WWW se puede usar C-c C-o
- en este búfer .org se puede cambiar todo, grabar a disco, poner en control de versiones, … La web pasa a ser editable
- pequeños detalles:
- hay que aprovechar al máximo org-mode para que incluya imágenes, etc. dentro del búfer
- incluso estilos .css para que al exportar ese búfer, se obtenga el .html original
- POST, JavaScript son ignorables
- códigos complicados HTML pasan a aparecer como bloques de código
¿Cómo se podría llamar esto? ¿orgorgorg? :-)
3.3.2.1. listaja de algunos problemas gordos de WWW que quedarían solucionados con org+CdV
- ¡ni siquiera se pueden editar las páginas! Ej: cambiar orden de secciones, añadir una columna a una tabla, cambiar colores
- no hay historial
- no hay metadatos, no hay fechas, …
- ¡JavaScript! Qué locura que haya páginas con más contenido para la máquina que para el usuario…
- HTML se le escapó de las manos al W3C, el XML es excesivamente complicado (compara con org o JSON), el CSS también se deja ser abusado, …
- no se puede exportar fácilmente de un formato a otro
- es demasiado remota. ¡Con lo fácil que es bajarse un sitio entero en ficheros .org y navegar por ellos en local!…
- etc.
3.3.3. BONUS conjunto de utilidades para vigilar y ayudar a mejorar la productividad
Algo como org-boss.el en contrib o org-productivity.org en Worg estaría bien. Ver mensaje descriptivo: {Orgmode} Productiviy tools
4. CEDET
4.1. buena integración con Java
Ver mensaje de Eric (buscarlo)
A side affect would be the red imports in Java.
We would probably need the following things to happen to fix this issue:
- A java specific implementation of `semantic-tag-include-filename' to turn 'org.slf4j.Logger' into 'org/slf4j/Logger.java' (or whatever)
- We need some sort of EDE/JDEE integration wrapper, like ede-emacs.el perhaps.
4.2. lo básico sobre cómo va CEDET
4.3. IS que el CEDET independiente y el CEDET integrado en tronco de Emacs sean el mismo
- CONCLUSIÓN escrita el
Ya se integró en Emacs
Mensaje que empecé a escribir:
the CEDET merge changed package names, and thus a (require 'semantic-java) now should be: (require 'semantic/java) Packages like JDEE (for Java development) would need to be rewritten or fork into two versions, one for the standalone CEDET and another for the integrated CEDET. JDEE currently uses the old names and doesn't load. Maybe a compatibility layer can link the old names to the new names. For instance, a file can (require 'semantic/java) and (provide 'semantic-java) and do nothing else. Then old programs won't fail in that aspect.
Pero todo esto está dicho en http://old.nabble.com/CEDET-merge-td25647689.html
Y más, p.ej. http://lists.gnu.org/archive/html/emacs-devel/2010-03/msg00038.html
Sugerencia: que CEDET adopte los cambios hechos en Emacs Y que no haya diferencias entre la versión de Emacs y la de CEDET
5. JDE (¿JDEE?)
5.1. MALFAR No arranca JUnit
Probar con TestEasy.java en swecr.model.datasource
- o quizás con junit3.jar
5.2. MALFAR Errores de vez en cuando en beanshell
- quizás actualizar a JDE de Debian… yo uso ahora 2.3.5.1
Buscar por „missed bsh commands“; era útil
5.3. IS uno en beanshell.el
- CONCLUSIÓN escrita el
ya lo considero arreglado; o al menos no quiero preocuparme más de ello
Re: Patch to solve Beanshell problem after compilation Mittwoch, 28. Januar, 2009 19:46 Uhr Von: "Paul Landes" <…> An: … It won't be there for a little while until I put it there. Things have been moving slowly as of late. Keep the code you've written for yourself until we get it out there.
5.3.1. IS revisar si lo ha metido en beanshell.el en 2.3.6
- CONCLUSIÓN escrita el
bueno, lo metió en 2.4, que es mejor
Creo que no.
5.3.1.1. : hay rama 2.4
6. gnus
6.1. MALFAR error al entrar en carpeta
6.2. MALFAR descubrir cómo ver hilo entero
Intentado preguntar en IRC: Hi. I'm seeing just 1 message of an NNTP thread because the others were older and didn't fit in the view I selected (20 messages). How can I see the full thread, but completely? (new and old no matter what, and up to the thread-top post and all its children).
6.3. MALFAR nnimap+agent=caos. Solucionar
6.3.1. mandado a lista el
Hi, we all know that gnus-agent creates lots of problems with nnimap backends. Not only wrong count numbers, but also you can apparently lose unread e-mails when you enter a group (and then you don't see them again even with C-u M-g). This makes the innocent user angry. I would like that users are not required to remember that nnimap+agent=chaos, but that Gnus remembers this to the user in case it is needed (i.e. when enabling it).
Could we add some sort of warning or confirmation to avoid enabling nnimap+agent by mistake?
At least until it is fixed.
– Daniel
6.3.1.1. IS esperar respuesta
- CONCLUSIÓN escrita el
dijeron que no se arreglaría, más o menos
6.4. MALFAR quiero que ofrezca crear directorios
- CONCLUSIÓN escrita el
ignorado por ahora; me tocará hacerlo yo
Mandado el
a gnus-general6.5. gnus es lento
6.5.1. IS escribir en Wiki sobre la velocidad de Gnus
Incluir la idea de abajo.
http://www.emacswiki.org/emacs/GnusSpeed Y anunciado en lista.
6.5.2. ¿podría ejecutar alguna cosa como un programa separado?
Es mucho más rápido.
$ time emacs -Q --batch --eval '(message "this is another Emacs %i instance" (+ 20 3))' this is another Emacs 23 instance real 0m0.053s user 0m0.028s sys 0m0.024s
6.5.3. IS ver si contestan en wiki o lista (.general)
6.5.3.1. IS subsumir respuestas
Pues nadie más tiene ganas de colocar la información junta y estructurada… así que me toca a mí.
He actualizado http://www.emacswiki.org/emacs/GnusSpeed con todas las respuestas hasta ahor.
6.5.3.1.1. sobre lo de escribirlo en el manual, le contesto a Reiner
Hi, the target user for this information are all Gnus users (also Emacs beginners with few months' experience), and I think that the wiki is more or less easy to edit. Writing into the official manual sets too high entry barriers for collaboration: find latest version, read it a bit, learn CVS, look for the correct section, write well, write 100% correct stuff, sign legal papers, wait for approval, wait more, … The wiki is instantaneous and allows both complete and unfinished content. Therefore I suggest writing more in EmacsWiki, and when there is more information and more consolidated and validated, integrate it into the manual. The wiki can also be useful to coordinate other development tasks. -- Daniel
6.6. las teclas del búfer Sumario son inconsistentes
- TAB: lioso; hace cambios importantes que no se pueden deshacer bien.
Sugiero envez:
- TAB: contraer/expander sección
- M-izquierda/M-derecha: indentar/desindentar
- M-arriba/M-abajo: mover elementos o secciones
Así se parece mucho más a org-mode y es más intuitivo.
Además habría que asegurarse de que se puede des/∅-indentar sin usar las flechitas, pues son incómodas.
6.7. poder leer mensajes sin marcarlos como leídos
En #gnus:
18:23 <clemente> Hi, do you use some trick to open a mail without causing it to be marked as read? 18:25 <clemente> I know they aren't marked in the server until you quit the summary buffer, but I might hit q accidentally and mark some as deleted; I don't want that
6.8. error raro, quizás por cambios en configuración
No lo uso desde hace 13 años… En
cuando lo arranqué vi:>>> (error news/nntp No address associated with hostname) nntp (news) open error: ‘>>> (error news/nntp No address associated with hostname)’. Continue? (y or n) y Reading home/dc.newsrc.eld… Opening nntp server on news… Server nntp+news previously determined to be down; not retrying Opening nntp server on news…failed: >>> (error news/nntp No address associated with hostname) Checking new news… Reading active file from news via nntp… Opening nntp server on news… Server nntp+news previously determined to be down; not retrying Opening nntp server on news…failed: >>> (error news/nntp No address associated with hostname) Checking new news…done
Por probar: https://github.com/dickmao/nnreddit/issues/56
Tras errores tan poco claros, me invita poco a probarlo. Quizás tras otros 13 años…
7. wanderlust
7.1. IS wl-beta cargado está corrompiendo los colores ANSI en eshell
7.1.1. Mensaje enviado a lista de GNU (es informe 6748)
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=6748
1. Install package wl-beta in Debian testing. It's version 2.15.9+0.20100525-3 2. Use the .emacs I provide below 3. Run emacs (latest version from Bazaar from 28.m7.2010) 4. See it issue the error 5. Comment the (require 'wl) and run again 6. Now it runs ls correctly, and with color .emacs: ------------------------- (add-to-list 'load-path "/usr/share/emacs/site-lisp/wl/wl") (add-to-list 'load-path "/usr/share/emacs/site-lisp/semi") (add-to-list 'load-path "/usr/share/emacs/site-lisp/wl/elmo/") (add-to-list 'load-path "/usr/share/emacs/site-lisp/flim/") (add-to-list 'load-path "/usr/share/emacs/site-lisp/apel/") (add-to-list 'load-path "/usr/share/emacs/site-lisp/wl/utils") (require 'wl) (setq debug-on-error t) (setq debug-on-signal t) (eshell-command "ls --color=auto") ------------------------- The backtrace I get: ------------------------- Debugger entered--Lisp error: (wrong-type-argument overlayp nil) overlay-put(nil face ((foreground-color . "blue") bold)) ansi-color-set-extent-face(nil ((foreground-color . "blue") bold)) ansi-color-apply-on-region(#<marker at 1 in *EShell Command Output*> #<marker at 1766 in *EShell Command Output*>) eshell-handle-ansi-color() run-hooks(eshell-output-filter-functions) eshell-run-output-filters() eshell-output-filter(#<process ls> "Bla.mp4 …" read-event(nil nil 0.05) sit-for(0 50) eshell-wait-for-process(#<process ls>) eshell-command("ls --color=auto") eval-buffer(#<buffer *load*> nil "/home/dc/.mirp/.emacs" nil t) ; Reading at buffer position 984 load-with-code-conversion("/home/dc/.mirp/.emacs" "/home/dc/.mirp/.emacs" t t) load("~/.emacs" t t) ------------------------- This seems a problem with ansi rather than Wanderlust. The nil originates at (ansi-color-make-extent start-marker end-marker), which calls (make-extent from to object)
7.1.2. Código que sí que va (pues carga la versión compilada)
(add-to-list 'load-path "usr/share/emacs23/site-lisp/wl") (add-to-list 'load-path "usr/share/emacs23/site-lisp/semi") (add-to-list 'load-path "/usr/share/emacs23/site-lisp/wl/elmo") (add-to-list 'load-path "usr/share/emacs23/site-lisp/flim") (add-to-list 'load-path "usr/share/emacs23/site-lisp/apel")
7.1.3. el problema está en make-extent, cambiado por wl-demo
Aquí: file:/usr/share/emacs/site-lisp/wl/wl/wl-demo.el::defalias maybe make extent ignore
(eval-when-compile ; … (defalias-maybe 'make-extent 'ignore) )
- En la versión interpretada (.el), se define el alias. Pues el
eval-when-compile
equivale aprogn
- En la versión compilada (.elc), no se define el alias
- ¿por qué?
- parece que porque
(fboundp 'make-extent)
es cierto mientras se compila, pero no me cuadra
- parece que porque
defalias-maybe
es función en pym.el (de apel). Su nombre me da miedo; ¡lo del-maybe
podrían meterlo a cualquier función!find-file-maybe
,kill-emacs-maybe
, …- no entiendo el funcionamiento exacte de
defalias-mabye
, pues es liosa.- Veo que marca los alias definidos con una propiedad ('defalias-maybe) a t, y así no los vuelve a definir más adelante
- ¿por qué?
7.1.4. IS arreglar en mi Emacs
7.1.5. IS avisar a Wanderlust y ver si lo solucionan
- CONCLUSIÓN escrita el
se corrigió
7.2. BONUS el cambio 100605 hace que product.el (apel) no cargue bien por tener comillas anticuadas
product.el
(de paquete apel
de Debian unstable) tiene comillas anticuadas (obsoletas desde hace más de 10 años):
(` (progn (, product-def) (put (, feature) 'product (let ((product (product-find-by-name (, product-name)))) …
Intento arreglar la función poniéndole las comillas buenas/nuevas; no sé si lo estoy haciendo bien
(defmacro product-provide (feature-def product-def) "Declare a feature as a part of product. FEATURE-DEF is a definition of the feature. PRODUCT-DEF is a definition of the product." (let* ((feature feature-def) (product (product-find (eval product-def))) (product-name (product-name product)) (product-family (product-family product)) (product-version (product-version product)) (product-code-name (product-code-name product)) (product-version-string (product-version-string product))) `(progn ,product-def (put ,feature 'product (let ((product (product-find-by-name ,product-name))) (product-run-checkers product '(,product-version)) (and ,product-family (product-add-to-family ,product-family ,product-name)) (product-add-feature product ,feature) (if (equal '(,product-version) (product-version product)) product (vector ,product-name ,product-family '(,product-version) ,product-code-name nil nil nil ,product-version-string)))) ,feature-def)))
Pero resulta que el fallo sólo pasa si incluyo el cambio 100605 (Bazaar), que hace algo con (` a
en lread.c
:
- if (first_in_list) + if (first_in_list && (c = READCHAR, UNREAD (c), c == ' '))
Para referencia, el error que da el Emacs ahora es:
Debugger entered--Lisp error: (invalid-function (progn (\, product-def) (put (\, feature) (quote product) (let ((product (product-find-by-name (\, product-name)))) (product-run-checkers product (quote (\, product-version))) (and (\, product-family) (product-add-to-family (\, product-family) (\, product-name))) (product-add-feature product (\, feature)) (if (equal (quote (\, product-version)) (product-version product)) product (vector (\, product-name) (\, product-family) (quote (\, product-version)) (\, product-code-name) nil nil nil (\, product-version-string))))) (\, feature-def))) ((progn (\, product-def) (put ... ... ...) (\, feature-def))) (let* ((feature feature-def) (product ...) (product-name ...) (product-family ...) (product-version ...) (product-code-name ...) (product-version-string ...)) ((progn ... ... ...))) (lambda (feature-def product-def) "Declare a feature as a part of product.\nFEATURE-DEF is a definition of the feature.\nPRODUCT-DEF is a definition of the product." (let* (... ... ... ... ... ... ...) (...)))((quote apel-ver) (product-define "APEL" nil (quote (10 7)))) (product-provide (quote apel-ver) (product-define "APEL" nil (quote ...))) eval-buffer(#<buffer *load*<4>> nil "/usr/share/emacs/site-lisp/apel/apel-ver.el" nil t) ; Reading at buffer position 1895 load-with-code-conversion("/usr/share/emacs/site-lisp/apel/apel-ver.el" "/usr/share/emacs/site-lisp/apel/apel-ver.el" nil t) require(apel-ver)
[X]
Solución temporal: excluir ese cambio (100605) en rama de Emacs[ ]
Solución mejor: actualizar apel de Debian.[ ]
avisar a Emacs
7.3. IS otro fallo de comillas anticuadas en wl/utils/ssl.el que me impide ver el correo
Lo he corregido y he mandado parche a wl-en@lists.airs.net. Como no llegó me apunto a la lista y reenvío; ya sale: http://lists.airs.net/wl/archive/201008/msg00004.html Ver archivos de wl-en. Incluido en CVS al menos el .
7.3.1. el parche
--- ssl.el.~1.2.~ 2004-01-18 15:28:28.000000000 +0100 +++ ssl.el 2010-07-28 16:16:10.000000000 +0200 @@ -192,10 +192,9 @@ (let* ((process-connection-type nil) (port service) (proc (eval - (` - (start-process name buffer ssl-program-name - (,@ ssl-program-arguments)))))) - (process-kill-without-query proc) + `(start-process name buffer ssl-program-name + ,@ssl-program-arguments)))) + (process-kill-without-query proc) proc)) (provide 'ssl)
7.3.2. dijo que el problema afecta a más cosas
Btw: Same problem holds true for SEMI, APEL and FLIM. SEMI won't compile with GNU Emacs 24.0.50.1 (i486-pc-linux-gnu, GTK+ Version 2.20.1) of 2010-08-01 on elegiac, modified by Debian.
7.4. IS ya no conecta bien; no muestra correos nuevos; es por elmo
- CONCLUSIÓN escrita el
(setq ssl-certificate-verification-policy 1) ; lo soluciona todo
Me pasa desde el
aprox. Quizás es por actualización de apt-get de algo de SSL, pues creo que wl y Emacs no cambiaron.También me empezó a pasar con Gnus.
Inserting group Desktop…done Checking "%inbox" Auto plugged off at imap.gmail.com:993 :elmo-network-initialize-session byte-code: Cannot open: elmo-network-initialize-session Mark set [2 times] byte-code: End of buffer
- Mirar todo lo de usr/share/emacs23/site-lisp/wl ← cargando los .el y depurando, veo traza
- Es por función wl
- wl-demo=t
- check=t
[X]
(run-hooks 'wl-auto-check-folder-pre-hook)
es lo que da error ← no, mal depurado[ ]
wl-auto-check-folder-pre-hook ← no puedo mirar su documentación:
Debugger entered--Lisp error: (void-variable symbol) documentation-property(wl-auto-check-folder-pre-hook variable-documentation)
- ¿?
describe-variable: Symbol's value as variable is void: symbol
- a ver… (setq wl-auto-check-folder-pre-hook nil)
- no, ya era nil. No le pasa nada. Qué raro
[ ]
(wl-folder-auto-check) es lo que da error- en concreto (wl-folder-check-entity wl-folder-entity 'auto)
- en concreto (setq ret-val (wl-folder-check-entity-async entity auto))
- en concreto (elmo-folder-name-internal folder)
[ ]
¿dónde se define elmo-folder-name-internal?- Parece que en elmo-internal.el
(luna-make-entity class :type sym :prefix (elmo-folder-prefix-internal folder) :name (elmo-folder-name-internal folder) :persistent (elmo-folder-persistent-internal folder) :mime-charset (elmo-folder-mime-charset-internal folder))
[ ]
¿cómo funciona?
Causas posibles:
- espero que no sea por: http://gmailblog.blogspot.com/2011/04/long-label-names-in-gmail.html
- ∴ es lo mismo que les pasa aquí: http://comments.gmane.org/gmane.mail.wanderlust.general.japanese/8464
- esto más o menos va:
openssl s_client -host imap.gmail.com -port 993 -verify 0 -CApath ~/.w3/certs/
- tenía yo el ssl-certificate-verification-policy a 0
- pongo
(setq ssl-certificate-verification-policy 1)
y ya funciona - ver en esa URL la explicación. Cambió openssl de 0.9.8n a 1.0.0
- esto más o menos va:
7.5. quiero que el mime-view-mode me resalte en otro color las citas (lo que empieza por „>“)
- creo que ya lo hacía, pero me encuentro algún mensaje en que no lo hace
- solución para ir pasando: M-x highlight-regexp ENTER ^>.* ENTER ENTER
7.6. „Operation aborted by user“, me sale a veces en wanderlust mientras leo mensajes largos
- file:///w/emacs-w3m/w3m-proc.el#org123c2f1
- ẽ correos de Richard F.
(args-out-of-range *WL:Message* 1 3) Result: (args-out-of-range #<buffer *WL:Message*-267331> 1 3)
- y veo un „Operation aborted by user.“
- file:///w/emacs-w3m/w3m-proc.el#org123c2f1
- ¿por qué unos van y otros no?
- quizás porque alguno es muy largo (mucho texto)
prueba
dc; ~ ; cat paso1| w3m -dump -T text/html | less
- me toca depurar: mime-w3m-preview-text/html
llama w3m-region p
(w3m-region (point-min) (point-max))
ya peta
Debugger entered--Lisp error: (args-out-of-range 1 259613) w3m-region(1 259613) eval((w3m-region (point-min) (point-max)) t)
aaaaaaaaaaaaah, parece ser
(if (re-search-forward "\n*\\( *\\)Reading [^\n]+\\(\\.\\.\\.\\)"
y es porque tengo una frase en el correo a R.F. que incluye
it took time to answer. Reading is fast. But writing, and clicking the reply button
- y entiende ese „Reading“ como un error. Qué horror; vaya forma de programar y de gestión de errores. El error se ha de comunicar de otra forma
- parece que además pasa en combinación con otra cosa, ẽ porque es largo o sale otro error. Parece que w3m-process-queue ha de estar activo aún
- mandando un correo HTML que contiene „Reading “ no puedo reproducirlo. Hace falta algo más
- si es esto, no tengo ganas de solucionar errores en un código malo y abandonado. Habría que mejorarlo antes
- ∴ hay forma de esquivarlo, (setq w3m-clear-display-while-reading nil)
8. eshell
8.1. MALFAR eshell da errores en comandos sencillos hasta que se compila Emacs de nuevo con maintainer-clean
Ej:
cp a b
: Symbol's value as variable is void: archiverm a
: Symbol's value as variable is void: interactive
Está descrito en http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1969
La solución es:
make maintainer-clean
y volver a compilar. Pero quiero que no sea necesario recompilar para que esto vaya bien, sino que directamente Emacs no se compile mal.
8.1.1. BONUS investigar origen del error
esto se comentó en la lista
9. emms
9.1. BONUS encontrar o hacer una interfaz usable para escuchar música
Ahora está emms-playlist, emms, pero es muy confuso y hay que pelearse hasta para tareas sencillas. Además las opciones buenas vienen desactivadas. Hay que hacer una interfaz potente, estilo Amarok, para quien quiera empezar desde mucho en vez de empezar desde 0.
Además: lista no exclusiva de molestias:
- hay que hacer M-x emms RET cada vez (no recomiendan confi. por defecto)
- ese búfer desaparece solo
- no hay forma predefinida de mostrar algo útil en la barra de modo (con el orden y tamaño correctos, que sean clicables, etc.)
- los .el potentes están desactivados
- hay funciones para cambiar de modo el búfer actual, pero faltan los llamantes: emms-playlist, emms-lyrics, emms-browser, emss-tag-editor, … Que sean miniaplicaciones que inicialicen su propio búfer y vaina.
- no se ve cuánto falta de canción
- no ofrece recordatorio de teclas
- el tema de navegar entre varias listas es confuso para un novato
Quizás va bien usar emms de infraestructura y hacer algo aparte.
10. emacs-jabber
- http://www.emacswiki.org/emacs/JabberEl
- http://emacs-jabber.sourceforge.net/
- lista https://lists.sourceforge.net/lists/listinfo/emacs-jabber-general
git clone git://git.code.sf.net/p/emacs-jabber/git emacs-jabber
- en últ.v. es de m5.2013, pero en git se actualiza
- https://codeberg.org/emacs-jabber/emacs-jabber es más nuevo. Cambio: https://codeberg.org/emacs-jabber/emacs-jabber/issues/7 parece que
- lo anoto sólo aquí
10.1. IS cuando se cierra conexión Jabber y se reabre, no va
- CONCLUSIÓN escrita el
Enviat infomerror
https://sourceforge.net/tracker/index.php?func=detail&aid=2561962&group_id=88346&atid=586350
10.1.1. MALFAR ver si lo corrigen
- CONCLUSIÓN escrita el
parece que no
10.1.2. BONUS encontrar lo de la contraseña en blanco en Jabber
De momento tengo función que me lo reinicia, y la llamo manualmente cuando detecto que han quedado en blanco.
10.2. recibir ficheros
En viclone no me iba.
[19:03] A__> Accepted! [19:03] 142857> File receiving failed: Timeout when connecting to streamhosts [19:03] A__> Unable to connect to peer for data transfer.
Ensure that your Data Transfer settings are proper. If you are behind a NAT router or firewall then you'll need to open the proper TCP port or specify a Data Transfer Proxy in your account settings. [19:03] A__> te lo mando al correo
10.3. IS ¡no va cifrado! Con wireshark se ve todo (con cuenta de jabberes.org)
[X]
¿me pasa sólo en emacs?- en Psi va cifrado
- ∴ sí, sólo en emacs-jabber
[X]
configurar emacs-jabber, ver abajo[X]
el parece que todo a la vez me fue dentro de la misma sesión. Comprobar que se mantenga → ∴ eso parece…- [] puedo protegerme si uso red VPN o túnel SSH
¿abandonar jabberes?← no es problema suyo
10.3.1. conexiones cifradas
Hay un capítulo „Encrypted connections“ en „README“ que habla de esto. (gnutls-available-p)
[X]
reprobar con emacs-jabber nuevo de ← también falla- ∴ decisión importante: no quiero gnutls (pues no va), no quiero binario „starttls“ (pues no existe tal), sino que lo que quiero es
openssl
con este comando:openssl s_client -connect jabberes.org:5222 -starttls xmpp
, que ya consigue una comunicación cifrada- o sea, puedo hablar en XML tras ese comando
[X]
ahora, a conseguir pedirle esto a emacs-jabber[X]
ya he conseguido que use openssl, pero dice „haciendo conexión STARTTLS“ y no está poniendo los parámetros -starttls xmpp, por eso no va → añadido
- por lo visto hace falta que (fboundp 'open-ssl-stream)
- open-ssl-stream está sólo en file:///w/emacs/lisp/net/tls.el como nombre viejo de open-tls-stream… ¡qué lío!
[X]
leer código- [] (setq gnutls-log-level 2)
- eso no me muestra nada extra…
- [] ¿seguro que está usando gnutls?
[ ]
http://sourceforge.net/p/emacs-jabber/bugs/64/- activada más depuración
[ ]
depurar jabber-ssl-connect
10.4. IS no conecta m4.2017, por parámetros de TLS/SSL otra vez
- CONCLUSIÓN escrita el
¡lo arreglé! Era por gnutls, ver ahí
(start-jabber-connection "142857" "jabberes.org" nil nil "aquívamiclave" nil 5222 'ssl)
Vaya, esa función viene de fsm y es difícil de depurar.
Problema está ya en open-tls-stream, porque tls-program es nil.
,: dc; ~ ; gnutls-cli –x509cafile /etc/ssl/certs/ca-certificates.crt -p 5222 jabberes.org ,Processed 173 CA certificate(s). ,Resolving 'jabberes.org:5222'… ,Connecting to '95.211.10.153:5222'… ,|<1>| Received record packet of unknown type 60 ,*** Fatal error: An unexpected TLS packet was received. ,*** handshake has failed: An unexpected TLS packet was received. ,: dc; ~ ;
∴ Sobre este error ver en lo de „Received record packet of unknown type“.
Falla open-tls-stream; he de ir ajustando los parámetros hasta acertar.
En psi
conecta bien.
∴ No tengo ganas de arreglar esto. Lo arreglé.
10.5. error raro
car: Wrong type argument: listp, fsm-jabber-connection-532
Quizás por cargar mal el nuevo jabber.
10.6. ∴ da tantos problemas… que mejor usar psi (va perfecto) ∴ ya vuelve a ir, así que lo puedo usar
10.7. borrar los registros de mensajes cuando los espámers me escriben. espam
git status | grep /jabber-log/ |grep -v 'modified: ' # | xargs rm
11. anything/helm
- https://github.com/emacs-helm/helm/wiki
- desarrollo, dicen que por 2020 parado: https://news.ycombinator.com/item?id=24449883, https://github.com/emacs-helm/helm/issues/2386
11.1. ¿gestor de tareas o de fallos?
11.2. cosas que le faltan (o no sé hacer). Y fuentes nuevas que quiero
- marcar búfer principal/actual e ir ahí fácilmente
- quizás con helm-bookmark
- acceder a los ficheros importantes de un proyecto (ẽ todos los .py metidos en el cdv que guarda el fichero actual)
- forma de pasar a ficheros relacionados (ẽ estoy mirando un module_render.py de un directorio, y quiero acceso rápido al module_render.py de otro directorio paralelo)
11.2.1. BONUS grep por todos los búfers abiertos
- helm-occur es sólo un búfer
- hay un moccur, no documentado
- ∴ así funciona:
- abrir helm para ficheros (helm-for-files)
- seleccionar varios (C-espacio, ó M-m ó M-a)
- apretar C-s
- teclear
- veo resultados de entre los búfers seleccionados
- helm-multi-swoop también lo hace, pero no es cómodo
- está helm-multi-swoop-org, pero muy lento
11.2.2. grep de las líneas de un fichero concreto
Eso es como „occur“.
11.2.3. quiero que me muestre los ficheros en los que he pasado más tiempo recientemente
Me molesta tener que buscar cada vez el fichero anterior, con tanto esfuerzo como buscar un fichero ajeno (es poco esfuerzo, pero es). Volver al sitio central ha de ser más fácil que cambiar a otro.
11.2.4. quiero que me muestre lista de ficheros abiertos dentro del „frame“ actual (serán 1 ó 2 ó 3…)
Es para poder hacer eso de „ver el mismo fichero („buffer“) que tengo abierto en la ventana („window“) de arriba.
11.2.5. como find-name-dired, para filtrar ficheros colocados en árbol radicado en directorio actual
- helm-git-grep es para el contenido, no para el nombre.
∴ helm-ls-git, https://github.com/emacs-helm/helm-ls-git
[ ]
pero es lento, tarda varios segundos en prepararse (cuando un „find“ es rapidísimo)- lo que tarda es:
(helm :sources '(helm-source-ls-git-status helm-source-ls-git-buffers helm-source-ls-git) ;; era: helm-ls-git-default-sources :ff-transformer-show-only-basename nil :buffer "helm lsgit")
- pruebo variantes:
(helm :sources '( ;helm-source-ls-git-status ; lo de „git status“ sólo ;helm-source-ls-git-buffers ; „Buffers in git project“ helm-source-ls-git ; ∴ todos los ficheros, es la que me interesa ) :ff-transformer-show-only-basename nil :buffer "helm lsgit")
- ∴ desactivé las otras
11.3. IS no sale lista de comandos cuando la combino con la de ficheros
- CONCLUSIÓN escrita el
parece que ya va; ha pasado mucho tiempo
Me pasa el
desde hace tiempo. Tengo que mandar este ejemplo:(defun mi-anything-principal () "Error: there are no commands. If you change the order (first commands, then files) it works" (interactive) (anything-other-buffer '( anything-c-source-find-files anything-c-source-emacs-commands ) " *mi-anything*"))
11.4. IS coincidencias puras antes que aproximadas (quiero favorecer los resultados más parecidos a mi entrada)
Ej. si tecleo rgrep
, ahora veo:
html-site-rgrep rgrep zrgrep
Y yo querría verlos en orden de semejanza a mi entrada (rgrep
), o sea: primero rgrep
(que es igual), luego zrgrep
(un poco más largo), luego html-site-rgrep
(el menos parecido).
- poner primero los que empiezan por mi cadena
- poner primero los que concuerdan exactamente con mi cadena, luego poner los que concuerdan con mi cadena tomada como expregu
11.4.1. IS en anything debería recibir las coincidencias puras antes que las aproximadas.
CONCLUSIÓN escrita el
Lo hace anything-match-plugin(require 'anything-match-plugin) ; Change anything.el matching algorithm humanely. It gives anything.el search refinement functionality. exact match -> prefix match -> multiple regexp match.
11.5. BONUS al ver la lista de acciones para el elemento elegido, quiero que me muestre cuál es ese elemento elegido
Pues a veces no me doy cuenta de cuál he elegido. Bastaría con decir „Actions for item rgrep“ en vez de „Actions“ en el titulillo.
11.6. MALFAR que no haga pings al abrir anything
No sé para qué hace ping. Si es necesario, hacerlo al elegir un candidiato, pero no directamente al abrir.
Me pasa cuando tengo el cursor en un dominio, como blablablalbabl.com
De momento, desactivar la fuente.
11.7. en anything, la lista de cabeceras de org debería darme la cabecera coincidente 1º y luego sus ancestros (en vez de ancestros+hija)
- algo de anything-c-adaptive-sort
Es por:
(source-info (assoc source-name anything-c-adaptive-history))) (if (not source-info)
(assoc 'file anything-c-adaptive-history) ← da nil
11.8. IS con auditd veo algo muy raro mientras uso helm con locate; mlocate muere
type=ANOM_ABEND msg=audit(1373798137.801:36): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=16380 comm="locate" reason="memory violation" sig=5
- Repetir:
- abrir helm normal
- teclear ~„set“ y esperar
- una letra más y esperar
- borrar esa 4ª letra
- ya pasa
- luego además tras muchos C-g no puedo salir bien de helm
- pasa debido a fuentes:
- helm-fuente-locate-de-ficheros-privados
- no pasa al activar:
- helm-fuente-ficheros-importantes
- anythingyhelm-fuente-páginas-de-wiki
- ni ésas dos a la vez
- [] probar a usar su sistema propio, (helm-locate-with-db "~/.bd-locate")
- o mejor uno basado en ése
- no, ya tengo mi fuente
[X]
∴ arreglando lo del mlocate he podido quitar la guarrada del strace, y ya va mejor- de momento con esto es suficiente; ya no veo nada en auditd
11.9. MALFAR al salir (C-g) se bloquea un poco y no cierra el minibúfer, a veces me hace falta repetir C-g
Situación en que parece que es bueno que pase:
- C-x C-f (se abre con helm), C-d (pregunta si borrar fichero), C-g → muestra „Quit“. Bueno pues estaba en nivel 2º de minibúfer.
Esto muestra mensaje „Quit“:
(signal 'quit nil)
Creo que tiene que ver con los procesos „locate“.
- ya no me pasa casi; cuando me pasa es por algo más grave (que causa que emacs cuente mal el número de ventanas abiertas y el cómo moverse entre ellas); pero cerrando el „frame“ se arregla
11.10. IS me puedo colocar en su ventana y cambiarla
- https://github.com/emacs-helm/helm/issues/282
- hizo „Don't allow switching out of minibuffer from helm session“
[X]
y añadió helm-prevent-switching-other-window, probar- y helm-prevent-escaping-from-minibuffer ← por defecto a t, bien
11.11. IS me salen mensajes de error mezclados con resultados
- informado el https://github.com/emacs-helm/helm/issues/287 :
- hago parche para que entienda locate-process<1> etc., mandado el
- mejor el de Thierry
11.12. helm me abre varias veces el mismo proceso locate
dc 27236 1.7 29.7 404760 305244 ? SNsl Sep15 297:28 emacs --daemon dc 27260 0.0 0.0 15532 24 pts/4 SNs+ Sep15 0:00 \_ /usr/bin/python -c import sys; from Pymacs import main; main(*sys.argv[1:]) -f /w/Pymacs dc 16008 0.0 0.0 7188 12 pts/14 SNs+ Sep18 0:00 \_ /bin/zsh -i dc 5256 14.7 0.0 4028 700 ? RNs 15:05 0:01 \_ locate -i -r uoeaueoa dc 5259 14.5 0.0 4028 700 ? RNs 15:05 0:01 \_ locate -i -r uoeaueoa dc 5266 14.2 0.0 4028 700 ? RNs 15:05 0:01 \_ locate -i -r uoeaueoa
11.13. helm-other-buffer: No buffer named helm, y no puedo abrirlo más
(helm-mode -1)
¿Y luego…? Probando:
(helm-mode 1) (call-interactively (helm-find-files nil)) ← no va (rename-name "*helm*") ← bestia (with-helm-buffer (+ 2 2)) ← no va (helm-buffer-get) ← da "*helm*" (setq helm-buffer nil) ← lo rompe todo
∴ Me ha funcionando descargando helm (unload-feature muy manual de cada uno) y luego reevaluando el trozo de mi .emacs que carga helm.
11.14. no me abre un fichero nuevo dentro de un directorio .git
, me da: helm-read-file-name: Wrong type argument: stringp, nil
Fuera de .git
sí que me va.
Es porque me está ignorando el .git
.
(find-file "w/django-user-tasks.git/hooks/update")
Pruebo C-x C-w desde scratch, y:
expand-file-name(nil) helm-read-file-name("Write file: " :name "write-file" :buffer "helm-mode-write-file" :default "home/dc/org/*scratch*" :initial-input "/home/dc/org" :alistp nil :must-match nil :test nil) helm–generic-read-file-name("Write file: " "home/dc/org" "/home/dc/org/*scratch*" nil nil nil)
Esto va: meterse en búfer scratch, y hacer esto: (write-file "w/django-user-tasks.git/hooks/update")
11.15. helm-git-grep-at-point no toma siempre lo del cursor
- peta con lo de obtener símbolo, porque (thing-at-point 'symbol) falla unas veces
(defun helm-git-grep-get-input-symbol () "Get input symbol. ← Simplificada desde original, para corregir fallo" (if (use-region-p) (helm-git-grep-get-region-substring) (thing-at-point 'symbol) ))
11.16. debería ser más predecible al darle al „enter“. Si tecleo rápido, a veces no va. Hace esperar
- https://github.com/emacs-helm/helm/issues/2074, hay más gente que habla del „Display not ready“
- actualicé, a ver si ha mejorado
11.17. „zone“ no combina bien con „helm“
- open frame X
- let 2 idle minutes pass. „zone“ will be enabled
- without focusing X, open frame Y. „zone“ won't stop
- in Y, press the key that opens helm. helm will appear in X, not in Y (this is the bug). And „zone“ will stop
- press the key again (in Y), it will close it in X, saying „Aborting an helm session running in background“
- press the key a third time (in Y), now it will work: helm will open in Y
I guess that helm decides to appear in the frame where „zone“ run (for whatever reason) instead of in the frame where I pressed the key.
Para probar, acelerarlo:
(cancel-timer zone-timer) (setq zone-timer (run-with-idle-timer 3 t 'zone))
Mmm… me cuesta reproducirlo.
11.17.1. cómo detecta en qué „frame“ abrirse
- quizás helm-initial-frame
11.17.2. en realidad toca mejorar „zone“ para que actúe en todas las ventanas (de Emacs) → ver sección arriba
11.18. me muestra códigos raros en letras ¬ASCII, de golpe, supongo que por algo puntual
- ah, quizás es git-grep, no helm
- lo depuro un poco, y veo que el comando git se llama bien (y separa con nulos)
define-helmgitgrepgetinputsymbol-con-mi-versión-arreglada, lo arregla- no sé por qué pasaba
11.19. IS falla, „helm–completing-read-default: Symbol’s function definition is void: helm-subr-native-elisp-p“
- extraño, empezó a fallar antes de recompilar. Pasó mientras jugaba con lo de volcar todas las variables
- (helm-subr-native-elisp-p)
- está en helm-lib
- (require 'helm-lib)
- (find-file "/w/helm")
- (require 'helm)
- para salir del paso:
- (helm-mode -1)
- y luego
- (helm-mode 1)
- esto ya va mejor
si cargo todos
Loading /w/helm/helm-x-files.elc…done Load error for /w/helm/helm-for-files.elc: (invalid-slot-name #<helm-type-file helm-type-file-15842ec82936> must-match)
- ∴ era por un
(require 'helm-git-grep)
puesto demasiado pronto. Quitarlo
11.20. ATENDAS se estropeó el grep, me lleva a un búfer „mouse-2: execute action^Jmouse-3: menu actions“, tras actualizar helm
11.21. IS el C-n ya no circula entre fuentes, tras actualizar helm. Se limita a los candidatos de la fuente actual
- depurar helm-next-line (es el C-n)
- ∴ helm-move-to-line-cycle-in-source, ahora está a t. Lo pongo a nil
11.22. no compila bien, por algo de clear-image-cache
In end of data: helm-files.el:5076:18: Warning: the function ‘clear-image-cache’ is not known to be defined.
(require 'image) (require 'image-dired)
11.23. algo se cuelga (no sé si es por helm u otra cosa) al abrir búfer desde emacsclient y moverme
- me pasa con
revisa_código
- quizás no tiene nada que ver con helm. Parece más relacionado con terminal
informe de CPU, tras estar un rato intentando moverme (y apretando M-x, y C-g etc.)
961 27% - … 961 27% - read-extended-command-1 961 27% - #<advice 0F2> 961 27% - apply 961 27% - helm–completing-read-default 961 27% - helm-mode–apply-helm-handler 961 27% - apply 961 27% - helm-completing-read-default-handler 961 27% - helm-completing-read-default-1 961 27% - helm-comp-read 961 27% - helm 961 27% - apply 961 27% - helm 961 27% - apply 961 27% - helm-internal 874 25% - helm-read-from-minibuffer 849 24% - read-from-minibuffer 572 16% - redisplay_internal (C function) 29 0% + tty-color-desc 9 0% + mode-line-default-help-echo 4 0% + redisplay–pre-redisplay-functions 4 0% + eval 277 7% + timer-event-handler 18 0% + helm-update 7 0% + helm-get-candidate-number 79 2% + helm-initialize 8 0% + #<byte-code-function BF8> 891 25% Automatic GC 780 22% - redisplay_internal (C function) 19 0% + tty-color-desc 8 0% + mode-line-default-help-echo 3 0% + rcirc-window-configuration-change 471 13% - server-process-filter 471 13% - server–process-filter-all-pending 471 13% - server–process-filter-1 329 9% + server-execute-continuation 138 3% + server-create-tty-frame 4 0% server-goto-toplevel 244 7% - command-execute 244 7% + funcall-interactively 95 2% + timer-event-handler 23 0% + global-hl-line-highlight 16 0% + apply 3 0% + #<byte-code-function C5A>
recompilé emacs (y helm), y ya parece ir bien, ahora la lentitud es por activar python-mode en fichero de 828 Kb
45477 79% - #<byte-code-function 6E9> 45477 79% - python–flymake-parse-output 45449 79% - flymake-diag-region 45234 79% - end-of-thing 45234 79% - bounds-of-thing-at-point 22645 39% - thing-at-point–beginning-of-sexp 22645 39% - forward-sexp 22645 39% + python-nav-forward-sexp 22549 39% - thing-at-point–end-of-sexp 22549 39% - forward-sexp 22549 39% - python-nav-forward-sexp 22545 39% - python-nav–forward-sexp 22466 39% - python-info-statement-ends-block-p 22398 39% - python-nav-end-of-block 22390 39% - python-nav-beginning-of-block 22255 38% - python-nav-backward-block 22247 38% - python-nav-forward-block 19850 34% + python-syntax-context-type 1288 2% + python-nav-beginning-of-statement 954 1% re-search-backward 99 0% looking-at 8 0% point-marker 96 0% current-indentation 4 0% + python-nav-beginning-of-statement 3 0% + python-info-current-line-empty-p 8 0% + python-nav-end-of-statement 60 0% + python-nav-end-of-statement 32 0% + python-info-end-of-block-p 16 0% + python-syntax-context-type 12 0% + python-info-current-line-empty-p 8 0% + python-info-end-of-statement-p 4 0% + python-info-beginning-of-statement-p 4 0% + python-info-statement-starts-block-p 3 0% + python-nav-end-of-statement 4 0% make-closure 67 0% line-number-at-pos 28 0% + assoc-default 5879 10% Automatic GC 4178 7% - redisplay_internal (C function) 3494 6% - jit-lock-function 3494 6% - jit-lock-fontify-now 3494 6% - jit-lock–run-functions 3494 6% - #<byte-code-function 001> 3494 6% - font-lock-fontify-region 3494 6% - font-lock-default-fontify-region 3052 5% + font-lock-fontify-syntactically-region 442 0% + font-lock-fontify-keywords-region 14 0% + eval 14 0% + tty-color-desc 3 0% redisplay–pre-redisplay-functions 1336 2% + command-execute 126 0% + #<byte-code-function F2B> 95 0% + #<byte-code-function F80> 70 0% + timer-event-handler 26 0% + xterm-set-window-title 19 0% + global-hl-line-highlight 9 0% + apply 6 0% + jit-lock–antiblink-post-command 5 0% + … 3 0% + #<byte-code-function B85>
12. muchas ideas más gordas que dan trabajo para varios meses
Ver las que escribí en http://www.emacswiki.org/emacs/SummerOfCode2009 cuando intenté que que Emacs participara en Summer of code 2009.
13. otras cosas de Emacs
Ver mi configuración de Emacs (mi .emacs) y otros programas en Lisp. Aviso: página enorme.