Giter Site home page Giter Site logo

quark-emacs's Introduction

Quark Emacs

My personal Emacs config!

Featuring:

  • A lot of weird stuff you might not see in other configs.
  • Text editing built around vim emulation (using evil) including many custom textobjects, motions, and operators.
  • Comprehensive version tracking backup system, even for buffers that do not visit files.
  • Persistence of:
    • File major modes
    • File locations (thanks to saveplace)
    • Registers, minibuffer histories, kill ring, jump list (thanks to savehist)
    • Undo history (thanks to undo-tree)
  • Widespread flx integration:
    • Helm (fuzzy file finder, goto definition, etc.)
    • Company (code autocomplete)
    • Ivy (minibuffer completion)
    • Isearch
  • Extremely aggressive file lazy loading, and fast startup times (~0.4s).
    • Made much easier by straight.el!
    • Packages are incrementally loaded during idle time immediately after init. By the time you open a file, most major packages will already have been loaded, but you won't notice the delay!
  • An emphasis on correct code and robustness without the need for explicit configuration.
    • Config should automatically determine system capabilities and adjust.

Portability

This config should be pretty portable, as long as your OS is UNIX-y. I currently run it on various Arch Linux, Fedora, macOS, as well as Android phones and Windows Subsystem for Linux.

One thing that it does not support is older versions of Emacs. Right now, the minimum version is 27.1.

Supported Languages

I actively work in the following languages:

  • Elisp (of course)
  • LaTeX
  • Python
  • Julia

quark-emacs's People

Contributors

pythonnut avatar raxod502 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

quark-emacs's Issues

Fuzzy completion in C/C++

C/C++ names can get quite long, so this could be a big win if this could be worked into company-irony.

Intelligently detect language for *.h files

The language could be c or c++. Since c++ is something like a superset of c, I've been defaulting to c++, but now it's time to make the process of choosing between the two automatic, since we don't want to allow c++ when it's invalid.

master is broken

And that seems to break all of the stability contracts I had in mind.

Report package upgrade progress

In package-upgrade-all, no messages are printed now that the byte compilation is silent, even though Emacs is blocked for the duration of the upgrade. We should print messages indicating what is happening.

"<t> is undefined"

This error sometimes appears on init after attempting a keybinding, but it's non-deterministic and non-fatal.

Migrate to use-package

use-package is almost certainly better than my hand-rolled macros. Migrate to it.

This will happen at the same time as #49.

Migrate to straight.el

I've been around for much discussion during the development of straight.el, and I can say that it presents a much more compelling workflow to me than package.el does.

Window splitting logic seems wrong

This is mostly a discussion of the function split-window-sensibly. Right now, it's logic can be roughtly summarized as follows.

  1. Can we split vertically, if so split vertically.
  2. Otherwise, can we split horizontally, if so do so.
  3. If the window is the only window, try splitting vertically.

I think this logic is backwards. As far as I'm concerned, splitting vertically is always permissible, as the worst case of less vertical space can be overcome easily by vertical scrolling. However horizontal scrolling is not, as we want to keep a minimum horizontal size for windows so things don't get squished.

Therefore, I think cases 1. and 2. should be swapped.

Need a new branch workflow

The fact that master is still stuck in the stone age (and almost certainly broke when 25.1 was released, if not earlier, as evidenced by #2) brings into question the entire structure of my branching workflow.

Current workflow:

  • master should never break.
  • Tags should never be broken
  • dev should be where the development is done.
  • Features are developed on topic branches and rebased onto dev.
  • Merges to master should be explicit.

Since my config is a collection of horrifying hacks, I've never been comfortable with the dev -> master merge. And since master and tags play the same role here, they essentially have redundant meaning.

New workflow:

  • master may break. (But try to keep breakage to a minimum)
  • Tags should never be broken
  • dev should be where the development is done.
  • Features are developed on topic branches and rebased onto dev.
  • Work on dev is rebased onto master.

Analysis

Admittedly, this change is subtle, but it has the following consequences:

  • master should never be far behind dev, while also having little breakage. For non-critical systems, this lets me sit on master and not worry too much about breakage from whatever I'm currently experimenting with, while also not being stuck in the stone age.
  • Tags exists as a fallback. If things go wrong, checkout the latest tag, which should be guaranteed to work.

Face related woes with emacs --daemon

  • Mode line is often not the correct color upon connecting to the daemon for the first time.
  • Highlighting in ivy is wrong when using the daemon from the command line.

Add "go to closest flycheck error" function and bind

(defun goto-closest-flycheck-error ()
  (interactive)
  (let ((next (flycheck-next-error-pos 1 nil))
        (prev (flycheck-next-error-pos -1 nil)))
    (cond
     ((and next prev)
      (goto-char (if  (< (abs (- (point) prev))
                         (abs (- (point) next)))
                     prev
                   next)))
     (next (goto-char next))
     (prev (goto-char prev))
     (t (user-error "No Flycheck errors")))))

Echoe message interrupts message screen

I copied this to my personal init.file from your config

(require 'cl-lib)
(setq gc-cons-threshold 200000000)      ;was 100000000
(cl-letf* (;; In fact, never GC during initialization to save time.
           (gc-cons-threshold most-positive-fixnum)

           ;; Also override load to hide  superfluous loading messages
          ...


  (message "[              ]")
...
(message "[=             ]")
(load-library "thor_themes")
(message "[==            ]")
...

it works fine, the message progress bar is shown at startup but interrupet by this message in the minibuffer area:
Loading bookmarks from ~/.emacs.d/bookmarks...done [yas] Prepared just-in-time loading of snippets successfully.

the message pops up and than loading screen goes on.
How can I fix this?

P.S. thanks for this great config!!

Regards
Thorsten

Startup performance

Thank you for sharing your emacs-conifg, I am learning many neat things from it.

In regards to startup performance, I like the idea of not adding a dependancy to optimise loading performance, and I was wondering if you had cosidered use-package or other similar tools?

Thanks!

Move yasnippets to a fork

Versioning them here is a bad idea. I could easily keep up with upstream if I simply forked the yasnippet snippets repo and included it with quelpa.

recentf seems to be broken

No new files have been added for several weeks now. Something is preventing the recentf system from working.

Silence mc-lists loading

I don't want to see

Loading /home/pythonnut/.emacs.d/data/.mc-lists.el (source)...done

Every single time I load my Emacs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.