235
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

goを間違えてogと入力してしまった時に、逆さのGopher君が通り過ぎるコマンド

Last updated at Posted at 2019-11-15

概要

go ... って打ちたくて og ... って間違えちゃうことごく稀にありますよね?よね?
そんな時にいい感じにtypoを注意してくれる og コマンドを作りました!!

👇👇👇
github.com/ramenjuniti/og
👆👆👆

slコマンドみたいなやつです笑

挙動(2019/11/16にgif修正)

ezgif-2-273dbef8bf44.gif
なんと!逆さまなGopher君が通り過ぎます!ただただ通り過ぎます!

ezgif-2-a1c5e34657c7.gif
og run main.goみたいな場合でも容赦無くGopher君は通り過ぎます!

Gopher君かわいい!

インストール(2019/11/15に追加)

Goの環境があればgo getでインストール可能です。
実行するには$GOPATH/binにPATHが通っている必要があります。(2019/11/16に追加)

go get github.com/ramenjuniti/og

作り方

画像を用意する

gopher.png

元画像はここから頂きましたhttps://golang.org/doc/gopher/frontpage.png

AA変換(アスキーアート生成)でAAを生成

   D;;:;;:;;:;;:;:;:;;:;:;:;:;;:;;:;;:;;:;z
   $;:;:;::;::;:;;:;;:;;:;;:;;::;;::;;:;;;I
  .I;;:;;:;;:;;::;;:;:;:;;:;:;;:;:;:;::;;:I
  ,<;;::;:;;::;;:;;;;;;;;:;::;;:;;:;;;:;;;I
  ,(;;;:;::;:;;::;;j=1J71<;;;:;:;;::;:;:;:I
  J;;:;;;:;;::;;;;:r  ] .>;;;:;:;:;;:;:;;;r
  z;;::;:;;:;;:;;j=<?75?7~?I;;:;;:;;;:;:;<]
  (<;;;;;;:;;;;;;?+~(J-J-_(3;;;;;;::;;:;;+\
  ,(;:;:;j/7!''??1+?MMMMM1+?7771+<;;;:;;:j
  .P;;;;J!..       4;<<iJ        .4<;;:;;2 
.3;J<;;j\(M#Q       D;<2.MM5.      1:;;;j73,
$;jMN<;?|,WH3       $;:t.MM#       ,(;;jP;;?|
4<;T9TJ;?.        .J;;;?&         .t;;jM@:;+%
 (1++++Y+;?C+...J7<;;;:;;?i..  ..J>;jv<;;;j=
         .71+<;;;;;;;:;;;;;;;;;;<+J=  ?77!
             '_?771+++++++++?77!

コードを書く

もちろんGoで!

main.go
package main

import (
	"fmt"
	"os"
	"strings"
	"syscall"
	"time"

	"github.com/gosuri/uilive"

	"golang.org/x/crypto/ssh/terminal"
)

func main() {
	og := []string{
		"   D;;:;;:;;:;;:;:;:;;:;:;:;:;;:;;:;;:;;:;z  ",
		"   $;:;:;::;::;:;;:;;:;;:;;:;;::;;::;;:;;;I  ",
		"  .I;;:;;:;;:;;::;;:;:;:;;:;:;;:;:;:;::;;:I  ",
		"  ,<;;::;:;;::;;:;;;;;;;;:;::;;:;;:;;;:;;;I  ",
		"  ,(;;;:;::;:;;::;;j=1J71<;;;:;:;;::;:;:;:I  ",
		"  J;;:;;;:;;::;;;;:r  ] .>;;;:;:;:;;:;:;;;r  ",
		"  z;;::;:;;:;;:;;j=<?75?7~?I;;:;;:;;;:;:;<]  ",
		"  (<;;;;;;:;;;;;;?+~(J-J-_(3;;;;;;::;;:;;+|  ",
		"  ,(;:;:;j/7!''??1+?MMMMM1+?7771+<;;;:;;:j   ",
		"  .P;;;;J!..       4;<<iJ        .4<;;:;;2   ",
		".3;J<;;j|(M#Q       D;<2.MM5.      1:;;;j73, ",
		"$;jMN<;?|,WH3       $;:t.MM#       ,(;;jP;;?|",
		"4<;T9TJ;?.        .J;;;?&         .t;;jM@:;+%",
		" (1++++Y+;?C+...J7<;;;:;;?i..  ..J>;jv<;;;j= ",
		"         .71+<;;;;;;;:;;;;;;;;;;<+J=  ?77!   ",
		"             '_?771+++++++++?77!             ",
	}
	ogw := len(og[0])

	tw, _, err := terminal.GetSize(syscall.Stdin)
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}

	for i := range og {
		og[i] = strings.Repeat(" ", tw) + og[i]
	}

	writer := uilive.New()

	writer.Start()
	for i := 0; i <= tw+ogw; i++ {
		var out string
		for _, v := range og {
			if i < ogw {
				out += v[i:tw+i] + "\n"
			} else if i < len(v) {
				out += v[i:] + "\n"
			} else {
				out += "\n"
			}
		}
		fmt.Fprint(writer, out)
		time.Sleep(10 * time.Millisecond)
	}
	writer.Stop()
}

コードはこれだけ!簡単!

terminalのサイズを取得するためにgolang.org/x/crypto/ssh/terminalを使用
terminalの出力の更新をリアルタイムに行うためにgithub.com/gosuri/uiliveを使用

まとめ

研究室にいるときにふと思いついて深夜テンションで作ったんですが、可愛く出来たので満足しています笑

今後時間があったら動きなんかも追加したいですね

参考

235
72
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
235
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?