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, …

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í).

18.m10.2017 (desde 2009), en 2017 esta página necesita ligeras actualizaciones. 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 BONUS 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

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.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.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 ATENDAS 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 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.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::Esto son pruebas de Common Lisp Va bien usar Slime en Emacs para esto

1.5.1.1 BONUS 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

  • está cache-long-scans, que dicen que si se pone a t acelera las largas (pero enlentece las cortas)

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

3.1.1 2 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 two= *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 BONUS 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.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 BONUS 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 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.8 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.9 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.9.1 ejemplo sin „∀i“   uno dos tres

(org-get-tags-string)

3.1.9.2 ejemplo con „∀i“, no va :uno:dos:∀i:tres:
3.1.9.3 ejemplo con „útil“, sí que va   interesante útil bonito
3.1.9.4 uno que no va por tener una barra :a/b:
3.1.9.5 intento poner dos puntos   a b
3.1.9.6 con letras no latinas, menos mal que funciona   прекрасное
3.1.9.7 paréntesis :(abc):
3.1.9.8 con coma   a b
3.1.9.9 con punto :a.b:
3.1.9.10 con más   a b
3.1.9.11 con arroba   yo@aquí

3.1.10 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.10.1 cómo detectar enlaces mal creados
revisar:   grep "file:~/repoweb" *.org
revisar:   grep "\[\[.*.org\]\]" *.org

3.1.11 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.12 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.13 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.14 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.14.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.14.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.14.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.14.3 cuando org abre mis 200 ficheros de agenda, quien es lento es git, no es tanto culpa de vc-mode ni de org
  • 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.14.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.14.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.14.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

Está éste, más rápido:

git status -z --porcelain <file>

Pero necesita 1.7.0

3.1.14.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.14.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.14.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.14.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.14.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.14.3.5.1 desactivar vc en org
3.1.14.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.15 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.16 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.17 BONUS la exportación a taskjuggler ha de evitar generar ficheros con 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.18 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.19 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.20 ATENDAS org-adapt-indentation ha cambiado, ahora mete espacios en 1ª columna.

3.1.20.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:
Nicolas Girard is taking this up with TeX people
:END:
3.1.20.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.20.3 lo que sea pero tiene que haber 3ª opción en org-adapt-indentation
3.1.20.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.20.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.21 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.22 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.23 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.24 ATENDAS error al tomar categorías; lleva ya muchos meses

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.25 al cronometrar, se queja de ¬dbus (y es cierto, no lo tengo); es por notifications

3.1.25.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.26 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.27 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.28 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.29 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.30 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.31 „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 make_uri read_from_x_primary_selection spec"><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.32 IS Invalid search bound (wrong side of point), lo dice al exportar (HTML)

3.1.33 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.34 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.2 cosas nuevas que quiero

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
3.2.14.6.4 BONUS uno que cuenta bytes

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

3.2.17.1 IS org-depend

org-depend es muy bueno: http://orgmode.org/worg/org-contrib/org-depend.php 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.2 org-edna, más complejo que org-depend
3.2.17.3 el sistema de dependencias que necesito

Es para descubrir cosas:

  • mapa global de dependencias
  • 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.3 proyectos grandes sobre org-mode

3.3.1 IS conversor de muse a org

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 BONUS 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 BONUS que el CEDET independiente y el CEDET integrado en tronco de Emacs sean el mismo

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 BONUS 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 BONUS 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

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:

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

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.

11 anything/helm

11.1 ¿gestor de tareas o de fallos?

11.2 cosas que le faltan (o no sé hacer)

  • marcar búfer principal/actual e ir ahí fácilmente
    • quizás con helm-bookmark

11.3 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
    2. seleccionar varios (C-espacio, ó M-m ó M-a)
    3. apretar C-s
    4. teclear
    5. veo resultados de entre los búfers seleccionados

11.4 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.5 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.5.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.6 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.7 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.8 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.9 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.10 BONUS 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“.

11.11 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.12 IS me salen mensajes de error mezclados con resultados

11.13 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.14 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.

12 muchas ideas más gordas que dan trabajo para varios meses