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

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

<26.m01.2009 13:51>

1.1.5.3. IS esperar respuesta para xmodmap

Esperando desde el <26.m01.2009>… Faltan voluntarios.

  • [] Mejor crear parche. ← bueno, lo que mandé ya es suficiente
  • el <06.m03.2011> 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 <26.m01.2009>.

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

<22.m08.2008> 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…
1.1.8.2.2.1. una de las versiones a medias… ¡que no va!
(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
)
1.1.8.2.2.2. propiedades que no van
;;'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
1.1.8.2.2.3. no me hace falta función aparte
;(defun rcirc-track-button-clicked (arg)
;"Executed when 
1.1.8.2.2.4. IS NOTA: Está costando por lo del tipado dinámico („dynamic binding“)
  • CONCLUSIÓN escrita el <14.m09.2008 06:59>
    Superado
1.1.8.2.2.4.1. Ejemplo del problema (mediante otro programa equivalente)
; 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"))
1.1.8.2.2.4.1.1. IS solucionar este problemilla
; 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"))
1.1.8.2.2.4.1.2. variante de la solución, con otra lambda interna (se parece más a mi problema)
; 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"))
1.1.8.2.2.4.2. ¡maldita sea! ¡Ya lo tengo!

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.

1.1.8.2.2.5. otra versión, la primera que ya empieza a funcionar
(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 ",")
)
)
1.1.8.2.2.6. empezando a adaptarla a lo que quiero (cambiar de búfer)
(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 ",")

)
1.1.8.2.2.7. ¡nuevo! con el botón derecho, se ignora lo nuevo sin cambiar
(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 ",")

)
1.1.8.2.2.8. y ya detallitos: que integre bien con C-espacio…
(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 ",")

)
1.1.8.2.2.9. BONUS hacerla más bonita y ajustarla al estilo de código de Gnus
(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 <14.m10.2009 09:49>
    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 <14.m10.2009 02:12>; 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 <14.m10.2009 09:49>
    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 <18.m05.2009 20:00>
    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 <28.m06.2009>

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 <02.m10.2012 00:02>
    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

<18.m07.2008> 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 <02.m10.2012 00:03>
    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
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

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 <02.m10.2012 00:04>
    ya no pasa

<28.m04.2008>

  1. edita
  2. busca: C-s LE1_PROG
  3. dale más a C-s
  4. 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 <02.m10.2012 00:05>
    lo arreglaron

Mandé el fallo el <12.m04.2009 04:03>

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

emacs-pretest-bug@gnu.org 23.0.92.2; offer to make a directory when saving if it is needed

  1. Do: C-x C-f /tmp/doesnotexist/myfile RET. Emacs tells you about make-directory
  2. Type something.
  3. 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, ?)

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 <09.m02.2009 18:18>.

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 <31.m10.2010> 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 <10.m02.2011>, 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:

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:

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.

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
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 <12.m01.2023>, 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 decenas miles 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)

  1. Dividir el marco en 4 ventanas
  2. En una de ellas hacer C-x v v
  3. Se usa una de las otras para escribir el comentario (en vez de crear una nueva)
  4. C-c C-c
  5. 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 <12.m10.2011 18:52>
    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.

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)
  1. emacs -Q –daemon
  2. In a terminal: emacsclient -c
  3. In a second terminal: emacsclient -c
  4. 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 (<11.m11.2013>)
  • 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 <16.m01.2014> 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 <03.m06.2014>
  • 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.

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/server 

