tlh / workgroups.el Goto Github PK
View Code? Open in Web Editor NEWworkgroups for windows -- sexy window management for emacs
workgroups for windows -- sexy window management for emacs
Hi there, this is most unusual and absurd thing. The one thing that is most important doesn't work. When saving session to a file, the workgroups are saved, but the buffer-file-name is not. Actually sometimes it is saved, but it seems to be totally random.
tried
emacs 24
emacs 25
emacs 26
clean init script only with workgroups enabled with standard customization.
i switched from using workgroups2 because it slows down emacs session over time. workgroups looked great at first, but this renders it unusable.. :/
it is possible i'm doing something wrong, but i don't know what..?
I don't believe this is implemented. Should it?
The name of the buffer opened with the command -? (wg-help) is called "workroups help" (notice the missing "g.")
on mac osx 10.7 when you save your worksgroups in fullscreen mode then reopen emacs, the sizes of the buffers are too big even though i'm not full screen anymore.
I don't know if this is implemented or not, but one of the great features of escreen is that each screen has its own recently visited files ring. So you can edit a few files in each screen, change from each, and have each screen remember the recent buffers (when switching buffers).
Is this possible with workgroups?
If one creates a file "test.org",
The buffer becomes de-associated from the workgroup.
Hi tlh,
I finally decided (actually, had time) to migrate to workgroups over escreen for testing purposes. I currently have the following in my
(add-hook 'desktop-save-hook (lambda ()
(wg-update-all-workgroups)
(wg-save "~/.emacs.d/workgroups-save")
))
.emacs file. Since I use desktop mode to to have my opened files opened automatically, I just update my workgroups whenever desktop-mode saves, which includes when I close emacs. I guess in theory i wouldn't need desktop-mode anymore, since workgroups should open up those files that are apart of the workgroups. Well, I guess files that aren't visible in any workgroups wouldn't be re-opened...so I guess I'll still use desktop-mode.
Now, to my question. Suppose in a workgroup, one of the window is a buffer that is not linked to a file, e.g., the messages buffer. If I save the workgroup, and re-launch emacs at a later time, this window does not show the original buffer, which makes sense, because those buffers aren't linked to a file. Currently, what shows up in those window spaces are other files that are opened in emacs. Is it possible to always use the scratch buffer in those places? That way other files aren't mixed in with different workgroups/projects.
I couldn't find a way to change a workgroup to which a buffer is attached. This feature would be useful for several cases:
Btw, is there a way to force all new buffers created by erc or gnus to open in a given workgroup ?
At first, I thought this was because I was using spaceline. But after running in emacs -q I honestly have no idea whats causing this. I'm running on GNU Emacs 26.1 (build 1, x86_64-w64-mingw32) 2018-05-30
.
I run the following commands in order:
emacs -q
M-x toggle-debug-on-error
M-x package-initialize
M-: (require 'workgroups)
M-x workgroups-mode
and then I recieve the following stacktrace.
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil)
wg-mode-line-add-display()
workgroups-mode(toggle)
funcall-interactively(workgroups-mode toggle)
call-interactively(workgroups-mode record nil)
command-execute(workgroups-mode record)
execute-extended-command(nil "workgroups-mode" "workgroups-mo")
funcall-interactively(execute-extended-command nil "workgroups-mode" "workgroups-mo")
call-interactively(execute-extended-command nil nil)
command-execute(execute-extended-command)
because wg-mode-line-add-display
is called after everything else is initted, it's not really a problem, in so far as because the mode is activated and works. It's just I don't like recieving a stacktrace or error message every time I activate the mode.
I've also tried setting wg-mode-line-on
to nil after requiring workgroups, before initialising the mode. but I still get the stacktrace.
Running Emacs24 HEAD on OSX.
I save a couple layouts and update them. Update each individually and do update all. They are all setup the way I like them. I save that file then. I come back into Emacs and in my init file I have the following:
(require 'workgroups)
(setq wg-prefix-key (kbd "C-\\"))
(setq wg-restore-position t)
(workgroups-mode 1)
(global-set-key (kbd "C-\\ C-\\") 'wg-switch-to-previous-workgroup)
(wg-load "~/.emacs.d/workspaces")
And i get this...
Debugger entered--Lisp error: (wrong-type-argument integerp (+ -36))
set-frame-position(#<frame vaccination.tex 0x100722da0> 0 (+ -36))
wg-restore-wconfig(((type . wconfig) (left . 0) (top + -36) (width . 103) (height . 66) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 104 65) (bname . "init.el") (fname . "/Users/dcurtis/.emacs.d/init.el") (point . 17134) (mark . 267) (markx) (wstart . 16148) (hscroll . 0) (sbars 15 0 t nil) (margins nil) (fringes 8 0 nil) (selwin . t) (mbswin) (dedicated))))
wg-restore-workgroup(((type . workgroup) (uid . 0) (name . "left") (wconfig (type . wconfig) (left . 0) (top . 22) (width . 103) (height . 66) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 104 65) (bname . "init.el") (fname . "/Users/dcurtis/.emacs.d/init.el") (point . 17134) (mark . 267) (markx) (wstart . 16148) (hscroll . 0) (sbars 15 0 t nil) (margins nil) (fringes 8 0 nil) (selwin . t) (mbswin) (dedicated)))) nil)
wg-switch-to-workgroup(((type . workgroup) (uid . 0) (name . "left") (wconfig (type . wconfig) (left . 0) (top . 22) (width . 103) (height . 66) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 104 65) (bname . "init.el") (fname . "/Users/dcurtis/.emacs.d/init.el") (point . 17134) (mark . 267) (markx) (wstart . 16148) (hscroll . 0) (sbars 15 0 t nil) (margins nil) (fringes 8 0 nil) (selwin . t) (mbswin) (dedicated)))))
wg-switch-right(((type . workgroup) (uid . 2) (name . "writing") (wconfig (type . wconfig) (left . 252) (top . 22) (width . 145) (height . 66) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 146 65) (bname . "vaccination.tex") (fname . "/Users/dcurtis/Thesis/vaccination.tex") (point . 10249) (mark) (markx) (wstart . 8620) (hscroll . 0) (sbars 15 0 t nil) (margins 32 . 32) (fringes 8 0 nil) (selwin . t) (mbswin) (dedicated)))) nil)
call-interactively(wg-switch-right nil nil)
If this is something that'll be fixed in the near future. I don't open emacs all that often from scratch so I can live with the screen-like reset each time.
Good Luck High Five.
Hi, I've got this message :
workgroups operations aren't permitted while the minibuffer is active
What does it mean ? This message comes (for example) when I try to find a file using C-x C-f and typing "/".
It would be nice if in each workgroup, we can save different window configurations, but with names instead of registers.
Edit: Sorry I've found out about wg-save-wconfig
.
I can't imagine this is the target functionality.
I use the same emacs fullscreen on remote desktop which has a smaller screen, and then at the desktop (where I can use the full screen) and everytime I have to resize the window once per workgroup.
I see wg-restore-position exists. Why no wg-restore-size, so I can set it to nil?
I have a workgroup dedicated to Gnus. When I go to compose a new message (e.g. gnus-summary-mail-other-window), then switch away from that buffer while composing the message, `C-x C-b' gets me a choice of "associated" buffers that doesn't include the new message, which is very awkward.
I have a few latex files (.tex) files opened in one window configuration. wg-save does not include the files:
(--workgroups-_- ((type . workgroup) (uid . 1) (name . "test") (wconfig (type . wconfig) (left . 0) (top . 58) (width . 149) (height . 35) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 151 34) (bname . "scratch") (fname) (point . 1) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 16 0 t nil) (margins nil) (fringes 9 9 nil) (selwin . t) (mbswin)))) ((type . workgroup) (uid . 0) (name . "temp") (wconfig (type . wconfig) (left . 0) (top . 58) (width . 149) (height . 35) (sbars) (sbwid . 0) (wtree (type . wtree) (dir) (edges 0 0 151 34) (wlist ((type . window) (edges 0 0 76 34) (bname . "init.el") (fname . "/home/vinh/.emacs.d/init.el") (point . 98030) (mark . 97998) (markx) (wstart . 97608) (hscroll . 0) (sbars 16 0 t nil) (margins nil) (fringes 9 9 nil) (selwin . t) (mbswin)) ((type . window) (edges 76 0 151 34) (bname . "scratch") (fname) (point . 1) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 16 0 t nil) (margins nil) (fringes 9 9 nil) (selwin) (mbswin)))))) ((type . workgroup) (uid . 2) (name . "hello") (wconfig (type . wconfig) (left . 0) (top . 58) (width . 149) (height . 35) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 151 34) (bname . "_scratch*") (fname) (point . 1) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 16 0 t nil) (margins nil) (fringes 9 9 nil) (selwin . t) (mbswin)))))
Can you help?
I use Emacs 23.2.1 on a 32-bit Debian box as my remote Emacs daemon. After connecting over ssh, I add new emacsclients using a script which runs
emacsclient -c --alternate-editor="" $@
If I update and save the working state of all workgroups (C-z U and C-z C-s), I can safely close the emacsclient frame with `save-buffers-kill-terminal' with no ill effects. However, if I forget to follow this procedure, or if my connection is interrupted, I can end up unable to access my emacs daemon--even resetting it with emacsclient --eval (server-start) becomes impossible.
Will add more info as I continue to poke the issue from this end.
I'd like to use the same frame size for all my groups because the size changes when switching between groups is distracting. Is it possible for workgroup to support it?
I'm using Workgroups with Emacs 24.0.9 in a 64 bits Linux machine. Emacs is compiled with GTK version 3.2.
Workgroup works fine otherwise but when I try to run emacs as a daemon I get the following message and emacsclient in not loaded:
Reset: Workgroups
Error in post-command-hook (global-highlight-changes-mode-check-buffers): (error X windows are not in use or not initialized)
But I noticed that if I comment the line (wg-load "path/to/my/workgroups")
in my .emacs everything works fine -- i.e., Emacs starts as a daemon. And once the Emacs daemon is up, I can load my workgroup file with M-x wg-load
.
Cheers.
mak
The current face defs specify light-colored :foreground
s on color displays, but these are illegible when using a theme with a light background.
One solution would be to add the background class specifier to the faces so that those light foreground colors would only be applied when the display has a dark background.
A better and more general solution, and one which I would strongly advise, would be to follow the pattern of many other emacs packages (including org), and use :inherit
to derive your faces from a variety of built-in faces, e.g. font-lock-keyword-face
. This way, the workgroups
faces will look okay by default with any theme, but can still be overridden if desired.
Keep up the great work!
Cheers,
-Steve
In Emacs 24.3, running "prefix ?" fails with
wg-help: Symbol's function definition is void: temp-output-buffer-show
When restarting emacs (tested 24.0.91.1 and 23.3.1), the workgroup's window layout currently isn't restored. Please note that I've explicitly set wg-restore-position to non-nil, i.e. "t".
Since a recent upgrade of emacs (from a 24.xx to 24.2.50.1) wg-help fails with:
wg-help: Symbol's function definition is void: temp-output-buffer-show. What's going wrong ?
Hi,
I know this is a matter of personal taste, but would it be too much to ask for an option that starts the workgroup number at 1 instead of 0? 0 would thus refer to the 10'th workgroup. My preference is because I use the numbers on top of the QWERTY keys, and 1 is the first one.
Thanks for your awesome work!
I'm ashamed to admit it, but I kinda love the window-warping animations you implemented. Often I'm switching between workspaces that have the same window layout: two windows, side-by-side... but there's no animation. It always seemed logical to me that the animation would sweep the new windows in vertically over the old ones, e.g. descending from the top.
Thanks again
When variable mark-even-if-inactive
is set to nil
module stops working completely:
Commands like wg-create-workgroup
print 'Mark is not active now' and do nothing,
then commands like wg-switch-to-workgroup
fail with 'No workgroups are defined.'
Workaround: restore mark-even-if-inactive
to original value t
I'd like to add you to my flattr, or whichever other platform you use. This is a really helpful tool for me, and I'd like to support it.
Keep up the good work!
In the experimental branch, buffers are saved with their UID, which is a buffer local variable during the session. However, if an IRC channel is dropped then rejoined (for instance if the server disconnects and reconnects), erc seems to stomp the local variables, which confuses workgroups.el. It seems like we should be able to hash something like the buffer major mode and the name instead of having uuids, which might solve things like this? I realize there's corner cases that'd fail in though.
Love Workgroup For Window. My biggest feature request would be a want to set a local default-directory per workgroup.
You should also set up a paypal account for people to donate money if that is helpful.
Thanks,
DKH
Line 2051: s/workroups/workgroups/
Have (desktop-save-mode 1) and (workgroups-mode 1)
Save a workgroup. Change one of the buffers to, e.g., scratch. Update and save the workgroup. Now scratch will appear in workgroups file. But, reloading the workgroup has the previous buffer displayed.
Regardless of what wg-prefix-key is defined, it stops working after a while. Don't know if this specific to me. If I leave the default, after a while, C-z suspends emacs. For other keys, it shows them as undefined.
If I've recently been working with buffer A in workgroup W1, then switch to buffer B, then switch workgroups to W2 and kill a buffer, its replacement is likely to be A rather than any of the other buffers I was last using in W2. I would prefer if buffers had more affinity for their most recent workgroup.
(I think it might be possible to advise other-buffer such that it sees a different buffer list)
Thanks.
This might not be a big problem right now, I think you should know though, that when byte-compiling the workgroups.el
, emacs warns:
workgroups.el:1410:30:Warning: `flet' is an obsolete macro (as of 24.3); use
either `cl-flet' or `cl-letf'.
I don't know elisp well, so I don't know if I can just go into the file and do a replace of the flet
s in there. There is also the following warning:
workgroups.el:55:1:Warning: cl package required at runtime
wg-load is missing, for one.
When switching workgroups I get this "buffer name in use" error quite often, not sure why. Maybe when two workgroups have a window open on the same buffer, or the new workgroup has two windows open on it.
Secondly, when it happens the windows have changed to the new workgroup's layout, but you are actually still in the old workgroup. You probably won't notice and will end up saving over the old workgroup and confusing yourself.
So it would be great to have this just work. Here's a (cropped) traceback in case it helps:
Debugger entered--Lisp error: (error "Buffer name `ANNOUNCE' is in use")
ad-Orig-rename-buffer("ANNOUNCE" nil)
rename-buffer("ANNOUNCE")
wg-switch-to-window-buffer(((type . window) (edges 59 0 118 10) (bname
wg-restore-window(((type . window) (edges 59 0 118 10) (bname . "ANNOUN
inner(((type . window) (edges 59 0 118 10) (bname . "ANNOUNCE") (fname
inner(((type . wtree) (dir . t) (edges 59 0 118 65) (wlist ((type . win
inner(((type . wtree) (dir) (edges 0 0 239 65) (wlist ((type . wtree) (
wg-restore-wtree(((type . wtree) (dir) (edges 0 0 239 65) (wlist ((type
wg-restore-wconfig(((type . wconfig) (left . 3) (top . 22) (width . 236
wg-restore-workgroup(((type . workgroup) (uid . 52) (name . "hledger do
wg-switch-to-workgroup(((type . workgroup) (uid . 52) (name . "hledger
call-interactively(wg-switch-to-workgroup nil nil)
I don't want it to restore a workgroup, when Emacs starts.
Is there any way to disable that?;)
I guess I'm too used to screen and escreen/elscreen. I haven't found the use for named workgroups. Is there a way to not have to name the workgroups when they are created? I just refer them as 0-9.
I proceed like this:
.- C-x 2
.- create a workgroup named "h"
.- C-x 1
.- C-x 3
.- create a workgroup named "v"
but the last operation does not look okay. Unexpectedly the frame changes back to just one window and that window contains the scratch buffer. wg-save produced the output shown below.
All this on emacs 24.2.1.
Anybody else having this problem?
thanks,
Rodrigo
(workgroups ((type . workgroup) (uid . 0) (name . "h") (wconfig (type . wconfig) (left . 24) (top . 40) (width . 85) (height . 42) (sbars) (sbwid . 0) (wtree (type . wtree) (dir . t) (edges 0 0 87 41) (wlist ((type . window) (edges 0 0 87 20) (bname . "HEAD") (fname) (point . 244) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 10 0 t nil) (margins nil) (fringes 9 9 nil) (selwin . t) (mbswin) (dedicated)) ((type . window) (edges 0 20 87 41) (bname . "HEAD") (fname) (point . 244) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 10 0 t nil) (margins nil) (fringes 9 9 nil) (selwin) (mbswin) (dedicated)))))) ((type . workgroup) (uid . 1) (name . "v") (wconfig (type . wconfig) (left . 344) (top . 40) (width . 85) (height . 42) (sbars) (sbwid . 0) (wtree (type . window) (edges 0 0 87 41) (bname . "scratch") (fname) (point . :max) (mark) (markx) (wstart . 1) (hscroll . 0) (sbars 10 0 t nil) (margins nil) (fringes 9 9 nil) (selwin . t) (mbswin) (dedicated)))))
So this is more for people watching than tlh, as I think he's pretty much gone for the foreseeable future...
If I forked this repo to an organization, would other people be interested in helping maintain it? I'd be happy to pitch in where I could just to see things keep moving. It looks like we're getting more pull requests that aren't making it in now, and I'd rather things not just pile up while we all update our own forks.
Is there a way to reorder them? I navigate using the "left" and "right" keybindings, and I would love to have this option to have similar projects near each other.
Emacs : 24.0.92 from http://emacsformacosx.com/builds
workgroups.el installed with el-get
A line (setq-default mode-line-format (list "some_list_here")) with (workgroups-mode 1) gives a warning: "Wrong type argument: number-or-marker-p, nil". This did not fix the problem: (setq wg-mode-line-on nil).
Hi,
I just installed workgroups and did a C-x 3 and then a C-x 2. When I save the workgroup it inverts the windows. What am I doing wrong?
Thanks in advance.
Thanks, this looks really useful. I started by turning on workgroups mode, creating a workgroup, and saving. The saved workgroups file now contains:
(-*-workgroups-*- ((type . workgroup) (uid . 0) (name . "dashboard") (wconfig (type . wconfig) (left) (top) (width . 236) (height . 74) (sbars) (sbwid) (wtree ... ... ... ...))))
Loading gives an error, Messages looks like:
...
Starting Emacs daemon.
Restarting server
When done with this frame, type C-x 5 0
(wrong-number-of-arguments nil 0)
wg-switch-to-window-buffer: Wrong type argument: stringp, nil
I'm using emacsclient -t with emacs --daemon, 23.0.50.1 on ubuntu lucid.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.