86

Magit fundraising campaign on Kickstarter : emacs

 6 years ago
source link: https://www.reddit.com/r/emacs/comments/6xf3er/magit_fundraising_campaign_on_kickstarter/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Press J to jump to the feed. Press question mark to learn the rest of the keyboard shortcuts
Search within r/emacs
Found the internet!

Magit fundraising campaign on Kickstarter

Magit fundraising campaign on Kickstarter

I have just launched the Magit fundraising campaign on Kickstarter. Hurray!

Please consider becoming a backer and to inform others about the campaign. If the campaign succeeds, then I can work full-time on Magit for a whole year. I am still overflowing with ideas, and depend on your support to realize them, and to address the remaining long-standing issues. It is great that many users already consider Magit to be one of Emacs' killer applications, but it is still far from fulfilling its true potential. Only with your help can I get it there.

Thanks so much! Jonas

98% Upvoted
Log in or sign up to leave a comment
level 1

Pledged. I couldn't live without magit!

level 1
· 5 yr. agodefault bindings, org, magit, ox-hugo

Already contributed! Good luck! :)

level 2

Thanks!

level 1

I can't imagine working these days without magit. I use it everyday. I would love more of it. Pledged!!

level 1

Would you consider a Patreon subscription approach instead? That could be more consistent over time...

level 2

He already have it here

level 2

If you prefer that, then you can of course support me on Patreon (or use one of the other options). If you are unsure, then please use Kickstarter (since that is all or nothing).

level 1

Pledged. I love magit!

level 2

Me too. Will surely donate. Saved me a ton of time this morning, this awesome tool.

level 1

Everyone, if you never donated before to a FOSS project, now is the time!

level 1

I don't even really know how to git in CLI...

level 2

...and with Magit, you mostly won't need to! (It's much more comfortable too.)

level 2
Op · 5 yr. ago · edited 5 yr. ago

On what page? On kickstarter itself? I had to correct some links there, but I did that minutes after publishing.

Thanks for the contribution!

Edit: Ah, found it! Thanks for letting me know.

level 1

Magit is definitely one of Emacs' "killer apps". Pledged, and good luck!

level 1

Pledged!

I've recently started using Magit over the command line git and it's wonderful though I still occasionally I have to fall back to the terminal since I know it better.

One problem I had and maybe I just don't know the configuration, or it's just a limitation of Magit - dealing with large diffs. At work we have a lot of autogenerated code for our diagnostic tools and the amount of this autogenerated code can be huge. Whether or not this is the right way to do things is a different question. However, whenever I have to deal with merging from our master branch this leads to a rather sizable amount of autogenerated code diffs and since the diffs are large, I have to wait even up to a few minutes for magit-status to load and I end up using the terminal. Is there a way to load the diffs only when I <TAB> on a file? or will they always have to load at start of day?

level 2

Aside from "starting many subprocesses is very slow (on Windows (and to some extend on macOS (without a patch that will make it into the next Emacs release)))" <-- yeah, lisp.

Aside from that, diffs are the biggest bottleneck and improving that is a top priority. Not sure how soon significant improvements will land on master though, because that depend on a lot of other major changes.

In the past this actually was an area that got more attention with regards to performance than others, but without reworking some core abstractions from the ground up that cannot amount to more than maybe shelving of another 10% or so. Which is nice if performance is already good enough anyway (i.e. for small to midsize changes) but for huge diffs we need something smarter.

Is there a way to load the diffs only when I <TAB> on a file?

Yes, magit-section-set-visibility-hook could be used for that:

(defun magit-diff-collapsed-initially (section)
  (and (memq (magit-section-type section) '(file)) 'hide))

(add-hook 'magit-section-set-visibility-hook 'magit-diff-collapsed-initially)
(remove-hook 'magit-diff-expansion 'magit-diff-expansion-threshold)

But don't expect too much. This only keeps Magit from parsing and painting the diff initially. It will still wait for Git to completely generating the diff.

level 1

Contributed ... good luck, I'll be rooting for you! (and sharing the link)

level 1

Pledged. And thank you for magit; fantastic tool!

level 1

Pledged. Love it. Thanks for giving us a way to give back.

level 1

Pledged. Keep up the awesome work Jonas.

level 1

Pledged! But I hope your main focus isn't on non emacs environments. It would be nice if you knew "oh okay I got funded by 83% of emacs users, I should just ignore non emacs environments".

level 2

Yes, I will use the backer survey to ask "what kind of Magit user are you?". IMO 17% non-Emacs users would actually be quite a lot - I certainly would not ignore so many users (I try to not ignore any users).

But don't worry, most work will also (or primarily) benefit Emacs users, even if I do spend some time on features that might not be all that exiting if you live inside Emacs. Also, all the things /u/reklfdyt2 said.

level 2

Based on the roadmap, it seems that most of the work will be on emacs. Also, I think that some work on non-emacs environments would benefit emacs users.

Firstly, we occasionally venture outside of emacs — for example, I sometimes work directly from a terminal (not within emacs) where I often want to call magit, as it's just far more convenient and much faster than using git directly. I've even written a crufty shell script which calls magit-status for the current git repository, via emacsclient. Having an "official", well-designed and reliable way of doing something like this would be useful.

Secondly, magit is a "gateway drug" to emacs. Using magit from within emacs, rather than from outside it, will almost certainly still remain more convenient, so increased use of magit, will eventually result in increased use of emacs, which is beneficial.

Finally, independently of these arguments, I trust Jonas to do the right thing.

level 1

I've donated in the past and this was an easy pledge!

This isn't a request or even question, per se, but my personal main use-case is performance on windows (don't ask). Operations that are instantaneous on linux all take noticeable time on windows, and that's with the windows-specific performance tips applied, and the recent general performance improvements. Presumably it's the process forking model on windows, but I'm definitely curious what the status of libgit2 on windows, and shared libs in general, will be.

level 1

Pledged! Magit is such a pleasant tool to use.

level 1
· 5 yr. agohttps://gitlab.com/youRFate/emacs_config

I am so glad my workplace is finally officially moving to git. As a heavy emacs user magit will become more important than ever to me. Pledged!

level 1

Pledged -- thanks for your work on Magit!

level 1
[deleted]
· 5 yr. ago

Magit saves me so much time every day! Thanks to all the folks behind it. Pledged!

level 1

In! Every now and then I try to use git at the command line and end up with a new-found appreciation for Magit's ease of use.

level 1

pledged! thanks for your awesome work tarsius_

Your work on magit has made a big impact on my personal productivity.

level 1
· 5 yr. ago · edited 5 yr. ago

✓ Pledged. I think I'm in Magit mode for at least 30-60 minutes a day, so this was a no-brainer. :D

Slightly off-topic: How is the status line from the screenshot rendered? This looks really nice: Screenshot from Kickstarter

level 2

I am using some code that I wrote just for that video.

Yeah, it is a pretty crappy video overall, but I actually spend an embarrassing amount of time on details like this and learning about video codecs and stuff. So thanks for noticing. The blurriness isn't my fault though, kickstarter is re-encoding it with unsuitable settings, and all my attempts to trick it into not doing that failed.

Anyway, the used code isn't ready for other eyes to see at all right now, and also depends on some temporary patches to some packages. I do plan to publish my own mode-line and screencast recording packages eventually though.

(And before that to post some screencasts on magit.vc where I have complete control over the encoding. Vimeo isn't really suitable either since they also degrade quality unless you make the recorded area big enough to go over some threshold to qualify as "1080p" but that results in unreasonably huge screencasts.)

Meanwhile you can use powerline, that gives fairly similar results. (But the lines around the "tab" are missing and there is no support for showing the last command in the mode-line, I believe.)

level 1

Stickers here I come.

I use Magit literally every day at work. I think I'm the only one who "knows" how to commit hunks... I wouldn't have the patience at the command line. So thanks!

level 1

Should this perhaps be cross-posted to https://www.reddit.com/r/git/ as well?

level 2

That would help, but so far I have been restricting myself to dropping subtle hints suggesting that satisfied users instead of the maintainer should do that. But I was going to do it in two or three days myself. If someone beats me to it...

Also, when I tweet about a thread about Magit on, say, Hackernews and that has like two votes, then it is more useful to go there and post a comment than to like the tweet, as the latter will only be seen by followers who have already seen my earlier tweets anyway. ;-)

level 1

It seems like a very ambitious kickstarter, I hope it succeeds. Pledged!

level 2