drwx-–— 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, ẽ <26.m01.2023>

  • 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ás Cuando 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
  • [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)

  • <28.m04.2022> compilé (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
  • 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“, <08.m03.2022>. Pero no
      • 0a9c8855b0 „Don't decode text within XIM callbacks or handle_one_xevent“, <16.m02.2022>
      • f1d535da1e „Decode keyboard input as latin-1 whenever appropriate“ etc. <16.m02.2022>
    • la de <28.m04.2022> fallaba
    • probaré ec464789df, de <02.m04.2022>
      • 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 <22.m03.2022>, compila bien. Pero aún falla; no hay siete
    • pruebo b1c6d5f2b7, de <16.m03.2022>, aún falla
    • pruebo d0d7765f23, de <08.m03.2022>, justo antes de bbbb47704f. También falla
    • pruebo 6410b6ada0, de <23.m02.2022>. También falla
    • pruebo eb0680bd57, de <16.m02.2022>. Falla y ¿me detecta menos teclas? ← no, quizas es por teclado „frío“
      • curioso, luego la probé otra vez y no fallaba
    • pruebo a6df8f9f99, de <10.m02.2022>, sí que va el 7
    • limito a una más cercana: 68b3273214, de <13.m02.2022>, sí que va
    • limito a una más cercana: d43ca38556, de <14.m02.2022>
    • limito a una más cercana: 2d573afecb, de <15.m02.2022>, 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 probado
    • pruebo 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 <20.m02.2022>
  • 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] encuentro solución parche 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
  • 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

1.4.21. IS peta con SIGSEGV la versión terminal (sin X) por algo de faz a nulo. Es por GC

  • mandado <24.m05.2024 20:49>
  • 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

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)

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

  • 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.

    1. 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.
    2. 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?), …………………
    3. 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 nuevo mover 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:
      1. poner 1 emacsclient a la izq, una terminal a la derecha
      2. puedo cambiar tamaño (izq./der.) de ventana. Va bien
      3. moverme a la parte derecha de pantalla
      4. abrir emacsclient (se abre a la derecha)
      5. cerrarlo
      6. moverme a la parte izquierda
      7. 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í
  • (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)

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 <21.m06.2024 13:47>: 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 <19.m08.2024> pasa
    1. open emacs -Q
    2. open ~/.emacs ← just to be able to find the window
    3. 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
    4. While it's being resized in a loop, use C-x 2 to do a top/bottom window split
    5. It crashes
  • [X] por informar, quizás aparte: 73022
  • por 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

  • <05.m10.2024> 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, <10.m09.2024 19:41> no mando esta parte

    Right 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
  • <11.m06.2024> 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
  • <11.m06.2024> 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 <12.m06.2024 16:57>
  • 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 <13.m04.2009 23:58>
    Por fin acabé; era sólo una introducción. Pero me gusta para CLISP

Ahora que Icicles está corregido

file:~/.emacs.d/lisp/pruebascl.lisp

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

<12.m10.2008> 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

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.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 <22.m05.2019> 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
  • [ ] 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 <25.m02.2011> 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.

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 <07.m12.2012 10:47> - 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 usuario usu). Y ahí, git grep no va; sigue pensando que soy el usuario dc 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
  • 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 existe tramp 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 <15.m01.2009>

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

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 <09.m02.2009 01:30>
    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 <24.m02.2009 20:28>
    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 <18.m05.2009 19:48>
    no tuvo mucho éxito

2. EmacsWiki

2.1. BONUS reimplementar EmacsWiki en ficheros .org

2.1.1. mensaje que envié el <04.m02.2009 11:29>

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
3.1.1.1.1.1. something

aaa =eee

3.1.1.1.1.2. two= *iii

ooo* uuu =ae

3.1.1.1.1.3. i més =pe

e=

3.1.1.1.1.4. two2= *iii

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 <07.m02.2009 01:23>
    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 <16.m02.2009 23:14>
    ya lo hizo Carsten, qué eficiente
  • [X] bajar línea sola
  • [X] código demasiado
3.1.1.2.5. otra prueba
3.1.1.2.5.1. happens with this one

a="b

3.1.1.2.5.2. doesn't happen (no highlight)

a=b

3.1.1.2.6. MALFAR Lo sigo viendo mal; ¿no se corrigió?

El <21.m08.2009> 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))
3.1.1.3.3.1. ATENDAS mandar o Org-mode

