Searching We Love Privacy Club

Twts matching #event
Sort by: Newest, Oldest, Most Relevant

New Google Earth AI Tool Could Fuel Misinformation, Experts Say
Google has integrated its Nano Banana 2 image generator into Google Earth, allowing users to place AI-generated events and objects onto real satellite imagery. The company says its AI-generated images contain invisible watermarks detectable through Gemini or Lens, but the BBC found those safeguards and some third-party detection tools can be fooled … ⌘ Read more

⤋ Read More

Earth’s Biggest Disasters Strike In a Hidden Pattern Every 27 Million Years
A new analysis of 89 major geological events over the past 260 million years found evidence that mass extinctions, volcanic eruptions, ocean crises, and other upheavals may cluster around a roughly 27.5-million-year cycle. The cause remains unknown, with possibilities ranging from mantle activity and orbital changes to spe … ⌘ Read more

⤋ Read More

AMD ROCm Committed To Six Week Release Cycle Moving Forward
One of many interesting takeaways from this week’s AMD Advancing AI event in San Francisco was word that ROCm will be on a rigid six week release cycle moving forward… ⌘ Read more

⤋ Read More

AMD Advancing AI 2026: Open, Open-Source & More Open-Source
At this week’s AMD Advancing AI 2026 event, “AI” was mentioned thousands of times in talks and in demos. As expected. Beyond that, the other term likely most heard during the event was “open”… Not particularly new for AMD with their long history of open-source efforts but I’d wager at this year’s AMD Advancing AI 2026 event they were more acutely bringing up open-source, open ecosystems, and open standards. Certainly seemed like an uptick in “open” men … ⌘ Read more

⤋ Read More

Ryzen AI Software 1.8 Released With New Model Support, More Optimizations
Ahead of Lisa Su’s keynote this morning at the AMD Advancing AI event, tagged on GitHub just now was the Ryzen AI Software 1.8 release for helping to deploy AI models on Ryzen AI PCs… ⌘ Read more

⤋ Read More

Lemonade 11.5 Local AI Server Released With Completed Lemonade Router
Just one week after releasing Lemonade 11.0, the Lemonade 11.5 local AI server was released today for this open-source AMD backed project during their AMD Advancing AI event… ⌘ Read more

⤋ Read More

Hurray, I can now press gg instead of g to go to the top in tt. Much better! :-) Other multi-key combinations are also easily possible now.

I should probably write a real article about this at some point, but here we go. The only downside with my new key binding system is that it breaks tview’s established pattern. You’ve got an InputHandler(), that is implemented using WrapInputHandler(…). It typically then directly implements the switching logic depending on the key press. Something like this:

func (w *Widget) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
    // WrapInputHandler allows for intercepting key events with SetInputCapture(…)
    // from the outside for customization. This handles the default key bindings.
    return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
        switch event.Key() {
        case tcell.KeyRune:
            if event.Modifiers() == tcell.ModNone {
                switch event.Rune() {
                case 'k':
                    w.scrollUp()
                    return // we already handled the event, stop processing

                case 'j':
                    w.scrollDown()
                    return
                }
            }
        }

        // We didn't handle the key event. Maybe the parent
        // widget knows what to do with it.
        if handler := w.parent.InputHandler(); handler != nil {
            handler(event, setFocus)
        }
    })
}

From the outside, you can intercept and either stop or continue the widget’s original key handling with a potentially rewritten key event using SetInputCapture(…):

w := NewWidget()
// customized or additional key bindings
w.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
    switch event.Key() {
    case tcell.KeyUp:
        // Rewrite the event, so the "cursor up" key is an alias
        // for the vim key binding "k", that is handled by the
        // wrapped input handler above. (I know, I know, this is a
        // completely unrealistic example, why would anyone use
        // cursor keys when there are vim key bindings available?!)
        return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)

    case tcell.KeyRune:
        if event.Modifiers() == tcell.ModNone {
            switch event.Rune() {
                case 'q':
                    app.Stop()
                    // we already handled the event, do not pass it
                    // to the wrapped input handler above
                    return nil

                case 'r':
                    toggleMessageReadStatus()
                    return nil
            }
        }
    }

    // we didn't handle the event, pass it to the wrapped
    // input handler above
    return event
}