If I interpreted the information on Kickstarter correctly then Jonas is from Switzerland which makes the 55'000.- quite a moderate amount for a software developer.

The living costs here are quite high and IT is usually a field with quite high incomes. As a comparison, I work as well in IT and but haven't completed my education in that field yet and earn around 60'000.- before taxes. So he asks for even less money than someone earns who isn't trained yet.

Anyway I pledged as well. Magit is together with org-mode one of the greatest pieces of software I've ever used.

level 1

Nice. Just made a pretty big pledge (no humble-brag intended). Always great to see an unknown developer accomplish the impossible.

level 1

If I pledge for 10000 CHF would you explain ref logs ? jk

does kickstarter accept paypal ?

level 2

I though that was possible, but turns out you have to use a credit card or debit card, see https://www.kickstarter.com/help/faq/backer+questions.

Contributions at any level are welcome, and while I did not anticipate it, I would certainly like to add a "platinum backer" layer ;-)

level 1

Pledged. Fingers crossed!

level 1

I'm a bot, bleep, bloop. Someone has linked to this thread from another place on reddit:

If you follow any of the above links, please respect the rules of reddit and don't vote in the other threads.(Info/ ^Contact)

More posts from the emacs community

Native compilation has been out for some years, and the performance boost from it for old machines is night and day, e.g. my old macbook.

However, with the beefy hardware of the new machines, e.g. M1 mac, the effect of native compilation becomes indistinguishable. On my Linux desktop, which was built in 2019, I have been using native compilation since the beginning, but I just freshly compiled from source without native compilation and found no obvious performance difference at all.

And on my new macbook with M1Pro, the performance is similar, and no obvious power consumption difference.

Without performance differences, the only thing native compilation brings is the large usage in disk space, although in today's standard, the disk space used by native compilation is far from being significant.

I am curious how many people are using native compilation right now. What machine you are on and why?

Hello everyone :)

I wanted to notify the community that there is a new release of my package dtache, which now also has been renamed to detached.el, or detached. For those previously not familiar with the package, the short description is "An Emacs package to launch, and manage, detached processes". It can be used to dispatch shell commands to an external program dtach, which allows processes to outlive Emacs.

The new release is version 0.7, and here is a list of improvements and change that has been made:

  • The development of the package has been moved to sourcehut at https://git.sr.ht/~niklaseklund/detached.el

  • The configuration of the package has been drastically improved, now users simply need to call (dtache-init) to integrate with all supported packages. Of course the integration is lazy-loaded

  • The completion of sessions are now dynamic. Both the width of the command as well as the annotations adapts dynamically

  • There is an integration with dired's dired-do-shell-command

There has also been improvements to the user experience of the package, credits should go to user https://gitlab.com/rosetail

  • The package now features an option to show a session's output when attaching to it. This feature can be enabled through detached-show-output-on-attach. As of now this seems like a better alternative then detached tail command which users previously had to resort to gain similar functionality. The upside is that the attach functions in detached is more performant.

  • The packages detached-env script now features a mode, which can either be plain-text or terminal-data. The former is basically what detached have offered till now, the latter allows a session to store raw terminal data so that session output could contain colored data for example. If a specific command is misbehaving with the terminal-data option it can be added to detached-env-plain-text-commands to force it to use plain-text.

The package, under its new name, is available at ELPA and MELPA. A patch with the update has been provided to Guix, but has not yet merged.

After asking some questions and reading docs and getting some help, I have my own example of how to build a Transient. I honestly like this a lot better for this kind of work than Hydra; Hydra is fantastic, but this saves me a lot of duplicate work that I was doing with defining keymaps to assemble the right combination of arguments to pass to build functions. My usage of lisp is what I'd consider fairly simple. I'm just trying to build a command line to feed to compile.

