Emacs' org-mode: how to automatically "process to PDF" on save? - osx-mountain-lion

Org-mode's C-cep does export as LaTeX and process to PDF. How can C-cep be executed on each C-xs?
Also, in all likelihood this probably isn't the optimal solution, so feel free to propose something better. As it is now, I have to do both C-cep and C-xs.
Final solution
A tiny modification of abo-abo's answer below that doesn't open the PDF, lets Skim pick up any change, and thus keeps the focus on Emacs.
(defun org-export-as-pdf ()
(interactive)
(save-buffer)
(org-latex-export-to-pdf))
(add-hook
'org-mode-hook
(lambda()
(define-key org-mode-map
(kbd "<f5>") 'org-export-as-pdf)))
Also, one should upgrade Org to version 8 from a fresh Emacs session: that is, no Org-command should be executed prior to installing with the package-manager. Otherwise you'll hit the Invalid function: org-with-silent-modifications bug.

You can use this:
(defun org-export-as-pdf-and-open ()
(interactive)
(save-buffer)
(org-open-file (org-latex-export-to-pdf)))
(add-hook
'org-mode-hook
(lambda()
(define-key org-mode-map
(kbd "<f5>") 'org-export-as-pdf-and-open)))
UPD
This requires org-mode 8.0.0 and up. It's easily installed with list-packages.

Related

Emacs: cmdproxy.exe has encountered an issue and needs to close

I opened up emacs today and I got an error when I started typing into the #include:
This only happens when I start typing. At first I thought it had something to do with my ~/.emacs file so I opened it up and commented certain things. Eventually I found that when I comment the following line the problem goes away:
(ac-config-default)
I'm using yasnippet and auto-complete packages in my lisp file for my editor. The problem seems to be the above line when using auto-complete This is the full script of my ~/.emacs up to that point:
(require 'cc-mode)
(load (expand-file-name "~/quicklisp/slime-helper.el"))
;; Replace "sbcl" with the path to your implementation
(setq inferior-lisp-program "sbcl")
(setq-default c-basic-offset 4 c-default-style "linux")
(setq-default tab-width 4 indent-tabs-mode t)
(define-key c-mode-base-map (kbd "RET") 'newline-and-indent)
; start package.el with emacs
(require 'package)
; add MELPA to repository list
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
; initialize package.el
(package-initialize)
; start auto-complete with emacs
(require 'auto-complete)
; do default config for auto config
(require 'auto-complete-config)
; THIS LINE IS THE PROBLEM:
(ac-config-default)
Is there something wrong I've done here? Something I may have forgotten to do?
First try running emacs as admin and see if the problem goes away, I've had trouble with permissions issues in windows before similar to this.
The error is almost certainly caused by the gtags autocomplete source for C.
If you are not using gtags, you can likely fix the problem by removing the source from autocomplete.
(add-hook 'c-mode-common-hook
(lambda () (remove-from-list 'ac-sources 'ac-source-gtags)) t t)
Not a perfect solution, but a possible one.

how can I bind an OSX key binding locally in org-mode?

How can I bind an OSX key binding locally in org-mode (but not globally in Emacs)?
I added this to my .emacs but it didn't work:
(add-hook 'org-mode-hook
(lambda ()
(local-set-key osx-key-mode-map (kbd "A-L") 'org-insert-link)
))
By default org-insert-link is bound to "C-c C-l", if you want to add another key binding for that locally you're code is close, but I think there are two minor issues:
It looks like you have an extra parameter 'osx-key-mode-map' in your call to local-set-key.
A key combo of the Alt / Meta key plus Shift plus l would be represented as "M-L". If you want Apple / Command plus Shift plus l that would be "s-L".
So the code should look like:
(add-hook 'org-mode-hook
(lambda ()
(local-set-key (kbd "s-L") 'org-insert-link)))
Try extending the org-mode specific key-map with the Command key, (kbd "A-l"), as in:
(add-hook 'org-mode-hook
(lambda ()
(local-set-key (kbd "A-l") 'org-insert-link)))

ANSI Coloring in Compilation Mode

Have anyone added support for ansi-color in compilation-mode Emacs? If so what property/attribute does the color-writing program have to check for in order to make sure its active terminal supports ANSI-escape coloring.
There's already a function for applying color to comint buffers. You simply need to enable it on compilation buffers:
(require 'ansi-color)
(defun colorize-compilation-buffer ()
(toggle-read-only)
(ansi-color-apply-on-region compilation-filter-start (point))
(toggle-read-only))
(add-hook 'compilation-filter-hook 'colorize-compilation-buffer)
Color writing programs should check the TERM environment variable and the terminfo database to check if the terminal supports color. In practice, a lot of programs ignore this and rely on a user setting. Emacs will set the compilation terminal type to dumb by default but this can be overriden by setting the compilation-environment variable.
Update: Note that in Emacs 24.5 the two calls to (toggle-read-only) in the code above are not needed.
My optimized solution which don't pollute M-x grep (only for M-x compile):
(ignore-errors
(require 'ansi-color)
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
(add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer))
As of emacs 28.1, this is now a built in !
(require 'ansi-color)
(add-hook 'compilation-filter-hook 'ansi-color-compilation-filter)
Or with use-package
(use-package ansi-color
:hook (compilation-filter . ansi-color-compilation-filter))
Riffing on #gavenkoa's solution:
(when (require 'ansi-color nil t)
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
(add-hook 'compilation-filter-hook 'my-colorize-compilation-buffer))
This will not block errors but will still not raise an error if ansi-color is unavailable. Personally, I find the wildcard catch semantics of ignore-error distasteful.
Riffing on #stribb's solution, which riffs on #gavenkoa's solution, this is how to set it up with the awesome use-package:
(use-package ansi-color
:config
(defun my-colorize-compilation-buffer ()
(when (eq major-mode 'compilation-mode)
(ansi-color-apply-on-region compilation-filter-start (point-max))))
:hook (compilation-filter . my-colorize-compilation-buffer))
As of 2020, the most modern way appears to be the xterm-color Emacs package.
See my answer on the duplicate question for details.

slime-fancy not loading with emacs sbcl slime windows configuration

I have slime with sbcl working in emacs 24.1 but can not get a slime repl to open.
I can use M-x slime to make a connection to sbcl in a inferior-lisp buffer but I can not invoke the slime-repl or get a nice lisp auto-indent when editing lisp files even though I am loading the slime-fancy contrib in .emacs. I don't get any error messages during start-up.
When I try M-x slime-repl I get [No match].
my .emacs file:
(setq inferior-lisp-program "sbcl")
(add-to-list 'load-path "c:/home/bin/emacs/site-lisp/slime/")
(require 'slime)
(require 'slime-autoloads)
(slime-setup '(slime-fancy))
I used this method for the installation:
http://www.pchristensen.com/blog/articles/installing-sbcl-emacs-and-slime-on-windows-xp
I have noticed a pattern that almost everything I try with Python and Clojure works as described and almost nothing I try related to common lisp works. I have also tried cusp with eclipse. I am willing to try yet another approach if there is something more recent for common lisp in windows.
After playing with Sujoy's answer and trimming it down to get it to work, I realized my original problem was caused by the (require 'slime) statement. The following .emacs file gets the slime repl to open as expected.
(setq inferior-lisp-program "sbcl")
(require 'slime-autoloads)
(slime-setup '(slime-fancy))
Only 'slime-fancy will not setup the REPL. Try the below snippet. Put it in a buffer and eval.
Of course, you do not need to setup the hyperspec root as well, but that helps a lot :)
EDIT: missed out on the autoloads I am using, so here's the full config.
the keybinding (using minor-mode keymap, global mapping can be used just as easily)
(define-key my-keys-map (kbd "<f5>") 'slime)
the autoloads
;; slime mode
(autoload 'slime "my-slime" "Slime mode." t)
(autoload 'slime-connect "my-slime" "Slime mode." t)
Here's my-slime.el
(provide 'my-slime)
(eval-after-load "slime"
(setq slime-lisp-implementations
(slime-setup '(slime-asdf
slime-autodoc
slime-editing-commands
slime-fancy
slime-fontifying-fu
slime-fuzzy
slime-indentation
slime-mdot-fu
slime-package-fu
slime-references
slime-repl
slime-sbcl-exts
slime-scratch
slime-xref-browser))
(slime-autodoc-mode)
(setq slime-complete-symbol*-fancy t
slime-complete-symbol-function 'slime-fuzzy-complete-symbol
slime-when-complete-filename-expand t
slime-truncate-lines nil
slime-autodoc-use-multiline-p t)
(add-hook 'lisp-mode-hook (lambda () (slime-mode t)))))
(require 'slime)

How can I get mouse selection to work in emacs and iTerm2 on Mac?

after turning on xterm-mouse-mode, any click on the in the screen returns "mouse-1 is undefined". What should I be defining "mouse-1" as? Is there some reason my mouse clicks are returning this event, and not others its suspecting?
For Emacs in iTerm 2, I've found that the following bit in my ~/.emacs file works very well, providing the ability to insert the character at an arbitrary location, mark a region, and use the scroll wheel:
;; Enable mouse support
(unless window-system
(require 'mouse)
(xterm-mouse-mode t)
(global-set-key [mouse-4] (lambda ()
(interactive)
(scroll-down 1)))
(global-set-key [mouse-5] (lambda ()
(interactive)
(scroll-up 1)))
(defun track-mouse (e))
(setq mouse-sel-mode t)
)
I put this in my .emacs:
(require 'mouse)
(xterm-mouse-mode t)
(defun track-mouse (e))
(setq mouse-sel-mode t)
and that seems to do the trick, and now a mouse click in a split changes focus to the split.
Note: I am using iterm2, and I found the info here: http://groups.google.com/group/iterm2-discuss/browse_thread/thread/8e1f2ee7db26c07d/17ac15e69c554998?show_docid=17ac15e69c554998&pli=1
Mac OS X's Terminal.app does not support mouse reporting. However MouseTerm is a SIMBL plugin that provides it with this feature. http://bitheap.org/mouseterm/
Install MouseTerm and put the following in your Emacs config file:
; enable mouse reporting for terminal emulators
(unless window-system
(xterm-mouse-mode 1)
(global-set-key [mouse-4] (lambda ()
(interactive)
(scroll-down 1)))
(global-set-key [mouse-5] (lambda ()
(interactive)
(scroll-up 1))))
I suspect that installing the emacs-goodies-el will provide the appropriate bindings.

Resources