Как я могу найти окружающие символы в выбранной области в Emacs?

Мой вопрос возник из-за того, что я ожидаю, что функция могла бы преобразовать таблицу в режиме org в диаграмму ditaa. Что я пытаюсь сделать, это:

  1. найти "|" если есть "-" слева / справа / выше / ниже, измените его на "+"
  2. найти "+", если нет "|" Слева / справа / выше / ниже, измените его на "-"

Может кто-нибудь показать мне, как искать символ выше / ниже или всю функцию?

2 ответа

Вы можете использовать такую ​​функцию, чтобы проверить, что находится в следующей строке:

(defun get-char-on-next-line (&optional point)
  "Return the character one line down from POINT.
If POINT is nil or omitted, use the current position of point."
  (save-excursion
    (when point
      (goto-char point))
    (let ((column (current-column))
          (line-move-visual nil))
      ;; next-line preserves the current column if possible
      (next-line)
      (when (= column (current-column))
        (char-after)))))

замещать next с previous для противоположной функции.

Во-первых, скажите спасибо @legoscia за оригинальное решение.

Когда я пытаюсь (следующая строка)/(предыдущая строка) у меня возникают некоторые проблемы, такие как "конец буфера, начало буфера". Затем я искал в руководстве elisp. Он предлагает использовать прямую линию. Тогда я получил свое решение здесь:

(defun get-char-below (&optional point)
  "Return the character one line down from POINT.
If POINT is nil or omitted, use the current position of point."
  (save-excursion
    (when point
      (goto-char point))
    (let ((column (current-column)))
      (if (= (forward-line 1) 0)
          (if (= column (move-to-column column))
            (char-after)
          nil)
        nil))))
Другие вопросы по тегам