7

I just installed debian 8 and emacs24. I noticed a new feature! you now can push F11 to enter fullscreen mode. I wanted to put emacs on fullscreen mode at startup, but couldn't find the command... and then I though that it would be easier tell emacs just to "push" F11 on my .emacs

Is there any command I can use so emacs will press a given sequence of keystrokes? something like

(just-push-it "\C-x" "3" "\C-x" "\C-o" "\M-x ansi-term")
Drew
  • 75,699
  • 9
  • 109
  • 225
Bengalaa
  • 71
  • 2
  • 4
    You can find out what command is bound to `f11` by using `describe-key`: `C-h k f11`. – Dan Jun 30 '15 at 20:24
  • zomg! thanks @Dan , that worked like a charm! just for the record, the command binded to f11 was `(toggle-frame-fullscreen)`. I guess a command that allows you to press keystrokes is not a good idea after all... someone might change the keystrokes and everything would mess up. Anyway, I can think some crazy scenarios where someone might want to force emacs to push keystrokes... – Bengalaa Jun 30 '15 at 20:32
  • [Related post](http://emacs.stackexchange.com/q/70/115): Record your sequence of key bindings as a keyboard macro and save that an an elisp snippet. Bind that elisp fn to a key. – Kaushal Modi Jun 30 '15 at 20:38
  • You have your answer but just to be clear, a keyboard macro in emacs is the same thing as a sequence of keystrokes (and also mouse events) that you can run in emacs. I have a hard time putting kmacros into my workflow but other emacs users use them all the time. – Kevin Holmes Jul 01 '15 at 13:02
  • https://github.com/noctuid/general.el#simulating-keypresses works for some things that macros don't – fread2281 Mar 26 '18 at 21:40

4 Answers4

3
(execute-kbd-macro (read-kbd-macro "<f11>"))

As for the key sequence syntax see the edmacro-mode help (C-h f edmacro-mode). For example, it allows you to write:

(execute-kbd-macro (read-kbd-macro "C-x 3 C-x o M-x ansi-term"))
Oleg Domanov
  • 131
  • 3
1

Customize user option default-frame-alist. Add (by clicking button INS) parameter fullscreen and give it a value of fullboth. Save the option changes.

Drew
  • 75,699
  • 9
  • 109
  • 225
  • thanks @Drew , I just put `(toggle-frame-fullscreen)` on my `.emacs`, and now I have a fullscreen emacs on startup... I was just wondering if there is a way of just pushing some keystrokes via elisp – Bengalaa Jun 30 '15 at 21:21
  • Well yes, you can do that. Define a keyboard macro for what you want done, then use `M-x name-last-kbd-macro` to give it a name. Then open your init file and use `M-x insert-kbd-macro` and enter the macro name. That will insert code in your init file that will run the macro. E.g., ``...do some stuff ``. Then `M-x name-last-kbd-macro RET foo RET`. Then in your init file: `M-x insert-kbd-macro RET foo RET`. – Drew Jun 30 '15 at 22:12
1

The other answers pretty much cover it, but you may run into a problem with read-kbd-macro where it isn't really meant for reading raw text input.

So "hello world" becomes the macro to insert "helloworld" without the space.

You could write a function that gives you a way to specify what should be read as a macro and what is already read to be executed as is like this:

(defun push-it-real-good (&rest keys)
  (execute-kbd-macro
   (apply 'vconcat
          (mapcar (lambda (k)
                    (cond
                     ((listp k) (apply 'append k))
                     (t (read-kbd-macro k))))
                  keys))))

(push-it-real-good "hello world")    ;; => helloworld
(push-it-real-good '("hello world")) ;; => hello world
;; messages Hello World
(push-it-real-good "M-:" '("(message \"Hello World\")") "<return>") 
Jordon Biondo
  • 12,332
  • 2
  • 41
  • 62
0

(defun just-push-it (&rest keys)
  (setq unread-command-events
        (append (apply 'vconcat (mapcar 'kbd keys)) nil)))

(just-push-it "C-x 3" "C-x o" "M-x ansi-term" "RET" "RET")
politza
  • 3,316
  • 14
  • 16