symbol's function definition is void: after-load' - elisp

Upon cloning the codes
emacs.d/init-org.el at 9bb862b3d5f95d66506693cf1ebc685bb79d1080 · purcell/emacs.d
to the personal configuration,
;;; Org clock
;; Save the running clock and all clock history when exiting Emacs, load it on startup
(after-load 'org
(org-clock-persistence-insinuate))
(setq org-clock-persist t)
(setq org-clock-in-resume t)
;; Save clock data and notes in the LOGBOOK drawer
(setq org-clock-into-drawer t)
;; Save state changes in the LOGBOOK drawer
(setq org-log-into-drawer t)
;; Removes clocked tasks with 0:00 duration
(setq org-clock-out-remove-zero-time-clocks t)
;; Show clock sums as hours and minutes, not "n days" etc.
(setq org-time-clocksum-format
'(:hours "%d" :require-hours t :minutes ":%02d" :require-minutes t))
It prompt that `symbol's function definition is void: after-load'
Search keyword 'afterf-load`, it return with-eval-after-load Hooks for Loading - GNU Emacs Lisp Reference Manual
Does after-load is a personal defined funtion?

Indeed, this is not a symbol which is defined in the standard library. The repo you have cloned defines this as a portability alias for with-eval-after-load in init-utils but of course you have to load this definition before you can use it. Probably review the repo's installation and usage instructions.

Related

Trouble running Common Music in Emacs

I am a 4th year bachelor student composition who recently came across the GitHub repositories of Prof. Orm Finnendahl. I was wondering if anyone could help me setup Common Music 2.12.0 with Emacs on Windows 7, 64 bit. I’m embarrassed to say I have been trying on and off now for a couple of months and just can’t figure it out! I’ve read CM’s documentation, but it simply doesn’t seem to work.
I’ve tried following the instructions on the older website dedicated to CM2 (prior to CM3). Specifically these two links: "Installing Common Music", and "Running Common Music in Emacs". I did get the Emacs part right, I think, but Bash gives an error trying to load anything.
(I put the cm-master without the -master, and other repositories in C:/Users/XI-USER/lispmusic)
My Emacs is, I believe properly setup, as follows in the init file (the last lines are from the "Running Common Music in Emacs" website):
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(load (expand-file-name "~/quicklisp/slime-helper.el"))
(setq inferior-lisp-program "sbcl")
(global-linum-mode t)
(add-hook 'prog-mode-hook 'highlight-numbers-mode)
(add-hook 'emacs-lisp-mode-hook 'highlight-quoted-mode)
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
(add-hook 'emacs-lisp-mode-hook 'highlight-defined-mode)
(use-package kaolin-themes
:config
(load-theme 'kaolin-galaxy t))
;; If t, enable italic style in comments.
(setq kaolin-themes-italic-comments t)
;; When t, will display colored hl-line style instead monochrome.
(setq kaolin-themes-hl-line-colored t)
;; Enable distinct background for fringe and line numbers.
(setq kaolin-themes-distinct-fringe t)
;; Enable distinct colors for company popup scrollbar.
(setq kaolin-themes-distinct-company-scrollbar t)
;; Show git-gutter indicators as solid lines
(setq kaolin-themes-git-gutter-solid t)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages (quote (use-package)))
'(tool-bar-mode nil))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "Victor Mono" :foundry "outline" :slant normal :weight bold :height 120 :width normal)))))
(add-to-list 'load-path "C:/Users/XI-USER/.slime/")
(add-to-list 'load-path "C:/Users/XI-USER/lispmusic/cm/")
(load "etc/emacs/cm.el")
(enable-cm-commands)
I have both Git Bash and cygwin64 installed (I believe Bash is 64 bit too, should it matter)
When I load cm/bin/cm.sh via Emacs shell, I get this error message in Bash:
debugger invoked on a SB-INT:SIMPLE-FILE-ERROR in thread
#<THREAD "main thread" RUNNING {10027900C3}>:
Couldn't load "/c/Users/XI-USER/lispmusic/cm/bin/../src/cm.lisp": file does
not exist.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Ignore runtime option --eval "(progn (load \"/c/Users/XI-USER/lispmusic/cm/bin/../src/cm.lisp\" :verbose nil) (cm))".
1: [ABORT ] Skip rest of --eval and --load options.
2: Skip to toplevel READ/EVAL/PRINT loop.
3: [EXIT ] Exit SBCL (calling #'EXIT, killing the process).
(LOAD "/c/Users/XI-USER/lispmusic/cm/bin/../src/cm.lisp" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
0]
And nothing via cygwin64 (black DOS screen starts up and closes immediately)
I get these type of errors trying to load CM in Emacs:
M-x cm -> "Wrong type argument: stringp, nil"
and CL-USER> (in-package :cm) -> "The name "CM" does not designate any package.
[Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]"
Interestingly, when (and only when) I start up slime, and then type C-c C-d c the CM find dictionary does work!

How to always show inline images?

I'm trying to work with inline images (e.g. for plotting data by gnuplot), and have the problem: images always inserted as links by default. I need to do some keypresses to "force" emacs to show actual image inline, instead of just file link.
E.g. I start with gnuplot code:
#+BEGIN_SRC gnuplot :file plot.png
plot sin(x)
#+END_SRC
When I press C-c C-c on this code block, it runs, and shows me results as link to image file:
#+RESULTS:
[[file:plot.png]]
If I press C-c C-x C-v (org-toggle-inline-images) twice -- link does replaced with inline image
If I run M-x org-redisplay-inline-images -- again, link does replaced with image
If I run (org-display-inline-images t t) -- again, image is shown
and so on (those options were taken from Emacs org-display-inline-images and Inline images in org-mode questions)
But I don't want to press anything special: I want images to be displayed inline by default. I've found and tried following variables:
(setq org-startup-with-inline-images t) in .emacs config
#+STARTUP: inlineimages header
(setq org-display-inline-images t)
But neither got me the behavior I want. I'm puzzled -- do I want something so unnatural?
P.S. Im' using GNU Emacs v26.1 on MacOS X, org mode v9.1.9-65, if it matters
P.P.S. Although it seems like a bug in my emacs/orgmode version, and I'm yet to report it, but meanwhile I've found following trick: (add-hook 'org-babel-after-execute-hook 'org-display-inline-images 'append) (thanks to ob-ipython authors) -- it fixes issue for me right now. Maybe will be useful for somebody else
I can reproduce the problem with:
Org mode version 9.1.9 (release_9.1.9-65-g5e4542 # /home/xyz/.emacs.d/elpa/org-plus-contrib-20190415/)
Reproduction:
Start Emacs 26.3 with emacs -Q.
M-x load-library RET org RET
Add Gnuplot to org-babel-load-languages via M-x customize-option.
Load gnuplot.el
Open the Org file with the following content and press C-c C-c on the source block.
#+STARTUP: inlineimages
Some text.
#+BEGIN_SRC gnuplot :file plot.png :results graphics
plot sin(x)
#+END_SRC
I have a similar solution as you suggested in your question, but a bit more differentiated.
Re-displaying images in large Org documents can take some time. So I do it only if the source block has the results-parameter graphics:
(require 'subr-x)
(defun org+-babel-after-execute ()
"Redisplay inline images after executing source blocks with graphics results."
(when-let ((info (org-babel-get-src-block-info t))
(params (org-babel-process-params (nth 2 info)))
(result-params (cdr (assq :result-params params)))
((member "graphics" result-params)))
(org-display-inline-images)))
(add-hook 'org-babel-after-execute-hook #'org+-babel-after-execute)
#Tobias is the best answer. I have tweaked the #Tobias code to further optimize by bounding the re-display to the current subtree and setting the REFRESH parameter to t to redisplay only if necessary.
(require 'subr-x)
(defun org+-babel-after-execute ()
"Redisplay inline images in subtree if cursor in source block with :result graphics."
(when (org-in-src-block-p)
(let (beg end)
(save-excursion
(org-mark-subtree)
(setq beg (point))
(setq end (mark)))
(when-let ((info (org-babel-get-src-block-info t))
(params (org-babel-process-params (nth 2 info)))
(result-params (cdr (assq :result-params params)))
((member "graphics" result-params)))
(org-display-inline-images nil t beg end)))))
(add-hook 'org-babel-after-execute-hook #'org+-babel-after-execute)

Indent with tab instead of spaces in Emacs ruby-mode

I've been trying to configure Emacs so that it insert a 'tab' instead of a series of 'spaces' when indenting Ruby code.
So far, I've tried setting the var ruby-indent-tabs-mode to t so that, as per the documentation, it would "insert tabs in ruby mode if this is non-nil.". But so far, no dice.
I've also tried customising it via Easy customisation, which inserted the following into my init.el:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(ruby-indent-tabs-mode t))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
And after inspecting the variable via C-h v, it reports the variable is set to t, but pressing TAB keeps on inserting spaces.
I even tried editing the .el file for ruby-mode and re-compiling it to no effect.
Help would be appreciated.
----- EDIT -----
Here's the minor modes reported active via C-h m:
Enabled minor modes: Abbrev Auto-Complete Auto-Composition
Auto-Compression Auto-Encryption File-Name-Shadow Font-Lock
Global-Auto-Complete Global-Font-Lock Inf-Ruby Line-Number Menu-Bar
Show-Smartparens Show-Smartparens-Global Smartparens
Smartparens-Global Transient-Mark
The init.el file currently has:
(require 'cask "/Users/snowingheart/.cask/cask.el")
(cask-initialize)
(require 'pallet)
(add-to-list 'load-path "~/elisp")
(load "php-mode")
(add-to-list 'auto-mode-alist
'("\\.php[34]?\\'\\|\\.phtml\\'" . php-mode))
(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)
(require 'package)
(add-to-list 'package-archives
'("marmalade" .
"http://marmalade-repo.org/packages/"))
(package-initialize)
(global-set-key (kbd "C-x >") 'mc/mark-next-like-this)
(global-set-key (kbd "C-x <") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
(global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
(require 'smartparens-config)
(require 'smartparens-ruby)
(require 'smartparens-erb)
(smartparens-global-mode)
(show-smartparens-global-mode t)
(sp-with-modes '(rhtml-mode)
(sp-local-pair "<%=" "%>")
(sp-local-pair "<%-" "%>"))
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories
"~/.emacs.d/.cask/24.3.50.1/elpa/auto-complete-20130724.1750/dict")
(ac-config-default)
(setq ac-ignore-case nil)
(add-to-list 'ac-modes 'enh-ruby-mode)
(add-to-list 'ac-modes 'web-mode)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(indent-tabs-mode t)
'(ruby-indent-tabs-mode t))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(setq-default indent-tabs-mode t)
(setq enh-ruby-indent-tabs-mode t)
(smart-tabs-insinuate 'ruby)
(smart-tabs-advice ruby-indent-line ruby-indent-level)
(setq ruby-indent-tabs-mode t)
Try adding the following to your init.el (below the customizations you already have):
(setq-default indent-tabs-mode t)
From the documentation for indent-tabs-mode:
Indentation can insert tabs if this is non-nil.
I don't use ruby-mode so I don't know about possible interactions between indent-tabs-mode and ruby-indent-tabs-mode. It might just be enough to set indent-tabs-mode to t (and erase the customizations you made to ruby-indent-tabs-mode). But when you add the snippet above to your configuration, the default behavior for Emacs will be to insert tabs for indentation.
EDIT
As can be seen here, enh-ruby-mode defines a customizable variable called enh-ruby-indent-tabs-mode with a default value of nil. Later on the value of this variable is used to override the value of indent-tabs-mode, which is why setting indent-tabs-mode to t has no effect on buffers with enh-ruby-mode enabled.
So unless you enable any other modes besides ruby-mode and enh-ruby-mode that might be modifying the indent-tabs-mode variable, adding
(setq enh-ruby-indent-tabs-mode t)
to your init.el should fix your problem.
Another EDIT (working solution)
(Credits: This answer put me on the right track.)
Using
Emacs 24.3.1
ruby-mode version 1.2 (built-in)
enh-ruby-mode version 20140406.252 (installed via M-x package-install ...)
I was able to make it work by adding the following to an otherwise completely empty init.el file:
(package-initialize)
(setq-default tab-width 2)
(setq enh-ruby-indent-tabs-mode t)
(defvaralias 'enh-ruby-indent-level 'tab-width)
(defvaralias 'enh-ruby-hanging-indent-level 'tab-width)
This solution works for both the GUI and the console version of Emacs. It will probably integrate fine with your other customizations but you will need to remove the custom-set-variables section and everything below it from the version of your init.el you posted above.
Note also that if you do come across a situation in which Emacs inserts a space instead of a tab you can always delete it and force insertion of a tab by quoting it via C-q TAB.
Wrapping up
Turns out there is a bug in enh-ruby-mode which causes indentation to fail for blocks starting from the second level when enh-ruby-indent-tabs-mode is set to t. The author/maintainer of enh-ruby-mode has no plans of fixing it, but the bug report includes a patch that supposedly fixes the issue.
Updated answer au goût du jour (Emacs 28.2):
Set the indent-tabs-mode and ruby-indent-tabs-mode to t.
Globally, in your ~/.emacs.el:
(setq indent-tabs-mode t)
(setq ruby-indent-tabs-mode t)
(setq tab-width 2)
(setq ruby-indent-level 2)
Or better, limited to a particular project, in a ~/src/your-project/.dir-locals.el (for example) file:
((ruby-mode . ((indent-tabs-mode . t)
(ruby-indent-tabs-mode . t)
(tab-width . 2)
(ruby-indent-level . 2))))

Emacs semantic lines

I tried a solution shown here which did not work for me. Even just disabling decoration mode did not work. So now I am wondering exactly what these lines above my text are, and how I can disable them. Maybe it's not even semantic? I'm not really sure...
Here's my dotfile:
(add-to-list 'load-path "~/.emacs.d/")
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)
;; auto-complete stuff
;;(require 'auto-complete)
(require 'auto-complete-config)
(ac-config-default)
(auto-complete-mode 1)
(semantic-mode 1)
(global-ede-mode 1)
(require 'semantic/ia)
;; Semantic
(global-semantic-idle-completions-mode t)
(global-semantic-decoration-mode t)
(global-semantic-highlight-func-mode t)
(global-semantic-show-unmatched-syntax-mode t)
(add-hook 'c-mode-common-hook '(lambda ()
;; ac-omni-completion-sources is made buffer local so
;; you need to add it to a mode hook to activate on
;; whatever buffer you want to use it with. This
;; example uses C mode (as you probably surmised).
;; auto-complete.el expects ac-omni-completion-sources to be
;; a list of cons cells where each cell's car is a regex
;; that describes the syntactical bits you want AutoComplete
;; to be aware of. The cdr of each cell is the source that will
;; supply the completion data. The following tells autocomplete
;; to begin completion when you type in a . or a ->
(add-to-list 'ac-omni-completion-sources
(cons "\\." '(ac-source-semantic)))
(add-to-list 'ac-omni-completion-sources
(cons "->" '(ac-source-semantic)))
;; ac-sources was also made buffer local in new versions of
;; autocomplete. In my case, I want AutoComplete to use
;; semantic and yasnippet (order matters, if reversed snippets
;; will appear before semantic tag completions).
(setq ac-sources '(ac-source-semantic ac-source-yasnippet))
))
(require 'semantic/scope)
(require 'xcscope)
(require 'semantic/symref)
;(semanticdb-enable-cscope-databases) ;;This is causing problems
;;C mode
;(require 'cc-mode)
;; ;;Color theme
;; (require 'color-theme)
;; (setq color-theme-is-global t)
;; (add-to-list 'load-path "/home/bob/.emacs.d/theme/ample-theme/ample-theme.el")
;; ;;(require 'ample-theme)
;; (eval-after-load "color-theme"
;; '(progn
;; (color-theme-initialize)
;; (color-theme-jsc-dark)))
;;set font
(set-face-attribute 'default nil :family "Anonymous Pro" :height 140)
;;line numbers
(global-linum-mode 1)
(custom-set-variables '(linum-format (quote "%4d ")))
;;treat .h files at C++
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
;; use F5 as compile
(global-set-key [(f5)] 'compile)
;; make compilation window smaller
(setq compilation-window-height 8)
I was able to solve my problem by disabling one of the overlays. I looked at the properties of one of the lines with underline using C-u C-x = and disabled one of the syntax check overlays. I'm not really sure why the syntax overlay was underlining everything especially since my code compiled fine.
At least when working with C++11/14 code, "semantic-show-unmatched-syntax-mode" shows too many false positive.
Besides that, it sometimes enters a buggy state where warnings are still shown after you fixed the syntax error. It may help to disable and renable the minor mode (M-x semantic-show-unmatched-syntax-mode).
To disable the syntax check globally, change your ~/.emacs:
(global-semantic-show-unmatched-syntax-mode 0)
;;; if you need it, you can use a shortcut to enable/disable it again, e.g.:
(global-set-key [f12] 'semantic-show-unmatched-syntax-mode)

About auto complete and yasnippet in emacs

I'm using auto-complete and yasnippet in Emacs and I am confused by their settings. I placed the following code in my .emacs:
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas/global-mode 1)
(global-set-key (kbd "C-i") 'yas/expand)
(setq yas/also-auto-indent-first-line t)
(add-to-list 'load-path "~/.emacs.d/plugins/autocomplete/")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/plugins/autocomplete/ac-dict")
(ac-config-default)
(setq ac-use-menu-map t)
(define-key ac-menu-map "\C-n" 'ac-next)
(define-key ac-menu-map "\C-p" 'ac-previous)
(defun ac-js-mode()
(setq ac-sources '(ac-source-yasnippet
ac-source-symbols
ac-source-words-in-buffer
ac-source-words-in-same-mode-buffers
ac-source-files-in-current-dir
)))
(add-hook 'js-mode-hook 'ac-js-mode)
I am trying to set yasnippet as the first candidate in the auto-complete popup menu. However, as the example below shows, this doesn't work with my current settings: when I type the word for, formatItem is in first position and for in second. formatItem is just a local function in current buffer.
for_____________
|formatItem |
|for a|
|for s|
|force s|
|foreachv s|
----------------
So my question is: how can I make yasnippet the first candidate in auto-complete? And is there something missing in my .emacs config?
Any help is appreciated.
ac-config-default installs hooks to setup sensible default ac-sources values. These hooks (especially ac-common-setup) might interfere with your settings.
You can check this by looking at the actual value of ac-sources (C-h vac-sources) in a js-mode buffer to see if it has been modified by comparison to your custom value.
If this is the case, I see two solutions:
stop using ac-config-default and specifiy all autocomplete settings,
advise the faulty hook to put ac-source-yasnippet at the beginning of ac-sources after it has run. Assuming ac-common-setup is indeed the troublemaker, this would look like:
(defadvice ac-common-setup (after give-yasnippet-highest-priority activate)
(setq ac-sources (delq 'ac-source-yasnippet ac-sources))
(add-to-list 'ac-sources 'ac-source-yasnippet))

Resources