#+TITLE: Емакс и режим Орг #+AUTHOR: М. А. Крышень * Введение В 1968 г. состоялась знаменитая демонстрация Дугласа Энгельбарта ([[https://en.wikipedia.org/wiki/The_Mother_of_All_Demos][The Mother of All Demos]]), в которой он представил систему NLS. В начале 70-x Аланом Кэем и лабораторией PARC, которая занималась развитием идей Энгельбарта, был разработан наивный ориентированный на детей графический интерфейс с перекрывающимися окнами. Повсеместное распространение этого интерфейса Кэй позже назвал недоразумением. «Наша идея заключалась в том, чтобы позволить детям начать с довольно простого, наивного интерфейса, предполагая дальнейший рост до уровня эффективности NLS... Я могу охарактеризовать то, что мы имеем сегодня, как прекрасный велосипед с приставными колесами, и никто не знает про эти колеса, поэтому никто не пытается их снять.» (из очень любопытного разговора с участием Дугласа Энгельбарта, Алан Кэя, Теда Нельсона и Тима Бернерса-Ли: [[http://worrydream.com/refs/Vannevar%20Bush%20Symposium%20-%20Closing%20Panel.html][текст]], [[https://archive.org/details/XD1941_10_95VannevarBushSymTape11_2ndDayPanelDis][видео]]). Емакс — велосипед без приставных колес, система, которая *поощряет обучение*, отголосок утраченного мира взрослых компьютеров. * Режим Орг [[http://orgmode.org/][Орг]] — одна из наиболее интересных возможностей Емакс. Орг работает со структурированным гипертекстом и позволяет выполнять различные задачи: - управление персональной информацией (планирование, заметки и др.), - подготовка документов, - создание презентаций, - обработка данных (электронные таблицы и встроенные фрагменты кода на различных языках), - создание веб-страниц и ведение блога, - [[https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5][грамотное программирование]]. Для учебного процесса может представлять интерес возможность вставки в документ «живых» фрагментов кода на различных языках программирования. * Работа с блоками кода Документ Орг может содержать блоки кода, которые можно тут же редактировать и выполнять. Редактировать код можно непосредственно в буфере Орг или в отдельном буфере в режиме редактирования соответствующего языка программирования (с автоматической расстановкой отступов и подсветкой синтаксиса). Для редактирования в отдельном буфере нужно поместить курсор в блок кода и нажать C-c '. Повторное нажатие этой комбинации применит изменения. Для выполнения кода нужно нажать C-c C-c (котрол-си два раза) и разрешить выполнение («yes»). По умолчанию поддерживается только Емакс Лисп. Остальные языки нужно включать в настройках. Поддержка Си и Шелл добавлена в настройки по умолчанию на компьютерах кафедры. В любом случае, поддержку Си и Шелл можно включить, выполнив следующий блок кода: #+begin_src emacs-lisp :results silent (org-babel-do-load-languages 'org-babel-load-languages '((C . t) (sh . t))) #+end_src Пример блока на Шелл: #+begin_src sh :results scalar echo "Hello, world!" #+end_src Пример блока на Си (можно выполнить и увидеть результат): #+begin_src C :includes int a = 1; int b = 2; printf("%d\n", a + b); #+end_src Таким образом, в Орг можно писать указания для студентов с живыми примерами и встроенными заданиями. Еще пример: вывод блока можно представить в виде таблицы. Получим список студентов: #+begin_src sh :results vector curl http://cs.petrsu.ru/~akolosov/emacs/stud_example.txt #+end_src Таблицу можно отредактировать: добавить шапку, колонки с баллами и формулу (в последней колонке сумма значений от третьей до предпоследней, чтобы пересчитать значение этой колонки нажмите =C-u C-c *=). | Группа | ФИО | 1 | 2 | 3 | 4 | 5 | 6 | Сумма | |--------+---------------------------------+---+---+-----+-----+-----+-----+-------| | 22133 | Мышкин Лев Николаевич | 2 | 1 | 1/2 | 1/4 | | | 3.75 | | 22133 | Барашкова Настасья Филипповна | 2 | 2 | 2 | 8 | | 1 | 15 | | 22134 | Разумихин Дмитрий Прокофьич | 2 | 2 | 4 | 8 | 12 | 4 | 32 | | 22134 | Раскольников Родион Романович | 2 | 2 | 1 | 8 | 3 | 4 | 20 | | 22135 | Ставрогин Николай Всеволодович | 2 | 1 | 4 | 8 | 3/2 | 4 | 20.5 | | 22135 | Верховенский Пётр Степанович | 2 | 4 | 4 | 8 | 3 | 1/2 | 21.5 | | 22136 | Карамазов Дмитрий Федорович | 2 | 3 | 4 | 8 | 3 | 4 | 24 | | 22136 | Светлова Аграфена Александровна | 2 | 2 | 4 | 8 | | | 16 | |--------+---------------------------------+---+---+-----+-----+-----+-----+-------| #+TBLFM: $>=vsum($3..$>>) Результат можно скопировать и выслать: это просто текст, к которому применимы любые команды для работы с текстом, но доступны и специальные команды (вставка и удаление столбцов и строк и др.). * Экспортирование документа Документ можно преобразовать в различные форматы (LaTeX, PDF, HTML, OpenDocument и др.). Диалог экспортирования открывается комбинацией =C-c C-e=. * Примеры использования на кафедре - [[http://cs.petrsu.ru/~akolosov/net_mgmt/][Страница с/к «Сетевое управление»]] полностью сделана [[http://cs.petrsu.ru/~akolosov][Александром Колосовым]] в Орг (включая презентации). - [[http://kappa.cs.karelia.ru/~kryshen/nest/doc/howto.html][Инструкция для разработчиков Нест]]. - [[http://www.cs.petrsu.ru/studies/methodwork/oo_kryshen.doc][ЭУМКД «Объектно-ориентированный анализ и программирование»]] (экспортировано в Офис из Орг). - Подсчет баллов студентов (пример выше). * Задачи ** DONE Пример использования Орг SCHEDULED: <2014-08-25 Пн> ** TODO Изучить пример Чтобы пометить задачу как выполненную нажмите =C-t=, находясь внутри нее. DEADLINE: <2014-09-01 Пн> #+STARTUP: showall #+LANGUAGE: ru #+LATEX_HEADER: \usepackage[english,russian]{babel} #+LATEX_HEADER: \hypersetup{unicode=true}