LINUX.ORG.RU
ФорумTalks

Страдаю на Tcl/Tk

 ,


0

3

Немного о качестве батареек в Tcl/Tk:

  • Модуль cmdline в Tcllib писал наркоман, иначе не скажешь. Для вменяемого парсинга опций комадной строки пришлось брать сторонний модуль и доводить его напильником.
  • Поддержка статуса окна maximized есть под виндой и макосью, но нет под юниксами. EWMH для авторов tk ничего не значит. Порылся еще, через wm attributes . -zoomed 1 работает вроде. Но не через wm state.
  • Есть процедура regexp, но нет процедуры для квотирования строки для формирования регэкспов. Эту функцию ты должен написать сам.
  • Нет встроенной процедуры для «вернуть значение переменной, если она существует, иначе вернуть указанное значение». Её ты тоже должен написать сам.

Конкретно самого языка:

  • Возможности метапрограммирования это хорошо.
  • Если писать по уму, то всё надо обвешивать тестами еще сильнее, чем в питоне. Один лишний / пропущенный символ, и программа будет без диагностик просто обрабатывать чушь. Но так как я работаю с уже имеющимся кодом, в котором не было тестов, то пока забил.

Продолжаю наблюдения. Советы приветствуются.

Алсо, cast @Shadow

★★★

Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от wandrien

Я думал это ты все вокруг шелла возишься, а окна - на сдачу.

thesis ★★★★★
()

Эту функцию ты должен написать сам.

Да, есть такое. Я помню как все делали свою лямбду, например. Или вот самопальные объектные системы, тоже по фану. А вот практические задачи на тикле решать не так интересно, слишком многословно пишется всякая тривиальщина.

bread
()
Ответ на: комментарий от bread

Тем не менее, целый gitk, например, написан на нём. Кода там нормально так. Из того, что в ходу. Были более крупные программы, но сходу не вспомню.

wandrien ★★★
() автор топика

Кстати, вот вам вопрос. Какое бы слово вы использовали в названии функции: quote или escape?

proc regexp_quote {str} {
    regsub -all {[][{}()*+?.\\^$|]} $str {\\&} result
    return $result
}
wandrien ★★★
() автор топика

Отдельное кря - naming convention:

::cmdline::getopt argvVar optstring optVar valVar
::cmdline::getKnownOpt argvVar optstring optVar valVar
::cmdline::getoptions arglistVar optlist usage
::cmdline::getKnownOptions arglistVar optlist usage
::cmdline::usage optlist usage
::cmdline::getfiles patterns quiet
::cmdline::getArgv0

Бардак.

getoptions и getfiles, но getKnownOptions и getArgv0.

optstring и optlist, но argvVar и optVar.

Мне-то какого стиля придерживаться, чтобы было консистентно с библиотекой?

wandrien ★★★
() автор топика

ИИшки дружно считают, что для Tcl лучше использовать snake_case. Но что-то мне подсказывает, что они звиздят.

wandrien ★★★
() автор топика

Я так понимаю, что исторически использовалось простое слитное написание ака flatcase. А потом перешли на camelCase.

snake_case в Тикле не применяется, вроде как.

wandrien ★★★
() автор топика

Вот вам, кстати, табличка из Википедии:

twowords    flatcase
TWOWORDS    UPPERCASE, SCREAMINGCASE
twoWords    (lower) camelCase, dromedaryCase
TwoWords    PascalCase, UpperCamelCase
two_words   snake_case, snail_case, pothole_case
TWO_WORDS   ALL_CAPS, SCREAMING_SNAKE_CASE, MACRO_CASE, CONSTANT_CASE
two_Words   camel_Snake_Case
Two_Words   Pascal_Snake_Case, Title_Case
two-words   kebab-case, dash-case, lisp-case, spinal-case
TWO-WORDS   TRAIN-CASE, COBOL-CASE, SCREAMING-KEBAB-CASE
Two-Words   Train-Case, HTTP-Header-Case
wandrien ★★★
() автор топика
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Мне-то какого стиля придерживаться, чтобы было консистентно с библиотекой?

Лучше camelCase, но если что-то короткое, то можно слитно. Так что optlist это вполне себе.

bread
()

Не, я давно на wxPython. Я просто привожу в пример, что нормальный UI был сделан давным-давно, и был лёгок и нетребователен к ресурсам и погромистам.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)

Из всей скриптоплеяды Tcl мой любимый говноязычок. В основном, потому что его очень легко и приятно встраивать в плюсовые проекты как язык для скриптинга и конфигов.

hateyoufeel ★★★★★
()

imho, многие wm xxx сильно зависят от window manager и вообще говоря просто «пожелания», hinting... Если WM не позволит maximized, то на весь экран и не распахнётся.

при винигрете недоделанных WM вперемешку с wayland, получается нехорошо. Никто-ж не знает кто у тебя wm

можешь попробовать вообще отключить взаимодействие с wm и пердоль на весь экран сам (заодно и декораций кстати не будет) ;-)

wm overrideredirect true и дальше с песней

MKuznetsov ★★★★★
()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Ответ на: комментарий от dataman

что это? гуглится https://github.com/LuaDist/iup, но оно как будто мертвое.

так и не нашёл вменяемых кроссплатформенных GUI библиотек для Lua, только кривые биндинги к кутям и прочие непотребства.

есть Löve, но оно уже не совсем Lua, есть такое: https://github.com/rxi/lite – но это не то.
хочется чего-то вроде immediate mode gui кроссплатформенного, но увы и ах, а самому пилить – лапки.