Since they all expect a single key, I’ve noticed that using multiple dedicated KeyBindings of mine on these different levels kinda breaks multi-key handling with common prefixes. The outer-most KeyBinding captures the prefix, but it can’t transfer it to the inner one if not handled by the outer one. At least not without some more (potentially ugly) changes. So, I now have to work with just a single KeyBindings object for the entire widget chain (if it consists of multiple other widgets or the regular input handler and input capture are in the game). The outside needs to register all its key bind customizations or extensions at the same level that the original widget handles its default ones. Doable by exposing the widget’s KeyBindings instance, but not pretty. You always have to keep this in mind.

With the KeyBindings, it will look like that:

type Widget struct {
    parent tview.Primitive

    // make it available to children or the outside either by
    // direct field access or by providing a getter method
    KeyBindings *bind.KeyBindings
}

func NewWidget() *Widget {
    w := &Widget{KeyBindings: &bind.KeyBindings{}}
    w.KeyBindings. // default key bindings
        Bind0(bind.KeySequence('k', w.scrollUp).
        Bind0(bind.KeySequence('j', w.scrollDown)
    return w
}

func (w *Widget) InputHandler() InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
    return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
        // also note the missing support for focus transfer at the moment
        event = w.KeyBindings.Capture(event)
        if event == nil {
            return
        }

        if handler := w.parent.InputHandler(); handler != nil {
            handler(event, setFocus)
        }
    }
}

And then from the outside, or in a child widget:

w := NewWidget()
w.KeyBindings. // additional or customized key bindings
    Bind1(bind.KeySequence(tcell.KeyUp), func(*tcell.EventKey) *tcell.EventKey {
        return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
    }).
    Bind0(bind.KeySequence('q'), app.Stop).
    Bind0(bind.KeySequence('r'), toggleMessageReadStatus)

When directly working with tview primitives that are not part of custom widget implementations, the following works well so far:

textView := tview.NewTextView().
    SetWordWrap(true).
    SetText("…")
    SetScrollable(true)
textView.SetInputCapture((&bind.KeyBindings{}).
    Bind0(bind.KeySequence('q'), app.Stop).
    Bind1(bind.KeySequence('g', 'g'), func(*tcell.EventKey) *tcell.EventKey {
        return tcell.NewEventKey(tcell.KeyHome, 0, tcell.ModNone)
    }).
    Capture)

I need to sleep on this some more.

Also, writing very long messages like this one is really not all that fun in tt’s editor. I should absolutely provide a way to shell out to vim.

(Took me about one and a half hours to compose, holy crap. But not only because of not using vim. Although, that might have saved me a quarter hour or so for sure. Proof-reading this message also uncovered quite a few bugs in my real documentation. So, that’s a big win!) Good night!

⤋ Read More
In-reply-to » I went to check on the fireflies this season. But I didn't see any. Instead lots of moths. At first, I thought it might have been still too light, but it was already dark enough for me to miss and destroy a snail shell. Bummer. Maybe it was too wet tonight. Although, it's probably just another or two weeks until my glowing friends will finally show up.

The firefly season is ending. I only saw 200 of them or so. There was one female directly on the forest road. If only I brought my camera and tripod, that would have worked out I reckon. I had my torch with me and this looked really cool.

Dusk took forever today. It was really long light out there. Full moon is tomorrow.

On the way back, there was suddenly a load clatter and crashing sound 100 meters away from me. I didn’t see anything, but a tree fell over in the forest out of the blue. Fuck me dead, that was scary as hell. Luckily, I was already on the main road, only meadows around me. It’s the second time I witnessed a tree accidentally coming down. The first one was during the most expensive hail storm in our area so far in 2011 behind me when setting up a summer camp. The weather changed in less than 15 minutes.

Maybe not such a good idea to go out so late alone. :-? Any rustling in the forest immediately reminded me of the boar the other day. Luckily, always false alarm. Still a bit terrified from that event.

⤋ Read More

‘Fingerprints’ of Black Hole’s Event Horizon Detected For First Time
Researchers say they detected the first gravitational-wave “fingerprints” of a black hole’s event horizon by analyzing the final moments of the powerful GW250114 merger. The findings support Einstein’s general relativity and may eventually help probe frame dragging and quantum fluctuations near black holes. Phys.org reports: For the new r … ⌘ Read more

⤋ Read More

Early AMD GCN GPUs Seeing Improved GPU Recovery - Another Valve-Led Linux Improvement
Early AMD Radeon Graphics Core Next “GCN” GPUs are seeing work to improve the GPU recovery process in the event of hangs. This work is yet another improvement for older AMD GPUs being led by Valve’s open-source Linux graphics driver team… ⌘ Read more

⤋ Read More

HPE Tempts VMware Users, Partners With Year of Free Virtualization Software
An anonymous reader quotes a report from Ars Technica: Hewlett Packard Enterprise’s (HPE) new virtualization software promotion will likely pique the interest of end users and resellers who are unhappy with Broadcom’s pricing of VMware. During its HPE Discover event in Las Vegas this week, HPE announced that customers could u … ⌘ Read more

⤋ Read More
In-reply-to » Every now and then, I think that I have carefully proof-read my message enough times and hit the "Add message" button in tt. But then, in the message tree, I spot another missed typo. My process is then to go to my twtxt.txt and fix it by hand. However, I still have to clean up tt's cache. This is rather tidious:

@lyse@lyse.isobeef.org

Now I’m curious how movwin deals with that. ;-)

Focus handling? I hardly remember, lol. 😅 Did that 6 months ago and haven’t touched it since. Let’s see.

The core main loop gets keyboard/mouse events from curses. At this level, the main loop only knows about exactly one widget, so it passes the event to that widget (whatever that is, doesn’t matter – they all inherit from the Widget base class, it could be a Window, a WindowManager, or an Edit box directly).

The outermost widget is usually a WindowManager. It implements a few hotkeys of its own, like switching to another window. If none of those hotkeys match, it passes the event to the currently focused window.

Same story here: Window implements some hotkeys (like opening the menu bar). If none of those match, then … the magic happens.

Each Window acts as a focus manager. It can descend into its child widget hierarchy and collect all child widgets in a depth-first search. They are collected into a flat list. Each Window then has an attribute _focus_position, which is an index into that list. Pressing Tab or Shift+Tab increases or decreases that index and that allows you to select the next/previous focusable widget in the current window.

Eventually, Window passes the input event to the currently focused widget.

Usually on initialization, the application can ask a Window object to focus a certain widget. The file selection dialog does that, for example, because the “natural” focus order would be to focus the Edit box at the top of the window first – but that’s not what the user wants, the Table showing the list of files should be focused.

If no widget ever feels responsible for handling a certain input event, then there’s a global unhandled_input callback that the application can provide (same as in urwid).

I think that’s it.

Hm, that’s more complicated than I remembered, but apparently it works fine, because I completely forgot about this. 😅 All I did in the last few months was make new classes that inherit from Widget, like the new Table class or Edit or HexEdit or whatever, and if they want to get input events, then they must implement the methods input_key() or input_mouse().

Does this answer your question? 😅 (I admit that I didn’t exactly understand your scenario, so I just went ahead and rambled about my implementation. 😅)

⤋ Read More

Donald Trump’s White House UFC Event Would Be Embarrassing Anywhere
A Monster Energy-sponsored MMA show on the White House’s South Lawn was never going to be the height of dignity. But UFC Freedom 250 is failing to clear even the lowest bar. ⌘ Read more

⤋ Read More

A state-first trial was trying to save WA’s prized reefs, until a cyclone threatened months of hard work
Millions of coral eggs and embryos during two separate spawning events – one in Exmouth and the other in Coral Bay – to save the reefs after a mass bleaching event. But Cyclone Narelle threatened to derail the project. ⌘ Read more

⤋ Read More

Spider-Man: Marvel Accidentally Reminds Us How Much Better Peter Parker Was
A new Marvel special accidentally reminds Spider-Man fans how much better the comic was before Civil War. The 2006 crossover event had a lasting effect upon the Marvel Universe. In the case of Peter Parker, however, the effects were disastrous on many levels. The special in question is Civil War: Unmasked #2, by Cristos Gage […]

