I'm French too, and when I was young, I learnt the Basic language before learning English (by reading Basic programs already available on our computer).
So I was able to write FOR … THEN … ELSE blocks without even knowing what the keywords meant (I just know what they did to the program). One day, I explained to my father what I was writing, and I read out loud FOR … "TEN" … "ELCE" (with a strong French accent), and he corrected me by pronouncing the words correctly ("FOR … THEN … ELSE"). I was shocked: "how do you know?" (he knew nothing about Basic or even programming).
I learnt that day that "for", "then" and "else" were not just keywords in the Basic language, but they were actually real words in English.
> "XMPP still largely resembles a synchronous protocol with limited support for rich media, which can’t realistically be deployed on mobile devices. If XMPP is so extensible, why haven’t those extensions quickly brought it up to speed with the modern world?"
Intuitively, I would say that this is actually undefined behavior (it would probably be difficult to expose a wrong behavior in practice though).
In C specs, I found 6.5.2.2, paragraph 9:
> If the function is defined with a type that is not compatible with the type (of the expression) pointed to by the expression that denotes the called function, the behavior is undefined.
It's worse than that. This guy takes a void* function and casts it to a char* function, then passes it a char**.
void (*name)(char *ptr);
typedef void (*name_func)(char *ptr);
void target(void *ptr)
{
printf("Input %p\n", ptr);
}
char *data = "string";
name = (name_func)target; // Illegal: casting fn that takes void* to a fn that takes char*
name(&data); // Illegal: passing a char** into a function that takes char*
Before someone mentions qsort(): the comparator function really is supposed to take a void*, and inside the function, you re-cast the void* argument to a pointer type of your desire. If you don't do it in that order, you're using it wrong.
The C standard mandates that a “pointer to void shall have the same representation and alignment requirements as a pointer to a character type”. In consequence, the same holds for an array of void pointers vs. an array of char pointers. The code therefore seems valid to me, and furthermore at no point is a function called with an argument type different from its formal parameters.
In the GP example, a char** is passed where a char* is expected. That is clearly invalid.
I was more referring to how, in the K&R example, a function of type "int (*)(char *, char *)" is cast to "int (*)(void *, void *)", in contradiction to what they said here:
> Before someone mentions qsort(): the comparator function really is supposed to take a void*, and inside the function, you re-cast the void* argument to a pointer type of your desire. If you don't do it in that order, you're using it wrong.
In contrast, the K&R example is an example of explicitly undefined behavior in the C standard:
The behavior is undefined in the following circumstances:
- A pointer is used to call a function whose type is not compatible with the pointed-to type (6.3.2.3).
The second edition was released in 1988, and it was based on a draft of the first ANSI C standard, and even then, the line stating that this was undefined behavior was already present.
> A pointer to a function is converted to point to a function of a different type and used to call a function of a type not compatible with the original type (3.3.4).
Ah, I missed that. However, footnote 41 states “The same representation and alignment requirements are meant to imply interchangeability as
arguments to functions […]”, which could be taken as implying compatibility of function types, though the normative wording doesn’t directly support that.
In C, all pointers are compatible to a void pointer without casting though (e.g. assigning a char pointer to a void pointer or the other way around is completely legal - I think that was the main reason why void pointers were added in the first place - it's basically an 'any pointer'). It's only C++ where this is an error (which is weird on its own, why even allow void pointers in C++ when the only reason they (presumably) exist doesn't work anymore).
The above code still doesn't compile in C because C complains about the function signatures being incompatible, even though the only difference is the argument type which itself is 'equivalent' in C - which I guess could be interepreted as an edge case in the C spec? (IMHO the function prototypes should actually be compatible).
"Compatibility" has a specific meaning in C which isn't the same as what you're describing here. What you're talking about is implicit conversions without narrowing.
The C standard is quite loose about pointer requirements. Conversions between data pointers or between function pointers are allowed, but conversions between each other are not guaranteed. You can read the nitty gritty here: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
POSIX defines stricter requirements for pointers than the C standard. All pointers are compatible, so they have the same size and representation, and conversions between function pointers and void* are explicitly allowed.
you can convert a short to an int without casting and it will roundtrip without loss of data; similarly you can roundtrip any data pointer through a void pointer without loss of data. It doesn't mean that an int has the same representation of a short or a void* has (necessarily) the same representation as any other pointer.
In C++ any pointer is also implicitly convertible to a void *, it is the reverse implicit conversion that is prohibited as it is not safe in the general case.
For consistency C++ should also prohibit implicit narrowing conversions (e.g. int to short ); I guess this was thought to break too much existing code and it is generally safer than a pointer conversion (although potentially lossy the behavior is fully defined). Many compilers will warn about it, and narrowing conversions are now prohibited in braced initialization.
Yes. Simply put, void pointers and struct pointers (the actual breaking example in Curl) are not guaranteed to have the same byte-level representation, by the C standard. (For example, a struct pointer may always be aligned and therefore use fewer bits than a void pointer.) Passing one to a function that expects the other may result in arbitrary breakage.
Maintaining a fork by merging upstream into downstream branches would be a mess: upstream and downstream code would be totally entangled, there would no clean way to edit/remove/reorder downstream commits. You can't easily know what you actually changed (not the full diff, but each "atomic" clean change).
> there would no clean way to edit/remove/reorder downstream commits
Yes, but I consider commits immutable so reordering or editing commits is not a thing that would happen. New commits are appended (either upstream or downstream), and any conflicting changes then of course have to be merged from upstream into downstream.
Merging seems easier? With merging you can get a definite answer about which commits are where. With rebase you’re dealing with changes/patches so the answer is less clear.
But it might be cleaner (for some definition of clean) to have a for which is just N commits on top of the upstream. Which is then rebased periodically.
It depends on whether the downstream only ever consumes upstream changes, or also often contributes changes to upstream. Rebasing in both directions can result in a messy history, too, especially if upstream isn't very careful in how it accepts pull requests.
I think tiling is great for terminals, but not for the whole desktop (I don't want my web browser or video player to be resized because I open a new program).
So I use a "normal" floating environment (xfce, but could be another one), and I use Terminator in full screen enabled on a specific shortcut, so that I have tiled terminals.
> I don't want my web browser or video player to be resized because I open a new program
I suspect most tiling WM users don't either. I suspect most/all such WMs provide an option for this.
I can speak only for Awesome WM. You can configure it so that certain applications don't tile. So if you want your media player to always be in floating mode, simply add that entry to your config.
Alternatively, because you have multiple virtual workspaces, you can designate one or more of them to be in floating mode. Then every application in that workspace will be floating (i.e. you don't need to manually add them to your config).
You can with a keystroke switch a given workspace into floating vs tiling mode.
You can, with a keystroke, switch a given application into floating mode - even if the workspace is in tiling mode.
With Awesome, your virtual workspaces are not really workspaces, but "work configuration tags". So I can have Firefox in workspace 1, and xterm in workspace 2. In each one, they are maximized. Then if I ever need them in the same workspace, I can add both of them to workspace 3. So now:
Firefox is in both workspace 1 and workspace 3.
xterm is in both workspace 2 and workspace 3.
When I'm in workspace 1, I see only Firefox.
When I'm in workspace 2, I see only xterm.
When I'm in workspace 3, I see both (tiled).
There are plenty of options. For me, it's the rare exception when I don't want a window tiled. And with a quick keystroke I switch it to floating mode.
(For media players, I've configured them to always run full screen, so it doesn't matter how many other applications are tiled in that workspace).
The solution is as simple as using workspaces. On 1 I have my browser, on 2 I have my terminal and dev environment, and I just keep placing things down the line.
Again using parent's example of AwesomeWM: You'll temporary move one of the "windows" to the same "screen" as the other one (via "tagging"), resetting everything once you're done. Usually this is like 2 or 3 shortcuts all together.
AwesomeWM uses a tag system for windows, so you assign windows to one or more tags, then you can freely view one or many tags at the same time, compared to the traditional "workspaces" approach that for example Gnome and macOS has.
Use a keyboard shortcut to switch to a tiling layout? Or if you're psychotic, like I am, activate your Quake-style semi-transparent terminal that overlays the desktop, allowing you to (barely) read the superimposed instructions in the browser window below.
IMO, tiled Quake-style overlay terminals (guake, yakuake, iTerm hotkey window) over floating windows offer the best of both worlds.
And then there's me with 12 terminals opened across 7 tags for running random ls command. I also have a nice collection of 10-12 firefox windows with dozens of tabs. My tendency to open many many windows has sky-rocketed, thanks awesome !
> what do you do when you briefly need to look at your browser and your terminal at the same time?
I'm surprised anyone would want a non-tiled window for this. I'm always annoyed at having to manually drag the windows to a corner each when following instructions on systems not my own.
Open a scratch pad or move the browser to the first workspace temporarily. Rarely will I ever have more than one or two windows open per workspace. It's not intuitive when you aren't used to it, but it feels really good after you have configured things to work to your liking. Maybe I'll blog about it so I can describe it better.
> Open a scratch pad or move the browser to the first workspace temporarily.
Both are more painful than a simple keystroke. And you can immediately go back to the same window configuration you were at after you've done the copying.
> Rarely will I ever have more than one or two windows open per workspace.
Same here. I have some workflows where I need 3 windows. The times I need more occur once every so many months.
Reading all the comments on this submission, I don't understand why people are associating tiling WMs with "many windows on the same virtual desktop". Tiling WMs also have virtual desktops. I personally like that I don't have to manually maximize anything any more. What I'm really grateful for is not having to manually move/resize/switch windows around when one is overlapping the other. It's very painful when I have to use a system that isn't a tiling WM.
Personally, I do want all windows to tile. Your comment has left me wondering what the preference is across tiling desktop users.
I don't think I _ever_ use floating windows for anything. Except pop-ups from applications that don't properly configure their pop-ups as such. My secret storage shows an overlay prompt to disclose permissions too. But that's also kind of a pop-up.
> > I don't want my web browser or video player to be resized because I open a new program
> I suspect most tiling WM users don't either. I suspect most/all such WMs provide an option for this.
Well, here I am, opening terminal on the same tag I have a firefox window to run command and read docs. I should learn to stick window to multiple tags at once.
Is that similar to how DWM does it? I heard some people complain that tricks like these are not compatible with some free desktop standard. I am not familiar with it though, which is why I am asking.
> You can with a keystroke switch a given workspace into floating vs tiling mode.
Yup. I use the Awesome WM on Linux too and it's exactly what I do, since forever.
I've got for example one of the workspace in floating mode and it's using rules for app placement: only Emacs visible in that workspace? In the middle. Emacs+browser visible in that workspace? Browser on the right of Emacs. Emacs+browser+up to four xterms, Emacs and browser don't change size, but the xterms do.
I'm using a 38" monitor since 2017 and I noticed that the bigger the monitor, the more there'll be times when you need actual rules saying exactly how things should be laid out.
But I'm still using tiling modes in most workspaces.
As a bonus I do "funny things" when switching between workspaces.
For example I've got 13 workspaces or so: by default Awesome WM only gives you 10 btw but I added a few others, in addition to shortcut+0-9, which I access with shortcut+a/b/c/d [the shortcut key you actually use for that is ofc configurable too]). And out of all these workspaces, there's only one which is allowed to use the CPU at full speed: all my other workspace put the CPU governor automatically on "powersave" mode.
And it's only in my "dev" workspace that the CPU can ramp up to its full speed.
Now I'm toying with something else: per-user firewalling rules (I'm using several user accounts and I already have got rules for each user) but also per-workspace firewalling rules. For example when I switch away from the workspace with the throwaway user account that's used for surfing, the firewall shuts off Internet access for that user (even if the browser is still opened: so as soon as I get back to that workspace, the net works again for that user).
Because if you think of it: why should a non-visible browser even be able to emit/receive any networking trafic? Every single proper webapp (all the Google suite, my broker's webapps, my banks, etc.) all do handle network disconnect just fine. Arguably a webapp that cannot deal with the network going off is not much of a webapp.
So when I switch to a workspace that doesn't contain a visible browser: the browser(s) do believe the Internet just got cut off.
If I've got a browser that really needs Internet access even when it's not visible (for example because I'm downloading something huge), I can send it, using a shortcut, to a workspace which allows web traffic. Awesome WM has got shortcuts for everything.
It's really sweet.
And as it's Linux: it's rock stable solid. It may take some time to set up properly but once it's done, it's done and shall keep working.
The "CPU governor changing depending on which workspace I'm on" is working since years. The "firewalling rules changing depending on which workspace I'm on" is a recent addition.
P.S: as a bonus, upon starting, I've got my Awesome WM configured to "pre populate" all the virtual desktops with the apps I know I'll use (say I'll always have my browser linked to my professional email on workspace 1, while workspace 12 shall always be the "throwaway browser" that's reset everytime I reboot the system).
This is a great example of the power of Awesome WM. Although I've used it for well over a decade, I never spent time customizing it (but did spend a lot of time fantasizing about customizing it :-) )
Using workspaces to toggle the network is brilliant!
I've never been able to make tiling-first environments work for me (even if they have a floating mode). Things that aren't terminals or text editors tend to not tile well, particularly on smaller screens, and using them entails a level of window micromanagement that I don't engage in with floating-first environments.
The ability to overlap is also actually pretty valuable for me. Often I don't need to see a whole window, just the pertinent portion, and sometimes window edges peeking out from behind my browser window act like post-it note style reminders.
It's nice to be able to snap windows into grid positions on occasion (preferably without aero snap, the animations for that erroneously trigger way too often on multi monitor setups) but it's easy enough to bolt that onto a floating WM.
> The ability to overlap is also actually pretty valuable for me. Often I don't need to see a whole window, just the pertinent portion, and sometimes window edges peeking out from behind my browser window act like post-it note style reminders.
I have occasionally thought about a system where you can zoom and scroll a view on a window, but without telling the program that you're doing it. So for example, you could crop into say firefox and only show the actual page (completely cutting out toolbars and such) without it resizing itself. This is mostly of interest on smaller screens, but it'd still give you efficiency gains on a bigger screen.
Firefox has two forms of zooming, one of which resemble what you're describing.
1. Zooming with Ctrl++ or Ctrl+- will "tell the page" that it's being zoomed and it will reflow into the new viewport size.
2. Zooming with two-finger pinch (requires a touchpad) will zoom in as if magnifying the page. Content on the page will overflow to the right instead of reflowing.
Supporting an equivalent on regular desktop windows could be pretty useful.
That would be a useful feature, so long as there's some associated UI that makes it obvious that the feature is active along with an easy way to toggle it off. Seems like it could be one of those features that users accidentally trigger without realizing it and then feel "trapped" not knowing how to make it stop.
Check out scrolling window managers. Niri, paperwm etc.
The windows are almost always full height and you just scroll to next or previous windows in the Workspace. It reduces the spatial navigation to just one axis and works pretty well on ultrawides.
Might give them a try when I get the chance, but I'm skeptical that those will be much better than tiling for my usage, particularly as someone who prefers a centered main monitor and angled secondary monitor over ultrawides.
Paper wms still tile. As in you can tile vertically as well. The difference is new windows open to the side full height, instead of trying to cram into a potentially already crammed layout. It’s really powerful when you want to open a pdf or an image or something related to the stuff you are working on in a tiled workspace but don’t want to resize everything.
The issue with alt tab and the main reason why I personally eventually moved into tiling managers is the reliability.
Alt tab often requires two things: 1) Figuring out how many clicks to away your desired window is, as they change 2) executing those multiple key presses correctly
When you compare this situation with a wm where you place or permanently bind certain windows to a number (eg messaging apps are always CMD + 0 for me) then you can see how you can grow to prefer the certainty, there's no more fiddling for the window you're looking for.
Windows actually sort of had this feature with windows + numbers as that focused the window by order on the bottom bar, but lately with window groupings and things like that it breaks for common use cases such as multiple browser windows.
How is this related to tiling managers if you can do exactly the same thing without them in your generic shortcut utility?
There is also a downside of this certainty: you always need to keep in mind the two recent apps you're working with (for some uncommon apps you wouldn't even have a predefined CMD+0) and then your CMD+0 wouldn't help if you have multiple messenger windows and need to switch between two
I experienced some of these issues. For me, what eventually clicked is either simple automated tiling (xmonad with fullscreen and split horizontal/vertical) or Emacs-like manual tiling (StumpWM). I don't have a huge screen, so more than two windows is a stretch. Both of these WMs are decent at floating layouts.
Besides, I find the simple tiling offered by the stock GNOME Display Manager, which is similar to the way I use xmonad, good enough. Given that GNOME has great support for floating windows, that is perhaps an option you should look into.
Conversely I do like my web browser and video player to resize when I open something else, so that I can still see the entirety of the video or whatever when I pull up another document or page. The biggest problem in my experience is that many web pages are bad about resizing and lose your scroll position when resized
That’s more a browser implementation issue in my view. It’s a hard problem though in the general case, they’d have to identify the “main” content to synchronize on. Or, barring that, maybe they could determine the position that maximizes the total area of elements that remain in view.
> I don't want my web browser or video player to be resized because I open a new program
That's the reason why tiling wm users use multiple virtual desktops. In fact, switching between virtual desktops will behave like change maximized windows, unless the virtual desktop has more than one windows (those are the cases that you want it to do that).
Launching a terminal in sway is so easy ($mod+enter) that I haven't bothered to replicate the same thing in Emacs. As for the gui things, it's mostly for moving stuff between smb shares (I was tagging music files). Dired is great, but sometimes, I idled in mouse mode.
Why not EXWM to have free tiling instead of using i3 like a set of FF tabs... That's was my path years ago, I've tried a bit i3 concluding it's rigid tiling model it's essentially useless and I've in the end use tabs/split screen and rarely stacks. Then EXWM, at first very hard to start as a WM (I was also new to Emacs, former hardcore vimmer) but thereafter... I can't even use floating WMs nowadays... Though I do not user eat/vterm/eshell simply because for casual terminal usage (living in Emacs makes me use the terminal much, much less) it's not that comfy.
Dired on contrary is super good also to rename files en masse, to filter them and so on.
Funny, in awesome my layout is 1. Browser (FF and Dolphin), 2. Terminal, 3. Editor (Emacs). Continuing on from there my layout differs a bit more with 4. Documents (Okular and LibreOffice), 5. GUI (for when I want to try resizing a GUI program to see if its design is properly responsive), 6. Multimedia, 7. Miscellaneous.
I have a similar setup. Do you have this set up to launch the applications at boot? AFAIK Sway has no provision to store the layout between reboots, which is actually a feature.
> Do you have this set up to launch the applications at boot?
No. The only thing I almost always want at boot is the browser, but I usually wait for my first query to launch it (If I wanted something that badly, I'd use my tablet). Whatever prompt me to turn to my computer is what I want first, and I don't want other stuff to slow it down.
> AFAIK Sway has no provision to store the layout between reboots.
I think you can script it out if you really need to.
> I don't want my web browser or video player to be resized because I open a new program
I've been using niri (a tiling WM) recently. This is their very first design principle:
https://github.com/YaLTeR/niri/wiki/Design-Principles
Maybe other PaperWM-inspired WMs are similar. niri is the first I've used.
If your windows within a workspace are wider than your screen, you can scroll through them.
You also have different workspaces like normal.
I'll normally have 1 workspace with a bunch of terminals, and another for browsers and other apps (often another terminal I want to use at the same time as browsing, e.g. if I'm looking things up online).
> I don't want my web browser or video player to be resized because I open a new program
You use tiling only if you intend to use tiling. Else you switch to another workspace or whatever.
This is not so different from a normal desktop environment, except you hit, say, Meta+3 to find your web browser instead of hitting Alt+Tab over and over, accidentally missing your web browser, and doing it over and over again.
I agree. In my opinion, PaperWM and Niri solve this really, really well in my opinion. They don't resize anything-- just arrange everything on an infinite horizontal plane, and you move left / right through your windows.
Paperwm is amazing. I don’t know how I can go back to alt tab now that I can navigate windows with arrow keys or hjkl, floating window managers seem Barbaric.
>I think tiling is great for terminals, but not for the whole desktop (I don't want my web browser or video player to be resized because I open a new program).
This, I can't imagine anyone wanting that sort of tiling. Anytime I have a use case for tiling in my own job it ends up being impossible to get things tiled the way I want and also have the things I don't want tiled setup correctly on my other screen.
Years of XMonad use here. Really, it's not the interference you are imagining.
Much of the time I have a web browser using a whole portrait-aligned monitor, but sometimes I feel like having it 2-up in a landscape monitor.
The win of nice clean window separation, without giving up significant percentage of my display space to window decoration, is -profound-.
I have one pixel borders around my shells, and I have it because I fiddled with zero and decided I liked one better. How many pixels do you lose to decoration, so you can mouse over them cleanly? That's a major win.
> The win of nice clean window separation, without giving up significant percentage of my display space to window decoration, is -profound-.
What does this have to do with a tiling window manager? I'd expect the app decides how to display window decoration, not the window manager. In fact I can confirm that right now since Chrome has different window decoration than say TextEdit. Also, scrollbars, macOS has them invisible by default so they don't take any space.
As for 2-up. Both Windows and Mac have shortcuts for that case
You're incorrect: there might be some decoration provided by the app, but there's a layer outside of that which is configured by the window manager. That's the title bar, and the little icons by which you maximize/ minimize/ "Iconify"... do people still do that?..
That's something that's different between X11 and Wayland - in Wayland, windows are responsible for their own decoration (I presume Xwayland handles decoration for X11 windows running through Wayland). This makes it quite a bit harder to hide all decorations on Wayland - various UI toolkits have ways that the end-user can tell them to hide bits, but they all operate differently and don't cover everything.
You act as if that's the only option! You can have tabbed or "stacked" layouts or use virtual desktops. I've been using exclusively tiling managers for a few years now and it's great.
Yes and no. It's a reason why I use my own wm. I have a floating desktop and 9 tiling ones. By most of my browsing is on a tiling desktop that is usually single window but where I do want it to split if I open another window
As a tiling window manager user, I am really frustrated with mainstream web browsers. They are an ergonomic disaster for me, forcing me to use the mouse and waste so much precious screen real estate with gray space and redundant tabs. I want to disable tabs and just use windows managed by my window manager. That's what window managers are for! Separation of concerns is a pretty good notion in my book. Emacs can have a server and multiple "frames", so why can't Firefox or Chrome? Someone please tell me this is possible and I just missed it.
With all due respect, I think that this is just the inevitable cost of swimming upstream. GUIs are designed, through and through, to be used with a mouse. Someone who wants to navigate purely with a keyboard just isn't part of the thought process when designing the UI of your browser.
I’m with you and I remember a brief time when Windows ?!? had the nerve to try this with Microsoft Edge (Windows 8-ish). I love workspaces and generally don’t like applications to have internal tabs.
I used to think this way, but having used popOs's tiling in gnome I gotta say it's the best of all worlds. I really like being able to have code split with documentation or an ebook. I know you can technically use the manual split L/R but having it autosplit is nice. I feel like it really supercharges my research workflow.
If I don't want something to split, I can either turn off tiling and revert back to default gnome behavior (rare), add an exclusion for something I never want tiled, or most often I just send that app to a new virtual desktop.
This is what I thought as well before I moved to a tiling WM. But it turned out to be a non-issue for me. Just switch workplaces if you don't want to resize.
That's kind of funny because I use a tiling window manager (hyprland) because I don't want those things resized. things resize in a predictable way so you just hover the mouse over the tile you are ok with resizing on you and that's all that changes (then you can hold your mod key and drag what opened wherever you want or hit your mod key combo to make it floating and it will float instead of tile. My video player tile is tabbed so I can drag as much stuff in there as I want and it will never resize, just add tabs that I can tab through).The tiling lets me very quickly create the desktop layout I want every time and it's always exactly how I want it or easy to fix, so for me that's great.
this. the uis for different apps have different needs - ex. keeping a video editor wide and narrow. and its not uncommon to want more apps open than would fit into their own tiles or having to move to another desktop workspace. i just wish there was a compositor or window manager for wayland that supported working this way, none really do. without a tiling wm, apps in gnome want to open right in the center of the screen, and don't remember their positions, its comically bad
I use tmux (window tabs, vertical or horizontal pane splits) and opt-in tiling shortcuts for the desktop to quickly move apps to corner, top, bottom etc. Works for me.
Can't tmux's built-in mouse support¹ handle this? Just add
set -g option mouse on
to your `tmux.conf` and tmux will do mouse selections for you and won't cross pane boundaries.
You can use something like tmux-yank² to get your tmux selections onto your OS/DE clipboard if you're not using a nice/modern terminal emulator with OSC 52 support and you don't want to manually plug in `xsel` or `pbcopy` or whatever. (See the tmux docs on clipboard integration³ if you're not sure whether/how your terminal supports the standard.)
Yes it can! It's hard to get precisely the behaviour you want across tmux and vim. I'm 99% there with my config. Selecting any text copies it to the clipboard (with options that work for Xorg or Wayland) and handling panels properly.
The only remaining annoyance for me, and one which I don't think is "fixable"... say your left pane is a terminal and you've got a few pages of output (cat something). The right pane has a file open on vim, where you're making notes. As you scroll through the long output you want to select a chunk of text and then paste it into vim, and then carry on scrolling as you hunt for the next clue. Except that the instant you select text, focus returns to the prompt at the bottom of the pane. You compete lose your scroll position. It's intensely annoying. The workaround is "don't do it that way", which is fine until you forget and end up shouting at your computer.
Does that reset/jump still happen when you're in copy-mode?
If not, maybe you can you rebind the scroll wheel to enter copy-mode if it's not already in it, and then scroll, and bind enter/return while in copy-mode to exit copy-mode.
Oddly enough I searched for a fix for this after posting. And amazingly I found one that works (as well as several that didn't, and one that require add-ons)
For anyone interested, this is in my .tmux.conf now
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe "xclip -selection c -i" \; send -X clear-selection
bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection c -i" \; send -X clear-selection
You would have to switch the xclip for wl-copy if you're using Wayland, and some form of pbcopy command on Mac. No idea what windows folks do.
I agree that resizing the browser automatically isn't optimal, but I suck it up because tiling window managers don't require me to use the mouse and that's worth everything to me. If anybody made a more innovative/flexible keyboard-controlled alternative I'd be all over it.
You don't have to tile the browser or video player if you don't want. You can put those windows in a separate workspace or use a tabbed layout. This makes them behave like fullscreen apps. You can even make them literally fullscreen by removing borders and hiding the bar.
EXWM user here, I have no issue with tiling mplayer or firefox, most of the time I simply use them full screen, if I open something aside flipping (mode-line-other-buffer) or anyway re-layouting my desktop is super-easy with proper keybindings to simple physical keys actions.
Meanwhile I fail to see any reason to waste time moving floating windows, playing overlapping. I use floats for instance for GIMP, they do work enough, but that's is, the float problem is more a GUI concept problem where the GUI dev have designed something not flexible enough in most cases.
You use a terminal, good, why you use menus on GUIs apps? It would not be much quicker the Ubuntu Unity HUD? Why having specific buttons instead of allowing typing/clicking text like in org-mode or Plan9 ACME editor? Why even menu bars instead of context menus? Do you really need to see let's say WYSIWYG office suite buttons all the time, wasting vertical screen space, for what? You want to make some text bold, you still have to select it, why having a B icons up there?
Why even have a damn desktop with icons concept since every time you use an app you cover the icons? Why not simply have an initial screen/page/you-name-it easy to write like an org-mode note, composed of active contents, like the said note, with anything you want, including even a reminder quickly written during the previous desktop session? Personally I have a single key bound to a function bringing me the current day note, I can directly type some text, click on the unread mail link witch is also a single key if I want, see/click some other stuff etc, why in modern desktops hyper-simple things like damn write down a simple note demand going through a menu, find a relevant app, launch it, type the few words, save them etc etc etc? Why it's so damn hard to link an email in a note, a local pdf, an "action" that do something on my desktop, a small sexp that let's say switch my current "web desktop" to "daily todo" windows layout etc?
The whole modern GUI concept down to the desktop is deeply flawed, born with the idea to make things easy for computer-illiterate imaging "the desktop" like a physical desk (try looking for General Magic systems) doing anything to mimics papers of that time, like "folders" (suspended folders, very popular when their visual concept was born) instead of directories (meaning list of files, because that's what they are) or even the concept of "single document file" where perhaps a note-app have no reason to store a file per note or even expose the user to the on-disk storage. Why even having a filesystem organized like a tree instead of a free graph? Yes, we need a starting point for the system, but the humans do not need it...
Yeah I think window half/quarter screen snapping (with keyboard shortcuts, which XFCE has) fills all the benefit of a tiling wm I want, without the constraints and with the flexibility of a floating wm.
And I do heavily use tiles/panels in programs like Terminator and iTerm2 because it's helpful in a terminal context.
That's exactly how I have XFCE set up, with Super+Numpad keys bound to each half/quarter of the screen (Super+5 for maximize). Works great, and I can get all of the benefits of tiling without the limitations.
When I needed to learn JS above the 'hack it out' level, Eloquent JavaScript was really great. It really focuses on fundamental constructs and is not tied to any 'framework of the day'.
I see there's a 2024 edition that I should probably order.
Update: Looks like the 2024 version is going to be released in Nov.
So I was able to write FOR … THEN … ELSE blocks without even knowing what the keywords meant (I just know what they did to the program). One day, I explained to my father what I was writing, and I read out loud FOR … "TEN" … "ELCE" (with a strong French accent), and he corrected me by pronouncing the words correctly ("FOR … THEN … ELSE"). I was shocked: "how do you know?" (he knew nothing about Basic or even programming).
I learnt that day that "for", "then" and "else" were not just keywords in the Basic language, but they were actually real words in English.
reply