LINUX.ORG.RU

elisp


0

2

В org-mode таблицы в сборках под виндовс (23.2, 23.3) создаются таким образом, что все строки располагаются в одной строке. я сначала думал, что может для виндовса используется неверный символ перевода строки - вместо «\n» надо «\r\n», но попробовав для теста

(insert "\nHello, ELisp!")

вижу, что «\n» работает. Может, есть какой-то меxанизм глобальный, который отключает переводы строк? Перепробовал разные моды для таблиц, везде проблема одна и таже - строки в одну строку лепятся.

В самом коде создания таблицы криминала не вижу:

emacs/lisp/org/org-table.el:

(defun org-table-create (&optional size)
  "Query for a size and insert a table skeleton.
SIZE is a string Columns x Rows like for example \"3x2\"."
  (interactive "P")
  (unless size
    (setq size (read-string
    (concat "Table size Columns x Rows [e.g. "
      org-table-default-size "]: ")
    "" nil org-table-default-size)))

  (let* ((pos (point))
   (indent (make-string (current-column) ?\ ))
   (split (org-split-string size " *x *"))
   (rows (string-to-number (nth 1 split)))
   (columns (string-to-number (car split)))
   (line (concat (apply 'concat indent "|" (make-list columns "  |"))
           "\n")))
    (if (string-match "^[ \t]*$" (buffer-substring-no-properties
          (point-at-bol) (point)))
  (beginning-of-line 1)
      (newline))
    ;; (mapcar (lambda (x) (insert line)) (make-list rows t))
    (dotimes (i rows) 
      (insert line))
    (goto-char pos)
    (if (> rows 1)
        ;; Insert a hline after the first row.
        (progn
          (end-of-line 1)
          (insert "\n|-")
          (goto-char pos)))
    (org-table-align)))

★★

Странно.

Попробуй insert в тот буфер, куда таблица вставляется, сделать.

(with-current-buffer "буфер. где таблица"
  (goto-char (point-max))
  (insert "\ntest\n")
  (insert "\ntest\n"))
Zubok ★★★★★
()

Подписался — очень уж интересно :)

Некоторое время пользовался emacs´ом под виндой, не припоминаю таких проблем. Emacs брал не с gnu.org, а сборку с какими-то патчами. Хотя вряд ли это из-за сборки…

o
()
Ответ на: комментарий от Zubok

Попробуй insert в тот буфер, куда таблица вставляется, сделать.

До включения org-mode переносы строки вставляются, после включения в одну строку «test test».

Reaper ★★
() автор топика
Ответ на: комментарий от recon88

под edebug смотрел?

Если честно, не умею. Почитал, запустил edebug-defun на примере выше, по мере вставок «\ntest\n» оно их печатало с новой строки, по завершению дебага слепило в одну строку «test test». Как по шагам пройти org-table-create из модуля, не понял и не знаю что именно смотреть.

Reaper ★★
() автор топика
Ответ на: комментарий от Reaper

>До включения org-mode переносы строки вставляются, после включения в одну строку «test test».

Попробую предположить. У тебя org-mode случайно не включает автоматически некий minor режим по умному переносу строк типа longlines-mode?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Да, спасибо, оно. На text-mode-hook повешено включение longlines-mode, из-за этого запуск org-mode запускает longlines-mode. Поправил.

Reaper ★★
() автор топика
Ответ на: комментарий от Reaper

Ага, угадал. :)

Попробуй вместо longlines-mode включить visual-line-mode. Насколько я помню, этот режим в Emacs 23 должен заменить longlines. Может, с ним конфликта не будет? Я проверить не могу - у меня еще 22-й, а ставить неохота.

Zubok ★★★★★
()
Ответ на: комментарий от ott

Поставить 24-ый (даже trunk) все равно придется, так как недавно подписал бумаги с FSF, которые они мне прислали. Теперь от меня FSF может патчи принимать, а проверять все надо на актуальной девелоперской версии Emacs. :)

Однако все, что мне надо, работает и на 22-м, который в oldstable в Debian. Патологически не люблю тратить время на сборку. Перееду на stable, буду пользоваться Emacs 23 оттуда. Я проверяю пару своих библиотек на разных версиях, чтобы хотя бы до 22 обратную совместимость обеспечить, так как эти версии Emacs еще используются в народном хозяйстве другими людьми и присутсвуют в текущих стабильных дистрибутивах.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.