как сделать земной copy-paste

Модератор: /dev/random

Аватара пользователя
duduk
Сообщения: 59
ОС: Ubuntu 12.04 LTS

как сделать земной copy-paste

Сообщение duduk » 04.03.2011 10:55

Приветствую.

Поскольку перехожу на emacs с eclipse, то у меня emacs настроен максимально похожим на него, т.е. cua-mode и т.п.
Такую штуку обнаружил при работе с clipboard, например я вырезал текст (Ctrl-X), потом нашел место куда его вставить, расчистил
место удалив неск строк (Ctrl-y), нажимаю вставить (Ctrl-V) и Оппаньки! - снова вставляются эти самые строки, а то что я вырезал наглым образом потеряно!
В общем надеюсь примерно понятна суть проблемы, т.е. надо бы как-то вообще убрать kill-ring или сделать его отдельно от иксовой clipboard, может кто сталкивался ?
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как сделать земной copy-paste

Сообщение watashiwa_daredeska » 04.03.2011 13:10

duduk писал(а):
04.03.2011 10:55
т.е. надо бы как-то вообще убрать kill-ring
(setq kill-ring-max 1) Думаете, это Вас спасёт и магическим образом «где-то» сохранит именно тот Ctrl-V (или Alt|Ctrl-W в Emacs), который Вы хотите, а не последний сделанный?

Чтобы удалять не захламляя kill-ring обратите внимание на функции delete-(backward-char|char|region|и пр.).
Спасибо сказали:

Аватара пользователя
duduk
Сообщения: 59
ОС: Ubuntu 12.04 LTS

Re: как сделать земной copy-paste

Сообщение duduk » 04.03.2011 23:15

watashiwa_daredeska писал(а):
04.03.2011 13:10
duduk писал(а):
04.03.2011 10:55
т.е. надо бы как-то вообще убрать kill-ring
(setq kill-ring-max 1) Думаете, это Вас спасёт и магическим образом «где-то» сохранит именно тот Ctrl-V (или Alt|Ctrl-W в Emacs), который Вы хотите, а не последний сделанный?

Чтобы удалять не захламляя kill-ring обратите внимание на функции delete-(backward-char|char|region|и пр.).


Т.е. можно попробовать переопределить все соотв биндинги чтобы вместо kill было delete ?
Я сделал попытку, но получилось не очень, например не нашел аналога для kill-whole-line.
Надеялся что может существовать более элегантное решение, может еще какая волшебная опция существует ?

Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как сделать земной copy-paste

Сообщение watashiwa_daredeska » 05.03.2011 17:50

duduk писал(а):
04.03.2011 23:15
может еще какая волшебная опция существует ?
Чтобы что? Чтобы emacs проапгрейдил X'ы и у всех магическим образом появился его kill-ring? Или как?
Сформулируйте внятно и четко алгоритм, тогда можно будет думать, как его реализовывать. Если он будет не слишком дикий, то может хватить elisp'а в ~/.emacs.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как сделать земной copy-paste

Сообщение drBatty » 05.03.2011 18:07

duduk писал(а):
04.03.2011 10:55
расчистил
место удалив неск строк (Ctrl-y)

а нельзя было удалять НЕ в буфер, а скажем в какой-нить "регистр"? ну например в vim'е можно удалить строчку так "xdd
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как сделать земной copy-paste

Сообщение watashiwa_daredeska » 05.03.2011 18:11

duduk писал(а):
04.03.2011 23:15
например не нашел аналога для kill-whole-line.
DIY:

Код: Выделить всё

(defun delete-whole-line (&optional arg)
  "Deletes current line.
With prefix ARG, delete that many lines starting from the current line.
If ARG is negative, delete backward.  Also delete the preceding newline.
\(This is meant to make \\[repeat] work well with negative arguments.\)
If ARG is zero, delete current line but exclude the trailing newline."
  (interactive "p")
  (or arg (setq arg 1))
  (print arg)
  (if (and (> arg 0) (eobp) (save-excursion (forward-visible-line 0) (eobp)))
      (signal 'end-of-buffer nil))
  (if (and (< arg 0) (bobp) (save-excursion (end-of-visible-line) (bobp)))
      (signal 'beginning-of-buffer nil))
  (cond ((zerop arg)
         (delete-region (progn (forward-visible-line 0) (point))
                        (progn (end-of-visible-line) (point))))
        ((< arg 0)
         (delete-region (save-excursion (forward-visible-line (1+ arg))
                                        (unless (bobp) (backward-char))
                                        (point))
                        (progn (end-of-visible-line) (point))))
        (t
         (delete-region (point) (progn (forward-visible-line 0) (point)))
         (delete-region (point)
                        (progn (forward-visible-line arg) (point))))))
Спасибо сказали:

Аватара пользователя
duduk
Сообщения: 59
ОС: Ubuntu 12.04 LTS

Re: как сделать земной copy-paste

Сообщение duduk » 05.03.2011 21:39

watashiwa_daredeska писал(а):
05.03.2011 17:50
duduk писал(а):
04.03.2011 23:15
может еще какая волшебная опция существует ?
Чтобы что? Чтобы emacs проапгрейдил X'ы и у всех магическим образом появился его kill-ring? Или как?
Сформулируйте внятно и четко алгоритм, тогда можно будет думать, как его реализовывать. Если он будет не слишком дикий, то может хватить elisp'а в ~/.emacs.


Вобщем цель простая: сделать emacs более приближенным к остальным редакторам, где буффер обмена один и копировать туда можно только по ctrl-c,
я думал что это вполне распространенная потребность у людей переходящих с eclipse например и есть уже готовый рецепт.

Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как сделать земной copy-paste

Сообщение watashiwa_daredeska » 07.03.2011 20:21

Вобщем цель простая: сделать emacs более приближенным к остальным редакторам, где буффер обмена один и копировать туда можно только по ctrl-c,
Как избавиться от kill-ring (тогда останется только X'овый буфер), я писал выше, хотя для меня удаление функционала — довольно сомнительное улучшение. Сделать copy/paste/cut по Ctrl-C/V/X тоже можно, если Ctrl-X и Ctrl-C — стандартные префиксы, используемые в Emacs повсеместно — перебиндить на что-нибудь другое.
Спасибо сказали:

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как сделать земной copy-paste

Сообщение t.t » 17.03.2011 22:48

И ещё, как уже заметили, можно копировать и удалять текст в регистры, а не только в kill-ring.
http://www.linux.org.ru/books/GNU/emacs/emacs_15.html
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: