wustho / epr

CLI Epub Reader
MIT License
1.2k stars 49 forks source link

Printing 2 pages on top of each other #33

Closed Rhialto closed 4 years ago

Rhialto commented 4 years ago

I was reading this epub: https://sternchenland.com/downloads/karl-may/Winnetou%20I%20-%20Karl%20May.epub in an xterm and (initially) I didn't manage to get to the next page (past the front page).

Further experiments showed that if I make the xterm window wide enough, I get 2 pages of text next to each other (initially they have the same text). When I page down, the left-hand page stays the same but the right-hand page changes. If I make the xterm narrower, it becomes clear that the unchanging page is printed on top of the moving (correct) page.

First I thought it was something weird about just this epub, but I tried it with a few others and there it happened too. At the next chapter, the left-hand page switches to the first page of the new chapter.

I am using XTERM_VERSION=XTerm(330) and XTERM_LOCALE=en_US.UTF-8. I just today installed epr using pip3 install git+https://github.com/wustho/epr.git.

"screenshot:"

                                Erstes Kapitel.                                                                            
                                                                                   Euch gern habe. Ihr seid hier bei       
                                                                                  en ist nichts für Euch, Sir, gar nichts. 
                                 Ein Greenhorn.                                   m an die Atlantik und Pazifik Company    
                                                                                  ne daß Ihr es wußtet. Habt gut           

Lieber Leser, weißt du, was das Wort Greenhorn bedeutet? eine höchst ärgerliche                                            
und despektierliche Bezeichnung für denjenigen, auf welchen sie angewendet wird.  lick in dasselbe warf und da mein        
                                                                                  and, gingen mir die Augen über. Er aber  
Green heißt grün, und unter horn ist Fühlhorn gemeint. Ein Greenhorn ist demnach                                           
ein Mensch, welcher noch grün, also neu und unerfahren im Lande ist und seine                                              
Fühlhörner behutsam ausstrecken muß, wenn er sich nicht der Gefahr aussetzen      gutes Pferd. Habe den Rotschimmel        
will, ausgelacht zu werden.                                                        sollt ihn bekommen. Und Waffen müßt Ihr 
                                                                                  tgeben, das alte, schwere Gun, welches   
Ein Greenhorn ist ein Mensch, welcher nicht von seinem Stuhle aufsteht, wenn      r bei jedem Schusse in das Schwarze      
eine Lady sich auf denselben setzen will; welcher den Herrn des Hauses grüßt,                                              
ehe er der Mistreß und Miß seine Verbeugungen gemacht hat; welcher beim Laden                                              
des Gewehres die Patrone verkehrt in den Lauf schiebt oder erst den Propfen,       ich die Sprache wiederfand, wollte ich  
dann die Kugel und zuletzt das Pulver in den Vorderlader stößt. Ein Greenhorn     nen Erfolg. Diese guten Menschen hatten  
spricht entweder gar kein oder ein sehr reines und geziertes Englisch; ihm ist    nd es hätte sie tief gekränkt, wenn ich  
das Yankee-Englisch oder gar das Hinterwälder-Idiom ein Greuel; es will ihm        wenigstens für einstweilen, alle        
nicht in den Kopf und noch viel weniger über die Zunge. Ein Greenhorn hält ein     an der Tafel Platz, und wir Andern      
Racoon für ein Opossum und eine leidlich hübsche Mulattin für eine Quadroone.     en; es wurde gegessen, und das Thema     
Ein Greenhorn raucht Cigaretten und verabscheut den tabakssaftspeienden Sir. Ein  erden.                                   
Greenhorn läuft, wenn er von eine Ohrfeige erhalten hat, mit seiner Klage zum                                              
Friedensrichter, anstatt, wie ein richtiger Yankee tun soll, den Kerl einfach     sen mußte. Die Bahn sollte von St. Louis 
und auf der Stelle niederzuschießen. Ein Greenhorn hält die Stapfen eines Turkey  ko, Arizona und Kalifornien nach der     
für eine Bärenfährte und eine schlanke Sportjacht für einen Mississippisteamer.   an gefaßt, diese weite Strecke in        
Ein Greenhorn geniert sich, seine schmutzigen Stiefel auf die Kniee seines        ssen zu lassen. Diejenige Sektion,       
Mitpassagiers zu legen und seine Suppe mit dem Schnaufen eines verendenden        s unter einem Oberingenieur zugefallen   
Büffels hinabzuschlürfen. Ein Greenhorn schleppt der Reinlichkeit wegen einen     io Pecos und des südlichen Kanadian. Die 
Waschschwamm von der Größe eines Riesenkürbis und zehn Pfund Seife mit in die     Stone und Will Parker sollten uns        
Prairie und steckt sich dazu einen Kompaß bei, welcher schon am dritten oder       von wackeren Westmännern vorfinden      
vierten Tag nach allen möglichen andern Richtungen, aber nie mehr nach Norden     gen hatten. Natürlich waren wir außerdem 
zeigt. Ein Greenhorn notiert sich achthundert Indianerausdrücke, und wenn er dem   sicher. Um mich so recht zu             
ersten Roten begegnet, so bemerkt er, daß er diese Notizen im letzten Couvert     t gesagt worden, freilich etwas sehr     
nach Hause geschickt und dafür den Brief aufgehoben hat. Ein Greenhorn kauft      , daß für meine vollständige Ausrüstung  
Schießpulver, und wenn er den ersten Schuß tun will, erkennt er, daß man ihm       Es blieb mir nichts weiter zu tun, als  
gemahlene Holzkohle gegeben hat. Ein Greenhorn hat zehn Jahre lang Astronomie     e in der Wohnung des Oberingenieurs auf  
studiert, kann aber ebenso lang den gestirnten Himmel angucken, ohne zu wissen,   n Henry und Sam Hawkens hin und wurde    
wie viel Uhr es ist. Ein Greenhorn steckt das Bowiemesser so in den Gürtel, daß   n, daß ich hatte überrascht werden       
er, wenn er sich bückt, sich die Klinge in den Schenkel sticht. Ein Greenhorn     ung nicht übelnehmen.                    
macht im wilden Westen ein so starkes Lagerfeuer, daß es baumhoch emporlodert,                                             
und wundert sich dann, wenn er von den Indianern entdeckt und erschossen worden   r deutschen Familie Abschied genommen    
ist, darüber, daß sie ihn haben finden können. Ein Greenhorn ist eben ein         ne Dankesworte dadurch ab, daß er, mir   
Greenhorn und ein solches Greenhorn war damals auch ich.                           derben Weise mich unterbrach:           

