Как я могу скопировать конец строки, начинающейся на одну строку выше курсора? - PullRequest
0 голосов
/ 16 декабря 2009

Я хочу скопировать строку над курсором, но только от текущего столбца до конца этой строки.

Вот иллюстрация:

photo of before action

photo of result of action

Это была моя попытка, но она не очень хорошо работает: - (

(defun dupchar()
  (save-excursion
    (line-move (-1) nil nil nil)
    (setq mychar (thing-at-point 'char))
    (insert mychar))

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

Попробуйте что-то вроде этого.

(defun dupchar ()
  (interactive)
  (let ((char-above (save-excursion
                      (line-move -1)
                      (following-char))))
    (unless (eq char-above ?\n)
      (insert char-above))))

(define-key global-map [(meta \")] 'dupchar)

Несколько комментариев к функции, которую вы написали:

  1. Вам нужно использовать (interactive) в противном случае вы не можете связать функция клавиши.

  2. Это не очень хорошая идея, чтобы просто случайные setq вещи - которые создают глобальная переменная. В этом случае вы вообще не нужна переменная; вы может использовать возвращаемое значение от save-excursion. (В более поздней версии этого мне нужно было использовать let.)

  3. Скобки вызывают функцию в (e) lisp, так что вам нужно использовать -1 вместо (-1).

  4. 2-й-4-й аргументы 'line-move по умолчанию будут nil, поэтому их не нужно указывать.

(Примечание: я изменил это, чтобы остановить в конце строки; опять трудно понять, что вы написали, но это мое лучшее предположение.)

0 голосов
/ 17 декабря 2009

не уверен, что вы намеревались скопировать весь конец предыдущей строки одним нажатием клавиши. По крайней мере, я подумал, что это будет полезно, поэтому я изменил код Николаса (спасибо!) До dupline:

(defun dupline ()
  (interactive)
  (let ((line-above-tail (save-excursion
                           (line-move -1)
                           (buffer-substring-no-properties (point) (line-end-position)))))
    (unless (eq line-above-tail ?\n)
      (insert line-above-tail))))

Копирование в конец строки было вдохновлено Как мне дублировать всю строку в Emacs?

...