;; -*- lexical-binding: t; -*-
;; Functions for building unreal on PROJ using dir-locals
(defconst +proj-target-list+ '("Development" "Debug" "Release"))
(defconst +proj-executable-list+ '("UnrealHeadertool" "ProjEditor" "ProjGame"))
(defconst +proj-platform-list+ '("Win64"))
(defconst +uproject-path+ "Proj/Proj.uproject")
(defconst +batch-builder+ "Engine/Build/BatchFiles/Build.bat")
(defconst +genproj-bat+ "GenerateProjectFiles.bat")

(defun nop ()
  (interactive)
  )

;; For future queue work, args can be stuffed into a list and executed later.
(transient-define-suffix proj-transient-build-unreal (args)
  "Build Unreal"
  :description "Build using current overrides"
  (interactive (list (transient-args transient-current-command)))
  (when-let ((build-path (getvar base-path)))
	(let* ((exe (transient-arg-value "--exe=" args))
		   (target (transient-arg-value "--target=" args))
		   (platform (transient-arg-value "--platform=" args))
		   (debug (s-present? (transient-arg-value "--debug" args)))
		   (command (concat build-path +batch-builder+ " " exe " " platform " " target)))
	  (setq args (cl-remove "--exe=" args :test #'s-contains?))
	  (setq args (cl-remove "--target=" args :test #'s-contains?))
	  (setq args (cl-remove "--platform=" args :test #'s-contains?))

	  (when (s-contains? "Editor" exe)
		(setq command (concat command " \"" build-path +uproject-path+ "\"")))
	  (setq command (concat command " " (mapconcat #'identity args " ")))
	  (if debug
		  (message command)
		(compile command)))))

(transient-define-suffix proj-transient-genproj (args)
  "Generate projects"
  :description "Generate the project files"
  (interactive (list (transient-args transient-current-command)))
  (setq args (cl-remove "--exe=" args :test #'s-contains?))
  (setq args (cl-remove "--target=" args :test #'s-contains?))
  (setq args (cl-remove "--platform=" args :test #'s-contains?))
  (when-let ((build-path (getvar base-path)))
	(if (s-present? (transient-arg-value "--debug" args))
		(message (concat build-path +genproj-bat+ " " (mapconcat #'identity args " ")))
	  (compile (concat build-path +genproj-bat+ " " (mapconcat #'identity args " "))))))

;; Define a transient to set all the arguments.
(transient-define-prefix proj-transient-build ()
  "A transient to construct build strings and execute them."
  ["Build Configuration"
   ["Current Project Environment"
	("P" proj-set-project-override)
	("//" nop :description (lambda () (format "Base Dir: \"%s\"" (getvar base-path))) :transient t)
	("--" nop :description (lambda () (format "UProject Path: \"%s\"" +uproject-path+)) :transient t)
	("@@" nop :description (lambda () (format "Batch Builder: \"%s\"" +batch-builder+)) :transient t)
	("++" nop :description (lambda () (format "Genproj bat: \"%s\"" +genproj-bat+)) :transient t)
	("%%" nop :description (lambda () (format "Search Instance: \"%s\"" (getvar helm-locate-instance))) :transient t)]

   ["Build args"
	("-p" "Show Progress" "-progress")
	("-N" "No Hot Reload" "-NoHotreloadfromide")
	("-D" "Preview Build" "--debug")]
   ["Targets"
	("e" "Set Executable" "--exe=" :always-read t :choices ,+proj-executable-list+)
	("t" "Set Target" "--target=" :always-read t :choices ,+proj-target-list+) 
	("p" "Set Platform" "--platform=" :always-read t :choices ,+proj-platform-list+)]]
  ["Execute Commands"
   ("g" "Generate Projects" proj-transient-genproj)
   ("B" "Build Project" proj-transient-build-unreal)])

Some notes:

  • getvar is a macro I've written that returns the value of a variable that may or may not be set in a dir-locals.el file, and may furthermore be overridden. I need it because I often have to work in multiple different projects, but I'm still only compiling ONE SPECIFIC project, no matter what base directory I happen to be in.

  • nop is there so I can have entries that are purely informative. If you type out the keys corresponding to the option, it just exits and does nothing. It's a hack, since Transient doesn't like entries that are only descriptions. Still, it works just fine.

  • Unless you really need to for some other reason, try to work within these transient arguments. That is, unless you're trying to set a lisp variable for some other specific purpose, don't do what I did and write infixes that set lisp variables that you later access to do the compilation. It works just fine, but it's honestly more cumbersome and takes up more space. If your use case is like mine here--actually building a command to execute--the full-on Transient way ends up being cleaner.

KeyWork 🗝👷🏼‍♂️

https://github.com/ErnestKz/KeyWork

This post ended up being half-announcement and half-story. :p

I am quite obsessed with key-press efficiency and having as friction-less of a human-computer interface as possible (flow states become magical).

This package is aimed at being able to specify arbitrary keymap modes along with arbitrary key sequence setups from scratch as concisely as possible.

My reasons for a modal, key sequence, oriented bindings DSL:

  • Reduce wrist and hand strain from the vigorous key-chording I used to do.

  • Have major/minor mode specific bindings closer to the home row, for speed and ease.

  • Be able to rapidly iterate over my keyboard config to see what feels good.

  • Reduce the friction of me trying to specialise the bindings of a new major/mode.

I initially was using xah-fly-keys, which was nice as it felt quite efficient, though I began theory-crafting even more ways of making efficient interfaces and got very creative, and wanted a way to express it, xah-fly-keys was a not very suitable to build off of, as it had baked in the "command-mode" modal mechanism. Though my visions were of arbitrary amount of modes, and modes that merge together based on the environment.

I started writing this the summer of 2021, and was finding it difficult and complex to parse the symbols of the language, but then I encountered monadic parsers, which made it much easier. Towards the end of the summer I got it to a personally usable state, and was using throughout the subsequent college term to great effect.

The actual implementation of mode switching is only 60 lines in total (including whitespace and comments), it's done by having a single minor mode map "KeyWork", and just replacing the minor mode map that's held within the KeyWork-map symbol with the one you want activated. The rest of the code is parsing and expanding the macros.

The main modes that I ended up creating and using in KeyWork the most were:

  • A command mode (code, (my F8 keys is bound to CapsLock)), where all the keys close to the home row are responsible for moving around text, cutting, yanking, marking, inserting comments, undoing, etc. And the space key is a leader key for various key sequences. This command mode is heavy influenced by the command mode of xah-fly-keys.

  • A scroll mode (code), which is activated from the command mode with "d", and I mostly used for smoothly scrolling the buffer either rapidly, or slowly, with (j,k), and (u,i).

  • An insert mode (code), for inserting text.

  • An org programming mode (code), which is activated from the command mode with "s". I used this mode when programming python within emacs-jupyter . I setup the mode to be able to navigate between org source blocks, expand/collapse them, execute them, move them up or down, create new source blocks, hide/show results, and some more, and almost all of these commands using the high value home-row and surrounding keys without needing to press leader keys or chords.

During the year I was switching between the web-based colab (for group projects and gpu usage) and my specialised org setup, I noticed when I eventually would come back to org, the process of experimenting bits of code in isolated source blocks (quite a core part of workflow) was much smoother and I would do it more often (due to the reduced friction of not needing to stretch my hands to move mouse or press key chords) and faster (efficient keys placement, creating blocks, cutting, pasting, executing, deleting blocks with minimum keystrokes)

So finally, now, that I've finished college, I found myself today making this package presentable. In the readme I've added an excerpt of my config with comments indicating the key syntax of the DSL.

I'm not sure how this will be received, but figured I'll share the story, and have an emacs package to go with it. I hope you enjoyed, and find the package interesting. :)

Until now I have written most of my Org and Markdown files with auto-fill-mode, never exceeding more than 80 characters per column. However, I've increasingly noticed many counterexamples, where each paragraph was a single long line of text. Some platforms like GitHub seem to encourage this practice, as newlines in comments are treated as newlines in the rendered page, contrary to vanilla Markdown.

There seem to be some advantages to this approach. For example, writing prose with mixed-pitch-mode makes a lot more sense if lines are arbitrarily long, and I find it a lot more pleasant. But if I'm sharing a document with someone else, I wonder if generally they'd be annoyed at receiving a document without wrapping that requires them to enable visual-fill-column-mode and visual-line-mode, disable hl-line-mode, etc. I know I was at first before I discovered how to make the experience feel like I was using auto-fill-mode instead.

I'm interested to hear r/emacs 's thoughts on this!

I am a beginner in Emacs and I was wondering if there is a way to write research paper summaries with the PDF of the paper open on the side and text (preferably markdown) summary on the other side with references to lines/locations in paper. I currently use Mendeley for general text highlighting and in-line notes but I am looking for adding summaries and reference lines in the Mendeley annotated PDF in Emacs.

When I narrow a file down to a region containing a single function, the line numbers restart at one, and I would like to be able to make references based on the actual line number in the file.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK