21

When I double-click to select text in GNOME Terminal, the selection stops at spaces but continues over hyphens:

spaces

hyphens

Some of my filenames contain uncommon characters such as the heavy teardrop-spoked asterisk and are not selectable by double-clicking:

unusual characters

Is there a way to make double-click selection continue over these characters as well?

6 Answers 6

20

[Adding an answer since the accepted one no longer works.]

Script

I put this together into a script to set the word separators:

https://github.com/ab/ubuntu-wart-removal/blob/master/gnome-terminal-word-separators.sh

Background

GNOME Terminal has flip flopped several times on this subject.

This configuration feature was removed in gnome-terminal 3.14 (included in Ubuntu 15.04 Vivid)

Then in gnome-terminal 3.16 (included in Ubuntu 15.10 Wily), the option was reintroduced under the hood, but with no UI. In addition, colon : was changed to be treated as a word separator.

Editing with dconf

Per these instructions, you can configure the set using dconf: https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1401207/comments/8

I like to use -#%&+,./:=?@_~ as the set of non-word-separators.

Note that the use of colons there is /crazy/. Yes, there is :/: in there.

1) edit -> profile preferences -> the General tab on your profile has its Profile ID, e.g. b1dcc9dd-5262-4d8d-a863-c897e6d979b9

2) check you've got the syntax right with:

$ dconf list /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ foreground-color visible-name palette use-system-font ...

If it returns nothing, you've got it wrong; try again.

3) dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/word-char-exceptions '@ms "-#%&+,./:=?@_~"'

Specifically, this has ":" in, which makes it select URLs like I expect. (http://example.com doesn't select "//example.com").

5
  • Thanks this is exactly what I needed in order to get :. Is it possible that you could write the command(s) to automatically fetch the default or current profile so I don't have to manually look up my profile ID in order to run that command in future? That way I can just run that script on fresh installs. Jun 6, 2016 at 13:20
  • @Programster You could do something like this with dconf list /org/gnome/terminal/legacy/profiles:/
    – A B
    Jun 7, 2016 at 0:13
  • thanks @alberge I took that and put it in a python script Jun 8, 2016 at 11:18
  • What is the default value of word-char-exceptions, so I can add just one character? Aug 21, 2017 at 14:20
  • @TorKlingberg Apparently no one knows. You can use the dconf-editor graphical application to browse to that location. All it says is "default", but not what the default value is.
    – jrw32982
    Jan 26, 2021 at 20:50
11

In "Edit > Profile Preferences > General", add the character to the "Select-by-word characters" box.

5
  • Thanks, I don't know how I didn't notice that.
    – ændrük
    Oct 20, 2010 at 5:10
  • Has anyone found a general way to do this GNOME-wide? Or are word-boundaries up to the developers of each application to define/redefine? Related question: superuser.com/q/650240/245597 .
    – Noyo
    Sep 26, 2013 at 13:19
  • 15
    At least since version 3.14, this option has disappeared. How can we do it now? Nov 6, 2014 at 10:20
  • I tried dconf write /org/gnome/terminal/legacy/profiles:/:{your-profile-id}/word-char-exceptions '@ms "-,.;/?%&#_=+@~·:"' but all I get is error: Could not connect: Connection refused
    – cprn
    Sep 9, 2015 at 16:31
  • Can't seem to get the non-breaking space to work. It does work with the funky asterisk on mate terminal from Zesty however. Jun 11, 2017 at 1:36
1

Other answers do not work today ... this works on ubuntu 18.04 ... first identify your UUID gnome terminal profile id ... issue this in terminal

profile=$(gsettings get org.gnome.Terminal.ProfilesList default)

echo $profile  #  for me it gives b1dcc9dd-5262-4d8d-a863-c897e6d97969

now make change :

dconf write /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d97969/word-char-exceptions '@ms "-,.;?%&#_+@~·$/"'

until ubuntu 18.04 gets fixed the following read command silently fails whereas it worked fine on ubuntu 16.04

dconf  read  /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/word-char-exceptions
1
0

A very useful default feature implemented in other terminals is the progressive selection of extended sections of a line on the screen. e.g., given

/home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr

double-clicking on, say, filenr in dsr.filenr_34.ctr would progress from filenr to:

                              filenr_34
                          dsr.filenr_34.ctr
                       -3/dsr.filenr_34.ctr
                      2-3/dsr.filenr_34.ctr
                    r.2-3/dsr.filenr_34.ctr
               dir1_r.2-3/dsr.filenr_34.ctr
      username/dir1_r.2-3/dsr.filenr_34.ctr
 home/username/dir1_r.2-3/dsr.filenr_34.ctr
 home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677
 home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr
/home/username/dir1_r.2-3/dsr.filenr_34.ctr 23456677 dftrprpr

Surrounding symmetries may be solved by adding pairs until next-level delimiter.

And of course the user should be given the option of changing defaults.

2
  • 1
    No comment on the answer but try to format it in a better way so that people understand it faster. If you want to list it step by step, use numbering.
    – VedVals
    Dec 13, 2012 at 13:53
  • Thank you, but I don't think this applies to my question. I'm specifically asking how to configure GNOME Terminal.
    – ændrük
    Dec 13, 2012 at 19:14
0

Extending @alberge answer, you can execute the following python3 script to change all your profiles to do this:

#!/usr/bin/python3

import subprocess

command = ["dconf", "list", "/org/gnome/terminal/legacy/profiles:/"]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)

profiles = result.stdout.split('\n')

for profileString in profiles:
    if profileString.startswith(":"):
        changeCmdPart = "/org/gnome/terminal/legacy/profiles:/" + profileString + "word-char-exceptions"
        changeCmd = ["dconf", "write", changeCmdPart, '@ms "-#%&+,./:=?@_~"']
        subprocess.run(changeCmd)

print("done!")

Or you can just execute:

curl -s http://scripts.programster.org/scripts/5?output=raw | python3
0

At Ubuntu 20.04.5 LTS. I've lost a couple of hours, trying to make it work. But the reason of the stall is quite simple: the meaning of "@ms" variable is inverse to intuitive, and inverse to what they've written in org.gnome.Terminal.gschema.xml.

@ms should contain the only characters, ALLOWED to select by double-click. So, if you DON'T want dashes or colons or smth to select, you may enter:

UUID=$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d \')
dconf write /org/gnome/terminal/legacy/profiles:/:${UUID}/word-char-exceptions "@ms '_^'"

Change works immediately, retains through reset; but for different profile, you should repeat the command.

2
  • Ubuntu 20 would be the Ubuntu Core 20 as that is the only version of Ubuntu to use a single digit version. If this is not the case please edit and correct the answer.
    – David
    Sep 26, 2022 at 14:05
  • thanx, I've chaged
    – Jackal
    Sep 26, 2022 at 14:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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