2016-12-30 14 views
1

自分のプログラムに機能を追加するためにncursesを学習しようとしていますが、ターミナル設定をデフォルトのncursesウィンドウの境界線期待どおりのここでNCURSES UTF-8とPuTTYを使用した場合の境界線の印刷

は、私はボックスの境界線を持つウィンドウのために取得しています出力されます:

lqqqqqqqqk 
    x  x 
    x  x 
    x  x 
    mqqqqqqqqj 

私はこれを取得する必要がありますしかし:

┌────────┐ 
    │  │ 
    │  │ 
    │  │ 
    └────────┘ 

私はその修正を見つけることができています唯一のものこの問題は私のPuTTY Remove Character SetをUTF-8ではなくLatin-1に設定していますが、これはVIMを含む他のすべてのアプリケーションを混乱させます。

見つけた関連する質問がいくつかありましたが(12)、どちらの解決策も私には役に立ちません。私が2番目のものから取り出した唯一の興味深いのは、コマンドラインにprintf '\342\224\224\342\224\200\342\224\220'を実行すると、└─┐(これは正しい...)が印刷されるということです。私が間違っていることができるもの

任意のアイデア
#include <iostream> 
#include <ncurses.h> 
#include <string> 
#include <cstring> 

int main() { 
    WINDOW *my_win; 
    int startx, starty, width, height; 
    int ch; 

    initscr(); 
    cbreak(); 
    keypad(stdscr, TRUE); 
    refresh(); 

    int height = 5; 
    int width = 10; 
    my_win = newwin(height, width, 1, 2); 
    box(my_win, 0, 0); 
    wrefresh(my_win); 

    getch(); 

    endwin(); 
    return 0; 
} 

ここで私はこれをテストするために使用しています簡単なプログラムはありますか?ありがとう!

+1

使用している端末プログラムを確認し、適切な 'TERM'設定を選択する必要があります。それでおしまい。 –

+0

私はubuntuでPuTTYを使用していますが、私の 'TERM'は' xterm-256color'でエクスポートしています。私が理解していることは問題ではないはずです... – wKavey

+0

また、私の '.bashrc'に' export NCURSES_NO_UTF8_ACS = 1'があります – wKavey

答えて

2

ロケールを初期化していません。それがなければ、ncursesは端末記述を使用できると仮定します。

さらに読書:

をライブラリーには、呼び出し元のプログラムが初期化 を持っているロケールを使用しています。これは通常のsetlocaleで行われます。

setlocale(LC_ALL, "");

ロケールが初期化されていない場合、ライブラリは 一部のレガシープログラムで動作するように、 文字がISO-8859-1のように印刷可能であることを前提としています。ロケール を初期化して、 ロケールが設定されていない場合は、ライブラリの特定の詳細に依存しないでください。

  • マニュアルページ、NCURSES_NO_UTF8_ACSのncurses:初期化、VT100ライン描画(および対応する 代替文字セット機能の特殊なケースのためのncursesライブラリのチェック中に

を)は、 terminfoに記載されています。具体的には、UTF-8ロケールで実行している場合、Linuxコンソールエミュレータと GNUスクリーンプログラムはこれらを無視します。NcursesはTERM 環境変数をチェックします。その他の特別な場合は、 この環境変数を設定する必要があります。

関連する問題