ann_lortemp2
()
Ответ на: комментарий от ann_lortemp2

что это? гуглится https://github.com/LuaDist/iup, но оно как будто мертвое

Мёртвое, ненужное зеркало. Там же есть ссылка на оригинал https://www.tecgraf.puc-rio.br/iup:

IUP is a multi-platform toolkit for building graphical user interfaces. It offers a simple API in three basic languages: C, Lua and LED.

dataman ★★★★★
()
Ответ на: комментарий от dataman
Drivers
IUP WebBrowser Driver by Eric Wing & Chris Matzenbach

        A native driver for Web browser using Emscripten, a C/C++ to JavaScript compiler. On going work. Help needed!!!!!

IUP Android Driver by Eric Wing & Chris Matzenbach

        A native driver for Andoid. On going work. Help needed!!!!!

IUP iOS Driver by Eric Wing & Chris Matzenbach

        A native driver for iOS using Cocoa Touch. On going work. Help needed!!!!!

IUP MacOSX Driver by Eric Wing & Chris Matzenbach

        A native driver for MacOSX using Cocoa. Current initiative. On going work. Help needed!!!!!

        NOTE: in IUP 3.28 we added all the Eric and Chris contributions to the IUP SVN hoping more people can notice them and also contribute. Thanks!

IUP MacOSX Driver by Heesob Park

        A native driver for MacOSX using Cocoa. Old initiative

понятно.

ann_lortemp2
()
Ответ на: комментарий от MoldAndLimeHoney

Пых с пистоном смотрят на вас с недоумением. Причем Tcl намного грамотнее спроектирован.

bread
()
Ответ на: комментарий от ann_lortemp2

так и не нашёл вменяемых кроссплатформенных GUI библиотек для Lua, только кривые биндинги к кутям и прочие непотребства.

Я подумал, что должны быть биндинги к ImGui, и не ошибся. :)
$ gh-search-repos imgui lua

Showing 132 of 132 repositories

Пока лучшим выглядит https://github.com/sonoro1234/LuaJIT-ImGui:

This is a LuaJIT binding for the excellent C++ immediate gui imgui. Uses cimgui to be the most «up to date» as possible.

There are backends for glfw, SDL2 and SDL3.
Notes:

  • currently this wrapper is based on version [1.92.3 docking of imgui]

Неподребство?

dataman ★★★★★
()

Тикль создавался с расчётом на то, что программисты будут писать на нём будучи в хламину. И, как я понял, дошло до того, что на нём только в таком состоянии и можно норм писать.

Поэтому для улучшения ситуации поместите спирт в моск.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от wandrien

SCREAMING-KEBAB-CASE

Название топ конечно)

Norgat ★★★★★
()
Ответ на: комментарий от hateyoufeel

насколько удобно? я видела в плюсах встраивание lua(luajit), причём в довольно высоконагруженном софте (надо было) и он даже работал. и даже довольно шустро. есть ли плюсы у тикля?

пожалуй, тикль - единственный артефакт тех времён, с которым я ни разу так и не сталкивалась. ни как программист, ни как юзер. вроде он не младше перла, но как-то прошёл мимо моего внимания и так я его ни разу и не тыкала палочкой.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

насколько удобно?

В плане программирования, очень удобно. API прямо топ.

есть ли плюсы у тикля?

Кроме удобных API, синтаксиса и очень удобного шелла, не могу ничего привести тут. Производительность там не блещет, но его не за этим берут.

hateyoufeel ★★★★★
()
Ответ на: комментарий от wandrien

я вот, кстати, многих названий и не знала даже. я только CamelCase знала и очень его не люблю. полагаю, его лучше писать как CaMelCaSe, чтобы лучше подчеркнуть его нечитабельность. ну, может ещё термин MACRO_CASE как-то попадался.

предпочитаю snake_case. хотя я его всегда считала «kernel style». но я начала его использовать задолго до того, как появился сам кернел. вероятно, где-то его видела или как-то сама дошла до удобства именно такой записи.

Iron_Bug ★★★★★
()
Ответ на: комментарий от dataman

хмм.. тоже ничего об этом не слышала. делала гуи на wx, потому что там можно было прямо в xml скармливать портянку и он в рантайме умел из него генерить формы. это было очень удобно для практических нужд.

стало любопытно, но почему-то на сайте этого IUP не нашла скринов, как это выглядит в графике.

з.ы. не, нашла там Gallery, наконец. есть картинки.

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от wandrien
Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
$form.Text = "My WinForm Window"
$form.Size = New-Object System.Drawing.Size(300, 200)
$form.StartPosition = "CenterScreen"

$button = New-Object System.Windows.Forms.Button
$button.Text = "Click Me"
$button.Size = New-Object System.Drawing.Size(100, 30)
$button.Location = New-Object System.Drawing.Point(100, 70)

$button.Add_Click({
    [System.Windows.Forms.MessageBox]::Show("Hello from PowerShell!")
})

$form.Controls.Add($button)

[void]$form.ShowDialog()
PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

Спасибо за пример. Какого-то такого ответа я и ожидал, хотя было самому лень гуглить.

Зная любовь MS интегрировать всё со своими COM и .NET экосистемами…

wandrien ★★★
() автор топика

Слу, ну что за жизнь у тебя, то то не так то это криво.

А люди-то просто ждут релиз твоего DE, а все нет и нет

irton ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.