Aber man denke ja nicht etwa, daß ich die Überzeugung oder auch nur die Ahnung     doch nur deshalb hinausgeschickt, damit 
gehabt hätte, daß diese kränkende Bezeichnung auf mich passe! O nein, denn es     nn. Kehrt Ihr zurück, so sucht mich auf  
ist ja eben die hervorragendste Eigentümlichkeit jedes Greenhorns, eher alle       habt. Dann wird es sich zeigen, ob Ihr  
andern Menschen, aber nur nicht sich selbst für ›grün‹ zu halten.                 ch nicht glauben wollt, nämlich ein      

Ich glaubte ganz im Gegenteile, ein außerordentlich kluger und erfahrener Mensch                                           
zu sein; hatte ich doch, so was man zu sagen pflegt, studiert und nie vor einem    ehe er sie schloß, sah ich, daß ihm das 
Examen Angst gehabt! Daß dann das Leben die eigentliche und richtige Hochschule                                            
ist, deren Schüler täglich und stündlich geprüft werden und vor  der Vorsehung                                             
zu bestehen haben, daran wollte mein jugendlicher Sinn damals nicht denken.       d -->               
wustho commented 4 years ago

Hmm, I just tried the epub with my XTerm and it's working fine. But I used XTerm version XTerm(348).

Probably try upgrading xterm?

Rhialto commented 4 years ago

Interesting. I could fairly easily try with a newer xterm which happened to be XTerm(359). But it made no difference. A mystery...

Rhialto commented 4 years ago

I tried installing epr on a remote Linux machine, using the same xterm as before, and there it worked. So there must be some difference in which Python version is installed or one of the modules that comes with it. On Linux it was Python 3.8, on NetSD it was Python 3.7. I guess this will give me something more to experiment with later.

wustho commented 4 years ago

Hahaha, but why use Xterm? There are a lot more modern terminals around...

Rhialto commented 4 years ago

Well, I don't do "desktops", and xterm is part of a basic X install. Also it has several features that many "modern" terminals don't have. But aside from that, I found out that the bug is actually in the curses library that I have. The pad is refreshing the wrong lines, or the right ones and then the wrong ones. I made a reproducer in C which more or less follows the curses calls done in epr.

So since this is not your bug, I'll close it. Thanks for looking at it anyway :)

#include <curses.h>

int main(int argc, char **argv)
{
    initscr();
    keypad(stdscr, TRUE);
    clearok(stdscr, TRUE);
    noecho();

    int maxx = getmaxx(stdscr);
    int maxy = getmaxy(stdscr);

    mvwaddstr(stdscr, maxy-1, 0, "Loading...");
    wrefresh(stdscr);

    int rows = 1000;
    int width = maxx - 4;

    WINDOW *pad = newpad(rows, width + 2);
    int i;
    for (i = 0; i < rows; i++) {
        char tmp[80];
        sprintf(tmp, "Line %d", i);
        mvwaddstr(pad, i, 0, tmp);
    }

    int y = 100;
    int x = (maxx - width) / 2;

    while (y < rows) {
        /*
         * According to curses_pad(3), this should show  Line 100, Line 101,
         * etc.  It does even print that, briefly (if you can see it), but it
         * is overwritten immediately with Line 0, Line 1, Line 2, etc.
         */
        prefresh(pad, y,0,  0,x,  maxy-1,x+width);

        int k = wgetch(pad);

        y += 10;
    }

    endwin();
}