¿Cómo convertir líneas a una lista de verificación del modo org?


12

Supongamos que tengo la siguiente lista. Me gustaría convertirlo en una lista de verificación.

Lec 1 |         1:20:36
Lec 2 |         1:10:32
Lec 3 |         1:08:33
Lec 4 |         1:20:33
Lec 5 |         1:16:50
Lec 6 |         1:08:49
Lec 7 |         1:17:40
Lec 8 |         1:19:47
Lec 9 |         1:21:22
Lec 10 |        1:23:52
Lec 11 |        1:23:45
Lec 12 |        1:25:32
Lec 13 |        1:19:06
Lec 14 |        1:14:28
Lec 15 |        1:11:01
Lec 16 |        1:24:07
Lec 17 |        1:24:34
Lec 18 |        1:17:17
Lec 19 |        1:14:59
Lec 22 |        1:15:08
Lec 23 |        1:16:48
Lec 24 |        1:24:47
Lec 25 |        1:25:21

¿Cómo hacerlo?

(Lo hice usando kbd-macro. Me pregunto si hay un orgcomando para hacerlo).


Hay muchas formas y la rapidez es subjetiva. Yo usaría multiple cursorso query-search-replace. Al convertir a la lista de verificación, simplemente quiere anteponer las líneas [ ], ¿correcto?
Kaushal Modi

Si. ¿Puedes mostrar brevemente cómo usar multiple cursorso query-search-replace?
Nick

Aquí hay una explicación detallada de cómo usar multiple-cursorspara hacer la búsqueda de reemplazo. Eso también se aplicaría a este caso.
Kaushal Modi

Las búsquedas web rápidas muestran los enlaces multiple-cursorsy la página del manual en Query Reemplazar . Muchas de estas cosas están muy bien documentadas y están a solo una búsqueda web.
Dan

Gracias. Parece ser avanzado y un poco complejo. Necesito familiarizarme con esos comandos / herramientas.
Nick

Respuestas:


23

La forma más simple en que podría pensar:

  1. Selecciona la lista.
  2. Mueve el punto a la primera columna.
  3. C-x r t- [ ]RET

Estás listo.


1
¡Guauu! ¡La edición de rectángulo es tan sencilla pero poderosa! ¡Gracias!
Nick

Que asombroso. Muy útil para la conversión de listas de verificación.
OrgAddict

11

Primero, algunas semánticas para mayor claridad. En org-mode, una lista simple está ordenada o desordenada, comenzando con a -, +o *(para desordenada), o un número seguido de a .o a )(para ordenada). Entonces: la "lista" que describe en su ejemplo todavía no es una org-modelista, porque no comienza con ninguna de estas viñetas.

En segundo lugar, supongo que por "lista de verificación" te refieres a las casillas de verificación que org-modeutiliza en sus listas simples, como en:

- [X] A checked list item
- [ ] An unchecked list item

Aquí hay una función muy simple que convertirá todas las líneas en la región seleccionada a una lista desordenada con casillas de verificación (no probado exhaustivamente, pero funciona en su ejemplo):

(defun org-convert-lines-to-checklist (beg end)
  "Convert all plain lines in region to a plain list with
checkboxes."
  (interactive "r")
  (save-excursion
    (goto-char beg)
    (dotimes (_ (- (line-number-at-pos end) (line-number-at-pos beg)))
      (insert "- [ ] ")
      (indent-according-to-mode)
      (forward-line 1))))

7

A continuación se muestra otra forma divertida de transformar el texto en una org-modelista de verificación.

Utilice bloques de código del modo Org para convertir texto en una lista de casillas de verificación

Nota: Para generar los resultados, use C-c C-cmientras el cursor está dentro de un bloque de código.
Luego responda yescuando se le solicite.

  1. Envuelva su lista dentro de un bloque dinámico con nombre

    #+NAME: my-list-block  
    #+BEGIN:  
    Lec 1 |         1:20:36'  
    Lec 2 |         1:10:32  
    Lec 3 |         1:08:33  
    Lec 4 |         1:20:33  
         ... More ...  
    Lec 24 |        1:24:47  
    Lec 25 |        1:25:21  
    #+END:  
    
  2. Escriba un org-modebloque de código en su lenguaje de programación favorito.

    Ejemplo 1 : uso de un elispbloque de código

    #+name: list-into-checklist-elisp
    #+header: :results list raw replace output 
    #+header: :var data=my-list-block()
    #+begin_src elisp
      (dolist (x (split-string data "\n"))
            (princ (format "[ ] %s\n" x)))
    #+end_src
    
    #+RESULTS: list-into-checklist-elisp
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Ejemplo 2 : uso de un perlbloque de código

    #+name: list-into-checklist-perl
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+begin_src perl
      map { printf qq([ ] %s\n), $_ } split(/\n/, $data); 
    #+end_src
    
    #+RESULTS: list-into-checklist-perl
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Ejemplo 3 : uso de un bashbloque de código

    #+name: list-into-checklist-bash
    #+header: :results list raw replace output
    #+header: :shebang #!/usr/bin/env bash
    #+header: :var data=my-list-block()
    #+begin_src sh
      while IFS="\n" read -ra ADDR; do
            for i in "${ADDR[@]}"; do
                echo "[X] $i"
            done
       done <<< "$data"
    #+end_src
    
    #+RESULTS: list-into-checklist-bash
    - [X] Lec 1 |         1:20:36
    - [X] Lec 2 |         1:10:32
    - [X] Lec 3 |         1:08:33
    - [X] Lec 4 |         1:20:33
    - [X]       ... More ...
    - [X] Lec 24 |        1:24:47
    - [X] Lec 25 |        1:25:21
    

    Ejemplo 4 : uso de un pythonbloque de código

    #+name: list-into-checklist-python
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src python
      l = ["[ ] {x}".format(x=row) for row in data.splitlines()]
      for i in l: print i
    #+end_src 
    
    #+RESULTS: list-into-checklist-python
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Ejemplo 5 : uso de un rubybloque de código

    #+name: list-into-checklist-ruby
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src ruby
      for l in  data.split("\n")
        puts "[ ] #{l}"
      end
    #+end_src 
    
    #+RESULTS: list-into-checklist-ruby
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

¡Gracias por hacer su pregunta!

Espero que haya ayudado!

Nota: Este código se probó utilizando las siguientes versiones de emacs y org-mode.

GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14)
Org-mode version 8.2.10 (8.2.10-29-g89a0ac-elpa)

6

Usando buscar y reemplazar:

M-%Lec Enter - [] Lec Enter

Tenga en cuenta que hay espacios alrededor de la casilla de verificación, aunque no se muestran bien aquí.


Esto también funciona muy bien. Lo siento, solo puedo marcar una como respuesta, así que solo puedo votar. Muchas gracias.
Nick

3

En el modo Evil o Spacemacs puede hacer esto, suponiendo que no haya cambiado las combinaciones de teclas predeterminadas:

  1. En estado Normal (equivalente al modo Normal de Vim), mueva el cursor al comienzo de la primera línea de su lista.

  2. Presione Ctrl+ v.

  3. Presione juna vez para cada línea restante en su lista. (Alternativamente, escriba el número de líneas restantes en su lista, seguido de la jtecla. Por ejemplo, por ejemplo:. 24j)

  4. Presione Shift+ i.

  5. Tipo - [ ].

  6. Presione Esc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.