Comment convertir des lignes en liste de contrôle en mode organisationnel?

12

Supposons que j'ai la liste suivante. Je voudrais le convertir en liste de contrôle.

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

Comment faire?

(Je l'ai fait en utilisant kbd-macro. Je me demande s'il y a une orgcommande pour le faire?)

pseudo
la source
Il existe de nombreuses façons et la rapidité est subjective. J'utiliserais multiple cursorsou query-search-replace. En convertissant en liste de contrôle, vous voulez simplement ajouter les lignes avec [ ], n'est-ce pas?
Kaushal Modi,
Oui. Pouvez-vous montrer brièvement comment utiliser multiple cursorsou query-search-replace?
Nick
Voici une explication détaillée de la façon d'utiliser multiple-cursorspour effectuer la recherche-remplacer. Cela s'appliquerait également à ce cas.
Kaushal Modi
Les recherches Web rapides font apparaître les liens multiple-cursorset la page de manuel sur le remplacement de requête . Beaucoup de ces informations sont très bien documentées et ne sont qu’une recherche sur le Web.
Dan
Je vous remercie. Il semble être avancé et un peu complexe. J'ai besoin de me familiariser avec ces commandes / outils.
Nick

Réponses:

23

La façon la plus simple à laquelle je pouvais penser:

  1. Sélectionnez la liste.
  2. Déplacez le point sur la première colonne.
  3. C-x r t- [ ]RET

Vous avez terminé.

wvxvw
la source
1
Hou la la! L'édition rectangle est si simple mais puissante! Je vous remercie!
Nick
Tellement génial. Très utile pour la conversion des listes de contrôle.
OrgAddict
11

Tout d'abord, quelques sémantiques pour plus de clarté. Dans org-mode, une liste simple est soit ordonnée, soit non ordonnée, commençant par a -, +ou *(pour non ordonnée), ou un nombre suivi de a .ou a )(pour ordonné). Donc: la "liste" que vous décrivez dans votre exemple n'est pas encore une org-modeliste, car elle ne commence par aucune de ces puces.

Deuxièmement, je suppose que par "liste de contrôle" vous voulez dire les cases à cocher qui org-modeutilisent dans ses listes simples, comme dans:

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

Voici une fonction très simple qui convertira toutes les lignes de la région sélectionnée en une liste non ordonnée avec des cases à cocher (pas largement testée, mais fonctionne sur votre exemple):

(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))))
Dan
la source
7

Vous trouverez ci-dessous une autre façon amusante de transformer du texte en org-modeliste de contrôle.

Utiliser des blocs de code en mode organisationnel pour convertir du texte en liste de cases à cocher

Remarque: pour générer les résultats, utilisez C-c C-clorsque le curseur se trouve dans un bloc de code.
Répondez ensuite yeslorsque vous y êtes invité.

  1. Enveloppez votre liste dans un bloc dynamique nommé

    #+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. Écrivez un org-modebloc de code dans votre langage de programmation préféré.

    Exemple 1 - Utilisation d'un elispbloc de code

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

    Exemple 2 - Utilisation d'un perlbloc de code

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

    Exemple 3 - Utilisation d'un bashbloc de code

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

    Exemple 4 - Utilisation d'un pythonbloc de code

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

    Exemple 5 - Utilisation d'un rubybloc de code

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

Merci d'avoir posé votre question!

J'espère que cela a aidé!

Remarque: Ce code a été testé à l'aide des versions suivantes d'emacs et du mode org.

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)
Melioratus
la source
6

Utilisation de la recherche et du remplacement:

M-%Lec Enter - [] Lec Enter

Notez qu'il y a des espaces autour de la case à cocher, bien qu'ils n'apparaissent pas bien ici.

user2699
la source
Cela fonctionne également très bien. Désolé, je ne peux en marquer qu'une comme réponse, donc je ne peux que voter. Merci beaucoup.
Nick
3

En mode Evil ou Spacemacs, vous pouvez le faire, en supposant que vous n'avez pas modifié les raccourcis clavier par défaut:

  1. En état Normal (équivalent au mode Normal de Vim), déplacez le curseur au début de la première ligne de votre liste.

  2. Appuyez sur Ctrl+ v.

  3. Appuyez june fois pour chaque ligne restante dans votre liste. (Vous pouvez également saisir le nombre de lignes restantes dans votre liste, suivi de la jtouche. Par exemple, pour votre exemple:. 24j)

  4. Appuyez sur Shift+ i.

  5. Tapez - [ ].

  6. Appuyez sur Esc.

sampablokuper
la source