Aunque no es solución muy buena Enviado el <21.m08.2009>.

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 <13.m02.2009 15:25>
    corregido

3.1.3. MALFAR fallo al empezar reloj

  • CONCLUSIÓN escrita el <02.m10.2012 00:45>
    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: <17.m03.2010 10:25>–<17.m03.2010 10:30> => 0:05 CL_OCK: <17.m03.2010 10:20> CL_OCK: <17.m03.2010 10:20> CL_OCK: <17.m03.2010 10:20> CL_OCK: <17.m03.2010 10:20> CL_OCK: <17.m03.2010 10:20> CL_OCK: <17.m03.2010 10:20> CL_OCK: <12.m03.2010 16:38>–<12.m03.2010 16:39> => 0:01

#+END_EXAMPLE

They are later correctly found to be dangling clocks. I presume this is a bug?

Enviado a lista el <17.m03.2010 10:47>; 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
  • <12.m04.2010>: 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)

3.1.5.3.1.1. five sections under here
3.1.5.3.1.1.1. one
3.1.5.3.1.1.2. two
3.1.5.3.1.1.3. three

#+BEGIN_EXAMPLE

We need: ,* pears ,* lettuce ,* watermelons

Very important!

3.1.5.3.1.1.4. four
3.1.5.3.1.1.5. five
3.1.5.3.1.2. cómo me ha quedado la TDC

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 <03.m03.2010 15:14>
    Lo corrigió Carsten :-)

Mandado el <01.m03.2010 02:30>.

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.

3.1.5.4.1.1. IS aplicar esta configuración a mi publicador
3.1.5.4.1.2. BONUS esto ha de cambiar y estar integrado en org-publish; ¿cómo?

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
3.1.5.4.1.2.1. primer código que genera la BD de ids
(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)
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 (<13.m10.2010>) 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é (enlace file: algo.org sale como http: algo.html). Es por eso por lo que pierdo la parte derecha de los enlaces.

