Bug 18343 - Сделать выход по ^D из apt-shell
Summary: Сделать выход по ^D из apt-shell
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: apt (show other bugs)
Version: unstable
Hardware: all Linux
: P2 minor
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords: patch
: 6264 (view as bug list)
Depends on:
Blocks:
 
Reported: 2008-12-25 11:03 MSK by Andrey Rahmatullin
Modified: 2009-05-10 09:33 MSD (History)
12 users (show)

See Also:


Attachments
add feedback to Ctrl-D (759 bytes, patch)
2009-01-03 16:04 MSK, Ivan A. Melnikov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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