Unable to run emacs in `magit-status-mode` with using custom initialization file

357 Views Asked by At

I like to use terminal tools and the one of them is 'magit' - awesome Git client implemented as an Emacs package. I use it to control Git projects. I have a script which automatically start emacs at computer boot (this same me a time with routine work). But also I'm looking for a way to run emacs in magit-status mode (without manual executing M-x magit-status... each time). Emacs provide a possibility to configure it's environment in init configuration file. To make emacs run magit at boot I created special magit.el file and run emacs from command line

$ emacs -q --load ~/.emacs.d/magit.el

Unfortunately I unable to switch emacs in magic-status-mode - something wrong with init file. Emacs remains in lisp-interaction-mode after boot. The content of init file is below:

;; disable welcome screen at launch
(setq inhibit-startup-screen t)

(setq visible-bell t)

; Disable tabs indent
(setq-default c-basic-offset 4
          tab-width 4
          indent-tabs-mode nil)

(global-set-key "\C-h" 'delete-backward-char)

;; Makes *scratch* empty.
(setq initial-scratch-message "")

;; Removes *scratch* from buffer after the mode has been set.
(defun remove-scratch-buffer ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*")))
;(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)

;; Removes *messages* from the buffer.
;(setq-default message-log-max nil)
;(kill-buffer "*Messages*")

;; Removes *Completions* from buffer after you've opened a file.
;(add-hook 'minibuffer-exit-hook
;      '(lambda ()
;         (let ((buffer "*Completions*"))
;           (and (get-buffer buffer)
;                (kill-buffer buffer)))))

;; Don't show *Buffer list* when opening multiple files at the same time.
(setq inhibit-startup-buffer-menu t)

;; Show only one active window when opening multiple files at the same time.
;(add-hook 'window-setup-hook 'delete-other-windows)

;; Tell emacs where is your personal elisp lib dir (magit)
(add-to-list 'load-path "~/.emacs.d/lisp/") 
(load "git") ;; best not to include the ending “.el” or “.elc”
;; activate installed packages
(package-initialize) 


(setq-default major-mode 'magit-status-mode)
(add-hook 'after-init-hook #'magit-status-mode)
(if after-init-time
  (add-hook 'after-init-hook #'magit-status-mode))
1

There are 1 best solutions below

1
On BEST ANSWER

Try this:

(call-interactively 'magit-status)

Instead of all of this:

(setq-default major-mode 'magit-status-mode)
(add-hook 'after-init-hook #'magit-status-mode)
(if after-init-time
  (add-hook 'after-init-hook #'magit-status-mode))

Using after-init-hook would make sense in an init file, but with -q you're explicitly not using an init file (using --load is not the same thing), and that hook has already run by the time your custom magit.el file is loaded, so nothing you add to the hook at that stage will ever be processed.

Note that you don't want to call magit-status-mode at all. That's not a major mode you would ever be expected to invoke manually, as you would never want that mode for any buffer other than the one created by the magit-status command.