Karakter khusus dalam nama pengguna / direktori tidak boleh mempengaruhi / menghalangi fungsionalitas Mudlet.
Ini tampaknya telah datang dalam pembaruan yang agak baru untuk Mudlet.
Juga merusak lebih banyak fungsionalitas daripada hanya Geyser.
C:\Program Files\
ke profil pengguna dan saya tidak dapat mengingat bahwa kami mengubah apa pun di tempat itu akhir-akhir ini. Kode _looks_ seolah-olah harus menangani nama jalur UTF-8 dengan benar[ERROR] Kesalahan kompilasi LuaGlobal.lua
Kesalahan dari Lua: tidak dapat membuka /LuaGlobal.lua: Tidak ada file atau direktori seperti itu
Mudlet 3.8.1 di Win7
Windows dikenal ganjil dengan nama path - dan fungsi file di Lua harus diberi nama path yang dipotong dengan benar. Dalam kode C ++ jika kita tidak menggunakan literal string mentah C ++ 11 (dan kita mungkin dipaksa untuk tidak menangani bug Qt dengan QObject::tr(
... )
) satu /
dalam nama jalur kode keras untuk sistem nix harus diloloskan ganda * ke \\\\
jika akan dikirim ke fungsi lua - strip kompilasi C ++ masing-masing \\
turun ke \
dan hal yang sama terjadi di juru bahasa lua.
Kebetulan jalur di pesan [ ERROR ]
tampak seolah-olah jalur untuk menambahkan nama file LuaGlobal.lua
dibiarkan sebagai ./
default sehingga diharapkan ada di direktori yang sama dengan Mudlet yang dapat dieksekusi - namun untuk * Doze yang setidaknya harus diubah menjadi .\\
atau lebih tepatnya .\\\\
dalam kode sumber C ++!
Ini juga berarti saya berpikir bahwa QDir::nativeSeparators(
... )
metode statis TIDAK melakukan hal yang benar jika kita menulis nama path / file sebagai string mentah dalam kode C ++ yang sedang berjalan. untuk dimasukkan ke penerjemah Lua sebagai string.
Tidak yakin saya mengerti komentar Anda atau apakah itu benar-benar ditujukan kepada saya .. :)
Apakah Anda melihat peluang saya untuk memperbaiki masalah ini, selain mengonfigurasi pengguna baru dari awal?
Ini lebih merupakan pengamatan umum bagi siapa pun yang melihatnya. Ini seharusnya mungkin untuk memperbaikinya dengan melihat jalur yang digunakan untuk memuat file LuaGlobel.lua, khususnya pada platform Windows. Saya memiliki kecurigaan bahwa kami telah membiarkan OS tersebut menggunakan beberapa nilai default - yang mungkin "direktori yang sama dengan yang dapat dieksekusi" tetapi tidak cocok karena jalur non-POSIX.
Melihat apa yang menurut saya penyebab dari masalah ini :
void TLuaInterpreter::loadGlobal()
{
#if defined(Q_OS_MACOS)
// Load relatively to MacOS inside Resources when we're in a .app bundle,
// as mudlet-lua always gets copied in by the build script into the bundle
QString path = QCoreApplication::applicationDirPath() + "/../Resources/mudlet-lua/lua/LuaGlobal.lua";
#else
// Additional "../src/" allows location of lua code when object code is in a
// directory alongside src directory as occurs using Qt Creator "Shadow Builds"
QString path = "../src/mudlet-lua/lua/LuaGlobal.lua"; // <== A
#endif
int error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
if (error != 0) {
// For the installer we do not go down a level to search for this. So
// we check again for the user case of a windows install.
// overload previous behaviour to check by absolute path as well
// TODO this sould be cleaned up and refactored to just use an array and a for loop
path = QCoreApplication::applicationDirPath() + "/mudlet-lua/lua/LuaGlobal.lua"; // <== B
if (!QFileInfo::exists(path)) {
path = "mudlet-lua/lua/LuaGlobal.lua"; // <== C
}
error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
if (error == 0) {
mpHost->postMessage("[ OK ] - Mudlet-lua API & Geyser Layout manager loaded.");
return;
}
} else {
mpHost->postMessage("[ OK ] - Mudlet-lua API & Geyser Layout manager loaded.");
return;
}
// Finally try loading from LUA_DEFAULT_PATH
path = LUA_DEFAULT_PATH "/LuaGlobal.lua"; // <== D
error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
if (error != 0) {
string e = "no error message available from Lua";
if (lua_isstring(pGlobalLua, -1)) {
e = "[ ERROR ] - LuaGlobal.lua compile error - please report!\n"
"Error from Lua: ";
e += lua_tostring(pGlobalLua, -1);
}
mpHost->postMessage(e.c_str());
} else {
mpHost->postMessage("[ OK ] - Mudlet-lua API & Geyser Layout manager loaded.");
return;
}
}
Ini segera tampak agak cerdik karena A ke D semuanya salah untuk Windows, misalnya A harus "..\\\\src\\\\mudlet-lua\\\\lua\\\\LuaGlobal.lua"
tetapi yang lain membutuhkan penggantian run-time dari /
menjadi \\\\
in baik string literal DAN variabel yang disertakan. Kesalahan asli di bagian atas topik adalah karena LUA_DEFAULT_PATH
kosong saat digunakan di Windows!
Ingat jika men-debug ini pesan di layar [ ERROR ]
akan mereproduksi jalur yang telah melalui keduanya, saya pikir \\
menjadi \
un-escapings jadi akan terlihat seperti yang benar, nyata Jalur Windows di layar - yang akan menjadi \LuaGobal.lua
dalam kasus yang diberikan - yang mungkin juga salah dan seharusnya .\LuaGobal.lua
mungkin - jadi LUA_DEFAULT_PATH
seharusnya .\\\\
sebagai gantinya?
Lua pada Windows menangani / sebagai pemisah direktori dengan baik.
Itu bukan pengalaman saya yang agak terbatas - IIRC ada pengaturan konfigurasi di suatu tempat di lua stuff yang berisi array 4 karakter yang menampung pengaturan yang dikompilasi untuk, antara lain, karakter wildcard dalam nama paket dan pemisah direktori. Saya ingat ini karena ketika saya memperbaiki penanganan (internal ke) LuaGlobal.lua dari jalur file Windows vs. * nix di masa lalu saya memang menggunakan pemeriksaan, saya pikir pada satu indeks array C ke dalam config
char
array untuk '\\'
atau '/'
- meskipun saya pikir solusi yang lebih baik ditemukan kemudian.
Ah, ha - ya - lihat variabel package.config
- itu masalahnya, dari Lua Unofficial FAQ :
1.40 Masalah kompatibilitas antara Windows dan Unix?
Di sini, 'Unix' adalah singkatan dari sistem operasi mirip POSIX seperti Linux, Mac OS X, Solaris, dll.
package.config
adalah string di mana 'karakter' pertama adalah pemisah direktori; jadipackage.config:sub(1,1)
bisa berupa garis miring atau garis miring terbalik. Sebagai aturan umum, coba gunakan ini saat membangun jalur.Perbedaan besar antara build Windows dan Unix adalah bahwa package.path default didasarkan pada lokasi Windows yang dapat dieksekusi, sedangkan pada Unix didasarkan pada
/usr/local/share/lua/5.1
. Oleh karena itu lebih mudah untuk melakukan instalasi pengguna lokal Lua pada Windows, tetapi Lua menghormati variabel lingkunganLUA_PATH
danLUA_CPATH
.Lua lebih bergantung secara langsung pada pustaka runtime C sistem daripada kebanyakan bahasa skrip sehingga Anda harus menghargai perbedaan platform. Gunakan penentu
"rb"
denganio.open
jika Anda memerlukan kompatibilitas dengan I / O biner Windows. Berhati-hatilah denganos.tmpname
karena tidak mengembalikan path lengkap pada Windows (awalan dengan nilai variabel lingkunganTMP
bersama dengan garis miring terbalik terlebih dahulu.)os.clock
diimplementasikan sangat berbeda di Windows.Demikian pula,
os.time
sebenarnya dapat merusak Lua jika melewati penentu format yang tidak kompatibel. (Ini tidak lagi menjadi masalah dengan Lua 5.2, yang melakukan pemeriksaan kewarasan terlebih dahulu.)Untuk subsistem GUI Windows,
os.execute
dapat mengganggu, danio.popen
tidak akan berfungsi - pustaka ekstensi lintas platform tersedia dalam kasus ini.
'sebagai aturan umum' - itu tidak melawan fakta bahwa /
sebagai pemisah direktori berfungsi dengan baik pada Windows di Lua.
Hanya itu - untuk beberapa orang, termasuk saya, yang tidak berhasil - mungkin saja saya tidak memiliki instalasi lua yang disiapkan dengan mengikuti resep yang dikutip normal (atau saya juga menginstal Cygwin).
Saya bertanya-tanya - apakah Anda bingung, kebetulan, penanganan pemisah direktori dari subsistem lua (atau lebih tepatnya bagian paketnya) - yang dapat dikonfigurasi dengan cara apa pun (atau mungkin untuk sesuatu yang lain sepenuhnya, katakanlah '
untuk RISCOS rupanya!), Windows cmd atau powerline shell yang akan menerima keduanya atau inti Qt C ++ yang juga akan menangani keduanya?
Itu membingungkan saya tentang apa yang seharusnya berfungsi untuk instalasi lua yang dikompilasi pada platform Windows - ah, mungkinkah msys adalah POSIX-ish tetapi mingw adalah Windowish?
Tidak, saya tidak, dan itu juga mengapa menggunakan / di LuaGlobal.lua berfungsi untuk banyak orang di Windows dalam keadaannya saat ini ...
Pemisah jalur tidak menjadi masalah di sini.
Jadi mungkin penerjemah lua di mingw dari Qt dikonfigurasi dengan benar untuk Windows, dan menggunakan liblua yang sama dengan aplikasi Mudlet yang ditautkan ke {mungkin tidak, saya kira, untuk semua orang}. Sebagai contoh, luarocks menyediakan interpreter lua 5.1 yang dapat digunakan jika tidak ada yang lain ditemukan tetapi dengan token yang sama ~ it ~ libarary-nya mungkin digunakan sebagai gantinya.
💡 Ah, saya ingin tahu, @Kebap apa yang Anda dapatkan jika Anda mencoba mendapatkan nilai package.config
pada pengaturan yang memberi Anda kesalahan? Bagi saya di baris perintah, misalnya, di sistem saya yang sedang berjalan:
[stephen<strong i="11">@ripley</strong> ~]$ lua51
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> print(package.config)
/
;
?
!
-
> ^D
[stephen<strong i="12">@ripley</strong> ~]$
Perhatikan nilai pertama /
yang merupakan pemisah direktori saat ini yang akan digunakan saat memuat paket - seperti file LuaGlobal.lua
! Tentu saja tanpa skrip lua eksternal yang dijalankan / tersedia saya tidak dapat mengingat apakah mungkin untuk menjalankan sesuatu dari "baris perintah" di Mudlet. Saya akan mencoba dan menjalankan 'mesin laptop Istirahatkan nanti dan melihat apa yang saya dapatkan dari yang satu itu ...
Tentu bisa mencoba:
Sepertinya ada garis miring ke belakang di mana Anda memiliki garis miring ke depan
Tidak yakin apakah saya harus mencoba ini di Mudlet, karena Anda tampaknya menggunakan cara dan tempat yang berbeda ..?
Saya dapat membuat satu atau dua pengguna baru, dengan dan tanpa karakter khusus, hanya untuk memastikan apakah nama pengguna benar-benar menjadi masalah di sini. Apakah menurut Anda itu membantu?
Ya, silahkan coba
Pada Rabu, 25 Apr 2018, 18:48 Kebap, [email protected] menulis:
Saya dapat membuat satu atau dua pengguna baru, dengan dan tanpa karakter khusus,
hanya untuk memastikan apakah nama pengguna benar-benar menjadi masalah di sini. Menurut mu
itu membantu?-
Anda menerima ini karena Anda berkomentar.Balas email ini secara langsung, lihat di GitHub
https://github.com/Mudlet/Mudlet/issues/1616#issuecomment-384355980 , atau nonaktifkan
utasnya
https://github.com/notifications/unsubscribe-auth/AAGxjN9JHbiPCOgUf3u1u8jVg0KjDiSbks5tsKj3gaJpZM4TZAbQ
.
Sejauh yang saya bisa lihat, kode ini mencoba semua lokasi yang disarankan untuk file LuaGlobal.lua
dan akhirnya mencapai lokasi di mana ia mencoba:
LUA_DEFAULT_PATH "/LuaGlobal.lua"
Namun dari pesan error yang dihasilkan sepertinya LUA_DEFAULT_PATH adalah string kosong sehingga path yang digunakan adalah:
/LuaGlobal.lua
dengan asumsi (dan saya masih tidak yakin tapi semoga itu hanya masalah saya ) bahwa '/' IS adalah pemisah direktori yang bisa diterapkan di mana itu digunakan itu berarti mencari file di root sistem file - pada POSIX yang ada secara harfiah root dan di Windows itu adalah root pada drive yang saat ini aktif, mungkin C:\
(atau C:/
: wink :) - jika kita benar-benar ingin itu menjadi direktori kerja saat ini, maka LUA_DEFAULT_PATH
harus berupa satu karakter .
dan tidak sepenuhnya kosong - karena itu pesan kesalahan akan kembali:
... cannot open ./LuaGlobal.lua ...
atau jika mengembalikan jalur lengkap, mungkin sesuatu seperti:
... cannot open C:/Users/Eingeschränkt/AppData/Local/Mudlet/LuaGlobal.lua ...
mungkin? 😮
Saya melihat bahwa pesan kesalahan dari juru bahasa lua ditangkap dalam std::string
dan dikirim ke cTelnet::postMessage(
... )
melalui konversi std::string::c_str()
ke const char *
tetapi karena postMessage
mengharapkan QString
ini harus melibatkan konstruktor QString :: QString (const char yang menggunakan konverter QString::fromUtf8()
jadi karakter non-ASCII * harus berhasil melewati tidak rusak ... 😌
\
lua print(package.config)
dari baris perintah profil Mudlet bahkan dengan kesalahan yang Anda dapatkan.
Ini sedikit spekulatif tetapi sebagai perbaikan runtime saya bertanya-tanya apakah mungkin untuk melakukan sesuatu seperti:
lua package.config = "/;?!_"
untuk mengubah pemisah menjadi /
- meskipun Anda mungkin ingin mengubah pengaturan "pemisah perintah" dalam preferensi sehingga tidak memisahkan pemisah di atas pada ;
- dan kemudian lihat apakah Anda bisa "menjalankan" file LuaGlobal.lua
secara manual? Oh, itu tidak akan memberikan pesan kesalahan jenis [ ERROR ]
jika tidak berhasil. \
Kesalahan yang dikonfirmasi dengan Mudlet 3.8.1 pada Win 8.1 dengan nama pengguna dengan karakter khusus: ä.
Tidak ada kesalahan dengan nama pengguna tanpa karakter khusus.
lua print(package.config)
tanpa hasil yang terlihat
lua print('test')
juga tanpa hasil yang terlihat
lua
alias tersedia, tetapi print
tampaknya tidak tersedia
lua echo('test')
berfungsi seperti yang diharapkan
Menjalankan lua package.config = "/;?!_"
Log kesalahan mengatakan: ERROR:[string "Alias: run lua code"]:4: [string "package.config = "/"]:1: unfinished string near '<eof>'
Pemisah perintah diubah dari; untuk sesuatu yang lain
Menjalankan lua package.config = "/;?!_"
Oke saya rasa? Hasil tidak terlihat
Menjalankan lua run("./LuaGlobal.lua")
Log kesalahan mengatakan: ERROR:[string "return run("./LuaGlobal.lua")"]:1: attempt to call global 'run' (a nil value)
Uji dengan include
- kesalahan yang sama.
lua require("./LuaGlobal.lua")
- kesalahan menarik:
ERROR:[string "return require("./LuaGlobal.lua")"]:1: module './LuaGlobal.lua' not found:
no field package.preload['./LuaGlobal.lua']
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua\init.lua'
no file '.\\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua\init.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua\init.lua'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua'
no file '.\\/LuaGlobal\lua.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\'
no file '.\.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'
Hanya untuk memastikan lua require("/LuaGlobal.lua")
Log kesalahan mengatakan:
ERROR:[string "return require("/LuaGlobal.lua")"]:1: module '/LuaGlobal.lua' not found:
no field package.preload['/LuaGlobal.lua']
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua\init.lua'
no file '.\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\/LuaGlobal\lua\init.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua.lua'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua\init.lua'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua'
no file '.\/LuaGlobal\lua.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'
no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal'
no file '.\/LuaGlobal.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal.dll'
no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'
Aneh tentang print
tidak berfungsi - Saya pikir itu adalah lua built-in - tetapi:
lua echo(package.config)
harus bekerja dengan baik.
Melihat output dari contoh kerja pertama, output kesalahan mencoba memuat file LuaGlobal.lua
- mari kita lihat nama file dan jalur apa yang sedang dicoba:
C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua.lua
C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua\init.lua
.\\/LuaGlobal\lua.lua
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua.lua
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua\init.lua
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.lua
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua\init.lua
C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua
.\\/LuaGlobal\lua.dll
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.dll
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll
C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\
.\.dll
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\.dll
C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll
Saya tidak yakin di mana file tersebut harus ditempatkan akhir-akhir ini, jadi saya mengunduh dan menginstal biner 3.8.1 dan menemukan bahwa jalur yang digunakan adalah:
C: \ Users \ Stephen \ AppDataLocal \ Mudlet \ app-3.8.1 \ mudlet-lualua
juga dengan versi Penginstal Windows itu, saya memiliki yang berikut ini untuk package.config:
lua print(package.config)
\
;
?
!
-
jadi jalur ke sana harus menggunakan \
agar penangan paket dapat bekerja IMO. Masih belum jelas mengapa orang yang berbeda mendapatkan hal yang berbeda.
Diedit: mengutip daftar jalur dengan 'daripada'
Mengapa beberapa jalur adalah mojibake dan yang lain menampilkan Nama Pengguna dengan benar pasti karena mereka berasal dari sumber yang berbeda dan beberapa di antaranya belum mampu I18n dengan baik - akan sangat membantu jika kita dapat melacaknya dan memperbaikinya dengan Mudlet 4.0 - tetapi mereka mungkin bukan yang bisa kita kendalikan. Perhatikan bahwa itu tidak bisa menjadi kode tampilan atau font karena pesan kesalahan individu semua melewati proses yang sama saat dibuat.
Hanya untuk memastikan bahwa saya menggunakan contoh yang diharapkan (sebagai pengembang, saya memiliki lebih dari satu salinan pada PC itu), saya mengganti nama file dan mendapatkan hasil yang sama:
Juga saya membuat pengguna baru DENGAN karakter non-ASCII (dan mungkin bahkan bukan Latin1 / ISO 885901) dan saya dapat mengonfirmasi bahwa semuanya kacau dengan cara yang sama untuk pengguna itu - Mudlet tidak dapat melihat file di:
C:\Users\şțȅƥĥēƞ\AppData\Local\Mudlet\app-3.8.1\mudlet-lua\lua\LuaGlobal.lua
tapi bisa untuk
C:\Users\stephen\AppData\Local\Mudlet\app-3.8.1\mudlet-lua\lua\LuaGlobal.lua
:menangis:
Ini Q & A pada Stack Exchange tidak terdengar menjanjikan.
Namun Windows luawinfile berlisensi MIT (hanya dikompilasi di mingw BUKAN MSVC) penerjemah nama file (mengonversi nama file UTF-8 ke / dari UTF-16 yang harus digunakan dengan API penanganan file Windows) terlihat sedikit lebih baik - ini menyediakan pengganti untuk modul LFS yang dapat menggunakan nama file dan jalur UTF-8.
Temuan bagus. Hanya untuk membuangnya di sana, kami memiliki https://github.com/starwing/luautf8 sudah di Mudlet, apakah ada sesuatu yang dapat membantu kami?
SlySven, daftar 15 nama direktori Anda sepertinya salah. Misalnya, 13 harus membaca .\.dll
dan bukan ..dll
Ah, itu adalah sistem mark-up yang mengganggu - dalam beberapa konteks di sini garis miring terbalik keluar dari karakter berikut yang diperlukan misalnya jika Anda ingin menampilkan simbol kurang dari dalam teks biasa seperti ini "\ <" Anda tidak akan melihat garis miring terbalik di sana ... dan saya telah menggunakan tanda kutip tunggal biasa daripada tanda kutip kode - diedit untuk memperbaiki kutipan.
luautf8
adalah semua tentang penanganan string UTF-8 - Saya tidak berpikir ini akan membantu di sini karena luainfile
secara khusus tentang berinteraksi dengan penanganan file Windows (yang hanya bekerja dengan string UTF-16) C atau lebih mungkin pustaka C ++ - sepertinya perlu membungkus atau mengganti lfs
hanya pada
Hmm tapi kami tidak menggunakan lfs
untuk memuat LuaGlobal.lua
, jadi bagaimana luainfile
menyelesaikan masalah?
Ini bukan hanya pengganti lfs
. Ini juga memiliki pengganti dofile
dan loadfile
. Kita mungkin perlu mengganti panggilan kita menjadi luaL_dofile
dengan panggilan lua menjadi dofile
.
Edit untuk menambahkan: Link library luainfile
(secara default) terhadap lua 5.3 ... Tidak yakin apakah itu ketergantungan yang sulit atau tidak.
Sepertinya kita bisa menulis fungsi luaL_dofile
kita sendiri lalu itu bekerja dengan pengkodean khusus Windows?
Bagaimana kita bisa mendorong ini ke depan?
Saya telah mengangkat masalah pada repositori luawinfile menanyakan tentang kompatibilitas 5.1 tetapi saya telah melihatnya dan itu benar-benar menggunakan beberapa fitur bahasa 5.3 yang tidak disediakan oleh lua 5.1 - ada modul kompatibilitas 5.3 terpisah, resmi, yang mencoba untuk menyediakan beberapa fitur hilang ke 5.2 dan 5.1 tetapi bukan tanpa komplikasi lain jadi bukan solusi penurunan.
Sepertinya terkait dengan # 229
Bagaimana kita bisa mendorong ini ke depan?
Kami perlu mem-backport https://github.com/cloudwu/luawinfile berlisensi MIT (satu file C dengan sekitar 884 baris {808 soc} kode) dari 5,3 hingga 5,1 untuk mengakomodasi beberapa fitur yang tidak ada di masa lalu versi lua yang digunakan Mudlet. Ini akan membutuhkan seseorang dengan pemahaman yang lebih baik tentang pengkodean lua-C daripada yang saya rasakan saat ini, saya kira. Namun tampaknya itu adalah sesuatu yang dapat dilakukan dan diuji secara independen tanpa terlalu mengkhawatirkan basis kode lainnya - meskipun itu hanya dapat benar-benar diuji pada platform pengembangan Windows.
Masalah lainnya adalah bahwa orang tidak dapat menyimpan profil mereka di windows dengan nama pengguna non-Inggris - tidak ada riwayat yang ditulis. Jangan berpikir kita punya tiket untuk itu.
@Bayu_joo
Apakah Anda mungkin mempelajari beberapa hal selama perbaikan Anda baru-baru ini untuk membawa surat-surat internasional ke Mudlet, untuk mengedepankan masalah ini?
Tidak juga, saya pikir bahwa mem-porting kembali luawinfile
ke Lua 5.1 menawarkan harapan terbaik kita tetapi saya belum memiliki pemahaman yang cukup baik (belum?) Dari C/C++
+ lua
API untuk menaruh kepercayaan pada kemampuan saya untuk melakukan ini. Apakah ada orang lain? Saya kira kita perlu melihat-lihat kode untuk perpustakaan resmi Lua io
dan melihat bagaimana luawinfile menggantikan beberapa (semua, saya tidak tahu?) Dari fungsi dengan penggantian khusus Windows.
Karena orang mungkin telah memperhatikan platform pengembangan Windows utama saya bukanlah yang paling sesuai (laptop Windows 7 dengan prosesor 64-bit tetapi menjalankan versi 32-bit) - PC utama saya juga memiliki Windows 7 64-bit tetapi tiga kali lipat- mesin boot tidak menjalankan OS itu selama berbulan-bulan jadi saya memiliki beberapa jam menatap layar "Memperbarui Windows ... jangan matikan" untuk melihat ke depan dan saya tidak begitu termotivasi, ATM!
Meskipun, sekarang penginstal on-line Qt akhirnya tampaknya telah beralih ke hanya menawarkan penginstalan Windows Mingw64 64-bit - dibandingkan dengan Mingw 32-bit sebelumnya yang mungkin saya pertimbangkan untuk melakukannya jika saya memiliki beberapa jam untuk dibuang. ..
Terlihat bagus ...
Ini berkat https://gist.github.com/Egor-Skriptunoff/2458547aa3b9210a8b5f686ac08ecbf0 yang dibuat di awal tahun.
Akan tersedia di Mudlet 3.22