3.1.5.4.4.1. IS corrijo y envío corrección
  • CONCLUSIÓN escrita el <25.m10.2010 01:18>
    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 <13.m10.2010 00:31>. El <24.m10.2010> 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 sale http:)
  • [X] probar en emacs normal con -Q: aquí pasa
    • emacs --load cargaem.el -Q --visit marco.org y hacer C-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 <27.m08.2014>

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%

      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%
    • [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: <09.m08.2016 19:25>–<09.m08.2016 19:50> => 0:25 C…LOCK: <09.m08.2016 17:00>–<09.m08.2016 18:50> => 1:50 C…LOCK: <15.m07.2016 23:15>–<15.m07.2016 23:45> => 0:30 C…LOCK: <27.m04.2016 01:00>–<27.m04.2016 01:59> => 0:59

    • pero analiza:

      Me piden analizar esta cadena: «[2016-08-09 Tue 19:25» Me piden analizar esta cadena: «<09.m08.2016 19:50>» Me piden analizar esta cadena: «[2016-08-09 Tue 17:00» Me piden analizar esta cadena: «<09.m08.2016 18:50>» Me piden analizar esta cadena: «[2019-11-05 Tue 03:05» Me piden analizar esta cadena: «<05.m11.2019 03:21>» 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 <09.m04.2024> o poco antes
    • enlazo al ID jgg8k741eue0
    • va porque estoy en mismo fichero
  • 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
  • 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
  • <09.m04.2024 19:27> 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

Ej: da error.

un dos tres
18 2 #ERROR

El código lo parte en org.el, buscar por CONSTANTS.

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 <28.m11.2010>.

  • 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:

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 <23.m04.2010 19:58>

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 <23.m04.2010>):

  • 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 <15.m06.2010 17:41>
    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

3.1.18.3.3.1. comparación de „status -z de varias“ vs „de un fichero“
# ~ ; 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
3.1.18.3.3.2. vc-state debería aceptar una lista como parámetro
  • [ ] ¿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
3.1.18.3.3.3. probando llamador desde lisp

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.5.1. desactivar vc en org
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 <12.m08.2013 10:50>
    „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?
  • [#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 <07.m07.2010>.

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 <07.m09.2010>, 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.

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" <25.m09.2013 10:06>
,| 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: <09.m01.2051>

You press S-M-right and you get: →*** something → SCHEDULED: <09.m01.2051>

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 <31.m10.2021>
  • 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 <06.m08.2014 13:49>
    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: &lt;2011-02-28&gt; 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 <13.m03.2011>, 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 <19.m05.2011>
  • [X] avisado a org-mode el <12.m06.2011 00:42>
  • [X] llega parche; va

3.1.30. MALFAR error al tomar categorías; lleva ya muchos meses

  • CONCLUSIÓN escrita el <02.m12.2017 01:43>
    de hace años, y parece que no pasa ya

Lo mandé el <22.m10.2011>:


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 <03.m12.2013 13:54>
    ya pasé todo a v8, ya va bien
  • [X] org-publish-org-to-html es llamado con demasiados argumentos argumentos en orden que no toca
    • mandé a emacs-orgmode@gnu.org el <27.m11.2013 11:59> 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] 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
    • [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))

  1. 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?
  2. 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 <12.m08.2013>
  • org-agenda-ignore-properties
  • [X] mandado parche el <23.m08.2013>
  • 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)

3.1.39. salen cadenas UTF-8 raras en las fechas

Esto el <27.m07.2017> 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 „?“

  1. Doble clic un algo con utf-8 en urxvt.
  2. 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 tipo HTML_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 <09.m11.2019 00:07>
    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 reprobar
    • me 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
    • 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 <06.m05.2022 12:45>

    "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 <23.m12.2022> 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

  • <10.m11.2022> 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) […]

  • <28.m12.2022 11:50> tras actualizar emacs y org:

    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 <07.m12.2022> 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 por self-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 <03.m07.2023> 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
    • 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
  • actualicé org más adelante <24.m07.2023>, y nuevo emacs (revisión git 89558533683)
    • 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
    • <02.m08.2023> veo que sigue
  • 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 <26.m01.2024>, 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(-)

  • <02.m12.2022 06:17> lo mando a lista de org-mode, „[BUG] Shift-up/down move the cursor to end of timestamp“
  • <07.m12.2022> ¡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í
  • <28.m12.2022 10:46> mandé respuesta a lista org-mode: ver: „Radio links work only in small numbers“
    • ahí explico mi sistema
    • lo podría publicar en algún lado
    • […]

      1. 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

      […]

3.1.61. IS petada <23.m05.2023> 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
    • <27.m05.2023 12:18> lo envío a lista org-mode, „[BUG] wrong-type-argument syntax-table-p "Syntax table including \"@\" and \"_\" as word constituents.“
    • <29.m05.2023 19:14> compruebo que Ihor lo ha arreglado

3.1.62. no exporta <28.m06.2023>

  • 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"

  • <26.m01.2024> 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
  • <26.m03.2024> 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

  • <13.m05.2024 12:05>

    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 <21.m05.2024 09:13>
  • 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 <15.m01.2010 19:30>
    ya lo tengo montado y va bien; sólo me falta publicarlo

Se puede poner en http://orgmode.org/worg/org-hacks.php El <27.m01.2009 12:33> 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 <15.m01.2010 19:27>
    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 <15.m01.2010 19:28>
    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).

  • <17.m01.2010 11:52>: mandado a lista.
  • Nadie contesta; tendré que ponerme yo.
  • <11.m03.2010 13:32>: 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

Ej:

hola, Este fichero se ve mejor abriendo emacs.org con org-mode (Emacs) ; Ahora (<01.m09.2009>) se muestra

{{{input-file}}}

en vez de interpretarse (→ emacs.org).

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 <06.m10.2009 16:33>
    Carsten me propuso alternativa funcional; ver abajo.

Ver mi mensaje del <06.m10.2009 01:55> 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, <12.m01.2013 01:11>

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

