Hatena::ブログ(Diary)

みずぴー日記 Twitter

2009-11-29(日)

cursesみたいにターミナルの任意の位置にテキストを出す関数

| cursesみたいにターミナルの任意の位置にテキストを出す関数を含むブックマーク

30分プログラム、その703。cursesのmvaddstrみたいにターミナルの任意の位置にテキストを出す関数を作ってみた。

エスケープシケンスを使えば、好きな位置に文字を出すぐらいなら簡単にできるということを知りました。今まで、cursesが必須だと思ってたのに!

例えば、

print "\e[10;10H";
print "hoge";

としてやると、(10,10)の位置にhogeと出せます。

これは、便利だ!ということで関数にしてみた。オマケで、画面のクリアと上矢印の描画も入ってるよ。

$ perl writeat.pl
    *
   ***
  *****
 *******
*********
   ***
   ***
   ***

使い方

write_at $x,$y,"hello";

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# writeat.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/11/29 22:42:18
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
use strict;
use warnings;
use Data::Dumper;

sub clear(){
    print "\e[2J";
}
sub print_at($$$){
    my ($x,$y,$s) = @_;
    print "\e[${y};${x}H",$s,"\n";
}

clear();
for(1..5){
    print_at 6-$_,$_,"*"x(2*$_-1);
}
for(1..3){
    print_at 4,5+$_,"***";
}

参考

osiireosiire 2009/11/30 14:37 知ってると思うけど、エスケープシーケンスのターミナルによる違いを吸収してくれるのがcursesとかncursesなので、これらはやっぱり必須な気がしますです。

リンク元