The post [Spider-Man: Marvel Accident … ⌘ Read more

⤋ Read More

Jon Stewart Compares Donald Trump to Iron Man, Jokes About Doctor Doom Return
Jon Stewart recently used the Marvel Cinematic Universe to make a point about Donald Trump‘s political influence. He compared the president’s role within MAGA to Iron Man‘s importance to Marvel. During a recent Daily Show event, Stewart questioned whether the movement could maintain the same level of support under a different leader. Jon Stewart uses […]

The post [Jon Stewart Compares Donald T … ⌘ Read more

⤋ Read More

David Harbour Breaks Silence on Lily Allen’s Explosive Album: ‘It Was Weird’
David Harbour spoke about Lily Allen’s album, West End Girl, for the first time in a recent interview. After Allen used her personal experiences as inspiration for the project, Harbour shared that his perspective on the events differed from what was reflected in the album. Why David Harbour says ‘West End Girl’ wasn’t his experience […]

The post [David Harbour Breaks Silence on Lily Allen’s Ex … ⌘ Read more

⤋ Read More

View from the top: Agricultural leaders upbeat at Fieldays
A frosty 1C sunrise at Mystery Creek did little to deter the mood among the who’s who of the primary sector at day one of Fieldays.

The national four-day agricultural event kicked off on Wednesday, with leaders across the sector and politicians turning up to mingle with each other and farmers. ⌘ Read more

⤋ Read More

Obsession: Curry Barker Reveals What Really Happened to Nikki After That Ending
As Obsession continues to draw attention, director Curry Barker revealed what happens to the film’s central character, Nikki, after the ending. In a recent interview, he suggested a grim fate for her after the harrowing events she experienced during the course of the movie. Curry Barker on what happens to Nikki after Obsession’s ending The […]

The post [Obsession: Curry Barker Reveals What Rea … ⌘ Read more

⤋ Read More

The Other Major Soccer Event of 2026? The Shake-Up in the World of Video Games
The 48-team World Cup is not the only historic soccer event this year. Four titans are vying for control of video game soccer in the fiercest battle the industry has ever seen. ⌘ Read more

⤋ Read More

‘World Cup of chaos’: Can the most expensive sporting event deliver?
The World Cup returns to North America after 32 years. And just like in ’94, when O. J. Simpson’s police chase threatened to steal the show, the event is not without dramas. ⌘ Read more

⤋ Read More

Historic CBS Soap Crossover With Young & Restless & Beyond the Gates To Be Pure ‘Chaos’
Brandon Claybon and Clifton Davis teased details around the CBS crossover with Beyond the Gates and The Young and the Restless. It’s an exciting multi-episode event, starting on Tuesday, June 9, and running through Friday, June 12. This happens when a few Genoa City residents attend a high-profile fundraiser for Martin’s political campaign in the […]

The post [Historic CBS Soap Cro … ⌘ Read more

⤋ Read More

The world comes to Mystery Creek
There is a “growing appetite” for international delegations to use Fieldays as a place to learn about New Zealand’s agricultural sector, its chief executive says.

The national four-day event, which starts in Hamilton on Wednesday, is set to have 73 international exhibitors, up from 66 last year, from countries such as Australia, Belgium, China, Germany, Greece, Ireland, the Netherlands, Korea, Sweden, the United Kingdom and the United States. ⌘ Read more

⤋ Read More

[$] An update on fanotify
In a filesystem-track session at the 2026 Linux Storage,\
Filesystem, Memory Management, and BPF Summit, Amir Goldstein updated
attendees on the fanotify
filesystem-event monitoring
subsystem. He wanted to describe changes that had come in the last year or
so, as well as upcoming features and some remaining challenges in his
efforts [to use fanotify for hierarchical\
storage management](https://lwn.net/Ar … ⌘ Read more

⤋ Read More

Williamson thought he’d never swim again after a horrific gym injury. He just made another Australian team
Thirteen months after a devastating knee injury left him learning to walk again, Sam Williamson completed a remarkable comeback at swimming trials, while Sam Short went within touching distance of a world record. ⌘ Read more

⤋ Read More

Fieldays 2026: Sunshine, spending and an election
New Zealand’s agricultural sector is making its annual pilgrimage to Mystery Creek this week, with Fieldays’ sites sold out, farm balance sheets in decent shape, and an election looming in the background.

This year’s Fieldays is the first in recent memory to sell out all available exhibitor sites, something the event’s chief executive, Richard Lindroos, puts down to strength in the sector. ⌘ Read more

⤋ Read More