Как преобразовать строки в контрольный список режима орг?

12

Предположим, у меня есть следующий список. Я хотел бы преобразовать его в контрольный список.

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

Как это сделать?

(Я сделал это с помощью kbd-macro. Интересно, есть ли orgкоманда для этого?)

Ник
источник
Есть много способов и быстрота субъективна. Я бы использовал multiple cursorsили query-search-replace. Преобразовав в контрольный список, вы хотите просто добавить строки с помощью [ ], правильно?
Каушал Моди
Да. Вы можете кратко показать, как использовать multiple cursorsили query-search-replace?
Ник
Вот подробное объяснение того, как использовать multiple-cursorsдля поиска-замены. Это относится и к этому делу.
Каушал Моди
Быстрый поиск в Интернете приводит к появлению ссылок multiple-cursorsи справочной страницы по Query Replace . Многие из этих вещей действительно хорошо документированы, и это просто поиск в сети.
Дан
Спасибо. Это кажется продвинутым и немного сложным. Мне нужно ознакомиться с этими командами / инструментами.
Ник

Ответы:

23

Самый простой способ, которым я мог придумать:

  1. Выберите список.
  2. Переместите точку в первый столбец.
  3. C-x r t- [ ]RET

Вы сделали.

wvxvw
источник
1
Вот Это Да! Редактирование прямоугольника настолько простое, но мощное! Спасибо!
Ник
Такой классный Очень полезно для преобразования контрольных списков.
OrgAddict
11

Сначала немного семантики для ясности. В org-mode, А обычный список либо заказать или неупорядоченный, начиная с либо -, +или *(для неупорядоченного), или номера с последующим либо .или )(для заказа). Итак, «список», который вы описываете в своем примере, еще не является org-modeсписком, потому что он не начинается ни с одной из этих позиций.

Во-вторых, я предполагаю, что под «контрольным списком» вы подразумеваете флажки, которые org-modeиспользуются в его простых списках, как в:

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

Вот очень простая функция, которая преобразует все строки в выбранном регионе в неупорядоченный список с флажками (не тестировался подробно, но работает на вашем примере):

(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

Ниже приведен еще один интересный способ превратить текст в org-modeконтрольный список.

Используйте кодовые блоки режима Org для преобразования текста в список флажков

Примечание. Для генерации результатов используйте C-c C-cкурсор, находящийся в блоке кода.
Затем ответьте, yesкогда будет предложено.

  1. Оберните свой список в названном динамическом блоке

    #+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. Напишите org-modeблок кода на вашем любимом языке программирования.

    Пример 1. Использование блока elispкода

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

    Пример 2 - Использование perlблока кода

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

    Пример 3 - Использование bashблока кода

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

    Пример 4 - Использование pythonблока кода

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

    Пример 5 - Использование rubyблока кода

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

Спасибо за вопрос!

Надеюсь, что это помогло!

Примечание. Этот код был протестирован с использованием следующих версий emacs и 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)
Melioratus
источник
6

Используя поиск и замену:

M-%Lec Enter - [] Lec Enter

Обратите внимание, что вокруг флажка есть пробелы, хотя они здесь плохо видны.

user2699
источник
Это также работает очень хорошо. Извините, я могу отметить только один ответ, поэтому я могу только голосовать. Большое спасибо.
Ник
3

В злом режиме или Spacemacs вы можете сделать это, предполагая, что вы не изменили привязки клавиш по умолчанию:

  1. В нормальном состоянии (эквивалентном нормальному режиму Vim) переместите курсор в начало первой строки в вашем списке.

  2. Нажмите Ctrl+ v.

  3. Нажмите jодин раз для каждой оставшейся строки в вашем списке. (Либо введите количество оставшихся строк в списке, а затем нажмите jклавишу. Например, для вашего примера:. 24j)

  4. Нажмите Shift+ i.

  5. Тип - [ ].

  6. Нажмите Esc.

sampablokuper
источник