Solaris 10、シェルスクリプト、カーソルの移動 [閉じる]

Solaris 10、シェルスクリプト、カーソルの移動 [閉じる]
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <time.h>


void prtime() {
        time_t rawtime;
        struct tm * timeinfo;
        char *s;

        signal(SIGALRM, prtime);

        time ( &rawtime );
        timeinfo = localtime ( &rawtime );

        alarm (1) ; //printf("Time\n");
        printf ( "\033[s\033[6;45H %s \033[u", asctime (timeinfo) );
}

int main()
{
        signal(SIGALRM, prtime);
        alarm(1);
        printf("continue instructions\n");
        while (1) {
                pause();
                printf("continue instructions\n");
        }
}

端末の特定の位置に時計を書き込もうとしていますが、時計を書く前にカーソル位置を保存し、時計を書いた後にその位置を復元したいと思います。

しかし、\033[s&は\033[u動作しません。

ベストアンサー1

使用しているコマンドには、実装CSI sに応じてCSI u互換性のない解釈があります。

1つ目はカーソル位置の保存または端末エミュレータのリセットで、後者はSolaris専用のインタフェースです。

ポータブル画面処理にはncursesなどのライブラリを使用する必要がありますが、まだエスケープシーケンスをハードコードしたい場合は、期待どおりに機能できます。

printf ( "\0337\033[6;45H %s \0338", asctime (timeinfo) );

おすすめ記事