<21.m01.2010>.

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
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
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 <23.m04.2011>: 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.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 <27.m04.2011>
  • 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
  • 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 <23.m11.2011> 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

CLOCK: <20.m07.2009 18:20>–<20.m07.2009 18:31> => 0:11

Ver: 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í…

3.3.1.1.3.1. Ej:Para cambiar * por TAB
(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 <30.m08.2008> Lo empiezo usando exportador de muse.

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 <23.m02.2009 09:46>
    no me ayuda mucho; de todas formas no traduce enlaces, etc. Creo además que no está actualizado mucho. Y prefiero ELisp :-)
3.3.1.4. IS ¡publicar de una vez el código parcial!
3.3.1.5. versión final, sin acabar, de exportador de muse a org

Al final ha quedado publicado así y aquí:

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? :-)

<09.m12.2009>

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:

  1. A java specific implementation of `semantic-tag-include-filename' to turn 'org.slf4j.Logger' into 'org/slf4j/Logger.java' (or whatever)
  2. We need some sort of EDE/JDEE integration wrapper, like ede-emacs.el perhaps.

4.3. IS que el CEDET independiente y el CEDET integrado en tronco de Emacs sean el mismo

  • CONCLUSIÓN escrita el <22.m06.2024 21:57>
    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 <19.m05.2009 11:25>
    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 <19.m05.2009 11:25>
    bueno, lo metió en 2.4, que es mejor

Creo que no.

5.3.1.1. <13.m05.2009>: hay rama 2.4

6. gnus

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 <09.m02.2009 13:53>

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 <18.m05.2009 19:56>
    dijeron que no se arreglaría, más o menos

6.4. MALFAR quiero que ofrezca crear directorios

  • CONCLUSIÓN escrita el <18.m05.2009 20:01>
    ignorado por ahora; me tocará hacerlo yo

Mandado el <06.m04.2009 14:51> a gnus-general

6.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 <24.m01.2022> 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 a progn
  • 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
    • 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

7.1.4. IS arreglar en mi Emacs

7.1.5. IS avisar a Wanderlust y ver si lo solucionan

  • CONCLUSIÓN escrita el <28.m10.2010 19:23>
    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 <04.m08.2010>.

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 <25.m04.2011 22:59>
    (setq ssl-certificate-verification-policy 1) ; lo soluciona todo

Me pasa desde el <10.m04.2011> 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:

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: archive
  • rm 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

git clone git://git.code.sf.net/p/emacs-jabber/git emacs-jabber

10.1. IS cuando se cierra conexión Jabber y se reabre, no va

  • CONCLUSIÓN escrita el <03.m02.2009 21:31>
    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 <18.m05.2009 19:51>
    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 <22.m08.2014> 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 <15.m10.2013> ← 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)
  • [X] leer código
  • [] (setq gnutls-log-level 2)

10.4. IS no conecta m4.2017, por parámetros de TLS/SSL otra vez

  • CONCLUSIÓN escrita el <14.m05.2019 22:47>
    ¡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 <20.m05.2017> 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

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:
    1. abrir helm para ficheros (helm-for-files)
    2. seleccionar varios (C-espacio, ó M-m ó M-a)
    3. apretar C-s
    4. teclear
    5. 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 <13.m02.2012 19:58>
    parece que ya va; ha pasado mucho tiempo

Me pasa el <15.m06.2010> 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 <13.m02.2012 20:00>
    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“.

  • <23.m01.2024> 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

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

11.17. „zone“ no combina bien con „helm“

  1. open frame X
  2. let 2 idle minutes pass. „zone“ will be enabled
  3. without focusing X, open frame Y. „zone“ won't stop
  4. in Y, press the key that opens helm. helm will appear in X, not in Y (this is the bug). And „zone“ will stop
  5. press the key again (in Y), it will close it in X, saying „Aborting an helm session running in background“
  6. 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

13. otras cosas de Emacs