Bug 18343

Summary: Сделать выход по ^D из apt-shell
Product: Sisyphus Reporter: Andrey Rahmatullin <wrar>
Component: aptAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: minor    
Priority: P2 CC: boyarsh, dottedmag, evg, glebfm, imz, iv, ldv, led, mike, php-coder, placeholder, rider
Version: unstableKeywords: patch
Hardware: all   
OS: Linux   
Attachments:
Description Flags
add feedback to Ctrl-D none

Description Andrey Rahmatullin 2008-12-25 11:03:07 MSK
Сделайте выход из apt-shell по ^D, а то без него неудобно.
Comment 1 Slava Semushin 2008-12-30 22:37:48 MSK
Ctrl+D в readline используется для удаления текущего символа под курсором. Если бы apt-shell не использовал libreadline, то можно было бы вручную проверять на EOF и выходить.
Comment 2 Mikhail Gusarov 2008-12-30 22:45:51 MSK
Слава, см. документацию на readline: rhttp://tiswww.case.edu/php/chet/readline/readline.html#SEC16

"delete-char (C-d) 
Delete the character at point. If point is at the beginning of the line, there are no characters in the line, and the last character typed was not bound to delete-char, then return EOF."

http://tiswww.case.edu/php/chet/readline/readline.html#SEC24

"If readline encounters an EOF while reading the line, and the line is empty at that point, then (char *)NULL is returned."

В apt-shell.cc:

line = readline(_config->Find("APT::Shell::Prompt", "apt> ").c_str());
if (!line || !*line) {
   free(line);
   continue;
}

Так что здесь всего лишь надо случай if(!line) рассмотреть отдельно.
Comment 3 Slava Semushin 2008-12-30 22:51:11 MSK
2dottedmag@: о, спасибо. Попробую сделать.
Comment 5 Slava Semushin 2008-12-31 16:47:26 MSK
*** Bug 6264 has been marked as a duplicate of this bug. ***
Comment 6 Dmitry V. Levin 2009-01-02 03:25:10 MSK
0.5.15lorg2-alt22.1
Comment 7 Ivan A. Melnikov 2009-01-03 16:04:14 MSK
Created attachment 3182 [details]
add feedback to Ctrl-D


Огромное спасибо за проделанную работу!

Однако, есть небольшое замечание. При нажатии Ctrl-D не выполняется переход на новую строку, в результате чего получается следующее:
apt> [root@deimos ~]#

Как-то... не эстетично ;)

Например, bash делает так:
http://git.altlinux.org/people/ldv/packages/bash.git?p=bash.git;a=blob;f=bash/builtins/exit.def;h=ddaa5d315cd44f215a0b7e928f7f369ec9106a1a;hb=13bd4196973ac0d4d299b2b24ffb22efbae6d055#l63

Предлагаю дополненный одной строчкой патч, который делает практически также, только на C++.
Comment 8 Slava Semushin 2009-01-03 18:11:19 MSK
(In reply to comment #7)
> Однако, есть небольшое замечание. При нажатии Ctrl-D не выполняется переход на
> новую строку, в результате чего получается следующее:
> apt> [root@deimos ~]#

apt> %
[c0der@rock ~]$

У меня в  zsh вот так, поэтому я и не заметил неэстетичности.
Comment 9 led 2009-01-08 20:49:06 MSK
(In reply to comment #7)
 
> Предлагаю дополненный одной строчкой патч, который делает практически
> также, только на C++.

Присоединяюсь к пожеланию: нужно убрать эту неэстетичность. достаточно:
c1out << endl;
Comment 10 led 2009-01-08 20:50:10 MSK
лучше всё же зафиксить
Comment 11 Slava Semushin 2009-01-09 21:14:08 MSK
(In reply to comment #10)
> лучше всё же зафиксить

Будет исправлено в 0.5.15lorg2-alt22.2
Comment 12 Slava Semushin 2009-01-11 00:09:59 MSK
Патч принят апстримом: http://apt-rpm.org/scm/?p=apt.git;a=commitdiff;h=c4822097f9a52a5d498640e5d3a16c6fd555b5bc