Questions tagged [elisp-macros]

Emacs Lisp macros enable you to define new control constructs and other language features. A macro is defined much like a function, but instead of telling how to compute a value, it tells how to compute another Lisp expression, which in turn is evaluated to compute the value. We call this expression the "expansion" of the macro call. The macro call is first expanded and then evaluated, returning the value of that evaluation.

Filter by
Sorted by
Tagged with
0 votes
1 answer
21 views

List isn't considered a list within macro

(setq x 1) (defmacro dowhile (body condition) (cl-flet ((seq_eval (mylist) (cl-dolist (elt mylist result) (setq result (eval elt))))) (seq_eval body) (while condition (seq_eval body)))) (...
shintuku's user avatar
  • 107
0 votes
1 answer
43 views

Is using if-let discouraged in emacs-lisp?

I wrote a piece of code using if-let. Later, when I tried to use my function, I got: Symbol’s function definition is void: if-let So I found that if-let is defined in subr-x.el and I need to use (...
Gabriele Nicolardi's user avatar
1 vote
0 answers
48 views

Setf not expanding

I'm trying to modify a member of lsp--client after registration. So I have something like the following in use-package. (message "%s %s" (symbol-function 'lsp--client-new-connection) (...
Todd's user avatar
  • 211
3 votes
1 answer
271 views

What is the difference between `with-eval-after-load` and `eval-after-load`?

I wonder which one should I use. Here are the definitions from Emacs: with-eval-after-load is a Lisp macro in ‘subr.el’. (with-eval-after-load FILE &rest BODY) Execute BODY after FILE is loaded. ...
emacs_supporter's user avatar
2 votes
1 answer
59 views

Macro breaks only in `eval-expression` (`M-:`)

I have a macro which unpacks a list into variables, as if by setq: (unpack (a b c) '(1 2 3)) is roughly comparable to (setq a 1) (setq b 2) (setq c 3) The way I did that initially was by having the ...
mtraceur's user avatar
  • 256
0 votes
2 answers
46 views

difference between symbol-value and eval

(defmacro ek/bind-evil-keys-map (state keymap key-fn-list) (let* ((key-fns (symbol-value key-fn-list)) (body (mapcar (lambda (pair) `(evil-define-key ,state ,...
eugene's user avatar
  • 489
0 votes
0 answers
36 views

flycheck thinks functions defined in a macro are not defined

i use a define-request macro to make it easier to define lots of requests to a REST API. each one returns a defun, the request function. flycheck is unable to discover the existence of these functions....
user27075's user avatar
  • 508
0 votes
2 answers
142 views

How does a Lisp macro behave?

Have read that macro provide a way to perform transformations before the code is actually evaluated. When the macro is called, its arguments are passed to the macro as unevaluated forms. The macro ...
Dilna's user avatar
  • 1
1 vote
1 answer
107 views

(apply #'and '(t t t)) is throwing an error. Why? [closed]

(apply #'and '(t t t)) gives me Debugger entered--Lisp error: (invalid-function #<subr and>) and(t t t) apply(and (t t t)) while (and t t t) gives me t. What am I missing? This is with ...
user avatar
1 vote
1 answer
75 views

Void variable when defining macro containing defvar in progn

I don't understand why I get (void-variable test-map) when trying to run: (defun something--key-map (name) (make-symbol (concat (symbol-name name) "-map"))) (defmacro defsomething (name) ...
tino415's user avatar
  • 13
0 votes
1 answer
64 views

How to use the same variable name with let when calling defmacro?

This is only an example, I understand this can easily be achieved with a function. Don't Work This is what I've come up with based on the elisp manual and a couple of answers/articles that I have ...
Rick's user avatar
  • 25
1 vote
1 answer
44 views

Can't setq a variable inside a macro

This is my first foray into emacs macros, so likely silly mistakes ahead: I'm trying to mimic the definition of pop (see the manual here), but I want to remove an element of alist indexed by key, ...
Rodney Price's user avatar
0 votes
1 answer
62 views

How do I use a while loop with a macro?

This works when I remove the loop but with the loop it does not work. (defmacro my/def-key (state map) (let ((x '( (kbd "<leader>z z") (lambda nil (interactive)(message ...
ritchie's user avatar
  • 151
4 votes
1 answer
462 views

Bug in defmacro?

I think I found a bug in defmacro so I'd like to ask for confirmation before I make a fool of myself reporting something silly! Here is how to reproduce it: Define the following macro which simply ...
Ruy's user avatar
  • 839
1 vote
1 answer
37 views

Is it possible to eval code as a transient group description?

I want to customize the title of a transient group based on the value of some variable, my--current-section. The following doesn't work (transient-define-prefix my--prefix () "Sample docstring&...
Alessandro Bertulli's user avatar
4 votes
3 answers
577 views

Does emacs have compiled/interpreted mode?

So I define a macro (defmacro macro-print (str) (print "hi") and then run (let ((i 0)) (while (< i 3) (macro-print i) (setq i (+ 1 i))) according to the Elisp manual, the ...
Isabella's user avatar
  • 143
0 votes
2 answers
215 views

How to fix byte compiler warnings for "Unused lexical variable" in a macro?

I have a macro and a function which uses it: (defmacro oauth2-auto--query-case (&rest cases) "Handle HTTP queries based on the keys present in ‘query-alist’. ‘query-alist’ is a free ...
telotortium's user avatar
0 votes
2 answers
53 views

Dynamic Keybind Without Use of Macro

I've attempted to make a function which binds the leader keys o f to switch to the current buffer: (defmacro bind-current-file () (list 'spacemacs/set-leader-keys "of" (...
George's user avatar
  • 889
1 vote
0 answers
55 views

Org-mode expands org-special-block-extras incorrectly

I've been using org-special-block-extras to insert special blocks in org-mode which I then export to PDF through LaTeX, things such as margin notes or colored blocks. It used to work until recently (...
Nathan Furnal's user avatar
2 votes
1 answer
158 views

How can I automate rescheduling overdue daily tasks?

I have a number of "daily" tasks which repeat daily. If I forget to mark each task as DONE, it is removed from the timeline, and appears as an overdue item at the top of the agenda. For ...
Ishmael7's user avatar
0 votes
0 answers
37 views

How to convert greek text to unicode using matching input method?

Good evening, I have a large TeX-file with Greek inclusions in traditional babel way: \textgreek{sunj'hkh|}. I would like to convert it to unicode for further work. Emacs has greek-babel input method,...
Vadim Radionov's user avatar
3 votes
2 answers
213 views

Create a function that returns a new function definition

I'm creating a modular system for my use of Emacs, so I can call modules on the fly, as I need them. Just like a lazy call, but I must explicitly call them. Anyways, I found this riddle, I want a ...
BuddhiLW's user avatar
  • 267
0 votes
1 answer
168 views

How to define multiple key bindings more concisely?

I'm trying to write a helper macro to conveniently define keybindings in my configuration file. The idea is to replace the following configuration entry: (use-package org-roam :config (define-key ...
jubnzv's user avatar
  • 103
1 vote
1 answer
113 views

Why are `defvars` in my macro ignored?

I want to use a macro to define variables. However, evaluating the macro does not define these vars. I seem to be missing something, but I can't find it. Here's the code: (defmacro delve--build-cmp (...
Public Image Ltd.'s user avatar
4 votes
1 answer
128 views

How do you find all macro calls in an elisp file?

I am trying to make sure a package that is installed from Melpa (org-ref) byte compiles correctly, and a typical issue is related to the use of macros. For example, if I use org-with-wide-buffer which ...
John Kitchin's user avatar
  • 11.6k
1 vote
2 answers
215 views

Count number of lines between two consecutive matches

I have files such as these: 0000 0030 + Something + Another thing + One more thing 0200 + Something else + And one more thing 0230 In the above, the numbers represent time in HHMM format. I want to ...
Inspired_Blue's user avatar
4 votes
1 answer
295 views

eval-when-compile and eval-and-compile identical definitions?

How can eval-when-compile and eval-and-compile have different behavior if their definitions are identical? From byte-run.el: (defmacro eval-when-compile (&rest body) ;; ... documentation string ...
ivan's user avatar
  • 1,938
1 vote
1 answer
131 views

special form or macro? eval-when-compile, eval-and-compile

Is eval-when-compile a special form (primitive in C), or a macro? According to the elisp manual, C-h S eval-when-compile RET, Special Form: eval-when-compile body... But according to C-h f eval-when-...
ivan's user avatar
  • 1,938
2 votes
1 answer
147 views

Can a defmacro generate a string with the name of the .el file where it is expanded?

I'd like to create a Emacs Lisp macro that is able to generate a string literal that contains the name of the .el file into which the macro is expanded. Is this possible? Background: I am writing a ...
PRouleau's user avatar
  • 786
0 votes
1 answer
62 views

Issue with macro and `buffer-name`

I want to write a macro that makes a diffpdf before and after some changes in my LaTeX file (that would be compiled twice by pdflatex). I tried: (defmacro with-diffpdf-after-changes (&rest body) ...
Gabriele Nicolardi's user avatar
2 votes
2 answers
383 views

Call apply with a macro

Is there a way to expand a macro using a list of arguments? I tried using apply but then I get an error that the "function" my/x-becomes-nil is invalid. (defmacro my/x-becomes-nil (variable ...
Tohiko's user avatar
  • 1,609
1 vote
1 answer
41 views

How to investigate defmacro* (with asterisk) error on an old emacs package

I'm trying to load the defhook package without success. The code defines a macro using defmacro* (with the asterisk at the end), and I can't find any info about it. (The fact that the '*' is ignored ...
CuriousObserver's user avatar
1 vote
0 answers
55 views

Navigating to a `defconst` variable defined by a Lisp macro

My goal is to define a const variable within a non-trivial macro that can be navigated to after calling describe-variable. The design goal of my macro works just fine if I define it like so: (...
John DeBord's user avatar
1 vote
2 answers
200 views

Evaluate docstring in macros

Macros like defun (or defmacro itself) have an optional docstring argument, but since they are macros and not functions, docstring isn't evaluated, but is taken as-is. I need the docstring to be ...
nomad's user avatar
  • 247
2 votes
1 answer
204 views

How to properly generate a concat'd function name with defmacro?

I have a macro like this: (defmacro my-fun-generator (x) `(defun ,(intern (concat "fun-" x)) () ,(concat "Print " x) (interactive) (print ,x))) This works (found ...
Overdr0ne's user avatar
1 vote
2 answers
176 views

Macro definition

I'm in the process of "modularizing" my config file and ran into a problem involving elisp macros. Because of the way in which I'm defining my configuration modules, I ended up with a bunch ...
juanerasmoe's user avatar
0 votes
1 answer
557 views

compilation sentinel: symbol's value as variable is void for quote, >, <, =, etc

I'm working on a script that can compile multiple directories and then provide the first error to a file. Currently, I am tackling the issue of running make in multiple directories portion. I am ...
LeanMan's user avatar
  • 123
1 vote
1 answer
408 views

How to code a command to `write-region` to a particular file?

I have a system that I am not allowed permissions to install software but need to copy text from the remote server to the host computer's system clipboard. Because I can't install xclip or xsel and I ...
LeanMan's user avatar
  • 123
3 votes
1 answer
199 views

Inconsistent behavior when calling #'funcall with a macro

I would have thought that both of the funcall's the follow would have yielded the same result, but they don't and I'm trying to understand why. (defmacro test/z () "z") (funcall (function test/z)) ;;...
theia-jane's user avatar
1 vote
0 answers
47 views

Autodocument function for C Code

Suppose i have this line of code presenting a C function prototype: int sum_Func(int a, int *b) I want an Emacs lisp function that adds the function description (initialization) according to its ...
Ghost_tn's user avatar
1 vote
1 answer
98 views

why is switch-to-buffer effect not visible immediately when called in a list with other functions?

I have a key bound to some program which prepares a buffer, switches to it via switch-to-buffer and afterwards calls some function which modifies the buffer (and can take a few seconds to execute). ...
F. Carbon's user avatar
1 vote
1 answer
870 views

Working with printed macro expansions

I am trying to write a macro. I have read the manual and learned about macroexpand. However, when I use it, I find the expansion difficult to read and work with. How can I expand a macro in a ...
Lorem Ipsum's user avatar
  • 4,407
0 votes
1 answer
34 views

How to use a macro append macro argument to a list?

I want use a macro to generate a package list. (defvar xx-packages '()) (genpack evil) (genpack all-the-icons-ivy-rich :recipe (:host github :repo "seagle0128/all-the-icons-ivy-rich")) this ...
xiaodong huan's user avatar
1 vote
1 answer
134 views

Use Elisp macro instead of two function arguments?

Is the following sort of shortcut macro possible to implement? (defmacro region-end-beg () "Replacement for '(region-end) (region-begin)' in source code" (...)) So that (buffer-substring (region-...
user26109's user avatar
0 votes
1 answer
595 views

Is there a clean way to splice some args to an existing Lisp macro?

I have the following non-working elisp code: (use-package eglot ;; For debug/testing, load local copy of eglot if it exists ,@(if (file-directory-p (concat user-emacs-directory "/...
GaryO's user avatar
  • 496
1 vote
1 answer
262 views

Making a dynamic, interactive function

I have make a macro that creates dynamic functions: (defmacro tjb-make-register-macro (func-name out-string) (list 'defun func-name () '(interactive) (list 'insert out-string))) ;; This call ...
tjb's user avatar
  • 197
1 vote
0 answers
61 views

does this routine exist? until (while until true)

I found myself needing this control loop and was very surprised not to find it in the standard library. Does it exist by some other name? (defmacro until (form &optional guard) "Runs `while' on ...
fommil's user avatar
  • 1,760
1 vote
1 answer
170 views

How do you remove compiler warnings for macro usage when running macro with 'with-eval-after-load'?

In a package I am working on I want to define a flycheck checker only if the user has flycheck installed already. To do this, I am using the macro (with-eval-after-load "flycheck" ...) as follows: (...
Zac Romero's user avatar
4 votes
3 answers
333 views

How do I get byte-compilation warnings about undefined variables?

The following code works fine with M-x eval-buffer, and byte-compiles without any warnings. (eval-when-compile (defconst demo-one 1)) (defvar demo-some-var `(foo bar ,demo-one)) However, if I ...
Wilfred Hughes's user avatar
8 votes
1 answer
427 views

Evaluate some arguments to macro immediately

I am trying to call a macro (defined somewhere else; I can't change it), but I want to evaluate some of the arguments before the macro is expanded. Is this possible? For example: (defmacro foo (&...
0x5453's user avatar
  • 329