Refresh Behaviour (nCurses)









up vote
1
down vote

favorite












I recently was studying ncurses and a doubt just hit me: What EXACTLY does the refresh function does?



I searched a little about it, read some tutorials and even a documentation and my conclusion was that it "refreshes" the actual screen with the format done on the "buffer screen" (it just updates the output on the screen).



Doing some tests I clearly realized I was wrong since the output appeared with and without the refresh function! Below there's a simple program I did just to test it and I can't realize the actual functionality of this function.



#include <ncurses.h>
#include <string.h>

int main()
char mesg = "Just a String";
int row, col;

initscr();
getmaxyx(stdscr, row, col);

while(true)
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

mvprintw(row-2, 0, "This screen has %d rows and %d columnsn", row, col);

char c = getch();
if (c == 'e') row++;
else if (c == 'q') row--;
else if (c == 'a') col--;
else if (c == 'd') col++;


getch();
endwin();

return 0;



I moved the refresh all over the program, I removed it and nothing seems to change. What exactly it does??










share|improve this question

















  • 1




    It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
    – usr2564301
    Nov 11 at 18:32















up vote
1
down vote

favorite












I recently was studying ncurses and a doubt just hit me: What EXACTLY does the refresh function does?



I searched a little about it, read some tutorials and even a documentation and my conclusion was that it "refreshes" the actual screen with the format done on the "buffer screen" (it just updates the output on the screen).



Doing some tests I clearly realized I was wrong since the output appeared with and without the refresh function! Below there's a simple program I did just to test it and I can't realize the actual functionality of this function.



#include <ncurses.h>
#include <string.h>

int main()
char mesg = "Just a String";
int row, col;

initscr();
getmaxyx(stdscr, row, col);

while(true)
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

mvprintw(row-2, 0, "This screen has %d rows and %d columnsn", row, col);

char c = getch();
if (c == 'e') row++;
else if (c == 'q') row--;
else if (c == 'a') col--;
else if (c == 'd') col++;


getch();
endwin();

return 0;



I moved the refresh all over the program, I removed it and nothing seems to change. What exactly it does??










share|improve this question

















  • 1




    It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
    – usr2564301
    Nov 11 at 18:32













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I recently was studying ncurses and a doubt just hit me: What EXACTLY does the refresh function does?



I searched a little about it, read some tutorials and even a documentation and my conclusion was that it "refreshes" the actual screen with the format done on the "buffer screen" (it just updates the output on the screen).



Doing some tests I clearly realized I was wrong since the output appeared with and without the refresh function! Below there's a simple program I did just to test it and I can't realize the actual functionality of this function.



#include <ncurses.h>
#include <string.h>

int main()
char mesg = "Just a String";
int row, col;

initscr();
getmaxyx(stdscr, row, col);

while(true)
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

mvprintw(row-2, 0, "This screen has %d rows and %d columnsn", row, col);

char c = getch();
if (c == 'e') row++;
else if (c == 'q') row--;
else if (c == 'a') col--;
else if (c == 'd') col++;


getch();
endwin();

return 0;



I moved the refresh all over the program, I removed it and nothing seems to change. What exactly it does??










share|improve this question













I recently was studying ncurses and a doubt just hit me: What EXACTLY does the refresh function does?



I searched a little about it, read some tutorials and even a documentation and my conclusion was that it "refreshes" the actual screen with the format done on the "buffer screen" (it just updates the output on the screen).



Doing some tests I clearly realized I was wrong since the output appeared with and without the refresh function! Below there's a simple program I did just to test it and I can't realize the actual functionality of this function.



#include <ncurses.h>
#include <string.h>

int main()
char mesg = "Just a String";
int row, col;

initscr();
getmaxyx(stdscr, row, col);

while(true)
refresh();
mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

mvprintw(row-2, 0, "This screen has %d rows and %d columnsn", row, col);

char c = getch();
if (c == 'e') row++;
else if (c == 'q') row--;
else if (c == 'a') col--;
else if (c == 'd') col++;


getch();
endwin();

return 0;



I moved the refresh all over the program, I removed it and nothing seems to change. What exactly it does??







c ncurses






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 11 at 17:59









jansenalcantara

83




83







  • 1




    It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
    – usr2564301
    Nov 11 at 18:32













  • 1




    It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
    – usr2564301
    Nov 11 at 18:32








1




1




It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
– usr2564301
Nov 11 at 18:32





It may be platform dependent. ncurses works on a range of platforms, and some of them may not support ad hoc writes and only a total rewrite. It is open source so you could check the actual code.
– usr2564301
Nov 11 at 18:32













1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










The getch function calls refresh, which is probably confusing you as you move the explicit call for refresh to different places.



Curses functions write to a virtual screen (i.e., not real) and refresh updates the physical screen (the real one) by comparing the two and making small changes (if possible).






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251589%2frefresh-behaviour-ncurses%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote



    accepted










    The getch function calls refresh, which is probably confusing you as you move the explicit call for refresh to different places.



    Curses functions write to a virtual screen (i.e., not real) and refresh updates the physical screen (the real one) by comparing the two and making small changes (if possible).






    share|improve this answer
























      up vote
      0
      down vote



      accepted










      The getch function calls refresh, which is probably confusing you as you move the explicit call for refresh to different places.



      Curses functions write to a virtual screen (i.e., not real) and refresh updates the physical screen (the real one) by comparing the two and making small changes (if possible).






      share|improve this answer






















        up vote
        0
        down vote



        accepted







        up vote
        0
        down vote



        accepted






        The getch function calls refresh, which is probably confusing you as you move the explicit call for refresh to different places.



        Curses functions write to a virtual screen (i.e., not real) and refresh updates the physical screen (the real one) by comparing the two and making small changes (if possible).






        share|improve this answer












        The getch function calls refresh, which is probably confusing you as you move the explicit call for refresh to different places.



        Curses functions write to a virtual screen (i.e., not real) and refresh updates the physical screen (the real one) by comparing the two and making small changes (if possible).







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 at 20:58









        Thomas Dickey

        30.9k62659




        30.9k62659



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251589%2frefresh-behaviour-ncurses%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3

            Museum of Modern and Contemporary Art of Trento and Rovereto