3

My setup

GNU Emacs GUI (version 24.4.51.1 (x86_64-w64-mingw32) compiled from Harroogan Emacs.)

Situation

I would like to type a word in PHP-mode, and it will automatically expand to a proper word.

For example, I would like to type $session and he will expand it to $_SESSION.

When reading the manual about Abbrev mode

Type the word you want to use as expansion, and then type ‘C-x a g’ and the abbreviation for it. Example:

    t h e C-x a g t e h RET

Unfortunately, if you wanted to abbreviate Read The Fine Manual with RTFM, you couldn’t just type C-x a g after “Read the Fine Manual

So I put the cursor behind the word $_SESSION, then C-x a g and type $session. But I notice it will only expand session to SESSION without the underhyphen or the dollar variable.

When I'm looking in the .abbrev_defs with M-x edit-abbrevs, then the following is mentioned:

(global-abbrev-table)

"session"    0    "SESSION"

Then I try to change it to

"session"      2    "$_SESSION"

And save it with M-x write-abbrev-file, it didn't help. Maybe the abbrev uses regexp (?), thuis excluding the dollar sign. Any another suggestion?

5
  • Putting (define-abbrev-table 'global-abbrev-table '( ("session" "$_SESSION" nil 2) )) in .emacs works for me.
    – Name
    Commented Jul 18, 2015 at 4:14
  • you might use 4se for the abbrev. Number by default is accepted. This way, saves much typing, and avoids complexity altogether. Another advantage is that it avoids unwanted expansion. Disadvantage is that only you will know about the abbrev.
    – Xah Lee
    Commented Jul 19, 2015 at 9:33
  • @Name, it didn't worked for me.
    – ReneFroger
    Commented Jul 19, 2015 at 13:37
  • @XahLee thanks for the tip, however, I couldn't find anything with 4se for abbrev. Do you have some link of something?
    – ReneFroger
    Commented Jul 19, 2015 at 13:38
  • 1
    @ReneFrogertjuh i mean, define an abbrev so that when you type 4se, it expands to what you want.
    – Xah Lee
    Commented Jul 19, 2015 at 20:38

2 Answers 2

4

when you define a abbrev table, you can add a property to specify regex on what chars to look for.

Example:

(define-abbrev-table 'xah-elisp-abbrev-table
  '(
    ("d" "(defun f▮ ()\n  \"DOCSTRING\"\n  (interactive)\n  (let (VAR)\n\n  ))" nil :system t)
    ("i" "(insert ▮)" nil :system t)
    ("l" "(let (x▮)\n x\n)" nil :system t)
    ("m" "(message \"%s▮\" ARGS)" nil :system t)
    ("p" "(point)" nil :system t)
    ("s" "(setq ▮ VAL)" nil :system t)
    ("w" "(when ▮)" nil :system t)
    )

  "abbrev table for `xah-elisp-mode'"
  :regexp "\\([_-0-9A-Za-z]+\\)"
  :case-fixed t
  :enable-function 'xah-elisp-abbrev-enable-function
  )

The above is taken from a mode. I haven't tried this with normal abbrev, but am pretty sure you can do so. See a example here: http://ergoemacs.org/emacs/emacs_abbrev_mode.html

0

Get the following entry in abbrev-file:

("ds" "$_session" nil 1)

Expands as expected.

Unfortunatly this only works with my tweaked abbrev add facility.

See ar-abbrev-extensions.el at

https://github.com/andreas-roehler/werkstatt

7
  • Then I will check it out, en report it back to you. Thanks for your reply, though.
    – ReneFroger
    Commented Jul 20, 2015 at 13:19
  • I have àr-abbrev-extension.el` loaded in my init.el. But where do I put the ("ds" "$_session" nil 1)? I couldn't figure it out. How could I get this working?
    – ReneFroger
    Commented Jul 21, 2015 at 8:13
  • @ReneFroger Defined behind the expected expansion: M-x ar-mode-abbrev-propose RET Commented Jul 21, 2015 at 9:48
  • Sorry, it's not working for me. I typed ("$session" "$_session" nil 1) into the minibuffer, after calling M-x ar-mode-abbrev-propose. It didn't expand it to $_SESSION in PHP-mode when I'm typing $session
    – ReneFroger
    Commented Jul 21, 2015 at 19:26
  • @ReneFroger The expansion might contain any character, the abbrev only word-syntax chars. "$" probably is not word-syntax. Defining "session" as abbrev of "$_session" should work. Commented Jul 22, 2015 at 6:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.