• 0 Posts
  • 25 Comments
Joined 3 years ago
cake
Cake day: October 4th, 2023

help-circle


  • Po Lu a week ago: less cl-lib please. Po Lu a couple days ago: What do you mean touchscreen.el shouldn’t be loaded by default?

    lol Not that I think it’s a big deal (sorry for using you as an example, Po. I respect the work you’re doing, but I’m calling it as I see it). It does highlight how unproductive this type of bikeshedding is, though. That email chain is beyond novel length now and it’s still going. Almost makes me hope the “reply-to” button on the site stays broken.


  • I have never done anything in lisp before

    Emacs has a built-in emacs lisp tutorial. That would be a good starting place.

    struggle to understand how single quotes signify a function or what ever

    Not exactly sure what you mean by that. Again, I recommend the manual, but you can think of quoting as a way to tell the interpreter “don’t evaluate this”.

    e.g.

    (prin1 (+ 1 1)) ; (+ 1 1) is evaluated, prints 2
    (prin1 '(+ 1 1)) ; prints the literal list (+ 1 1)
    

    There is also backquoting, which I recommend reading up on, too. The syntax and rules are simple, but powerful.

    Is this even “viable”, or advisable?

    Try it out. At worst you’ll learn something. Fretting about whether or not to give it a shot is a waste of time. I’m sure you can find previous problems and solutions in a lisp.

    Should i be looking at common lisp instead?

    Do a few problems in elisp, a few in Common Lisp.

    Or would you say that’s a pretty dumb idea and i should rather learn it in a different way?

    The only foolish idea is to spend time debating about whether or not to try learning something. No one can make that call for you. Try it and see if you like it.










  • My conclusion has been that for some users it creates more problems than it solves, as they can wind up with a new layer of things they don’t understand, and one which further obfuscates the systems they didn’t understand to start with.

    There are many questions about use-package because new users are encouraged to copy/paste configurations from package READMEs and other configurations. If you take use-package out of the equation, you’ll be left with questions about the underlying elisp. It doesn’t matter what was used if the crux of the question is “I copied this thing I didn’t read about and now I don’t know how it works. Explain it to me?”



  • But, if we’re using use-package to also manage installing the packages for us (:ensure t), then why shouldn’t it know about the autoloads already and automagically imply a :defer t by default?

    Package installation and activation are two seperate concerns. :ensure ensures the package is isntalled if it isn’t already. Users might want to ensure a package is installed and prefer it to be immediately required.

    So, by default, we have to remember to either add :defer t or we have to remember that setting our own hooks, bindings, or commands will create autoloads for us.

    I feel like you’re misunderstanding what autoloads do. Hooks do not autoload anything. The :commands use-package keyword does autolaod commands. This is useful when a package author has not provided the autoload cookie in the package for a command, or when you wish to forgo loading all of the autoloads.

    I know that you can configure use-package to behave as though :defer t is set by default, but that’s just broken for packages that don’t have any autoloads.

    How is it broken? There are other ways to load a package. Namely, require.

    It feels like maybe use-package is doing too many things.

    It only does what you tell it to do via user options and declarations.`

    but that kind of sucks because there’s no reason to load magit before I actually want to use it for anything. So, what we can do instead is to implement the project.el integration ourselves

    Or (use-package project :ensure nil :defer t :config (require magit)) There are multiple ways to set this sort of thing up and use-package (which should have been named use-feature) can be used to configure built-in features.

    Either I’m a little dim or the tooling here is hard to use correctly.

    Third option: You haven’t taken the time to digest the use-package manual and/or expand the macro to see what it’s doing. It’s a DSL. You have to learn it to use it effectively.

    Am I the only one?

    You must be. Otherwise someone would’ve written “use-package alternatives”, which has an almost searchable ring to it.

    Ultimately, organization comes down to the user. Tools like use-package make it easier, but they do not guarantee it.





  • You don’t have anything to guard against a bad response from the server. e.g.

    (unless (equal url-http-response-status 200)
      (error "Server responded with status: %S" url-http-response-status))
    

    To position point at the end of the headers:

    (goto-char url-http-end-of-headers)
    

    This:

    (setq result (cons (cons ...) result))
    

    Is more clearly expressed as:

    (push (cons ...) result)
    

    Better yet, you could map over the elements you’re interested in and accumulate the results via mapcar or cl-loop. That would obviate the need for the “results” variable.

    You could probably shorten things by using the dom-elements function to directly search for the href’s you’re interested in in combination with dom-parent to get at the parent elements.

    Overall your function gets a 65 out of 130 ERU (elisp rating units).