Come convertire le linee in un elenco di controllo in modalità organizzazione?


12

Supponiamo che io abbia il seguente elenco. Vorrei convertirlo in una lista di controllo.

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

Come farlo?

(L'ho fatto usando kbd-macro. Mi chiedo ci sia un orgcomando per farlo?)


Ci sono molti modi e la rapidità è soggettiva. Vorrei usare multiple cursorso query-search-replace. Convertendo in check list, intendi semplicemente anteporre le righe con [ ], corretto?
Kaushal Modi,

Sì. Puoi mostrare brevemente come usare multiple cursorso query-search-replace?
Nick,

Ecco una spiegazione dettagliata di come utilizzare multiple-cursorsper eseguire la sostituzione della ricerca. Ciò si applicherebbe anche a questo caso.
Kaushal Modi,

Le ricerche rapide sul Web visualizzano i collegamenti multiple-cursorse la pagina di manuale su Sostituisci query . Molte di queste cose sono davvero ben documentate ed è solo una ricerca sul web.
Dan

Grazie. Sembra essere avanzato e un po 'complesso. Ho bisogno di familiarizzare con quei comandi / strumenti.
Nick,

Risposte:


23

Il modo più semplice che mi viene in mente:

  1. Seleziona la lista
  2. Sposta il punto sulla prima colonna.
  3. C-x r t- [ ]RET

Hai fatto.


1
Wow! La modifica del rettangolo è così semplice ma potente! Grazie!
Nick,

Così fantastico. Molto utile per la conversione di liste di controllo.
OrgAddict,

11

Innanzitutto, alcune semantiche per chiarezza. In org-mode, un elenco semplice è ordinato o non ordinato, a partire da a -, +o *(per non ordinato) o da un numero seguito da a .o a )(per ordinato). Quindi: la "lista" che descrivi nel tuo esempio non è ancora una org-modelista, perché non inizia con nessuno di questi proiettili.

In secondo luogo, presumo che per "elenco di controllo" intendi le caselle di controllo che org-modeutilizzano nei suoi elenchi semplici, come in:

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

Ecco una funzione molto semplice che converte tutte le linee nella regione selezionata in un elenco non ordinato con caselle di controllo (non ampiamente testate, ma funziona sul tuo esempio):

(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

Di seguito è riportato un altro modo divertente per trasformare il testo in una org-modelista di controllo.

Utilizzare i blocchi di codice in modalità Org per convertire il testo in un elenco di caselle di controllo

Nota: per generare i risultati utilizzare C-c C-cmentre il cursore si trova all'interno di un blocco di codice.
Quindi rispondere yesquando richiesto.

  1. Avvolgi l'elenco all'interno di un blocco dinamico denominato

    #+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. Scrivi un org-modeblocco di codice nel tuo linguaggio di programmazione preferito.

    Esempio 1 : utilizzo di un elispblocco di codice

    #+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
    

    Esempio 2 : utilizzo di un perlblocco di codice

    #+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
    

    Esempio 3 : utilizzo di un bashblocco di codice

    #+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
    

    Esempio 4 : utilizzo di un pythonblocco di codice

    #+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
    

    Esempio 5 - Utilizzo di un rubyblocco di codice

    #+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
    

Grazie per aver posto la tua domanda!

Spero che abbia aiutato!

Nota: questo codice è stato testato usando le seguenti versioni di emacs e 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

Utilizzando cerca e sostituisci:

M-%Lec Enter - [] Lec Enter

Nota che ci sono spazi attorno alla casella di controllo, anche se non vengono visualizzati bene qui.


Anche questo funziona molto bene. Mi dispiace, posso solo segnarne uno come risposta, quindi posso solo votare. Grazie mille.
Nick,

3

In modalità Evil o Spacemacs puoi farlo, supponendo di non aver modificato i tasti di scelta rapida predefiniti:

  1. Nello stato Normale (equivalente alla modalità Normale di Vim), sposta il cursore all'inizio della prima riga dell'elenco.

  2. Premi Ctrl+ v.

  3. Premere juna volta per ogni riga rimanente nell'elenco. (In alternativa, digita il numero di righe rimanenti nel tuo elenco, seguito dal jtasto. Ad esempio per il tuo esempio:. 24j)

  4. Premi Shift+ i.

  5. Tipo - [ ].

  6. Press Esc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.