Я написал интерактивную функцию, которая вставляет «символ над точкой» в текущую строку. Например, учитывая строку, содержащую «12345», за которой следует строка «abcdef» и точку, расположенную на букве «c», при копировании вниз вторая строка станет «ab3cdef». повторное копирование приведет к тому, что вторая строка станет "ab34cdef".
Моя функция не работает (с использованием GNU Emacs 23.3.1 под windows 7) во второй раз, когда я вызываю ее, вставляя текст из первого вызова и не продвигаясь должным образом. Если я помещаю какие-либо "манипуляции" в emacs между вызовами, это работает нормально. (Например, если я делаю копирование вниз, «стрелка влево», «стрелка вправо», копирование работает нормально для обоих вызовов.)
Вот моя функция:
(defun copy-down ()
"Grab the character in the line above and insert at the current location."
(interactive)
(let ((beg (progn (previous-line 1) (point)))
(end (progn (forward-char) (point))))
(backward-char)
(next-line 1)
(insert-buffer-substring (current-buffer) beg end)))
Если это имеет значение, я обычно привязываю свою функцию к клавише: (global-set-key [f5] 'copy-down)
PS. Я привык использовать эту возможность в редакторе, который использовал до перехода на emacs много лет назад, и мне не хватает его в GNU Emacs. : - (