Open greycodee opened 3 years ago
Hi! I’m not able to reproduce this on any of my Macs. I suspect your terminal may not be using UTF-8 (see #30).
Would you mind running the locale
command and pasting the output here?
Also, to be thorough, what terminal emulator and font are you using? It appears to be Lucida Console in macOS stock terminal, though it would be good to verify this.
Hi! I’m not able to reproduce this on any of my Macs. I suspect your terminal may not be using UTF-8 (see #30).
Would you mind running the
locale
command and pasting the output here?Also, to be thorough, what terminal emulator and font are you using? It appears to be Lucida Console in macOS stock terminal, though it would be good to verify this.
locale
:
╰─$ locale
LANG="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_ALL=
my terminal is iTerm2, and the font I use is Monaco Regular
I solved this issue based on this answer,
The solution is:export LC_CTYPE="en_US.UTF-8"
Okay, that’s good to know. Still, it would be good to figure out why things aren’t rendering properly under zh_CN.UTF-8
. If you don't mind I'm going to leave this issue open for now so we can hopefully solve for this.
Okay, that’s good to know. Still, it would be good to figure out why things aren’t rendering properly under
zh_CN.UTF-8
. If you don't mind I'm going to leave this issue open for now so we can hopefully solve for this.
Ok, I'll leave that question open
Thanks! Related: https://github.com/mattn/go-runewidth/issues/14
Also for reference: setting LC_CTYPE=zh_CN.UTF-8
recreates the behavior. Setting LC_CTYPE=zh_CN.UTF-8 RUNEWIDTH_EASTASIAN=0
corrects it.
Also for reference: setting
LC_CTYPE=zh_CN.UTF-8
recreates the behavior. SettingLC_CTYPE=zh_CN.UTF-8 RUNEWIDTH_EASTASIAN=0
corrects it.
This also works. When I set export RUNEWIDTH_EASTASIAN=0
, it is normal.
LC_CTYPE="ja_JP.UTF-8"
also causes incorrect rendering.
It can also be solved by export LC_CTYPE="en_US.UTF-8"
or export RUNEWIDTH_EASTASIAN=0
@meowgorithm How to force terminal to run with this certain enviroment without configuring environment manually? I tried
os.Setenv("RUNEWIDTH_EASTASIAN", "true")
os.Setenv("LC_CTYPE", "en_US.UTF-8")
before executing the main app, but that didn't work, any nice solution?
@Qrnbth have you tried os.Setenv("RUNEWIDTH_EASTASIAN", "0")
?
@Qrnbth have you tried
os.Setenv("RUNEWIDTH_EASTASIAN", "0")
?
No,I think it's not the argument issue if you had a glance on the source code in go-runewidth , more like the console needs to restart to take effect The best way that I know so far is to set up the enviroment manually in system enviroment or using other console emulator like Windows Terminal ,Tabby or some other font-compatible ones.
But it just not good enough if you wanna distribute your works with these dumb solutions I suppose
Encodings like this are very difficult to deal with because there's technically no correct answer to how something should be configured. For such a common failure as this, it makes sense to include a link in the --help
of the application and in the readme. Basically just in as many places as the user may be looking at for assistance.
Now that this is known, it may also be worth while to pre-emptively check the value of that environment variable and see if there's a way to provide a warning to the user.
This isn't much different to other tools that, as an example, require a nerd font, in order to correctly display various icons and such.
@meowgorithm How to force terminal to run with this certain enviroment without configuring environment manually? I tried
os.Setenv("RUNEWIDTH_EASTASIAN", "true") os.Setenv("LC_CTYPE", "en_US.UTF-8")
before executing the main app, but that didn't work, any nice solution?
In the source code of github.com/mattn/go-runewidth
, it obtains the RUNEWIDTH_EASTASIAN
environment variable using the init()
function.
According to the execution order of init()
in Golang, you can create a separate conf
package in your project, and set the RUNEWIDTH_EASTASIAN
environment variable in the init()
function within this package. Then, you can import the conf
package in the main
package.
Just ensure that the conf
package is the first in the import list of the main package, and it will take effect.
package conf
import (
"os"
)
func init() {
os.Setenv("RUNEWIDTH_EASTASIAN", "0")
}
package main
import (
_ "project/conf"
"github.com/charmbracelet/bubbles/viewport"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/glamour"
"github.com/charmbracelet/lipgloss"
)
@meowgorithm How to force terminal to run with this certain enviroment without configuring environment manually? I tried
os.Setenv("RUNEWIDTH_EASTASIAN", "true") os.Setenv("LC_CTYPE", "en_US.UTF-8")
before executing the main app, but that didn't work, any nice solution?
In the source code of
github.com/mattn/go-runewidth
, it obtains theRUNEWIDTH_EASTASIAN
environment variable using theinit()
function.According to the execution order of
init()
in Golang, you can create a separateconf
package in your project, and set theRUNEWIDTH_EASTASIAN
environment variable in theinit()
function within this package. Then, you can import theconf
package in themain
package.Just ensure that the
conf
package is the first in the import list of the main package, and it will take effect.package conf import ( "os" ) func init() { os.Setenv("RUNEWIDTH_EASTASIAN", "0") }
package main import ( _ "project/conf" "github.com/charmbracelet/bubbles/viewport" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/glamour" "github.com/charmbracelet/lipgloss" )
This do works,thanks
Hello, when I run the example on mac, the typesetting is out of order, what's the matter?